query("SET NAMES 'utf8'"); //LIBRERIA DEL IDIOMA---------------------------------------------------------------- include("../../idiomas/idioma_".$_SESSION['lenguaje'].".php"); //include autoloader----------------------------------------------------------------- require('../../recursos/dompdf/autoload.inc.php'); // reference the Dompdf namespace---------------------------------------------------- use Dompdf\Dompdf; //Variables-------------------------------------------------------------------------- //ID DE LA PLANTILLA USADA $id_plantilla = "20".$_POST['plantilla']; //Codigo del Esquema usado $id_esq = $_POST['id']; //Nombre del documento $nombre_esq = nombreEsquema($bd, $id_esq); //Alias del Esquema $alias_esq = aliasEsquema($bd, $id_esq); $suf_doc = idDocUnico(); $nombre_doc = $nombre_esq."_".$suf_doc.".pdf"; $nombre_doc = strtoupper($nombre_doc); //Valido desde donde se esta generando 0 = no desde el explorador otros desde el explorador $destino = $_POST['destino']; //Campos del esquema $contenido = $_POST['contenido_genr']; $codigo = $_POST['codigo_genr']; $tipo = $_POST['tipo_genr']; //Verifico la longitud del array $total = count($codigo); //Cuerpo del documento base $body_doc = ""; //contacto $contacto = $_SESSION["contacto"]; //====================================================================================== //VALIDO EL DESTINO DEL DOCUMENTO GENERADO============================================== //EL DESTINO = 0 ME INDICA QUE NO SE HA CREAD ODESDE EL EXPLORADOR---------------------- //Y LO ENVIO AL INBOX DEL USUARIO------------------------------------------------------- if ($destino == 0 OR $destino == 100000003) { //Padre $padre = "US".$contacto.".INBOX"; //Busco los datos del padre--------------------------------------------- $datos_padre = datosDirPadre($bd, $padre); //Variables del Padre--------------------------------------------------- //AMBITO $ambito = $datos_padre['AMBITO']; //ACCESO DEL PAGRE $acceso_padre = $datos_padre['ACCESO']; //ACCESO AUTO DEL PADRE $acceso_auto_padre = $datos_padre['ACCESO_AUTO']; //UBICACION $ubicacion = $datos_padre['UBICACION'].$padre."/"; }else{ //cuento la string ------------------------------------------------------------------- $clasif_cont = strlen($destino); //Ubicacion (Directorios Generales)=================================================== if ($clasif_cont == 16) { //Padre $padre = "20".$destino; //Busco los datos del padre--------------------------------------------- $datos_padre = datosDirPadre($bd, $padre); //Variables del Padre--------------------------------------------------- //AMBITO $ambito = $datos_padre['AMBITO']; //ACCESO DEL PAGRE $acceso_padre = $datos_padre['ACCESO']; //ACCESO AUTO DEL PADRE $acceso_auto_padre = $datos_padre['ACCESO_AUTO']; //UBICACION $ubicacion = $datos_padre['UBICACION'].$padre."/"; } //Ubicacion (Documentos Compartidos)================================================== if ($destino == 100000001) { //Padre $padre = "##PUBLICO##"; //AMBITO $ambito = "PUB"; //ACCESO DEL PAGRE $acceso_padre = ""; //ACCESO AUTO DEL PADRE $acceso_auto_padre = ""; //UBICACION $ubicacion = "##PUBLICO##/"; } //Ubicacion (Documentos Privados)===================================================== if ($destino == 100000002) { //Padre $padre = "##PRIVADO##"; //AMBITO $ambito = "PRV"; //ACCESO DEL PAGRE $acceso_padre = ""; //ACCESO AUTO DEL PADRE $acceso_auto_padre = ""; //UBICACION $ubicacion = "##PRIVADO##/"; } //Ubicacion (DIRECTORIO DE USUARIO)=================================================== if ($clasif_cont == 7) { //Padre $padre = "US".$contacto; //Busco los datos del padre--------------------------------------------- $datos_padre = datosDirPadre($bd, $padre); //Variables del Padre--------------------------------------------------- //AMBITO $ambito = $datos_padre['AMBITO']; //ACCESO DEL PAGRE $acceso_padre = $datos_padre['ACCESO']; //ACCESO AUTO DEL PADRE $acceso_auto_padre = $datos_padre['ACCESO_AUTO']; //UBICACION $ubicacion = $datos_padre['UBICACION'].$padre."/"; } //Ubicacion (DIRECTORIO INBOX DE USUARIO)============================================== if ($clasif_cont == 10) { //Padre $padre = "US".$contacto.".INBOX"; //Busco los datos del padre--------------------------------------------- $datos_padre = datosDirPadre($bd, $padre); //Variables del Padre--------------------------------------------------- //AMBITO $ambito = $datos_padre['AMBITO']; //ACCESO DEL PAGRE $acceso_padre = $datos_padre['ACCESO']; //ACCESO AUTO DEL PADRE $acceso_auto_padre = $datos_padre['ACCESO_AUTO']; //UBICACION $ubicacion = $datos_padre['UBICACION'].$padre."/"; } } //======================================================================================= //==================================ACCIONES============================================= //======================================================================================= //======================================================================================= //======================================================================================= //======================================================================================= //==============SE UTILIZA EL HTML ASIGNADO========================================== //Descargar el documento html-------------------------------------------------------- //Obtencion Datos del Doc------------------------------------------------------------ $datos = datosDoc($bd, $id_plantilla); //REGRESO EL NOMBRE DEL DOCUMENTO---------------------------------------------------- $nombre = $datos['NOMBRE']; $nombre = strtoupper($nombre); //Obtengo el Sufijo del Fichero------------------------------------------------------ $tabla_sufijo = 'FICHEROS_'.$datos['SUFIJO']; //FICHERO Y DOCUEMNTO A CREAR-------------------------------------------------------- $ruta_doc = '../../recursos/file-upload/server/php/files/'.$nombre; //Elimino el documento si existe----------------------------------------------------- @unlink('../../recursos/file-upload/server/php/files/'.$nombre); //Obtencion de la Primera parte del Fichero------------------------------------------ $archivo = parte1Doc($bd, $id_plantilla, $tabla_sufijo); //CREO EL DOCUMEMTO EN EL DIRECTORIO TEMPORAL---------------------------------------- $create_doc = fopen($ruta_doc, 'a'); //Obtengo LA CANTIDAD DE PARTES DEL DOCUMENTO---------------------------------------- $num_parte = $datos['PARTES']; //LLENO EL DOCUMENTO ---------------------------------------------------------------- if ($num_parte > 0) { for ($i=1; $i<=$num_parte; $i++) { //BUSCO EL CONTENIDO DE LAS PARTES-------------------------------------------- $fichero_partes = parteAdicionalDoc($bd, $id_plantilla, $tabla_sufijo, $i); //VACIO ESE CONTENIDO EN EL DOCUMENTO----------------------------------------- fwrite($create_doc, $fichero_partes); } } //CIERRO EL DOCUMENTO----------------------------------------------------------------- fclose($create_doc); //cargar el documento html------------------------------------------------------------ $html = file_get_contents("../../recursos/file-upload/server/php/files/".$nombre); //=================================Recorro el array y hago reemplazos================= //==================================================================================== for($i=0;$i<$total;$i++){ //Busco en la variable del HTML y hago los reemplazos correspondientes------------ $html = str_replace("[##ET.".$alias_esq.".".$codigo[$i]."##]", $contenido[$i], $html); } //VALIDO SI EL USUARIO INCLUYO EL LOGO PARA HACER EL REEMPLAZO----------------------- //SE INCLUYE CON [##LOGO##] EN EL HTML $html = str_replace("[##LOGO##]", "", $html); //Verifico si se desea incluir la fecha actual en el justificante-------------------- $date_today = date("d-m-Y"); $html = str_replace("[##TODAY##]", $date_today, $html); //Verifico si se desea incluir la fecha actual en el justificante-------------------- $date_time = date("G:i:s"); $html = str_replace("[##NOW##]", $date_time, $html); //======================================================================================= //GENERO EL PDF-------------------------------------------------------------------------- //======================================================================================= // instantiate and use the dompdf class-------------------------------------------------- $dompdf = new Dompdf(); //======================================================================================= //Cargo el html al dompdf---------------------------------------------------------------- $dompdf->loadHtml($html); // (Optional) Setup the paper size and orientation--------------------------------------- $dompdf->setPaper('A4', 'portrait'); // Render the HTML as PDF---------------------------------------------------------------- $dompdf->render(); // Output the generated------------------------------------------------------------------ $pdf = $dompdf->output(); file_put_contents("../../recursos/file-upload/server/php/files/".$nombre_doc, $pdf); //======================================================================================= //HAGO EL UPLOAD DEL DOCUMENTO A LA BD--------------------------------------------------- //Variables------------------------------------------------------ //Creo la clave-------------------------------------------------- $clave = get_id_unico(); //Creo la Entrada------------------------------------------------ $entrada = get_id_unico(); //este es el archivo temporal------------------------------------ $imagen_temporal = "../../recursos/file-upload/server/php/files/".$nombre_doc; //Tamaño--------------------------------------------------------- $tamano = filesize($imagen_temporal); //este es el tipo de archivo------------------------------------ $ext = get_extension($nombre_doc); //ambito-------------------------------------------------------- //$ambito = "PUB"; //padre del directorio destino publico-------------------------- //$dir_raiz = "AWA INBOX"; //usuario------------------------------------------------------- $user = $_SESSION["user"]; //ordenador----------------------------------------------------- $ordenador = $_SESSION['host']; //contacto------------------------------------------------------ $contacto = $_SESSION["contacto"]; //padre-------------------------------------------------------- //$padre = "US".$contacto.".INBOX"; //permisos----------------------------------------------------- $permiso = permisosDir($bd, $padre); //este es el acesso heredado del directorio padre-------------- $acceso_doc = accesoDoc($bd, $padre); //======================================================================================= //ACCIONES DEL UPLOAD==================================================================== //VALIDAR EL NOMBRE DEL DOCUMENTO-------------------------------------------------------- //--------------------------------------------------------------------------------------- $exist_doc = docExist($bd, $ambito, $nombre_doc, $padre); while ( $exist_doc == 1) { $a = explode( '.', $nombre_doc ); $nombre_doc_up = $a[0]; $ext_doc = end( $a ); $nombre_doc = $nombre_doc_up."(1).".$ext_doc; $exist_doc = docExist($bd, $ambito, $nombre_doc, $padre); } //======================================================================================= //leer el archivo temporal en binario---------------------------------------------------- $fp = fopen($imagen_temporal, 'r'); $data = fread($fp, filesize($imagen_temporal)); fclose($fp); //escapar los caracteres----------------------------------------------------------------- $data = mysqli_real_escape_string($bd, $data); //======================================================================================= //SCRIP DEL REGISTRO DEL NUEVO DOCUMENTO------------------------------------------------- //valido tamaño maximo permitido por los ficheros---------------------------------------- $max_fichero = maxTamanoFichero($bd); //verificar si existe tabla con espacio disponible--------------------------------------- $tabla_sufijo = tablaDestDisp($bd, $tamano, $max_fichero); //======================================================================================= //verifico nombre de la tabla o creo una nueva para el registro del doc y cargo el sufijo 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); } //====================================================================================== //Valido la cantidad de partes y realizao el insert en la Tabla de Ficheros------------- $parte = 1; if ( $tamano > 16777216 ) { $array = str_split($data, 16777216); foreach ($array as $key => $value) { $fichero_ok = subirContenido($bd, $clave, $entrada, $parte, $sufijo, $value, $tamano, strlen($value)); $parte++; } }else{ $entrada = get_id_unico(); $fichero_ok = subirContenido($bd, $clave, $entrada, $parte, $sufijo, $data, $tamano, strlen($data)); } //===================================================================================== //Valido la cant de partes a utilizar en la Biblioteca de Elementos-------------------- if ($parte == 1) { $partes = $parte; }else{ $partes = $parte -1; } //==================================================================================== //Valido que se realizo el insert y Realizo el registro en la biblioteca de elementos- if ($fichero_ok){ //CAPTURO LA CLAVE DEL DOCUMENTO GENERADO echo $clave; //hago el registro en la biblioteca de elementos docBibliotecaElementos($bd, $clave, $nombre_doc, $ext, $padre, $tamano, $acceso_doc, $user, $entrada, $ordenador, $partes, $sufijo, $ambito, $permiso, $ubicacion); //hago el registro en el log historialLog($bd, $clave, $user, $nombre_doc, $ordenador, $ambito, $acceso_doc, $tamano, $user); }else{ echo $fichero_ok; } //======================================================================================================= //Elimino el documento temporal-------------------------------------------------------------------------- //======================================================================================================= //limpio si existen documentos antiguos del directorio files $dir = opendir('../../recursos/file-upload/server/php/files/'); while($f = readdir($dir)) { if((time()-filemtime('../../recursos/file-upload/server/php/files/'.$f) > 1) and !(is_dir('../../recursos/file-upload/server/php/files/'.$f))) unlink('../../recursos/file-upload/server/php/files/'.$f); } closedir($dir); //limpio si existen documentos antiguos del directorio trumbails $dir = opendir('../../recursos/file-upload/server/php/files/thumbnail/'); while($f = readdir($dir)) { if((time()-filemtime('../../recursos/file-upload/server/php/files/thumbnail/'.$f) > 1) and !(is_dir('../../recursos/file-upload/server/php/files/thumbnail/'.$f))) unlink('../../recursos/file-upload/server/php/files/thumbnail/'.$f); } closedir($dir); //======================================================================================= //======================================================================================= //==================================FUNCIONES============================================ //======================================================================================= //Funcion para obtener el random number del sufijo del documento------------------------- function idDocUnico() { return date( "Ymd" ) . sprintf( "%04d", rand( 0, 9999 ) ); } //Funcion para obtener la clave unica del registro--------------------------------------- function get_id_unico() { return date( "YmdHis" ) . sprintf( "%04d", rand( 0, 9999 ) ); } //FUNCION PARA OBTENER DETALLE DEL ESQUEMA DEL DOCUMENTO-------------------------------- function nombreEsquema($bd, $id_esq){ $sql = "SELECT E.DESCRIPCION FROM ESQUEMAS E WHERE E.CODIGO = '$id_esq'"; $base = $bd->query($sql); $result = mysqli_fetch_array($base); return $result['DESCRIPCION']; $base->close(); } //FUNCION PARA OBTENER DETALLE DEL ESQUEMA DEL DOCUMENTO-------------------------------- function aliasEsquema($bd, $id_esq){ $sql = "SELECT E.ALIAS FROM ESQUEMAS E WHERE E.CODIGO = '$id_esq'"; $base = $bd->query($sql); $result = mysqli_fetch_array($base); return $result['ALIAS']; $base->close(); } //fUNCION PARA OBTENER LA DESCRIPCION DEL CAMPO DEL ESQUEMA A PARTIR DE CODIGO----------- function descCampoEsquema($bd, $id_esq, $cod_camp) { $sql = "SELECT E.DESCRIPCION FROM ESQUEMAS_ESTRUCTURA E WHERE E.ESQUEMA = '$id_esq' AND E.CODIGO = '$cod_camp'"; $base = $bd->query($sql); $result = mysqli_fetch_array($base); return $result['DESCRIPCION']; $base->close(); } //busco la clave del directorio AWA dentro de plantillas--------------------------------- function claveDirAWA($bd) { $sql = "SELECT E.CLAVE FROM BIBLIOTECA_ELEMENTOS E WHERE E.NOMBRE = 'AWA' AND E.PADRE = '##PLAN_PUB##' AND E.PAPELERA = 0"; $base = $bd->query($sql); $result = mysqli_fetch_array($base); return $result['CLAVE']; $base->close(); } //busco LA EXISTENCIA DE UN DOCUMENTO DE IGUAL NOMBRE DEL ESQUEMA Y TOMO SU CLAVE------ function plantillaHTMLesquema($bd, $nombre_plant) { $sql = "SELECT E.CLAVE FROM BIBLIOTECA_ELEMENTOS E WHERE E.EXTENSION IN ('HTML') AND E.UBICACION LIKE '##PUBLICO##/##PLAN_PUB##/%' AND E.NOMBRE = '$nombre_plant' AND E.PAPELERA = 0"; $base = $bd->query($sql); $result = mysqli_fetch_array($base); return $result['CLAVE']; $base->close(); } //FUNCION PARA OBTENER LOS DATOS DEL DOCUMENTO HTML---------------------------------- function datosDoc($bd, $id_doc){ $sql = " SELECT e.CLAVE, e.NOMBRE, e.EXTENSION, e.TAMANO, e.SUFIJO, e.PARTES, e.PADRE, e.AMBITO, e.ACCESO, e.ACCESO_AUTO FROM BIBLIOTECA_ELEMENTOS e WHERE e.CLAVE = '$id_doc'"; $base = $bd->query($sql); $datos = mysqli_fetch_assoc($base); $base->close(); return $datos; } //FUNCION PARA OBTENER LA PRIMERA PARTE DEL FICHERO------------------------------------------------ function parte1Doc($bd, $id_doc, $tabla_sufijo){ global $bd; $sql = " SELECT FICHERO FROM $tabla_sufijo WHERE CLAVE = '$id_doc' AND PARTE = 1 AND VERSION = 0 LIMIT 1"; $base = $bd->query($sql); $archivo = mysqli_fetch_assoc($base); $base->close(); return $archivo; } //FUNCION PARA OBTENER LA PRIMERA PARTE DEL FICHERO------------------------------------------------ function parteAdicionalDoc($bd, $id_doc, $tabla_sufijo, $parte){ $sql_partes = " SELECT FICHERO FROM $tabla_sufijo WHERE PARTE = $parte AND CLAVE = '$id_doc' AND VERSION = 0 LIMIT 1"; //$qry = sprintf($sql_partes, $parte , $id_doc); $parte = $bd->query($sql_partes); $fichero = mysqli_fetch_assoc($parte); $fichero_partes = $fichero['FICHERO']; $parte->close(); return $fichero_partes; } //Funcion obtener la extension del archivo -------------------------------------------------------- function get_extension($nombre) { // Convierto la cadena en un arreglo $a = explode( '.', $nombre ); $ext = end( $a ); $ext = strtoupper( $ext ); return $ext; } //Funcion PARA VERIFICAR LA EXISTENCIA DEL PERMISOS DIRECTORIO ------------------------------------- function permisosDir($bd, $padre) { $sql = " SELECT ACCESO FROM BIBLIOTECA_ELEMENTOS WHERE CLAVE = '$padre'"; $base = $bd->query($sql); $row = mysqli_fetch_array($base); $acceso = $row['ACCESO']; return $acceso; $base->close(); } //Funcion PARA OBTENER LOS PERMISOS DE ACCESO HEREDABLES DEL DIRECTORIO PADRE--------------------- function accesoDoc($bd, $padre) { $sql = " SELECT ACCESO FROM BIBLIOTECA_ELEMENTOS WHERE CLAVE = '$padre' AND TIPO = 'C' AND PAPELERA = 0"; $base = $bd->query($sql); @$row = mysqli_fetch_array($base); $acceso_doc = $row['ACCESO']; return $acceso_doc; $base->close(); } //Funcion obtener la extension del archivo ------------------------------------------------------- function docExist($bd, $ambito, $nombre, $padre) { $sql = " SELECT COUNT(NOMBRE) AS CUANTOS FROM BIBLIOTECA_ELEMENTOS WHERE NOMBRE = '$nombre' AND PADRE = '$padre' AND PAPELERA = 0 AND AMBITO = '$ambito'"; $base = $bd->query($sql); $row = mysqli_fetch_array($base); $doc_exist = $row['CUANTOS']; return $doc_exist; $base->close(); } //Funcion obtener el tamaño maximo d elos ficheros en GB ---------------------------------------- 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(); } //Funcion obtener verificar tabla destino disponible-------------------------------------------------------------- function tablaDestDisp($bd, $tamano, $max_fichero) { $sql = " SELECT TABLE_NAME,ROUND(DATA_LENGTH/(1024*1024*1024),1) AS GB FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '".NAME."' 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(); } //Funcion PARA SUBIR CONTENIDO--------------------------------------------------------------------------------------------------- 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; } //Funcion PARA CREAR EL DOCUMENTO EN LA BIBLIOTECA DE ELEMENTOS-------------------------------------------------------------- function docBibliotecaElementos($bd, $clave, $nombre_doc, $ext, $padre, $tamano, $acceso_doc, $user, $entrada, $ordenador, $partes, $sufijo, $ambito, $permiso, $ubicacion) { mysqli_query($bd, "INSERT INTO BIBLIOTECA_ELEMENTOS (CLAVE, NOMBRE, EXTENSION, PADRE, TIPO, FECHA, TAMANO, AMBITO, ACCESO, CREADOR, ENTRADA, ORDENADOR, MODIFICACION, PARTES, VERMIN, SUFIJO, UBICACION, ORIGEN) VALUES ('$clave', '$nombre_doc', '$ext', '$padre', 'D', now(), $tamano, '$ambito', '$permiso', '$user', '$entrada', '$ordenador', now(), $partes, '1.0', '$sufijo', '$ubicacion', 'AWA')") ; } //Funcion PARA CREAR EL REGISTRO EN EL LOG DEL HISTORIAL------------------------------------------------------------------------- function historialLog($bd, $clave, $user, $nombre_doc, $ordenador, $ambito, $acceso_doc, $tamano, $user) { mysqli_query($bd, "INSERT INTO BIBLIOTECA_HISTORIAL (CLAVE, USUARIO, FECHA, ACCION, DOCUMENTO, CARPETA, ORDENADOR, AMBITO, ACCESO, TIPO, TAMANO, CREADOR, CONTROL, AWA) VALUES ('$clave', '$user', now(), '1', '$nombre_doc', '$user', '$ordenador', '$ambito', '$acceso_doc', 'D', $tamano, '$user', 0, 1)") ; } //Funcion para obtener los datos del directorio padre----------------------------------------------------- function datosDirPadre($bd, $padre) { $sql = " SELECT E.AMBITO, E.ACCESO, E.UBICACION, E.ACCESO_AUTO FROM BIBLIOTECA_ELEMENTOS E WHERE E.CLAVE = '$padre'"; $result = $bd->query($sql); $datos_padre = mysqli_fetch_array($result); return $datos_padre; } ?>