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