/** * 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('Редактировать профиль')); }
/** * 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('Вход')); }