/** * 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); }