Exemplo n.º 1
0
 /**
  * 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('Получить пароль'));
 }
Exemplo n.º 2
0
 /**
  * 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;
 }