Ejemplo n.º 1
0
 /**
  * 
  * @param unknown $slug
  */
 public function actionEdit($slug)
 {
     $user = User::model()->findbyAttributes(array('slug' => $slug, 'status' => User::STATUS_ACTIVE));
     if (isset($user)) {
         // save the current mail
         $oldMail = $user->email;
         // if there isn't an instance of UserPersonalInfo we have to create it.
         if (!isset($user->personalInfo)) {
             $user->personalInfo = new UserPersonalInfo();
         }
         if (isset($_POST['User']) && isset($_POST['UserPersonalInfo'])) {
             $user->attributes = $_POST['User'];
             // check if at least one of these field is setted
             if (!empty($_POST['UserPersonalInfo']['first_name']) || !empty($_POST['UserPersonalInfo']['last_name']) || !empty($_POST['UserPersonalInfo']['gender']) || !empty($_POST['UserPersonalInfo']['birthdate'])) {
                 $user->personalInfo->attributes = $_POST['UserPersonalInfo'];
                 $user->personalInfo->user_id = $user->id;
             }
             // used to check if the user has already changed his own mail
             if ($oldMail != $user->email) {
                 $user->setScenario('editProfile');
             }
             // validation of the models
             $this->performAjaxValidationProfileForm($user);
             //verify if the mail was changed
             if ($oldMail != $user->email) {
                 $usersMetadata = new UserMetadata();
                 $usersMetadata->user_id = $user->id;
                 $usersMetadata->key = User::METADATA_KEY_EMAIL_CHANGE_NEW_ADDRESS;
                 $usersMetadata->value = $user->email;
                 $usersMetadata->save();
                 $usersMetadata2 = new UserMetadata();
                 $usersMetadata2->user_id = $user->id;
                 $usersMetadata2->key = User::METADATA_KEY_EMAIL_CHANGE_TOKEN;
                 $usersMetadata2->value = UserHelper::generateActivationToken();
                 $usersMetadata2->save();
                 //confirmation mail
                 $activation_link = Yii::app()->createAbsoluteUrl('profile/email?token=' . $usersMetadata2->value);
                 BasicNotifier::sendTemplatedEmail($oldMail, Yii::t('ProfileModule.edit', 'email.subject.changeEmail'), 'profile/change_email_confirmation', array('{CHANGE_EMAIL_ADDRESS}' => $user->email, '{CHANGE_EMAIL_CONFIRMATION_LINK}' => $activation_link), Yii::app()->session['lang']);
                 /* set flash messages */
                 Yii::app()->user->setFlash('pending', 'email');
                 //assign to as mail of the user his old mail. The new mail before to replace the old one have to be confirmed
                 $user->email = $oldMail;
             }
             /* save user and related models */
             $user->withRelated->save(true, array('personalInfo'));
             /* set flash messages */
             Yii::app()->user->setFlash('success', true);
             /* back to profile */
             $this->redirect(Yii::app()->createUrl('profile'));
         }
         $this->render('edit', array('user' => $user, 'userPersonalInfo' => $user->personalInfo, 'slug' => $slug));
     }
 }