public function actionActivated($_hash) { $cache = new CFileCache(); $cache->init(); $hash = $cache->get('registerActivated' . $_hash); $cache->delete('registerActivated' . $_hash); // Ключ не найден, возможно пытаются подобрать или истекло время отведенное для активации аккаунта if ($hash === FALSE) { user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Ключ для активации аккаунта не найден.')); $this->redirect(array('index')); } $user = Users::model()->findByPk($hash['user_id']); if (!$user) { user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Аккаунт не найден.')); } elseif ($user->isActivated()) { user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Аккаунт уже активирован.')); } else { // Создаю игровой аккаунт try { $l2 = l2('ls', $user->ls_id)->connect(); $l2->insertAccount($user->login, $hash['password']); $user->activated = Users::STATUS_ACTIVATED; $user->save(FALSE); user()->setFlash(FlashConst::MESSAGE_SUCCESS, Yii::t('main', 'Активация аккаунта прошла успешно. Приятной игры!')); notify()->registerStep2($hash['email'], array('login' => $user->login, 'password' => $hash['password'])); } catch (Exception $e) { user()->setFlash(FlashConst::MESSAGE_ERROR, $e->getMessage()); } } $this->redirect(array('index')); }
public function actionStep2($hash) { $cache = new CFileCache(); $cache->init(); if (($hashInfo = $cache->get($this->_cacheName . $hash)) !== FALSE) { $cache->delete($this->_cacheName . $hash); $user = db()->createCommand("SELECT COUNT(0) FROM `{{users}}` WHERE `email` = :email AND `login` = :login LIMIT 1")->bindParam('email', $hashInfo['email'], PDO::PARAM_STR)->bindParam('login', $hashInfo['login'], PDO::PARAM_STR)->queryScalar(); if ($user) { $newPassword = Users::generatePassword(rand(Users::PASSWORD_MIN_LENGTH, Users::PASSWORD_MAX_LENGTH)); // Обновляю пароль на сервере try { $l2 = l2('ls', $hashInfo['ls_id'])->connect(); $encryptPassword = $l2->passwordEncrypt($newPassword); $login = $hashInfo['login']; $email = $hashInfo['email']; $res = $l2->getDb()->createCommand("UPDATE {{accounts}} SET password = :password WHERE login = :login LIMIT 1")->bindParam('password', $encryptPassword, PDO::PARAM_STR)->bindParam('login', $login, PDO::PARAM_STR)->execute(); if ($res) { $encryptPassword = Users::hashPassword($newPassword); db()->createCommand("UPDATE {{users}} SET password = :password WHERE email = :email AND login = :login LIMIT 1")->bindParam('password', $encryptPassword, PDO::PARAM_STR)->bindParam('email', $email, PDO::PARAM_STR)->bindParam('login', $login, PDO::PARAM_STR)->execute(); notify()->forgottenPasswordStep2($email, array('password' => $newPassword)); user()->setFlash(FlashConst::MESSAGE_SUCCESS, Yii::t('main', 'На почту указанную при регистрации отправлен новый пароль.')); } else { user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Произошла ошибка! Попробуйте повторить позже.')); } } catch (Exception $e) { user()->setFlash(FlashConst::MESSAGE_ERROR, $e->getMessage()); } } else { user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Аккаунт не найден.')); } } else { user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Ключ для восстановления пароля не найден.')); } if (user()->hasFlash(FlashConst::MESSAGE_ERROR)) { $this->redirect(array('index')); } $this->redirect(array('/login/default/index')); }