<?php

/**
 * Sirve para realizar el proceso de registro de un usuario nuevo.
 */
class RegistroUsuarioController extends Controller {

    public $defaultAction = 'registrar';

    public function accessRules()
    {
        return array(
            array('allow', 
                'actions'=>array('registrar', 'activar'),
                'users' => array('*') 
            ),
            array('deny'),
        );
    }    

    /**
     * Realiza el registro de un usuario a partir de los datos introducidos
     * en el formulario de la página de entrada.
     * También envía un email al usuario para que confirme su cuenta.
     */
    public function actionRegistrar() {
        $formulario = new FormularioRegistro;
        $resultado = array();

        // if it is ajax validation request
        if (isset($_POST['ajax']) && $_POST['ajax'] === 'registro-form') {

            $formulario->email = $_POST['FormularioRegistro_email'];
            $formulario->password = $_POST['FormularioRegistro_password'];
            $formulario->password2 = $_POST['FormularioRegistro_password2'];

            if (!$formulario->validate()) {
                foreach ($formulario->getErrors() as $campo => $error) {
                    $resultado[$campo] = $error;
                }
                echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado);
                Yii::app()->end();
            }

            $nuevo_usuario = new Usuario('registrar');
            $nuevo_usuario->email = $formulario->email;
            $nuevo_usuario->password = $nuevo_usuario->encrypt($formulario->password);
            $nuevo_usuario->estado = Usuario::ESTADO_NOACTIVO;
            $nuevo_usuario->clave_seguridad = $nuevo_usuario->encrypt(microtime() . $nuevo_usuario->password);

            if (!$nuevo_usuario->save()) {
                foreach ($nuevo_usuario->getErrors() as $campo => $error) {
                    $resultado[$campo] = $error;
                }
                echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado);
                Yii::app()->end();
            }

            $this->enviarMailRegistro($nuevo_usuario);

            $resultado['status'] = '200';
            $resultado['texto'] = 'Su cuenta ha sido creada....';
            echo function_exists('json_encode') ? json_encode($resultado) : CJSON::encode($resultado);
            Yii::app()->end();
        }

        $this->redirect(Yii::app()->params['frontpage']);
    }

    /**
     * Activa la cuenta del usuario a partir de la URL de activación
     * que se le ha enviado a través de un email.
     */
    public function actionActivar() {
        $email = $_GET['email'];
        $clave_seguridad = $_GET['key'];
        
        if ($email && $clave_seguridad) {
            $usuario = Usuario::model()->findByAttributes(array('email' => $email));
            
            // Comprobamos si se ha encontrado un usuario con ese email
            if (!isset($usuario))
                //$this->render('/user/message', array('title' => Yii::t("User activation"), 'content' => Yii::t("Incorrect activation URL.")));
                Yii::log ("Incorrect activation URL. 3");
            elseif ($usuario->estado == Usuario::ESTADO_ACTIVO)
                //$this->render('/user/message', array('title' => Yii::t("User activation"), 'content' => Yii::t("You account is active.")));
                Yii::log ("You account is active.");
            elseif ($usuario->estado == Usuario::ESTADO_DENEGADO)
                //$this->render('/user/message', array('title' => Yii::t("User activation"), 'content' => Yii::t("You account is banned.")));
                Yii::log ("You account is banned.");
            elseif (isset($usuario->clave_seguridad) && ($usuario->clave_seguridad == $clave_seguridad)) {
                // Hay que activar el usuario
                $usuario->estado = Usuario::ESTADO_ACTIVO;
                $usuario->clave_seguridad = $usuario->encrypt(microtime());
                $usuario->save();
                $this->enviarMailConfirmacionActivacion($usuario);                
                //$this->render('/user/message', array('title' => Yii::t("User activation"), 'content' => Yii::t("You account is activated.")));
                Yii::log ("You account is activated.");                
            } else {
                //$this->render('/user/message', array('title' => Yii::t("User activation"), 'content' => Yii::t("Incorrect activation URL.")));
                Yii::log ("Incorrect activation URL. 2 ");
            }
        }
        else {
            //$this->render('/user/message', array('title' => Yii::t("User activation"), 'content' => Yii::t("Incorrect activation URL.")));
            Yii::log ("Incorrect activation URL. 1");
        }
    }

    /**
     * Envía un mail de registro a un usuario
     * con una URL de confirmación.
     * @param Usuario $usuario Usuario al que se le enviará el mail de registro
     */
    private function enviarMailRegistro($usuario) {
        Yii::import('ext.yii-mail.YiiMailMessage');

        $url_activacion = $this->createAbsoluteUrl('registrousuario/activar', array("key" => $usuario->clave_seguridad, "email" => $usuario->email));
        $mensaje = new YiiMailMessage;

        $mensaje->from = Yii::app()->params['email_remitente'];
        $mensaje->setTo($usuario->email);
        $mensaje->subject = Yii::t('profind', 'Complete su registro en PROFIND');
        $mensaje->view ='registro_usuario';
        $mensaje->setBody(
                array(
                    'url' => $url_activacion,
                    'email' => $usuario->email
                ),
                'text/html'
            );

        Yii::app()->mail->send($mensaje);
    }

    /**
     * Envía un mail de confirmación de su cuenta al usuario.
     * @param Usuario $usuario Usuario al que se le enviará el mail de registro
     */
    private function enviarMailConfirmacionActivacion($usuario) {
        Yii::import('ext.yii-mail.YiiMailMessage');

        $mensaje = new YiiMailMessage;

        $mensaje->from = Yii::app()->params['email_remitente'];
        $mensaje->setTo($usuario->email);
        $mensaje->subject = Yii::t('profind', 'Gracias por registrarse en PROFIND.');
        $mensaje->view ='confirmacion_usuario';
        $mensaje->setBody(array(), 'text/html');

        Yii::app()->mail->send($mensaje);
    }
    
    
}