예제 #1
0
 /**
  * Action - details
  * detailed information about the user
  * 
  * Access to the action is possible in the following paths:
  * - /account/details
  *
  * @return void
  */
 public function detailsAction()
 {
     $changedPass = false;
     $auth = Zend_Auth::getInstance();
     //-------------------------------
     //Создадим форму редактирования личных данных пользователя
     //что бы редактировать свои данных пользователь уже должен войти на сайт
     if ($this->_identity) {
         $formUserDetails = new Default_Form_UserDetails();
     } else {
         $class_message = 'warning';
         $message = $this->Translate('У вас недостаточно прав на этот ресурс');
         $url = "/account/login?class_message={$class_message}&message={$message}";
         $this->_redirect($url);
     }
     // Проверяем тип запроса, если POST значит пришли данные формы
     if ($this->_request->isPost()) {
         // Проверяем на валидность поля формы
         $result = $formUserDetails->isValid($this->_getAllParams());
         if ($result) {
             //Получим данные о пользователе
             $user = new Default_Model_DbTable_User($this->db);
             $user->load($this->_identity->user_id);
             //Обновим личные данные пользователя
             $user->profile->first_name = $formUserDetails->getValue('first_name');
             $user->profile->last_name = $formUserDetails->getValue('last_name');
             $user->profile->email = $formUserDetails->getValue('email');
             if (!$this->_isCommentator) {
                 //Настройки профиля
                 $user->profile->num_posts = $formUserDetails->getValue('num_posts');
                 $user->profile->blog_public = $formUserDetails->getValue('blog_public');
                 //Публичные данные пользователя
                 $user->profile->public_first_name = $formUserDetails->getValue('public_first_name');
                 $user->profile->public_last_name = $formUserDetails->getValue('public_last_name');
                 $user->profile->public_email = $formUserDetails->getValue('public_email');
                 $user->profile->public_home_phone = $formUserDetails->getValue('public_home_phone');
                 $user->profile->public_work_phone = $formUserDetails->getValue('public_work_phone');
                 $user->profile->public_mobile_phone = $formUserDetails->getValue('public_mobile_phone');
             }
             $password = $formUserDetails->getValue('password');
             $password_approve = $formUserDetails->getValue('password_approve');
             if (strlen($password) > 0 && strlen($password_approve) > 0) {
                 $user->password = $password;
                 $changedPass = TRUE;
             }
             //Проверим ошибочную ситуацию
             if (strlen($password) > 0 && strlen($password_approve) == 0) {
                 $this->view->class_message = 'warning';
                 $this->view->message = array($this->Translate('Ошибка формы! Неверно введены данные в форму.'), $this->Translate('При заполненном поле пароль, поле формы подтверждение пароля не должно быть пустым.'));
                 $this->view->formUserDetails = $formUserDetails;
                 return;
             }
             //Запомним данные пользователя
             if ($user->save()) {
                 //Обновим данные идентификации пользователя
                 $auth->getStorage()->write($user->createAuthIdentity());
                 // Запомним в логе сообщений
                 $message = "The user-\"{$user->username}\" has changed their details.";
                 if ($changedPass) {
                     $message .= " Password has been changed.";
                 }
                 $this->_logMsg->details_ok($message);
                 $this->_redirect('/account/detailscomplete');
             } else {
                 $this->view->class_message = 'warning';
                 $this->view->message = array($this->Translate('Ошибка изменения детальной информации пользователя') . '!', $this->Translate('Ошибка базы данных при сохранении информации')) . '.';
                 $this->view->formUserDetails = $formUserDetails;
                 return;
             }
         } else {
             // неверно заполнены поля формы!!!!!!!
             $this->view->class_message = 'warning';
             //$message = $this->getFormMessages($formUserDetails);
             //$this->view->message = $message['warning'];
             $this->view->message = $this->getFormMessages($formUserDetails);
         }
     } else {
         //Установим значения формы по умолчанию
         //--- Личные данные пользователя ---
         $formUserDetails->setDefault('email', $this->_identity->email);
         $formUserDetails->setDefault('first_name', $this->_identity->first_name);
         $formUserDetails->setDefault('last_name', $this->_identity->last_name);
         //--- Настройки профиля ---
         //Установим кол. записей отображаемых в блоге
         $formUserDetails->setDefault('num_posts', $this->_identity->num_posts);
         //Установим признак публикации записей для доступа к ним других пользователей
         $formUserDetails->setDefault('blog_public', $this->_identity->blog_public);
         //--- Публичные данные пользователя ---
         $formUserDetails->setDefault('public_first_name', $this->_identity->public_first_name);
         $formUserDetails->setDefault('public_last_name', $this->_identity->public_last_name);
         $formUserDetails->setDefault('public_email', $this->_identity->public_email);
         $formUserDetails->setDefault('public_home_phone', $this->_identity->public_home_phone);
         $formUserDetails->setDefault('public_work_phone', $this->_identity->public_work_phone);
         $formUserDetails->setDefault('public_mobile_phone', $this->_identity->public_mobile_phone);
     }
     $this->view->formUserDetails = $formUserDetails;
     //Добавим путь к действию
     $this->_breadcrumbs->addStep($this->Translate('Редактировать профиль'));
 }
예제 #2
0
 /**
  * Action - login
  * user authentication
  * 
  * Access to the action is possible in the following paths:
  * - /admin/user/login
  *
  * @return void
  */
 public function loginAction()
 {
     $result = true;
     $message = NULL;
     //----------------------
     // Получим обьект авторизации пользователя
     $auth = Zend_Auth::getInstance();
     // Получим параметры запроса
     $request = $this->getRequest();
     $params = $request->getParams();
     //Создадим обьект формы
     $loginForm = new Default_Form_UserLogin();
     $urlAction = $this->getUrl('login', 'user', 'admin');
     $loginForm->setAction($urlAction);
     $redirect = $params['redirect'];
     //Проверим правильность заполнения полей формы
     if ($loginForm->isValid($params)) {
         $db = Zend_Registry::get('db');
         // Найдем пользователя по его имени
         $user = new Default_Model_DbTable_User($db);
         $username = $loginForm->getValue('username');
         if ($user->loadByUsername($username)) {
             // Определим актуальность пользователя на сайте
             // setup the authentication adapter
             $adapter = new Zend_Auth_Adapter_DbTable($db, 'users', 'username', 'password', '?');
             $password = $loginForm->getValue('password');
             $password = $password;
             $adapter->setIdentity($username);
             $adapter->setCredential($password);
             // Проверим правильность аутентификации
             $result = $auth->authenticate($adapter);
             if ($result->isValid()) {
                 //ОК - вход пользователя прошел успешно
                 //--- Проверим актуальность пользователя ---
                 //Получим данные о пользователе
                 $user = new Default_Model_DbTable_User($this->db);
                 $user_id = $adapter->getResultRowObject()->id;
                 $user->load($user_id);
                 // Очистим данные идентификации пользователя
                 $auth->clearIdentity();
                 // Сохраним обьект идентификации пользователя
                 // и перейдем на действие завершения авторизации
                 $user->loginSuccess();
                 // Создадим обьект идентификации пользователя
                 // и запишем его в сессию пользователя
                 $identity = $user->createAuthIdentity();
                 $auth->getStorage()->write($identity);
                 // Перейдем на страницу, которую запрашивал пользователь
                 // или на его авторскую страницу
                 $this->_redirector->gotoUrl($redirect, array('prependBase' => FALSE));
             } else {
                 //ERROR - ошибка валидации параметров входа
                 // record failed login attempt
                 Default_Model_DbTable_User::LoginFailure($username, $result->getCode());
                 $message = array($this->Translate("Ошибка регистрации! Имя или пароль клиента заданы неверно."));
             }
         } else {
             //ERROR - нет такого пользователя
             // record failed login attempt
             Default_Model_DbTable_User::LoginFailure($username, Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND);
             $message = array($this->Translate("Ошибка регистрации! Имя клиента задано неверно."));
         }
     } else {
         //ERROR - неверно введены параметры формы
         $message = $this->getFormMessages($loginForm);
     }
     if ($message) {
         $this->view->class_message = 'warning';
         $this->view->message = $message;
     }
     //Добавим путь к действию
     $this->_breadcrumbs->addStep($this->Translate('Вход'));
 }