<?php

class RecuperarSenhaController extends GxController {

    var $help = 'Esta é a ajuda';

    public function actionSolicitar() {
        $model = new RecuperarSenha('solicitar');
        if (isset($_POST['RecuperarSenha'])) {
            $model->setAttributes($_POST['RecuperarSenha']);
            if($model->validate()) {
                $Funcionario = Funcionarios::model()->find('FUN_USUARIO = :user AND FUN_SITUACAO = "A"', array(':user' => $model->FUN_USUARIO));
                if($Funcionario) {

                    $exists = $model->findByPk($Funcionario->FUN_IDFUNCIONARIO);
                    if($exists)
                        $model = $exists;
                    else
                        $model->REC_IDFUNCIONARIO = $Funcionario->FUN_IDFUNCIONARIO;

                    $model->REC_EXPIRES = date('d/m/Y',mktime(0,0,0,date('m'),date('d')+2,date('Y')));
                    $model->REC_TOKEN = md5(uniqid(rand(), true));

                    $model->scenario = 'salvar';
                    if($model->save()) {

                        $url = Util::createUrl('RecuperarSenha/alterar', array('token' => $model->REC_TOKEN));

                        $subject = 'Recuperação da sua senha de acesso ao CRM Delvale';

                        $msg = "";
                        $msg .= '<p>Uma requisição de redefinição de senha foi feita para o seu usuário de acesso ao CRM.</p>';
                        $msg .= '<p>Se não foi você quem a fez, por favor ignore o conteúdo deste e-mail.</p>';
                        $msg .= '<p>Caso foi você quem requisitou esta ação, abra o link abaixo e siga as instruções para redefinir sua senha.</p>';
                        $msg .= Util::createMailButton($url, 'CRIAR NOVA SENHA');

                        Util::sendEmail($Funcionario->FUN_EMAIL, $subject, $msg);

                        if(strpos($model->REC_EXPIRES, '-') !== false) {
                            $model->REC_EXPIRES = Util::formatDataBr($model->REC_EXPIRES);
                        }
                        $subject_copia = $Funcionario->FUN_NOME . ' solicitou recuperação de senha do CRM '.VERSAO;

                        $msg_copia = $subject_copia;
                        $msg_copia .= "<h2>Dados completos de quem requisitou:</h2>";
                        $msg_copia .= "<b>Nome:</b> " . $Funcionario->FUN_NOME.'<br />';
                        $msg_copia .= "<b>E-mail:</b> " . $Funcionario->FUN_EMAIL.'<br />';
                        $msg_copia .= "<b>Usuário de acesso:</b> " . $Funcionario->FUN_USUARIO.'<br />';
                        $msg_copia .= "<b>Data da requisição:</b> " . date('d/m/Y H:i') .'<br />';
                        $msg_copia .= "<b>Requisição expira em:</b> " . $model->REC_EXPIRES.'<br />';
                        $msg_copia .= '<b>Link para alterar senha:</b> <a href="' . $url.'">'.$url.'</a></p>';
                        Util::sendEmail('marcio@delvale.com.br', $subject_copia, $msg_copia);

                        Yii::app()->user->setFlash('success', 'Você receberá um e-mail com as instruções para alteração de senha, você tem um prazo de 48 horas para alterar sua senha!');
                        $model->unsetAttributes();
                        $model = new RecuperarSenha('solicitar');
                    } else {
                        Yii::app()->user->setFlash('danger', 'Não foi possível salvar os suas informações, por favor tente novamente.');
                    }
                } else {
                    Yii::app()->user->setFlash('danger', 'Usuário não encontrado.');
                }
            }
        }

        $this->render('solicitar', array('model' => $model));
    }

    public function actionAlterar() {
        $request = Yii::app()->request;
        $model = new RecuperarSenha('alterar');

        if($request->isPostRequest) {
            $model->setAttributes($_POST['RecuperarSenha']);

            $Solicitacao = $this->verificarToken($model->REC_TOKEN);

            if(!$Solicitacao) {
                Yii::app()->user->setFlash('error', 'Não há nehuma solicitação de redefinição de senha para esta requisição');
                $this->redirect(array('RecuperarSenha/solicitar'));
            }

            if($model->validate()) {

                if(strtotime(Util::formatDataMysql($Solicitacao->REC_EXPIRES)) < strtotime(date('Y-m-d'))) {
                    Yii::app()->user->setFlash('error', 'O tempo para redefinição de senha expirou!');
                    $this->redirect(array('RecuperarSenha/solicitar'));
                }

                $Funcionario = Funcionarios::model()->find('FUN_USUARIO = :user AND FUN_SITUACAO = "A"', array(':user' => $model->FUN_USUARIO));
                $error = false;
                if(!$Funcionario) {
                    Yii::app()->user->setFlash('danger', 'O usuário informado não foi encontrado!');
                    $error = true;
                } elseif ($Funcionario->FUN_IDFUNCIONARIO != $Solicitacao->REC_IDFUNCIONARIO) {
                    Yii::app()->user->setFlash('danger', 'O usuário informado não é o mesmo que solicitou a alteração de senha!');
                    $error = true;
                }

                if($model->FUN_SENHA != $model->FUN_CONFIRMACAO) {
                    Yii::app()->user->setFlash('error', 'Senha e confirmação de senha não conferem!');
                    $error = true;
                }

                if(!$error) {
                    $Funcionario->FUN_SENHA = md5($model->FUN_SENHA);
                    $Funcionario->scenario = 'RecuperarSenha';
                    if ($Funcionario->save(true, array('FUN_SENHA'))) {
                        $Senhas = new Senhas;
                        $Senhas->PWD_DATA = date('d/m/Y');
                        $Senhas->PWD_IDFUNCIONARIO = $Funcionario->FUN_IDFUNCIONARIO;
                        $Senhas->PWD_SENHA = $Funcionario->FUN_SENHA;
                        $Senhas->save();

                        $Solicitacao->delete($model->REC_IDFUNCIONARIO);
                        $model->unsetAttributes();
                        Yii::app()->user->setFlash('success', 'Senha alterada com sucesso, você pode voltar para página inicial e logar!');
                    } else {
                        Yii::app()->user->setFlash('error', 'Houve um erro na alteração da senha!');
                    }
                }
            }
        } else {
            if(isset($_GET['token'])) {
                $model = $this->verificarToken($_GET['token']);
                if(!$model) {
                    Yii::app()->user->setFlash('error', 'Solicitação inválida!');
                    $this->redirect(array('RecuperarSenha/solicitar'));
                }
            } else {
                Yii::app()->user->setFlash('error', 'Solicitação inválida!');
                $this->redirect(array('RecuperarSenha/solicitar'));
            }
        }

        $this->render('alterar', array(
            'model' => $model,
        ));
    }

    private function verificarToken($token) {
        $model = new RecuperarSenha('alterar');
        $model = $model->find('REC_TOKEN = :token', array(':token' => $token));
        return $model;
    }

}
