/**
  * Envia um email com os dados para Recuperacao/alteração da senha do usuário
  * @param Administrativo_Model_Usuario $oUsuario instancia do usuario
  */
 public static function enviarEmailSenha(Administrativo_Model_Usuario $oUsuario)
 {
     $sHash = $oUsuario->criarHash();
     $oView = new Zend_View();
     $oView->setScriptPath(APPLICATION_PATH . '/modules/auth/views/scripts/login/');
     $oView->sUrlRecuperarSenha = $oView->serverUrl("/auth/login/recuperar-senha/hash/{$sHash}");
     $oView->nome = $oUsuario->getEntity()->getNome();
     $sTextoEmail = $oView->render('email-recuperacao-senha.phtml');
     $oTranslate = Zend_Registry::get('Zend_Translate');
     DBSeller_Helper_Mail_Mail::send($oUsuario->getEmail(), $oTranslate->_('ECidadeOnline2 - Recuperação de Senha'), $sTextoEmail);
 }
 /**
  * Cria a Senha e Atualiza o os dados dado usuário
  */
 public function recuperarSenhaPostAction()
 {
     $oRequest = $this->getRequest();
     $aRetornoJson = array();
     $aRetornoJson['status'] = TRUE;
     $aRetornoJson['message'] = '';
     $oDoctrine = Zend_Registry::get('em');
     try {
         $oDoctrine->getConnection()->beginTransaction();
         if ($oRequest->isPost() || $oRequest->isGet()) {
             $oForm = new Auth_Form_RecuperarSenha();
             if ($oRequest->senha != $oRequest->senharepetida) {
                 $aRetornoJson['fields'] = array('senha', 'senharepetida');
                 throw new Exception($this->translate->_('As senhas informadas não correspondem.'));
             }
             if (!$oForm->isValid($oRequest->getParams())) {
                 $aRetornoJson['fields'] = array_keys($oForm->getMessages());
                 throw new Exception($this->translate->_('Preencha os dados corretamente.'));
             }
             /**
              * Buscamos o usuário pelo email
              */
             $oQueryAtivos = Administrativo_Model_Usuario::getQuery();
             $oQueryAtivos->select('e');
             $oQueryAtivos->from('\\Administrativo\\Usuario', "e");
             $oQueryAtivos->where("e.email = '{$oForm->email->getValue()}' and e.habilitado = true");
             $aEntitiesUsuarios = $oQueryAtivos->getQuery()->getResult();
             if (count($aEntitiesUsuarios) != 1) {
                 throw new Exception($this->translate->_('Email informado não é um cadastro válido.'));
             }
             $oUsuario = new Administrativo_Model_Usuario($aEntitiesUsuarios[0]);
             /**
              * Recriamos o hash do usuario. caso nao seja o mesmo enviado, negamos a troca de senha
              */
             $sHashUsuario = $oUsuario->criarHash();
             if ($sHashUsuario != $oRequest->getParam('hash')) {
                 throw new Exception($this->translate->_('Código de verificação informado é inválido.'));
             }
             $oUsuario->setSenha($oRequest->getParam('senha'));
             $oUsuario->persist();
             $oDoctrine->getConnection()->commit();
             $aRetornoJson['success'] = $this->translate->_('Senha alterada com sucesso.');
             $aRetornoJson['login'] = $oUsuario->getLogin();
             $aRetornoJson['url'] = $this->view->baseUrl('/auth/login');
         }
     } catch (Exception $eErro) {
         $oDoctrine->getConnection()->rollback();
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['error'][] = $eErro->getMessage();
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }