public function loginAction() { require_once 'Zend/Auth/Adapter/DbTable.php'; $request = $this->getRequest(); $validateOnly = $request->isXmlHttpRequest(); $userObj = new User(); $userRow = $userObj->createRow(); if ($validateOnly) { $this->setNoRenderer(); } $status = ValidationContainer::instance(); if ($request->isPost()) { // if a user's already logged in, send them to their account home page $auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { # $this->_redirect ( 'select/select' ); } $request = $this->getRequest(); // determine the page the user was originally trying to request $redirect = $this->_getParam('redirect'); //if (strlen($redirect) == 0) // $redirect = $request->getServer('REQUEST_URI'); if (strlen($redirect) == 0) { if ($this->hasACL('pre_service')) { # $redirect = 'select/select'; } } // initialize errors $status = ValidationContainer::instance(); // process login if request method is post if ($request->isPost()) { // fetch login details from form and validate them $username = $this->getSanParam('username'); $password = $this->_getParam('password'); if (!$status->checkRequired($this, 'username', t('Login')) or !$this->_getParam('send_email') and !$status->checkRequired($this, 'password', t('Password'))) { $status->setStatusMessage(t('The system could not log you in.')); } if (!$status->hasError()) { // setup the authentication adapter $db = Zend_Db_Table_Abstract::getDefaultAdapter(); $adapter = new Zend_Auth_Adapter_DbTable($db, 'user', 'username', 'password', 'md5(?)'); $adapter->setIdentity($username); $adapter->setCredential($password); // try and authenticate the user $result = $auth->authenticate($adapter); if ($result->isValid()) { $user = new User(); $userRow = $user->find($adapter->getResultRowObject()->id)->current(); if ($user->hasPS($userRow->id)) { $redirect = $redirect ? $redirect : "select/select"; } if ($userRow->is_blocked) { $status->setStatusMessage(t('That user account has been disabled.')); $auth->clearIdentity(); } else { // create identity data and write it to session $identity = $user->createAuthIdentity($userRow); $auth->getStorage()->write($identity); // record login attempt $user->recordLogin($userRow); // send user to page they originally request $this->_redirect($redirect); } } else { $auth->clearIdentity(); switch ($result->getCode()) { case Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND: $status->setStatusMessage(t('That username or password is invalid.')); break; case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID: $status->setStatusMessage(t('That username or password is invalid.')); break; default: throw new exception('login failure'); break; } } } } } if ($validateOnly) { $this->sendData($status); } else { $this->view->assign('status', $status); } }