<?php

/****************************************************************************************
 * DEV: CONTRALORIA DEL ESTADO.
 * MODULO: Prueba
 * PROGRAMADORES.________________________________________________________________________
 * | # | NOMBRE.              | CORREO.                              | TELEFONO.
 * | 1 | Fernando Mendoza     | dt.ait.programador1@cgesucre.gob.ve  | 0424-8942068
 * | 2 |
 * |_____________________________________________________________________________________
 *****************************************************************************************/
class certificadosControlador extends Controlador
{
    private $atCertificados;

    public function __construct()
    {
        parent::__construct();
        Session::metAcceso();
        $this->atIdUsuario = Session::metObtener('idUsuario');
        $this->atIdEmpleado = Session::metObtener('idEmpleado');
        $this->atIdPersona = Session::metObtener('idPersona');
        $this->atNombreUsuario = Session::metObtener('nombreUsuario');
        #se carga el Modelo.
        $this->atCertificados       = $this->metCargarModelo('certificados');
        $this->atBandeja            = $this->metCargarModelo('bandeja');
        $this->atEmpleados          = $this->metCargarModelo('empleados','gestion', 'modRH');
        $this->CedulaEmpleado       = Session::metObtener('cedula_empleado');
        /*$this->atTiposCargosModelo        = $this->metCargarModelo('tiposCargos','maestros');//se carga el modelo tipos de cargos para llenar el select
        $this->atNivelesTiposCargosModelo = $this->metCargarModelo('nivelesTiposCargos','maestros');//se carga el modelo niveles tipos cargo para llenar el select
        $this->atGrupoOcupacional         = $this->metCargarModelo('grupoOcupacional','maestros');
        $this->atSerieOcupacional         = $this->metCargarModelo('serieOcupacional','maestros');
        $this->atGradoSalarial            = $this->metCargarModelo('gradoSalarial','maestros');
        $this->atPasos                    = $this->metCargarModelo('pasos','maestros');*/
    }

    #Metodo Index del controlador Prueba.
    public function metIndex()
    {
		
        $complementosCss = array(
            'DataTables/jquery.dataTables',
            'DataTables/extensions/dataTables.colVis941e',
            'DataTables/extensions/dataTables.tableTools4029',
        );
        $complementoJs = array(
            'jquery-validation/dist/jquery.validate.min',
            'jquery-validation/dist/additional-methods.min',
        );
        $js[] = 'materialSiace/core/demo/DemoTableDynamic';
        $js[] = 'materialSiace/core/demo/Demo';
        $js[] = 'Aplicacion/appFunciones';
        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJsComplemento($complementoJs);
        $this->atVista->metCargarJs($js);
        $this->atVista->assign('certificados',$this->atCertificados->metListarCertificados($this->atIdEmpleado));
        $this->atVista->metRenderizar('certificados');
    }

    public function metMenu()
    {
        $this->atVista->metRenderizar('menu');
    }    



    public function metVerificarCertificado()
    {

        $archivo  = (isset($_FILES['certificado'])) ? $_FILES['certificado'] : null;
        $password = $_POST['pass'];
        $actual   = date('Y');
        $empleado = $this->atIdEmpleado;
        $nombrecrt= $empleado."-".$actual.".crt";
        $ruta = "/home/certificados/".$empleado."/";

        if ($archivo) {

            if (!$almacen_cert = file_get_contents($_FILES['certificado']['tmp_name'])) {
                $resultado = array(
                    'estatus' => 'E1'
                );
                echo json_encode($resultado);
            }

            if (openssl_pkcs12_read($almacen_cert, $info_cert, $password)) {

                $x = openssl_x509_parse($info_cert['cert']);

                $validFrom = date('d-m-Y H:i:s', $x['validFrom_time_t']);
                $validTo   = date('d-m-Y H:i:s', $x['validTo_time_t']);
                /*$validFrom = date('d-m-Y H:i:s', $x['validFrom_time_t']);
                $validTo   = date('d-m-Y H:i:s', $x['validTo_time_t']);*/

                $cedula_certificado = $x['subject']['serialNumber'];
                $aux = explode("-",$cedula_certificado);

                 if($this->CedulaEmpleado == $aux[2]){

                    $resultado = array(
                        'estatus' => 'OK',
                        'resultado' => $info_cert,
                        'f_ini' => $validFrom,
                        'f_fin' => $validTo,
                        'datos' => $x
                    );

                    echo json_encode($resultado);
                   


                 }else{
                    $resultado = array(
                        'estatus' => 'E3'
                    );
                    echo json_encode($resultado);
                 }


                

            } else {
                 $resultado = array(
                    'estatus' => 'E2'
                );
                 echo json_encode($resultado);
 
            }
            

        }



    }



    public function metLeerCertificado()
    {

        #ARCHIVO JAVASCRIPT CON FUNCIONES COMPLEMENTARIAS DEL MODULO
        $js = array('materialSiace/App','Aplicacion/appFunciones','modRH/modRHFunciones','materialSiace/core/demo/DemoFormComponents','materialSiace/core/demo/DemoFormWizard');
        $complementosCss = array(
            'wizard/wizardfa6c'
        );
        $complementoJs = array(
        'wizard/jquery.bootstrap.wizard.min','jquery-validation/dist/jquery.validate.min','jquery-validation/dist/additional-methods.min'
        );

        $this->atVista->metCargarCssComplemento($complementosCss);
        $this->atVista->metCargarJsComplemento($complementoJs);
        $this->atVista->metCargarJs($js);
        $this->atVista->assign('empleado',$this->atIdEmpleado);
        $this->atVista->metRenderizar('formulario');        

    }


    public function metGenerarCertificado()
    {


            $formTxt   = $this->metObtenerTexto('form','txt');
            $formInt   = $this->metObtenerInt('form','int');
            $formForm  = $this->metObtenerFormulas('form','formula');

            if(!empty($formInt)) {
                foreach ($formInt as $tituloInt => $valorInt) {
                    if (!empty($formInt[$tituloInt])) {
                        $validacion[$tituloInt] = $valorInt;
                    } else {
                        $validacion[$tituloInt] = '';
                    }
                }
            }
            if(!empty($formTxt)) {
                foreach ($formTxt as $tituloTxt => $valorTxt) {
                    if (!empty($formTxt[$tituloTxt])) {
                        $validacion[$tituloTxt] = $valorTxt;
                    } else {
                        $validacion[$tituloTxt] = '';

                    }
                }
            }
            if(!empty($formForm)) {
                foreach ($formForm as $tituloTxt => $valorTxt) {
                    if (!empty($formForm[$tituloTxt])) {
                        $validacion[$tituloTxt] = $valorTxt;
                    } else {
                        $validacion[$tituloTxt] = '';

                    }
                }
            }

            if(!isset($validacion['num_flag_password'])){
                    $validacion['num_flag_password']=0;
                }

            $archivo  = (isset($_FILES['imagen_f'])) ? $_FILES['imagen_f'] : null;
            $r_certificado  = (isset($_FILES['certificado'])) ? $_FILES['certificado'] : null;

            //array de datos
            $datos = array(
                'fec_valido_desde' => $validacion['fec_valido_desde'], 
                'fec_valido_hasta' => $validacion['fec_valido_hasta'], 
                'num_flag_password'=> $validacion['num_flag_password'], 
                'fk_rhb001_num_empleado' => $validacion['fk_rhb001_num_empleado'], 
                'ind_cedula' => $validacion['ind_cedula'], 
                'ind_organismo'=> $validacion['ind_organismo'], 
                'ind_dependencia'=> $validacion['ind_dependencia'], 
                'ind_funcionario'=> $validacion['ind_funcionario'], 
                'ind_email'=> $validacion['ind_email'], 
                'ind_cargo'=> $validacion['ind_cargo'], 
                'num_estatus'=> 1,
                'data_certificado' => $r_certificado,
                'archivo' => $archivo,
                'pass' => $_POST['pass'],
                'nombre_f' => $validacion['nombre_f'],
                'razon_f' => $validacion['razon_f'],
                'ubicacion_f' => $validacion['ubicacion_f']
            );

            //var_dump($datos);

            $id = $this->atCertificados->metRegistrarCertificado($datos);
            if(is_array($id)){
                $validacion['status'] = 'error';
                echo json_encode($validacion);
                exit;
            }else{
                echo json_encode($validacion);
                exit;
            }



    }



    public function metFirmarPdf()
    {

        $empleado = $_POST['empleado'];
        $procedimiento = $_POST['procedimiento'];
        $idProcedimiento = $_POST['idProcedimiento'];
        $documento = $_POST['documento'];
        $pagina    = $_POST['pagina'];
        $nombre_crt = $_POST['nombre_crt'];
        $firma = $_POST['firmas'];
        $email_crt = $_POST['email_crt'];
        $hor = $_POST['horizontal'];
        $ver = $_POST['vertical'];
        $alt = $_POST['alto'];
        $anc = $_POST['ancho'];

        //busco los datos de la firma
        $datosFirma = $this->atCertificados->metDatosFirma($firma);

        //ruta del archivo
        $_r_doc = "publico/archivos_firma/".$procedimiento."/".$documento;

        //objeto de la clase firma
        $this->metObtenerLibreria('firmaElectronica', 'modFE');
        $pdf = new firma();

        //ruta del certificado
        $certificado = 'file://certificados/'.$empleado."/".$nombre_crt;


        // informacion de la firma seleccionada
        $info = array(
            'Name' => $datosFirma['firmante'],
            'Location' => $datosFirma['ind_ubicacion'],
            'Reason' => $datosFirma['ind_razon'],
            'ContactInfo' => $email_crt
            );        

       
        //ruta de la imagen
        $imagen_firma = 'certificados/'.$empleado."/".$datosFirma['ind_imagen'];

        $pageCount = $pdf->setSourceFile($_r_doc);
        for ($i = 1; $i <= $pageCount; $i++) {
            $tplIdx = $pdf->importPage($i,'/MediaBox');
            $pdf->AddPage();
            $pdf->useTemplate($tplIdx);
            
            if($i == $pagina){
                // set document signature   
                $pdf->setSignature($certificado, $certificado, '', '', 3, $info);
                // create content for signature (image and/or text)
                $pdf->Image($imagen_firma, 146, 150, 38, 18, 'PNG');
              

            }
         
        }

        //print_r($pdf->getPageDimensions());
        //print_r($pdf->getPageHeight());
        $aux = explode(".",$documento);
        $nom = $aux[0];
        $ext = $aux[1];
        $archivo = "publico/archivos_firma/".$procedimiento."/".$nom."_Firmado.".$ext;



        $pdf->Output($archivo,'F');

        //use librerias\Fpdi;

        /*require_once LIBRERIA_TCPDF;
        require_once LIBRERIA_FPDI;


        class Pdf extends Fpdi\TcpdfFpdi
        {



        }

        $pdf = new Pdf();

        //$certificado = 'file://certificados/'.$empleado."/".fernando.crt';

        // set additional information
        $info = array(
            'Name' => 'Fernando Mendoza',
            'Location' => 'Cumana Estado Sucre',
            'Reason' => 'Firmando Documento de Prueba con TCPDF y FPDI',
            'ContactInfo' => 'dt.jefe.ait@cgesucre.gob.ve',
            );


        $pageCount = $pdf->setSourceFile($_r_doc);
        for ($i = 1; $i <= $pageCount; $i++) {
            $tplIdx = $pdf->importPage($i,'/MediaBox');
            $pdf->AddPage();
            $pdf->useTemplate($tplIdx);
            
            if($i == $pagina){
                // set document signature   
                $pdf->setSignature($certificate, $certificate, '', '', 2, $info);
                // create content for signature (image and/or text)
                $pdf->Image('firma/firma.png', 30, 205, 15, 15, 'PNG');

            }
         
        }*/

    }   

}
