<?php
//include_once (ROOT . FOLDER_CORE .'/auth.php'); 
$auth = 1;
if ($auth == 1) {
    if (isset($_POST["codExp"])) {
        if ( $_POST["codExp"] !== '' ) {
            //VARIABLES========================================================
            $error = 0;
            $alias_doc = '';
            $error_msg = '';
            $codigo_exp = trim($_POST["codExp"]);
            $storeFolder = './assets/temporals/';
            //LIMPIO EL TEMPORAL-----------------------------------------------------------
            $dir = opendir('./assets/temporals/');
            while($f = readdir($dir))
            {
            if((time()-filemtime('./assets/temporals/'.$f) > 5) and !(is_dir('./assets/temporals/'.$f)))
            unlink('./assets/temporals/'.$f);
            }
            //=================================================================
            //VALIDO SI SE HA ENVIADO PREVIAMENTE==============================
            //=================================================================
            $clave_exp = validaExpediente($bd_conn, $codigo_exp);
            if ( $clave_exp !== '' and $clave_exp !== NULL ) {
                //VALIDO EL TIPO DE DOCUMENTO ENVIADO PARA UBICAR EL ALIAS-----
                switch (trim($_POST["docTipo"])) {
                    case 'PC'://PERMISO CIRCULACION
                        $alias_doc = 'PC_DEFINITIVO';
                        $error = 0;
                        break;

                    case 'AP'://AUTORIZACION PROVISIONAL
                        $alias_doc = 'PROVISIONAL';
                        $error = 0;
                        break;

                    case 'FTP':// FICHA TECNICA PROVISIONAL
                        $alias_doc = 'FT_PROVISIONAL';
                        $error = 0;
                        break;

                    case 'FT'://FICHA TECNICA
                        $alias_doc = 'FICHA_TECNICA';
                        $error = 0;
                        break;

                    case 'IM'://IMPUESTO MUNICIPAL
                        $alias_doc = 'IMPUESTO_MUNICIPAL';
                        $error = 0;
                        break;

                    case 'I576'://IMPUESTO 576
                        $alias_doc = 'IMPUESTO_576';
                        $error = 0;
                        break;

                    case 'PTC_VO'://PTC_VO
                        $alias_doc = 'PTC_VO';
                        $error = 0;
                        break;

                    case 'M620'://M620
                        $alias_doc = 'M620';
                        $error = 0;
                        break;
                    
                    default:
                        $error = 1;
                        break;
                }
                if ( $error == 0 ) {
                    $datos_doc = consultaClaveDocumento($bd_conn, $clave_exp, $alias_doc);
                    $clave_doc = $datos_doc["CLAVE"];
                    if ( $clave_doc !== '' AND $clave_doc !== NULL ) {
                        if (isset($_FILES['docFichero']) AND $_FILES['docFichero'] !== '' ) {
                            //
                            $entrada = get_id_unico();
                            $nombre = $datos_doc["NOMBRE"];
                            $nombre = trim($nombre);
                            $ext = get_extension($_FILES['docFichero']['name']);
                            $new_name = $datos_doc["NOMBRE"] . '.' . $ext;
                            $imagen_temporal  = $storeFolder . $new_name;
                            $tamano = $_FILES['docFichero']['size'];
                            $tempFile = $_FILES['docFichero']['tmp_name'];      
                            unlink($imagen_temporal);
                            move_uploaded_file($tempFile,$imagen_temporal);
                            $fp = fopen($imagen_temporal, 'r');
                            $data_file = fread($fp, filesize($imagen_temporal));
                            fclose($fp);
                            $data_file = mysqli_real_escape_string($bd_conn, $data_file);
                            $max_fichero = maxTamanoFichero($bd_conn);
                            $tabla_sufijo = tablaDestDisp($bd_conn, $tamano, $max_fichero, $name_avanws);
                            if ($tabla_sufijo == "") {
                                $sufijo = substr(get_id_unico(),0, 14);
                                $tabla_sufijo = "FICHEROS_" . $sufijo;
                                $sql = "CREATE TABLE ". $tabla_sufijo . " LIKE FICHEROS_PATRON";
                                $base = $bd->query(strtoupper($sql));
                            }else{
                                    $sufijo = substr($tabla_sufijo, 9, 14);
                            }
                            $parte = 1;
                            if ( $tamano > 16777216 ) {
                                    $array = str_split($data_file, 16777216);
                                    foreach ($array as $key => $value) {
                                        $fichero_ok = subirContenido($bd_conn, $clave_doc, $entrada, $parte, $sufijo, $value, $tamano, strlen($value));
                                        $parte++;
                                    }
                            }else{
                                    $entrada = get_id_unico();
                                    $fichero_ok = subirContenido($bd_conn, $clave_doc, $entrada, $parte, $sufijo, $data_file, $tamano, strlen($data_file));
                            }
                            if ($parte == 1) {
                                $partes = $parte;
                            }else{
                                $partes = $parte -1;
                            }
                            if ($fichero_ok){
                                docBibliotecaElementos($bd_conn, $clave_doc, $new_name, $ext, $tamano, $partes, $sufijo);
                                historialLog($bd_conn, $clave_doc, $new_name, $tamano);
                            }
                            //=========================================================================
                            //ACTUALIZO LA ETIQUETA DE CONTROL DE LLENADO DE DOC PENDIENTE=============
                            define('ALIAS_CAMPO_ESQUEMA', 'FILLED_STATUS');
                            define('VALOR_ETIQUETA', 2);
                            define('DESC_ETIQUETA', '2.- RELLENADO');
                            $campos_filled = consultarCamposFilled($bd_conn, ALIAS_CAMPO_ESQUEMA);
                            while ($row = $campos_filled->fetch_object()){
                                if ( $row->CODIGO != '') {
                                    $etq_exist = validoExistenciaEtiqueta($bd_conn, $clave_doc, $row->ESQUEMA, $row->CODIGO );
                                    if ($etq_exist == 1) {
                                        updateStatusFirmaDocumento($bd_conn, VALOR_ETIQUETA, DESC_ETIQUETA, $clave_doc, $row->ESQUEMA, $row->CODIGO); 
                                    }elseif ($etq_exist == 0) {
                                        $codigo_etq = get_id_unico();
                                        $padre_etq = consultarPadreEtiquetaStatus($bd_conn, $clave_doc, $row->ESQUEMA);
                                        creaRegistroEtiqueta($bd_conn, $codigo_etq, $clave_doc, DESC_ETIQUETA,  $row->LISTA, VALOR_ETIQUETA, $row->CODIGO, $row->ESQUEMA, $padre_etq, $row->ORDEN);
                                    }
                                }
                            }
                            //RESPUESTA
                            $data[] = array ( 
                                "Response" => array ( 
                                    "status" => "ok",
                                    "code" => "200",
                                    "docID" => $clave_doc
                                )
                            );
                        }else{
                            //RESPUESTA
                            $data[] = array ( 
                                "Response" => array ( 
                                    "status" => "error",
                                    "code" => "403",
                                    "msgExpediente" => 'La variable docFichero no seh aenviado o no posee contenido'
                                )
                            );
                        }
                    }else{
                        //RESPUESTA
                        $data[] = array ( 
                            "Response" => array ( 
                                "status" => "error",
                                "code" => "402",
                                "msgExpediente" => 'El expediente no posee este documento como pendiente'
                            )
                        );
                    }
                }else {
                    //RESPUESTA
                    $data[] = array ( 
                        "Response" => array ( 
                            "status" => "error",
                            "code" => "401",
                            "msgExpediente" => 'docTipo no encontrado'
                        )
                    );
                }               
            }else{
                $data[] = array ( 
                    "Response" => array ( 
                        "status" => "error",
                        "code" => "400",
                        "msgExpediente" => 'Expediente no encontrado'
                    )
                );
            } 
        }else {
            $data[] = array ( 
                "status" => "error",
                "code" => "400",
                "message" => "Requiere enviar un Código de Expediente"
            );
        }          
    }else {
        $data[] = array ( 
            "status" => "error",
            "code" => "400",
            "message" => "Requiere enviar un Código de Expediente"
        );
    }
}elseif ($auth == 0) {
    $data[] = array ( 
        "status" => "unauthorized_client",
        "message" => "Invalid authorization token"
    );
}
header("Content-type: application/json; charset=utf-8");
echo json_encode($data);
//=============================================================================
//FUNCIONES====================================================================
//=============================================================================
function updateStatusFirmaDocumento($bd, $cod_new_status, $desc_new_status, $clave_doc, $cod_esqumema, $cod_campo_esq)
{
    $query = "  UPDATE BIBLIOTECA_ETIQUETAS
                SET ETIQUETA = $cod_new_status, DESCRIPCION = '$desc_new_status'
                WHERE CLAVE = '$clave_doc' AND ESQUEMA = $cod_esqumema AND GRUPOE = $cod_campo_esq";
    mysqli_query($bd, $query);
}
function creaRegistroEtiqueta($bd, $codigo_etq, $clave_doc, $desc_etq, $grupo, $etiqueta_lista, $cod_etqueta, $esquema, $padre, $orden)
{
    $query = "  INSERT INTO BIBLIOTECA_ETIQUETAS (CODIGO, CLAVE, DESCRIPCION, GRUPO, ETIQUETA, GRUPOE, ESQUEMA, PADRE, ORDEN, FECHA)
                VALUES ( '$codigo_etq', '$clave_doc', '$desc_etq', $grupo, $etiqueta_lista, $cod_etqueta, $esquema, '$padre', $orden, now() )";
    mysqli_query($bd, $query);
}
function consultarPadreEtiquetaStatus($bd, $clave_doc, $cod_esqumema)
{
$sql = "SELECT DISTINCT BE.CODIGO
        FROM BIBLIOTECA_ETIQUETAS BE 
        WHERE BE.CLAVE = '$clave_doc' AND BE.PADRE = '' AND BE.GRUPOE = 1 AND BE.ESQUEMA = $cod_esqumema LIMIT 1";
$base = $bd->query($sql);
$result = mysqli_fetch_array($base);
$correo = $result['CODIGO'];
return $correo;
}
function validoExistenciaEtiqueta($bd, $clave_doc, $cod_esqumema, $cod_campo_esq )
{
$sql = "SELECT COUNT(E.CODIGO) AS TOTAL
        FROM BIBLIOTECA_ETIQUETAS E
        WHERE E.CLAVE = '$clave_doc' AND E.ESQUEMA = $cod_esqumema AND E.GRUPOE = $cod_campo_esq";
$base = $bd->query($sql);
$result = mysqli_fetch_array($base);
$correo = $result['TOTAL'];
return $correo;
}
function consultarCamposFilled($bd, $alias_campo)
{
    $sql =  "   SELECT E.ESQUEMA, E.CODIGO, E.LISTA, E.ORDEN
				FROM ESQUEMAS_ESTRUCTURA E
				WHERE E.ALIAS = '$alias_campo'";
    $result = $bd->query($sql);
    return $result;
}
function historialLog($bd, $clave, $nombre, $tamano) {
	mysqli_query($bd, "INSERT INTO BIBLIOTECA_HISTORIAL 
						(CLAVE, USUARIO, FECHA, ACCION, DOCUMENTO, CARPETA, ORDENADOR, AMBITO, TIPO, TAMANO, CREADOR, CONTROL, AWA) 
						VALUES 
						('$clave', 'API', now(), '44', '$nombre', 'API', 'SERV', 'PUB', 'D', $tamano, 'API', 0, 1)") ;
}
function docBibliotecaElementos($bd, $clave, $new_name, $ext, $tamano, $partes, $sufijo) {
	$query = "	UPDATE BIBLIOTECA_ELEMENTOS 
				SET NOMBRE = '$new_name', EXTENSION = '$ext', TAMANO = $tamano,  MODIFICACION = now(), ACCION = '', PARTES = $partes, SUFIJO = '$sufijo'
				WHERE CLAVE = '$clave'";
    mysqli_query($bd, $query);
	
}
function subirContenido($bd, $clave, $entrada, $parte, $sufijo, $data, $tamano, $size) {
	$fichero_ok = mysqli_query($bd, "INSERT INTO FICHEROS_".$sufijo." 
									(CLAVE, PARTE, VERSION, FICHERO, TAMANO, ENTRADA, COMPRIMIDO, TAMANOREAL, ENCRIPTADO) 
									VALUES 
									('$clave', $parte, 0, '$data', $tamano, '$entrada', 0, $size, 0)");
	return $fichero_ok;
}
function tablaDestDisp($bd, $tamano, $max_fichero, $name_avanws) {
	$sql =  " 	SELECT TABLE_NAME,ROUND(DATA_LENGTH/(1024*1024*1024),1) AS GB
				FROM INFORMATION_SCHEMA.TABLES
				WHERE TABLE_SCHEMA = '".$name_avanws."'
				AND TABLE_NAME LIKE 'FICHEROS_2%%'
				AND (ROUND(DATA_LENGTH/(1024*1024*1024),1) + ROUND($tamano/(1024*1024*1024),1)) < (ROUND($max_fichero,1))
				ORDER BY DATA_LENGTH LIMIT 1";
  	$base = $bd->query($sql);
  	$row = mysqli_fetch_array($base);
  	$tabla_sufijo = $row['TABLE_NAME'];
  	return $tabla_sufijo;
  	$base->close();
}
function maxTamanoFichero($bd) {
	$sql =  " 	SELECT VALOR
				FROM PARAMETROS
				WHERE CODIGO = 'TAM_TABLABLOB'
				AND GRUPO = 'PRG'";
  	$base = $bd->query($sql);
  	$row = mysqli_fetch_array($base);
  	$max_fich = $row['VALOR'];
  	return $max_fich;
  	$base->close();
}
function get_id_unico() {
	return date( "YmdHis" ) . sprintf( "%04d", rand( 0, 9999 ) );
}
function validaExpediente($bd, $codigo_exp)
{
    $sql = "SELECT E.CLAVE
            FROM BIBLIOTECA_EXPEDIENTES BE
            INNER JOIN BIBLIOTECA_ELEMENTOS E ON E.EXPTE_CODIGO = BE.CLAVE
            WHERE BE.CLAVE = ? AND BE.GRUPOE = 1";
    $base = $bd->prepare($sql);
    $codigo_exp = mysqli_real_escape_string($bd, $codigo_exp);
    $base->bind_param('s', $codigo_exp );
    $base->execute();
    $result = mysqli_fetch_array($base->get_result());
    $base->close();
    return $result["CLAVE"];
}
function consultaClaveDocumento($bd, $clave_exp, $alias_doc)
{
    $sql = "SELECT E.CLAVE, E.NOMBRE
            FROM BIBLIOTECA_ELEMENTOS E
            WHERE E.UBICACION LIKE '%$clave_exp%' AND E.ALIAS = '$alias_doc' AND  E.ACCION = 'PAUSED' AND E.PAPELERA = 0 LIMIT 1";
    $base = $bd->prepare($sql);
    $base->execute();
    $result = mysqli_fetch_array($base->get_result());
    $base->close();
    return $result;
}
function get_extension($nombre) {
	// Convierto la cadena en un arreglo
	$a = explode( '.', $nombre );
	$ext = end( $a );
	$ext = strtoupper( $ext );
	return $ext;
}
?>