<?php
//===================================================================================================================
//============================================LIBRERIAS Y VARIABLES==================================================
//===================================================================================================================
session_start();
//conexion-----------------------------------------------------------------------------------------------------------
require_once '../../conexion/conexion.php';
$bd = new connexion();
$bd->query("SET NAMES 'utf8'");
//VARIABLES----------------------------------------------------------------------------------------------------------
//Creo la clave
$clave = "20".$_POST['id_pend'];
//Creo la Entrada
$entrada = get_id_unico();
//nombre del documento
$nombre = $_POST['name'];
$nombre = trim($nombre);
//este es el archivo temporal
$imagen_temporal  = "../../recursos/file-upload/server/php/files/".$nombre;
for ($i=0; $i < 20; $i++) { 
	if (file_exists($imagen_temporal)) {
		//Tamaño	
		$tamano = filesize($imagen_temporal);
		//este es el tipo de archivo
		$ext = get_extension($nombre);
		//ambito
		$ambito = "PUB";
		//Origen
		$origen = "AWA";
		//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($padre);
		//este es el acesso heredado del directorio padre
		$acceso_doc = accesoDoc();
		//creo una constante para la ubicacion del documento
		$ubicacion = "##PUBLICO##/##USUARIOS##/US".$contacto."/US".$contacto.".INBOX/";
		//===================================================================================================================
		//============================================ACCIONES===============================================================
		//===================================================================================================================
		//===================================================================================================================
		//VALIDAR EL NOMBRE DEL DOCUMENTO------------------------------------------------------------------------------------
		//-------------------------------------------------------------------------------------------------------------------
		$exist_doc = docExist($nombre, $padre);
		while ( $exist_doc == 1) {
			$a = explode( '.', $nombre );
			$nombre_doc = $a[0];
			$ext_doc = end( $a );
			$nombre = $nombre_doc."(1).".$ext_doc;
			$exist_doc = docExist($nombre, $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();
		//verificar si existe tabla con espacio disponible-----------------------------------------------------------------
		$tabla_sufijo = tablaDestDisp($tamano, $max_fichero);
		//=================================================================================================================
		//verifico nombre de la tabla o creo una nueva para crear 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($parte, $sufijo, $value, $tamano, strlen($value));
					$parte++;
				}
		}else{
				$entrada = get_id_unico();
				$fichero_ok = subirContenido($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, $ext, $tamano, $user, $entrada, $ordenador, $partes, $sufijo);
			//hago el registro en el log
			historialLog();
		}
	break;
	}
	sleep(3);
}



/*


*/
//===================================================================================================================
//============================================FUNCIONES==============================================================
//===================================================================================================================
//Funcion PARA CREAR EL DOCUMENTO EN LA BIBLIOTECA DE ELEMENTOS--------------------------------------------------------------
function docBibliotecaElementos($bd, $clave, $nombre, $ext, $tamano, $user, $entrada, $ordenador, $partes, $sufijo) {
	$query = "	UPDATE BIBLIOTECA_ELEMENTOS 
				SET NOMBRE = '$nombre', EXTENSION = '$ext', TAMANO = $tamano, ORIGEN = 'AWA', CREADOR = '$user', ENTRADA = '$entrada', ORDENADOR = '$ordenador', MODIFICACION = now(), ACCION = '', PARTES = $partes, SUFIJO = '$sufijo'
				WHERE CLAVE = '$clave'";
    mysqli_query($bd, $query);
	
}
//Funcion PARA VERIFICAR LA EXISTENCIA DEL PERMISOS DIRECTORIO ------------------------------------------------------
function permisosDir($padre) {
	global $bd;
	$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 la clave unica del registro--------------------------------------------------------
function get_id_unico() {
	return date( "YmdHis" ) . sprintf( "%04d", rand( 0, 9999 ) );
}
//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 obtener la extension del archivo ---------------------------------------------------------------
function docExist($nombre, $padre) {
	global $bd, $ambito;
	$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() {
	global $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($tamano, $max_fichero) {
	global $bd;
	$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($parte, $sufijo, $data, $tamano, $size) {
	global $bd, $clave, $entrada;
	$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 OBTENER LOS PERMISOS DE ACCESO HEREDABLES DEL DIRECTORIO PADRE-----------------------------------------------------------------------------------------
function accesoDoc() {
	global $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 PARA CREAR EL REGISTRO EN EL LOG DEL HISTORIAL-------------------------------------------------------------------------
function historialLog() {
	global $bd, $clave, $user, $nombre, $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(), '44', '$nombre', '$user', '$ordenador', '$ambito', '$acceso_doc', 'D', $tamano, '$user', 0, 1)") ;
}
//Funcion PARA VERIFICAR LA EXISTENCIA DEL DIRECTORIO RAIZ DE CARGAS AWA EN EL AMBITO PRIVADO-------------------------------------------------------------
function raizAWAcheckPrv($check_dir, $padre_dir, $user) {
	global $bd;
	$sql = "	SELECT CLAVE AS EXISTE
				FROM BIBLIOTECA_ELEMENTOS
				WHERE NOMBRE = '$check_dir' AND TIPO = 'C' AND PAPELERA = 0 AND PADRE = '$padre_dir' AND CREADOR = '$user'";
	$base = $bd->query($sql);
	$row = mysqli_fetch_array($base);
	$direxist = $row['EXISTE'];
	return $direxist;
	$base->close();
}
//Funcion PARA VERIFICAR LA EXISTENCIA DEL DIRECTORIO RAIZ DE CARGAS AWA---------------------------------------------------------------------------------
function raizAWAcheck($check_dir, $padre_dir) {
	global $bd;
	$sql = "	SELECT CLAVE AS EXISTE
				FROM BIBLIOTECA_ELEMENTOS
				WHERE NOMBRE = '$check_dir' AND TIPO = 'C' AND PAPELERA = 0 AND PADRE = '$padre_dir'";
	$base = $bd->query($sql);
	$row = mysqli_fetch_array($base);
	$direxist = $row['EXISTE'];
	return $direxist;
	$base->close();
}
//Funcion PARA CREAR EL  DIRECTORIO RAIZ DE CARGAS AWA---------------------------------------------------------------------------------
function RaizdirAWAcreate($padre_dir, $dir_raiz, $id_clave) {
	global $bd, $user, $ordenador, $ambito;
	mysqli_query($bd, "INSERT INTO BIBLIOTECA_ELEMENTOS 
						(CLAVE, NOMBRE, EXTENSION, PADRE, TIPO, FECHA, TAMANO, AMBITO, ACCESO, CREADOR, ENTRADA, ORDENADOR, MODIFICACION, PARTES, VERMIN, SUFIJO) 
						VALUES 
						('$id_clave', '$dir_raiz', '', '$padre_dir', 'C', now(), 0, '$ambito', '', '$user', '', '$ordenador', now(), 1, '', '')") ;
}
?>