<?php
require_once(dirname(__FILE__). '/../phpmailer/class.phpmailer.php');

define('INI_CHAR', '{'); // Caracter de inicio
define('END_CHAR', '}'); // Caracter de fin

/**
 * CN_TABLE engulfs most of the services required for data mainuplation by other
 * classes
 *
 * @author narange
 */
class SqlTablePeer {

    /**
     * Metodo para retornar string de fecha sistema
     *
     * @return string 
     */
    public static function fechaSistema() {

        //fecha del sistema
        $anho_completo = date('Y'); //anho completo cuatro digitos
        $mes = date('m'); //mes con dos digitos
        $dia = date('d'); //dia con dos digitos
        $fecha_sistema = $anho_completo . '-' . $mes . '-' . $dia;

        return $fecha_sistema;
    }

    /**
     * Metodo para retornar el anho - mes anterior
     *
     * @return string
     */
    public static function fechaAnterior($anho, $mes) {

        //inicializar variables
        $fechaAnterior = array();
        $anho_ant = 0;
        $mes_ant = 0;

        /*
         * obtener fecha siguiente anho - mes
         */

        //valida primer periodo
        if ($mes == 1) {

            $anho_ant = $anho - 1;
            $mes_ant = 12;
        } else {

            $anho_ant = $anho;
            $mes_ant = $mes - 1;
        }

        $fechaAnterior = array(
            'id_anhos' => $anho_ant,
            'id_meses' => $mes_ant
        );


        return $fechaAnterior;
    }

    /**
     * Metodo para retornar el anho - mes siguiente
     *
     * @return string
     */
    public static function fechaSiguiente($anho, $mes) {

        //inicializar variables
        $fechaSiguinte = array();
        $anho_sig = 0;
        $mes_sig = 0;

        /*
         * obtener fecha siguiente anho - mes
         */

        //valida ultimo periodo
        if ($mes == 12) {

            $anho_sig = $anho + 1;
            $mes_sig = 1;
        } else {

            $anho_sig = $anho;
            $mes_sig = $mes + 1;
        }

        $fechaSiguinte = array(
            'id_anhos' => $anho_sig,
            'id_meses' => $mes_sig
        );


        return $fechaSiguinte;
    }

    /**
     * Metodo que ejecuta un insert de la sentencia sql
     * conexion con la base de datos websafiERP
     *
     * @param <type> $sql
     * @return <type>
     */
    public static function executeOCI_SQL_Add($sql) {

        $logger = sfContext::getInstance()->getLogger();
//    $logger->info("Sql de insert: " . $sql);

        $exito = true;

        /*
         * Variables globales del proyecto
         */
        $ip = sfConfig::get('app_ip');
        $user = sfConfig::get('app_usuarioERP');
        $pass = sfConfig::get('app_claveERP');

        /*
         * Conexion a la base de datos
         */
        //base de datos websafiERP
        $conn = oci_connect($user, $pass, $ip);

        //validacion conexion
        if (!$conn) {
            $exito = false;
            $e = oci_error();
//        print htmlentities($e['message']);
            $logger->info("error conn:" . $e['message']);
//            exit;
        }

        $stid = oci_parse($conn, $sql);
        //validar errores
        if (!$stid) {
            $exito = false;
            $e = oci_error($conn);
            $logger->info("error stid:" . $e['message']);
//            exit;
        }

        $exec = oci_execute($stid);
        //validar errores
        if (!$exec) {
            $exito = false;
            $e = oci_error($stid);

            $logger->info("error exec:" . $e['message']);

//        echo htmlentities($e['message']);
//        echo "<pre>";
//        echo htmlentities($e['sqltext']);
//        printf("\n%" . ($e['offset'] + 1) . "s", "^");
//        echo "</pre>";
//            exit;
        } else {
//        echo "Registro insertado correctamente: " . $sql . "<br>";
            $logger->info("Informacion: " . "Registro insertado correctamente: " . $sql);
        }


        //cerrar la conexion en la base de datos
        oci_close($conn);

        //returna array de consulta
        return $exito;
    }

    /**
     * Metodo que ejecuta una sentencia sql y retorna la consulta en un array
     * conexion con la base de datos websafiERP
     *
     * @param <type> $sql
     * @return <type>
     */
    public static function executeOCI_SQL_List($sql) {

        $logger = sfContext::getInstance()->getLogger();
//    $logger->info("Sql de insert: " . $sql);

        /*
         * Variables globales del proyecto
         */
        $ip = sfConfig::get('app_ip');
        $user = sfConfig::get('app_usuarioERP');
        $pass = sfConfig::get('app_claveERP');

        /*
         * Conexion a la base de datos
         */
        //base de datos  websafiERP
        $conn = oci_connect($user, $pass, $ip); //se debe verificar cambio de ip para uso fuera de la red interna
        //validacion conexion
        if (!$conn) {
            $e = oci_error();
            $logger->info($e['message']);
//            print htmlentities($e['message']);
//            exit;
        }
        $logger->info($sql);
        $stid = oci_parse($conn, $sql);
        $exec = oci_execute($stid);

//    echo var_dump($stid);
//    print_r($stid);
//    die();

        $records = array();

        //validar ejecucion
        if ($exec && $stid) {
            while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) {
//        print_r($row);
//            echo "\n" . var_dump($row) . "\n";
                $records[] = $row;
            }
        } else {
            //mensajes de error
            $logger->info("Se produjo un error");
            $e = oci_error($conconexion);
            $logger->info($e['message']);
//            exit;
        }

        //cerrar la conexion en la base de datos
        oci_close($conn);

        //returna array de consulta
        return $records;
    }

    /**
     * Metodo que ejecuta una sentencia sql y retorna la consulta en un array
     * conexion con la base de datos websafiERP
     *
     * @param <type> $sql
     * @return <type>
     */
    public static function executeOCI_SQL_List_Task($sql) {

        $logPath = sfConfig::get('sf_log_dir') . '/alertas.log';
        $custom_logger = new sfFileLogger(new sfEventDispatcher(), array('file' => $logPath));
        $custom_logger->info("The [alarmas:envioCorreo|INFO] Metodo de envio correo alarmas.\n");

        /*
         * Variables globales del proyecto
         */
                /*
         * Variables globales del proyecto
         */
        $array = sfYaml::load(dirname(__FILE__) . '/../../apps/frontend/config/app.yml');
        foreach ($array as $routeName => $routeData) {
            foreach ($routeData as $keyData => $valueData) {
                foreach ($valueData as $key => $value) {     
                    $custom_logger->info($key."::val::".$value); 
                    if($key == 'ip'){   
                        $ip = $value;        
                    }
                    if($key == 'usuarioERP'){   
                        $user = $value;        
                    }
                    if($key == 'claveERP'){   
                        $pass = $value;        
                    }
                }
            }
        }

        /*
         * Conexion a la base de datos
         */
        //base de datos  websafiERP
        $conn = oci_connect($user, $pass, $ip); //se debe verificar cambio de ip para uso fuera de la red interna
        //validacion conexion
        if (!$conn) {
            $e = oci_error();
            $custom_logger->info($e['message']);
//            print htmlentities($e['message']);
//            exit;
        }
        $custom_logger->info($sql);
        $stid = oci_parse($conn, $sql);
        $exec = oci_execute($stid);

//    echo var_dump($stid);
//    print_r($stid);
//    die();

        $records = array();

        //validar ejecucion
        if ($exec && $stid) {
            while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) {
//        print_r($row);
//            echo "\n" . var_dump($row) . "\n";
                $records[] = $row;
            }
        } else {
            //mensajes de error
            $custom_logger->info("Se produjo un error");
            $e = oci_error($conconexion);
            $custom_logger->info($e['message']);
//            exit;
        }

        //cerrar la conexion en la base de datos
        oci_close($conn);

        //returna array de consulta
        return $records;
    }

    //Para llamdo desde cron, carpeta task en el proyecto - 20160926
    public static function envioEmailTaks($subject, $from, $address, $body, $addReplyTo = false, $ruta = null, $attachment = null) {
        
        
        $logPath = sfConfig::get('sf_log_dir') . '/alertas.log';
        $custom_logger = new sfFileLogger(new sfEventDispatcher(), array('file' => $logPath));
        $custom_logger->info("The [alarmas:envioCorreo|INFO] Metodo de envio correo alarmas.\n");

        //$custom_logger->info( "sf_log_dir::".sfConfig::get('sf_log_dir') );
        //$custom_logger->info( dirname(__FILE__). '/../phpmailer/class.phpmailer.php' );
        //die();


        /*
         * Variables globales del proyecto
         */
        $array = sfYaml::load(dirname(__FILE__) . '/../../apps/frontend/config/app.yml');
        foreach ($array as $routeName => $routeData) {
            foreach ($routeData as $keyData => $valueData) {
                foreach ($valueData as $key => $value) {     
                    $custom_logger->info($key."::val::".$value); 
                    if($key == 'sMTPSecure'){   
                        $sMTPSecure = $value;        
                    }
                    if($key == 'host'){   
                        $host = $value;        
                    }
                    if($key == 'sMTPAuth'){   
                        $sMTPAuth = $value;        
                    }
                    if($key == 'port'){   
                        $port = $value;        
                    }
                    if($key == 'username'){   
                        $username = $value;        
                    }
                    if($key == 'password'){   
                        $password = $value;        
                    }
                    if($key == 'email_envio'){   
                        $email_envio = $value;        
                    }
                }
            }
        }

        $custom_logger->info("sMTPSecure::" . $sMTPSecure);
        $custom_logger->info("host::" . $host);
        $custom_logger->info("sMTPAuth::" . $sMTPAuth);
        $custom_logger->info("port::" . $port);
        $custom_logger->info("username::" . $username);
        $custom_logger->info("password::" . $password);
        $custom_logger->info("email_envio::" . $email_envio);
        //die();

        /**
         * PHPMailer
         */
        // Instanciar PHPMailer una primera Vez
        $mail = new PHPMailer(); // defaults to using php "mail()"
        /*
         * SGC
         */
        $mail->IsSMTP(); // telling the class to use SMTP
        $mail->SMTPSecure = $sMTPSecure;//tsl o ssl
        $mail->Host = $host;      // SMTP server
//            $mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
        // 1 = errors and messages
        // 2 = messages only
        $mail->SMTPAuth = $sMTPAuth;                  // enable SMTP authentication
        $mail->Port = $port;                    // set the SMTP port for the GMAIL server
        $mail->Username = $username;              // SMTP account username
        $mail->Password = $password;           // SMTP account password
        $custom_logger->info($from."::email_envio::" . $email_envio);
        $mail->SetFrom($email_envio, utf8_decode($from));
        //$mail->SetFrom('websafi@sgc.gov.co', 'prueba');
        //$mail->From = "websafi@sgc.gov.co";


        if($addReplyTo){
            //$mail->AddReplyTo($email_envio, utf8_decode($from));
            $mail->AddAddress($email_envio, utf8_decode($from));
        }

        $mail->Subject = utf8_decode($subject);

        /**
         * Recorre las direcciones de correo del array $address
         */
        foreach ($address as $value) {
            //$mail->AddAddress("websafi@sgc.gov.co", "websafi");
            if(array_key_exists('oculto', $value)){
                if($value["oculto"]){
                    $mail->AddBCC($value["correo"], $value["username"]);
                    //$mail->AddBCC('dortega@sofhouse.net', $value["username"]);
                }else{
                    $mail->AddAddress($value["correo"], $value["username"]);
                    //$mail->AddAddress('websafi@sgc.gov.co', $value["username"]);
                }
            }else{
                $mail->AddAddress($value["correo"], $value["username"]);
                //$mail->AddAddress('websafi@sgc.gov.co', $value["username"]);
            }
        }

        $body_html = <<<EOD
<html>
    <body> 
        $body<br/><br/>
    </body>
</html> 
EOD;

        //$mail->AltBody = "This is the body in plain text for non-HTML mail clients"; // optional, comment out and test

        $mail->MsgHTML($body_html);

        /*
         * Valida que si tiene $ruta
         */
        if (!is_null($ruta)) {
            //$mail->AddAttachment("$ruta/FacturaVenta$factura.pdf", "Factura.pdf");      // attachment
            $mail->AddAttachment($ruta . $attachment, $attachment);      // attachment
        }

        /*
         *  Enviar el correo
         */
        if (!$mail->Send()) {
            $custom_logger->info("Mailer Error: " . $mail->ErrorInfo . "<br/>");
            return false;
        } else {
            $custom_logger->info("Correo enviado");
        }

        /*
         * Limpiar datos del correo
         */
        $mail->ClearAllRecipients();
        $mail->ClearAttachments();

        return true;
    }

    /**
     * Metodo de envio de correo 
     * 
     * @param type $subject
     * @param type $from
     * @param type $address
     * @param type $body
     * @param type $ruta
     * @param type $attachment
     * @return boolean
     */
    public static function envioEmail($subject, $from, $address, $body, $addReplyTo = false, $ruta = null, $attachment = null) {

        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro envioEmail");

        //echo "subject::".$subject;
        //die();


        /*
         * Variables globales del proyecto
         */
        $sMTPSecure = sfConfig::get('app_sMTPSecure');
        $host = sfConfig::get('app_host');
        $sMTPAuth = sfConfig::get('app_sMTPAuth');
        $port = sfConfig::get('app_port');
        $username = sfConfig::get('app_username');
        $password = sfConfig::get('app_password');
        $email_envio = sfConfig::get('app_email_envio');
        $logger->info("sMTPSecure::" . $sMTPSecure);
        $logger->info("host::" . $host);
        $logger->info("sMTPAuth::" . $sMTPAuth);
        $logger->info("port::" . $port);
        $logger->info("username::" . $username);
        $logger->info("password::" . $password);
        $logger->info("email_envio::" . $email_envio);

        /**
         * PHPMailer
         */
        // Instanciar PHPMailer una primera Vez
        $mail = new PHPMailer(); // defaults to using php "mail()"
        /*
         * SGC
         */
        $mail->IsSMTP(); // telling the class to use SMTP
        $mail->SMTPSecure = $sMTPSecure; //tsl o ssl
        $mail->Host = $host;      // SMTP server
//            $mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
        // 1 = errors and messages
        // 2 = messages only
        $mail->SMTPAuth = $sMTPAuth;                  // enable SMTP authentication
        $mail->Port = $port;                    // set the SMTP port for the GMAIL server
        $mail->Username = $username;              // SMTP account username
        $mail->Password = $password;           // SMTP account password
        $mail->SetFrom($email_envio, utf8_decode($from));


        if($addReplyTo){
            //$mail->AddReplyTo($email_envio, utf8_decode($from));
            $mail->AddAddress($email_envio, utf8_decode($from));
        }

        $mail->Subject = $subject;

        /**
         * Recorre las direcciones de correo del array $address
         */
        foreach ($address as $value) {
            //$mail->AddAddress("websafi@sgc.gov.co", "websafi");
            $mail->AddAddress($value["correo"], $value["username"]);
        }

        $body_html = <<<EOD
<html>
    <body> 
        $body<br/><br/>
    </body>
</html> 
EOD;

        //$mail->AltBody = "This is the body in plain text for non-HTML mail clients"; // optional, comment out and test

        $mail->MsgHTML($body_html);

        /*
         * Valida que si tiene $ruta
         */
        if (!is_null($ruta)) {
            //$mail->AddAttachment("$ruta/FacturaVenta$factura.pdf", "Factura.pdf");      // attachment
            $mail->AddAttachment($ruta . $attachment, $attachment);      // attachment
        }

        /*
         *  Enviar el correo
         */
        if (!$mail->Send()) {
            $logger->info("Mailer Error: " . $mail->ErrorInfo . "<br/>");
            return false;
        } else {
            $logger->info("Correo enviado");
        }

        /*
         * Limpiar datos del correo
         */
        $mail->ClearAllRecipients();
        $mail->ClearAttachments();

        return true;
    }

}

?>
