/**
  * Ação responsável pela renderização da view ou auteração ou envio
  * de email para auteração da senha da conta de um determinado usuário.
  *
  * @return View /vistior/help/password_forgot ou / após o envio do e-mail.
  */
 public function visitor_password_forgot()
 {
     if ($this->request->is('post')) {
         $this->User->validate = array('email' => array('rule' => 'email', 'message' => 'Este e-mail não é válido.'));
         $this->User->set($this->request->data);
         if ($this->User->validates()) {
             // Buscando por um usuário correspondente ao e-mail informado.
             $hasUser = $this->User->find('first', array('fields' => 'id, enable', 'conditions' => array('email' => $this->request->data['User']['email'])));
             // E-mail informado pertençe realmente à um usuário ?
             if (!empty($hasUser)) {
                 // Caso o mesmo tenha criado o usuário, porém não tenha confirmado;
                 if (empty($hasUser['User']['enable'])) {
                     $this->Session->setFlash('Seu usuário ainda não foi confirmado.', 'flash/mini/warning');
                     $this->redirect('/');
                 }
                 $this->loadModel('_Hash');
                 $hash = SupportComponent::hash();
                 // Buscando e deletando solicitações que já estão
                 // insipiradas OU solicitações que tenham sido feitas
                 // recentemente pelo usuário requisitante.
                 $this->_Hash->deleteInvalids(array("entity_id = {$hasUser['User']['id']}"));
                 // Criando registro indicativo da ação do
                 // usuário, armazenando (seu código de alteração).
                 $this->_Hash->create();
                 $this->_Hash->save(array('hash' => $hash, 'entity_id' => $hasUser['User']['id'], 'context' => 'password_forgot'));
                 // Enviando e-mail com a url para alteração da senha.
                 $this->sendEmail(array('to' => $this->request->data['User']['email'], 'template' => 'user/password_forgot', 'viewVars' => array('hash' => $hash)));
             } else {
                 // Enviando e-mail informativo. E-mail não pertence a nenhum usuário.
                 $this->sendEmail(array('to' => $this->request->data['User']['email'], 'template' => 'user/not_found'));
             }
             $this->Session->setFlash('Em alguns instantes você receberá um e-mail com as informações necessárias para alterar sua senha.', 'flash/mini/success');
             $this->redirect('/visitor');
         }
     }
     $this->render('visitor/help/password_forgot');
 }