/** * Action - fetchpassword * fetch new password * * Access to the action is possible in the following paths: * - /account/fetchpassword * * @return void */ public function fetchpasswordAction() { //---------------------- // if a user's already logged in, send them to their account home page if (Zend_Auth::getInstance()->hasIdentity()) { $this->_redirect('/account'); } // Определим полный адрес активации нового пароля $ActivateURL = Default_Plugin_SysBox::getFullURL(array('controller' => 'account', 'action' => 'fetchpassword')); //Создадим обьект формы $fetchpasswordForm = new Default_Form_FetchPassword(); $action = $this->getRequest()->getQuery('action'); if ($this->getRequest()->isPost()) { $action = 'submit'; } switch ($action) { case 'submit': // Проверяем на валидность поля формы $params = $this->_getAllParams(); $result = $fetchpasswordForm->isValid($params); if ($result) { $username = trim($params['username']); $user = new Default_Model_DbTable_User($this->db); if ($user->load($username, 'username')) { if ($user->fetchPassword()) { // Запомним в логе сообщений $message = "For user=\"{$username}\" created a new password, and sended to email"; $this->_logMsg->fetchpass_complete_ok($message); // Запомним в логе статистики $serialized = $this->_serializer->serialize(array('user' => $username)); $this->_logStat->fetchpass_complete_ok($serialized); $url = '/account/fetchpassword?action=complete'; $this->_redirect($url); } else { // Запомним в логе сообщений $message = "Error fetch the password for user=\"{$username}\""; $this->_logMsg->fetchpass_complete_err($message); // Запомним в логе статистики $reason = "user->fetchPassword()->ERROR"; $serialized = $this->_serializer->serialize(array('user' => $username, 'reason' => $reason)); $this->_logStat->fetchpass_complete_err($serialized); } } else { // Запомним в логе сообщений $message = "User name - \"{$username}\" was not found"; $this->_logMsg->fetchpass_complete_err($message); // Запомним в логе статистики $serialized = $this->_serializer->serialize(array('user' => $username, 'reason' => $message)); $this->_logStat->fetchpass_complete_err($serialized); //Выведем сообщение - что пользователь с таким именем не найден! $this->view->class_message = 'warning'; $this->view->message = $this->Translate('Пользователь с таким именем не найден.'); } } break; case 'complete': //Выведем сообщение - что новый пароль пользователя был передан на e-mail! $this->view->class_message = 'message'; $this->view->message = $this->Translate('Ваш новый пароль был передан на Emaile'); break; case 'confirm': $id = $this->getRequest()->getQuery('id'); $key = $this->getRequest()->getQuery('key'); $user = new Default_Model_DbTable_User($this->db); if (!$user->load($id)) { // Запомним в логе сообщений $message = "User with this ID=\"{$id}\" is not found in the database"; $this->_logMsg->fetchpass_confirm_err($message); $serialized = $this->_serializer->serialize(array('user_id' => $id, 'reason' => 'User is not found in the database')); $this->_logStat->fetchpass_confirm_err($serialized); //Выведем сообщение - что пользователь с таким ID не найден в базе данных $this->view->class_message = 'warning'; $this->view->message = $this->Translate('Ошибка подтверждения нового пароля.'); break; } else { if (!$user->confirmNewPassword($key)) { // Запомним в логе сообщений $message = "A user=\"{$user->username}\" has not been tested to confirm the password function"; $this->_logMsg->fetchpass_confirm_err($message); $serialized = $this->_serializer->serialize(array('user' => $user->username, 'key' => $key, 'reason' => 'Error checking function to confirm the password')); $this->_logStat->fetchpass_confirm_err($serialized); //Выведем сообщение - что не прошла проверку ф-ия подтверждения пароля $this->view->class_message = 'warning'; $this->view->message = $this->Translate('Ошибка подтверждения нового пароля.'); break; } } // Запомним в логе сообщений $message = "User (\"{$user->username}\"), your new password has been successfully activated."; $this->_logMsg->fetchpass_confirm_ok($message); $serialized = $this->_serializer->serialize(array('user' => $user->username)); $this->_logStat->fetchpass_confirm_ok($serialized); //Выведем сообщение - что новый парoль пользователя был успешно активирован $this->view->class_message = 'message'; $this->view->message = $this->Translate('Ваш новый пароль был успешно активирован.'); break; } $this->view->ActivateURL = $ActivateURL; $this->view->action = $action; $this->view->fetchpasswordForm = $fetchpasswordForm; //Добавим путь к действию $this->_breadcrumbs->addStep($this->Translate('Вход'), $this->getUrl('login')); $this->_breadcrumbs->addStep($this->Translate('Получить пароль')); }
/** * Creating email of the user's new password * * @param string Название шаблона письма * @return array */ private function _createFetchPassword_Email($tpl) { $arrMail = array(); //-------------------- $templater = Default_Plugin_SysBox::createViewSmarty(); $templater->user = $this; $templater->ActivateURL = Default_Plugin_SysBox::getFullURL(array('controller' => 'account', 'action' => 'fetchpassword')); // fetch the e-mail body $body = $templater->render('email/' . $tpl); // extract the subject from the first line list($subject, $body) = preg_split('/\\r|\\n/', $body, 2); $arrMail['subject'] = trim($subject); $arrMail['body'] = trim($body); return $arrMail; }