<?php
date_default_timezone_set('Europe/Madrid');
/////////////////////////CONEX/////////////////////////////////////////////////
include("../../../assets/conn/conexion.php"); 
include("funcSignLogalty.php");
$bd_conn = new connexion($host_avanws,$user_avanws,$pass_avanws,$name_avanws,$port_avanws);
$bd_conn->query("SET NAMES 'utf8'");
/////////////////////////VARIABLES/////////////////////////////////////////////
$xml_docs_group = '';
$xml_docs_content = '';
$control = 1;
$cli_user = $_SERVER["HTTP_CLIENT_ID"];
$fecha = date("YmdHis");
$id_doc_url = ! empty($uri[4]) ? $uri[4] : '';
$id_conctact = ! empty($uri[5]) ? $uri[5] : '';
$enviado = ! empty($uri[6]) ? $uri[6] : '';
$codigo_logalty = get_id_unico();
/////////////////////////ACCIONES//////////////////////////////////////////////
if ( $id_doc_url !== '' AND $id_conctact !== '' AND $enviado !== '' ) {
    $cod_param = 'URL_BASE';
    $host = consultarUrlLogalty($bd_conn, $cod_param);
    //$host = 'https://www.demo.logalty.es/lgt/lgtbus/public/IncomingService'; 
    chdir('system/controllers/signs/');
    $datos_contacto = consultarContacto($bd_conn, $id_conctact);
    /////////////////////////CONSTRUCCION XML DE DOCUMENTOS/////////////////////
    $id_doc_array = explode("_", $id_doc_url );
    foreach($id_doc_array as $id_doc){
        //CARGO EL DOCUMENTO////////////////////////////////////////////////////
        $datos_doc = consultarDocumento($bd_conn, $id_doc);
        $doc_name = strtr($datos_doc["NOMBRE"], " ", "_");
        $doc_part = $datos_doc["PARTES"];
        $doc_version = 0;
        $file_binary = "";
        for ($i=1; $i<=$doc_part; $i++) {
            $fichero = docContent($bd_conn, $datos_doc["SUFIJO"], $id_doc, $i, $doc_version);
            $file_binary .= base64_encode($fichero["FICHERO"]);
        }
        $xml_docs_group .= '
            <pt:binarycontentgroupmember binary-content-id="'.$control.'"/>
        ';
        $xml_docs_content .= '
            <pt:binarycontentitem binary-content-id="'.$control.'" content-transfer-encoding="base64" file-name="'.$doc_name.'" tokenText="" type="application/pdf">
                '.$file_binary.'
            </pt:binarycontentitem>
        ';
        $control ++;
    }
    $correo_enviado = consultarCorreoContacto($bd_conn, $enviado);
    /////////////////////////CONSTRUCCION XML//////////////////////////////////
    include("xmlSignLogalty.php");
    /////////////////////////CERTIFICADO DEL XML///////////////////////////////
    shell_exec( 'xmlsec1  --sign --output signed.xml --pkcs12 ./certificado/certificado.p12 --pwd logalty request_sign.xml');
    //se elimina primera línea del XML que contiene <?xml version="1.0" encoding="utf-8"?\>
    shell_exec( 'sed \'1d\' signed.xml > signed_send.xml');
    shell_exec( 'rm signed.xml');
    //se añade cabeceras SOAP
    shell_exec( 'echo \'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body>\' > SOAP.xml ');
    shell_exec( 'cat SOAP.xml signed_send.xml > signed_SOAP.xml');
    shell_exec( 'rm signed_send.xml');
    shell_exec( 'rm SOAP.xml');
    shell_exec( 'sed -e \'$a </soapenv:Body> </soapenv:Envelope>\' signed_SOAP.xml > signed_SOAP_send.xml');
    shell_exec( 'rm signed_SOAP.xml');
    //se obtiene el XML firmado
    $input_data = file_get_contents("signed_SOAP_send.xml");
    $filename_in = 'PHP-in.txt';
    $filenameOUT = 'PHP-out.txt';
    $filenamePOST = 'PHP-post.txt';
    $LOG = 'PHP.log';
    //TRAZA  DE IN DEL XML=====================================================
    $handle = fopen($filename_in, 'w');
    if ( $handle ){
        $writelog = fwrite($handle, $input_data) ;
        fclose($handle);
    }  
    //HAGO EL POST DE LA FIRMA=================================================
    $request = 'POST';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL ,$host);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_HTTPHEADER,array('User-Agent: curl/7.15.5','Accept: */*','Content-Type: text/xml; charset=UTF-8','Content-Length: '.strlen($input_data)));
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT,5);
    curl_setopt($curl, CURLOPT_TIMEOUT,30);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST,$request);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $input_data);
    $result = curl_exec($curl);
    //TRAZA DEL POST Y RESPUESTA================================================
    $handle = fopen($filenamePOST, 'w');
    if ( $handle ){
        $writelog = fwrite($handle, $input_data) ;
        fclose($handle);
    }
    $handle = fopen($filenameOUT, 'w');
    if ( $handle ){
        $writelog = fwrite($handle, $result) ;
        fclose($handle);
    }
    //INTERPRETO LA RESPUESTA=======================================================
    $doc = new DOMDocument();
    libxml_use_internal_errors(true);
    $doc->loadHTML($result);
    libxml_clear_errors();
    $xml = $doc->saveXML($doc->documentElement);
    $xml = simplexml_load_string($xml);
    $response = $xml->body->envelope->body->response->result;
    //HAGO EL REGISTRO EN EL TAMPORAL DE FIRMADO===================================
    $documento = 1;
    foreach($id_doc_array as $id_doc){
        $codigo = get_id_unico();
        $clave_doc = $id_doc;
        $estado = 1;
        $enviado = $enviado;
        $guid = (string)$response->guid;
        $contacto = $id_conctact;
        $result_xml = $result;
        registroLogaltyFirmas($bd_conn, $codigo, $clave_doc, $estado, $enviado, $guid, $contacto, $result_xml, $documento );
        $documento ++;
    }
    $data[] = array ( 
        "status" => "OK",
        "code" => (string)$response->main,
        "message" => (string)$response->reason,
        "guid" => (string)$response->guid
    );
}else{
    $data[] = array ( 
        "status" => "NOT OK",
        "message" => 'idDoc or idContact is missing'
    );
}
//$response ='<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><response xmlns=\"urn:logalty:schemas:core:1.0\"><result><main>0000</main><guid>001001-9996-000000001853020.par</guid><reason>Document Accepted</reason></result></response></soap:Body></soap:Envelope>';
header("Content-type: application/json; charset=utf-8");
echo json_encode($data);
 
?>