/** * * @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)); } }