<?php

/**
 * @class EMail
 * @brief Clase para enviar correos electrónicos a los usuarios con mensajes
 * predeterminados (bienvenida, confirmaciones, notificaciones, etc).
 *
 * @package application.helpers
 */

class EMail {

    /**
     * @brief Envía un correo electrónico.
     * @param string $to destinatiario
     * @param string $subject asunto
     * @param string $view nombre del fichero con la vista que se utilizará 
     * como cuerpo del mensaje
     * @param mixed $body cuerpo del mensaje. Si el parámetro es una cadena y 
     * se ha indicado una vista, la cadena se pasa a la vista como $body. 
     * Si se ha indicado una vista y el cuerpo es un array, los valores del 
     * array se pasan a la vista como en el método rended() de un controlador.
     * @return boolean
     * @see    YiiMail
     */
    protected static function _enviar($to, $subject, $view, $body) {
        $mensaje = new YiiMailMessage;
        $mensaje->from = Yii::app()->params['email_remitente'];
        $mensaje->setTo($to);
        $mensaje->subject = $subject;
        $mensaje->view = $view;
        $mensaje->setBody($body, 'text/html');
        return (Yii::app()->mail->send($mensaje) > 0);
    }

    /**
     * @brief Envía un correo de confirmación de cuenta.
     * @param string $destino dirección de destino
     * @return boolean
     */
    public static function enviarConfirmacionActivacion($destino) {
        Yii::trace('Enviando correo para confirmar activación', 'application.helpers.EMail');
        return self::_enviar($destino, 
                Yii::t('profind', 'Gracias por registrarse en PROFIND.'), 
                'confirmacion_usuario', 
                array('email' => $destino));
    }

    /**
     * @brief Envía un correo informando de la cancelación de cuenta
     * @param string $destino dirección de destino
     * @return boolean
     */
    public static function enviarConfirmacionCancelacion($destino) {
        Yii::trace('Enviando correo para confirmar cancelación', 'application.helpers.EMail');
        return self::_enviar($destino, 
                Yii::t('profind', 'Confirmación de cancelación de su cuenta en PROFIND'),
                'confirmacion_cancelacion_usuario',
                array('email' => $destino));
    }

    /**
     * @brief Envía un correo de recuperación de password con una URL de verificación.
     * @param string $destino dirección de destino
     * @param string $key clave de seguridad necesaria para construir la URL de recuperación
     * @return boolean
     */
    public static function enviarRecuperacion($destino, $key) {
        Yii::trace('Enviando correo con URL para recuperar la contraseña', 'application.helpers.EMail');
        $url_recuperacion = Yii::app()->params['frontpage'] . '?' . 'key=' . $key . '&email=' . urlencode($destino);
        return self::_enviar($destino, 
                Yii::t('profind', 'Recuperación de su cuenta en PROFIND'),
                'recuperacion_password_usuario',
                array('email' => $destino, 'url' => $url_recuperacion));
    }

    /**
     * @brief Envía un correo confirmando el cambio de password.
     * También se envia una URL de recuperación por si fuera un cambio no permitido.
     * @param string $destino dirección de destino
     * @param string $key clave de seguridad necesaria para construir la URL de recuperación
     * @return boolean
     */
    public static function enviarNotificacionCambioPassword($destino, $key) {
        Yii::trace('Enviando correo confirmando el cambio de contraseña', 'application.helpers.EMail');        
        $url_recuperacion = Yii::app()->params['frontpage'] . '?' . 'key=' . $key . '&email=' . urlencode($destino);
        return self::_enviar($destino, 
                Yii::t('profind', 'Se ha modificado su password en PROFIND'),
                'notificacion_cambio_password_usuario',
                array('email' => $destino, 'url' => $url_recuperacion));
    }

    /**
     * @brief Envía un correo de registro de agente con una URL para confirmar la cuenta.
     * @param string $destino dirección de destino
     * @param string $key clave de seguridad necesaria para construir la URL de confirmación
     * @return boolean
     */
    public static function enviarBienvenidaAgente($destino, $key) {
        Yii::trace('Enviando correo de bienvenida a agente', 'application.helpers.EMail');       
        $url_activacion = Yii::app()->params['frontpage'] . '?' . 'key=' . $key . '&email=' . urlencode($destino) . '&x=1';
        return self::_enviar($destino, 
                Yii::t('profind', 'Complete su registro de agente en PROFIND'),
                'registro_agente',
                array('email' => $destino, 'url' => $url_activacion));
    }
    
    /**
     * @brief Envía un correo de registro de coordinador con una URL para confirmar la cuenta.
     * @param string $destino dirección de destino
     * @param string $key clave de seguridad necesaria para construir la URL de confirmación
     * @return boolean
     */
    public static function enviarBienvenidaCoordinador($destino, $key) {
        Yii::trace('Enviando correo de bienvenida a coordinador', 'application.helpers.EMail');
        $url_activacion = Yii::app()->createAbsoluteUrl('usuario/activar', array("key" => $key, "email" => $destino));        
        return self::_enviar($destino, 
                Yii::t('profind', 'Complete su registro en PROFIND'),
                'registro_usuario',
                array('email' => $destino, 'url' => $url_activacion));
    }
    
    /**
     * @brief Envía un mail de registro a un usuario (coordinador/agente) con 
     * una URL de confirmación de baja.
     * @param string $destino dirección de destino
     * @param string $key clave de seguridad necesaria para construir la URL de confirmación
     * @return boolean
     */

    public static function enviarSolicitudBaja($destino, $key) {
        Yii::trace('Enviando correo con URL para realizar la baja de la cuenta', 'application.helpers.EMail');
        
        $url_cancelacion = $this->createAbsoluteUrl('usuario/cancelar', array("key" => $key, "email" => $destino));
        return self::_enviar($destino, 
                Yii::t('profind', 'Solicitud de cancelación de su cuenta en PROFIND'),
                'solicitud_cancelacion_usuario',
                array('email' => $destino, 'url' => $url_cancelacion));
    }
    
    /**
     * @brief Envía un correo confirmando el cambio de producto.
     * @param string $destino dirección de destino
     * @param string $id_producto identificación del producto
     * @return boolean
     */
    public static function enviarNotificacionCambioProducto($destino, $id_producto) {
        Yii::trace('Enviando correo confirmando el cambio de producto', 'application.helpers.EMail');        
        $producto = Producto::model()->findByPk($id_producto);        
        return self::_enviar($destino, 
                Yii::t('profind', 'Se ha modificado su producto en PROFIND'),
                'notificacion_cambio_producto', array(
                    'email' => $destino, 
                    'producto' => $producto->titulo,
                    'importe' => $producto->coste_mensual,
                ));
    }
    
}
?>
