public function passwordretrieveAction()
 {
     $form = new Application_Form_PasswordRetrieve();
     if ($this->getRequest()->isPost()) {
         if ($form->isValid($this->getRequest()->getParams())) {
             $retrieveData = $form->getValues();
             $user = Application_Model_Mappers_UserMapper::getInstance()->findByEmail(filter_var($retrieveData['email'], FILTER_SANITIZE_EMAIL));
             //create new reset token and send e-mail to the user
             $resetToken = new Application_Model_Models_PasswordRecoveryToken(array('saltString' => $retrieveData['email'], 'expiredAt' => date(Tools_System_Tools::DATE_MYSQL, strtotime('+1 day', time())), 'userId' => $user->getId()));
             $resetToken->registerObserver(new Tools_Mail_Watchdog(array('trigger' => Tools_Mail_SystemMailWatchdog::TRIGGER_PASSWORDRESET)));
             $resetTokenId = Application_Model_Mappers_PasswordRecoveryMapper::getInstance()->save($resetToken);
             if ($resetTokenId) {
                 $this->_helper->flashMessenger->setNamespace('passreset')->addMessage('We\'ve sent an email to ' . $user->getEmail() . ' containing a temporary url that will allow you to reset your password for the next 24 hours. Please check your spam folder if the email doesn\'t appear within a few minutes.');
                 if (isset($this->_helper->session->retrieveRedirect)) {
                     $redirectTo = $this->_helper->session->retrieveRedirect;
                     unset($this->_helper->session->retrieveRedirect);
                     $this->redirect($this->_helper->website->getUrl() . $redirectTo);
                 }
                 $this->_helper->redirector->gotoRoute(array('controller' => 'login', 'action' => 'passwordretrieve'));
             }
         } else {
             $messages = array_values($form->getMessages());
             $flashMessanger = $this->_helper->flashMessenger;
             foreach ($messages as $messageData) {
                 if (is_array($messageData)) {
                     array_walk($messageData, function ($msg) use($flashMessanger) {
                         $flashMessanger->addMessage(array('email' => $msg));
                     });
                 } else {
                     $flashMessanger->addMessage(array('email' => $messageData));
                 }
             }
             if (isset($this->_helper->session->retrieveRedirect)) {
                 $redirectTo = $this->_helper->session->retrieveRedirect;
                 unset($this->_helper->session->retrieveRedirect);
                 return $this->redirect($this->_helper->website->getUrl() . $redirectTo);
             }
             return $this->redirect($this->_helper->website->getUrl() . 'login/retrieve/');
         }
     }
     $errorMessages = $this->_helper->flashMessenger->getMessages();
     if (!empty($errorMessages)) {
         foreach ($errorMessages as $message) {
             foreach ($message as $elementName => $msg) {
                 $form->getElement($elementName)->setAttribs(array('class' => 'notvalid', 'title' => $msg));
             }
         }
     }
     $passResetMsg = $this->_helper->flashMessenger->getMessages('passreset');
     if (!empty($passResetMsg)) {
         $this->view->retrieveSuccessMessage = join($passResetMsg, PHP_EOL);
     }
     $form->removeDecorator('HtmlTag');
     $form->setElementDecorators(array('ViewHelper', 'Errors', 'Label', array('HtmlTag', array('tag' => 'p'))));
     $this->view->form = $form;
 }