public function actionActivate($key) { if (!$key) { throw new CHttpException(404, "Activation key should be specified"); } $confirmation = IdentityConfirmation::model()->findByAttributes(array('key' => $key)); if (!$confirmation) { throw new CHttpException(404, "Specified confirmation was not found"); } $confirmation->confirm(); Yii::app()->user->setFlash('success', "Your account activated successfully. You can login now."); $this->redirect(array($this->module->loginUrl)); }
/** * Action for run different confirmations. Such as email changing... * @param string $key * @throws CHttpException */ public function actionConfirm($key) { if (!$key) { throw new CHttpException(404, "Confirmation key should be specified"); } $confirmation = IdentityConfirmation::create($key); if (!$confirmation) { throw new CHttpException(404, "Specified confirmation was not found"); } if ($confirmation->confirm()) { Yii::app()->user->setFlash('success', $confirmation->successMessage); } else { Yii::app()->user->setFlash('error', $confirmation->errorMessage); } $this->redirect(Yii::app()->user->isGuest ? array($this->module->loginUrl) : array($this->module->profileUrl)); }
/** * Updates status, generates confirmation row * @return IdentityConfirmation */ public function startConfirmation($type = IdentityConfirmation::TYPE_ACTIVATION_EMAIL) { $identityConfirmation = new IdentityConfirmation(); $identityConfirmation->user_identity_id = $this->id; $identityConfirmation->sent_ts = date('Y-m-d H:i:s'); $identityConfirmation->type = $type; $identityConfirmation->key = md5($identityConfirmation->type . $this->identity . microtime()); $identityConfirmation->save(); return $identityConfirmation; }
/** * Instantiates particular subclass of IdentityConfirmation based on it's type * @todo: * - Replace this method by overriding afterFind method, where we can attach corresponding behaviour * @param type $id */ public static function create($id) { $particularConfirmation = null; if (is_string($id)) { //creating by key $confirmation = IdentityConfirmation::model()->findByAttributes(array('key' => $id)); if (!$confirmation) { return null; } if ($confirmation->type == IdentityConfirmation::TYPE_EMAIL_REPLACE_CONFIRMATION) { $particularConfirmation = new ReplaceEmailConfirmation(); $particularConfirmation->setAttributes($confirmation->attributes, false); $particularConfirmation->isNewRecord = false; } else { $particularConfirmation = $confirmation; } } return $particularConfirmation; }