<?php
//==========================================================================================
//======================================LIBRERIAS===========================================
//==========================================================================================
session_start();
//conexion----------------------------------------------------------------------------------
require_once '../../conexion/conexion.php';
$bd = new connexion();
$bd->query("SET NAMES 'utf8'");
//==========================================================================================
//======================================VARIABLES===========================================
//==========================================================================================
//nombre del documento
$nombre = $_POST['nomb'];
//ID DEL DOCUMETO
$id_doc = "20".$_POST['id'];
//Obtencion Datos del Doc------------------------------------------------------------
$datos = datosDoc($bd, $id_doc);
//este es el archivo temporal
$imagen_temporal  = "../../recursos/file-upload/server/php/files/".$nombre;
//Tamaño	
$tamano = filesize($imagen_temporal);
//este es el tipo de archivo
$ext = get_extension($nombre);
//usuario
$user = $_SESSION["user"];
//ordenador
$ordenador = $_SESSION['host'];
//Creo la Entrada
$entrada = $datos['ENTRADA']; 
//VERSION
$version = $datos['VERSION'];
//SUFIJO TABLA FICHEROS
$sufijo = $datos['SUFIJO'];
//VERSIONADO
$versionado = $datos['VERSIONADO'];
//==========================================================================================
//======================================ACCIONES============================================
//==========================================================================================
//CARGO EL CONTENIDO DEL DOCUMENTO----------------------------------------------------------
$fp     = fopen($imagen_temporal, 'r');
$data = fread($fp, filesize($imagen_temporal));
fclose($fp);
//escapar los caracteres la data del documento-----------------------------------------------
$data = mysqli_real_escape_string($bd, $data);
//CARGO EL CONTENIDO DEL FICHERO DE LA VERSION BASE--------------------------------------
$rows = partesDocumentoBase($bd, $id_doc, $sufijo);
//===========================================================================================
//VERIFICO SI EL DOCUMENTO TIENE ACTIVO LA OPCION DE VERSIONADO------------------------------
//===========================================================================================
//EL DOCUMENTO NO ESTABA VERSIONADO==========================================================
if ($versionado == 0) {
	//VERSION BASE---------------------------------------------------------------------------
	$ceros_ver = cerosVersion($bd);
	$ceros = $ceros_ver['VALOR'];
	$ceros = str_replace(1,"0",$ceros);
	$ceros = str_replace(2,"00",$ceros);
	$ceros = str_replace(3,"000",$ceros);
	$ceros = str_replace(4,"0000",$ceros);
	$version_base = "1.".$ceros;
	//RECORRO LAS PARTES DEL DOCUMENTO Y VOY CREANDO LAS NUEVAS CON LA BASE 1.00-------------
	while ($row = $rows->fetch_object()){
		//VARIABLES
		$clave_base = $row->CLAVE;
		$parte_base = $row->PARTE;
		$tamano_base = $row->TAMANO;
		$tamanoreal_base = $row->TAMANOREAL;
		$fichero_base = $row->FICHERO;
		//escapar los caracteres la data del documento
		$fichero_base = mysqli_real_escape_string($bd, $fichero_base);
		//CREO EL ROW DE BASE 1.00 IGUAL AL BASE 0--------------------------------------------
		$fichero_ok = ficherosBase($bd, $sufijo, $clave_base, $parte_base, $version_base, $fichero_base, $tamano_base, $entrada, $tamanoreal_base, $user);
	}
	//CARGO LA VARIABLE PARA EL UPDATE DEL CAMPO VERSIONADO EN LA BIBLITECA ELEMENTOS---------
	$versionado = 1;
	//CARGO EL CAMPO DE VERSION A 1.00--------------------------------------------------------
	$next_vers = $ceros_ver['VALOR'];
	$next_vers = str_replace(1,"0.1",$next_vers);
	$next_vers = str_replace(2,"0.01",$next_vers);
	$next_vers = str_replace(3,"0.001",$next_vers);
	$next_vers = str_replace(4,"0.0001",$next_vers);
	$version = "1.".$ceros + $next_vers;
//============================================================================================
//EL DOCUMENTO YA ESTABA VERSIONADO ANTERIORMENTE=============================================
}else{
	//CARGO EL VALOR ANTERIOR DEL VARIONADO Y LE SUMO 0.01------------------------------------
	//CARGO LA CANTIDAD DE CEROS
	$ceros_ver = cerosVersion($bd);
	$ceros = $ceros_ver['VALOR'];
	//REPLACE DE LOS CEROS
	$ceros = str_replace(1,"0",$ceros);
	$ceros = str_replace(2,"00",$ceros);
	$ceros = str_replace(3,"000",$ceros);
	$ceros = str_replace(4,"0000",$ceros);
	//REPLACE DE LA VERSION SIGUIENTE
	$next_vers = $ceros_ver['VALOR'];
	$next_vers = str_replace(1,"0.1",$next_vers);
	$next_vers = str_replace(2,"0.01",$next_vers);
	$next_vers = str_replace(3,"0.001",$next_vers);
	$next_vers = str_replace(4,"0.0001",$next_vers);
	$version = $version + $next_vers;
	echo $version;
}
//============================================================================================
//CREO EL NUEVO CONTENIDO DEL DOCUMENTO-------------------------------------------------------
//============================================================================================
//VARIABLES-----------------------------------------------------------------------------------
$parte = 1;
//VERIFICO TAMAÑO TOTAL DEL DOC PARA PARTIRLO A !&MG SI LOS SUPERA-----------------------------
if ( $tamano > 16777216 ) {
	//EL DOCUMENTO ES MAYOR A 16 MG -----------------------------------------------------------
	$array = str_split($data, 16777216);
	foreach ($array as $key => $value) {
		//CREO EL NUEVO FICHERO DE LA VERSION
		$fichero_ok = subirContenido($bd, $id_doc, $entrada, $parte, $sufijo, $value, $tamano, strlen($value), $version, $user);
		//HAGO UPDATE DEL FICHERO DEL DOCUMENTO ACTUAL VERSION 0
		updateDocumentoActual($bd, $sufijo, $value, $id_doc, $parte);
		$parte++;
	}
} else {
	//EL DOCUMENTO ES MENOR A LOS 16 MG--------------------------------------------------------
	//CREO EL NUEVO FICHERO DE LA VERSION
	$fichero_ok = subirContenido($bd, $id_doc, $entrada, $parte, $sufijo, $data, $tamano, strlen($data), $version, $user);
	//HAGO UPDATE DEL FICHERO DEL DOCUMENTO ACTUAL VERSION 0
	updateDocumentoActual($bd, $sufijo, $data, $id_doc, $parte);
}
//============================================================================================
//Valido la cant de partes a utilizar en la Biblioteca de Elementos---------------------------
if ($parte == 1) {
	$partes = $parte;
}else{
	$partes = $parte -1;
}
//HACER EL UPDATE DE LOS CAMPOS DE TAMAÑO - MODIFICACION - PARTES DE LA BIBLIOTECA_ELEMENTOS====
//ADICIONAL LIMPIO EL CAMPO BLOQUEO PARA LIBERAR EL DOCUMENTO Y ACTIVO EL VERSIONADO------------
updateDocumento($bd, $tamano, $partes, $id_doc, $version, $versionado);
//hago el registro en el log--------------------------------------------------------------------
//historialLog();
//==========================================================================================
//======================================FUNCIONES===========================================
//==========================================================================================
//FUNCION PARA OBTENER LA CANTIDAD DE CEROS A USAR EN LA VERSION----------------------------
 function cerosVersion($bd){
  $sql =  " SELECT P.VALOR
            FROM PARAMETROS P
            WHERE P.CODIGO = 'CEROS_VER'";
  $base = $bd->query($sql);
  $datos = mysqli_fetch_assoc($base);
  $base->close();
  return $datos;
 }
//FUNCION PARA EL UPDATE DEL DOCUMENTO  BASE VERSION 0 -------------------------------------
function updateDocumentoActual($bd, $sufijo, $fichero, $id_doc, $parte)
{
	$query = "	UPDATE FICHEROS_".$sufijo."
				SET FICHERO = '$fichero'
				WHERE CLAVE = '$id_doc' AND VERSION = '0' AND PARTE = $parte";
  mysqli_query($bd, $query);
}
//Funcion PARA SUBIR CONTENIDO--------------------------------------------------------------
function subirContenido($bd, $id_doc, $entrada, $parte, $sufijo, $data, $tamano, $size, $version, $user) 
{
	$fichero_ok = mysqli_query($bd, "INSERT INTO FICHEROS_".$sufijo." 
									(CLAVE, PARTE, VERSION, FICHERO, TAMANO, ENTRADA, COMPRIMIDO, TAMANOREAL, ENCRIPTADO, FECHA, USUARIO) 
									VALUES 
									('$id_doc', $parte, '$version', '$data', $tamano, '$entrada', 0, $size, 0, now(), '$user')");
	return $fichero_ok;
}
//FUNCION PARA OBTENER LOS DATOS DEL DOCUMENTO----------------------------------------------
 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.VERSION, e.VERSIONADO, e.ENTRADA
			FROM BIBLIOTECA_ELEMENTOS e 
			WHERE e.CLAVE = '$id_doc'";
  $base = $bd->query($sql);
  $datos = mysqli_fetch_assoc($base);
  $base->close();
  return $datos;
 } 
 // FUNCION PARA CARGAR LAS PARTES DEL DOCUMENTO BASE----------------------------------------
function partesDocumentoBase($bd, $id_doc, $sufijo) 
{
  $sql =  " SELECT CLAVE, PARTE, VERSION, FICHERO, TAMANO, ENTRADA, COMPRIMIDO, TAMANOREAL
			FROM FICHEROS_".$sufijo."
			WHERE CLAVE = '$id_doc' AND VERSION = '0'";
  $rows = $bd->query($sql);
  return $rows;
  $base->close();
}
//FUNCION PARA CREAR LOS ROWS BASE 1.00 IGUALES A LOS BASE 0----------------------------------
function ficherosBase($bd, $sufijo, $clave_base, $parte_base, $version_base, $fichero_base, $tamano_base, $entrada_base, $tamanoreal_base, $user)
{
	$fichero_ok = mysqli_query($bd, "INSERT INTO FICHEROS_".$sufijo." 
									(CLAVE, PARTE, VERSION, TAMANO, ENTRADA, COMPRIMIDO, TAMANOREAL, ENCRIPTADO, FECHA, USUARIO, FICHERO) 
									VALUES 
									('$clave_base', $parte_base, '$version_base', $tamano_base, '$entrada_base', 0, $tamanoreal_base, 0, now(), '$user', '$fichero_base')");
	return $fichero_ok;
} 
//ELIMINA EL CONTENIDO ANTERIOR DEL DOCUMENTO-----------------------------------------------
function eliminaContenido($bd, $id_doc, $sufijo)
{
  $query = "DELETE FROM FICHEROS_".$sufijo." 
			WHERE CLAVE = '$id_doc'";
  mysqli_query($bd, $query);
}
//Funcion para obtener la clave unica del registro------------------------------------------
function get_id_unico() 
{
	return date( "YmdHis" ) . sprintf( "%04d", rand( 0, 9999 ) );
}
//FUNCION PARA EL UPDATE DEL DOCUMENTO  DE LA TABLA DE ELEMENTOS ---------------------------
function updateDocumento($bd, $tamano, $partes, $id_doc, $version, $versionado)
{
	$query = "	UPDATE BIBLIOTECA_ELEMENTOS
				SET TAMANO = $tamano, MODIFICACION = now(), PARTES = $partes, BLOQUEO = '', VERSION = $version, VERSIONADO = $versionado, ORIGEN = 'AWA'
				WHERE CLAVE = '$id_doc'";
  mysqli_query($bd, $query);
}
//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 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) 
						VALUES 
						('$clave', '$user', now(), '100001', '$nombre', '$user', '$ordenador', '$ambito', '$acceso_doc', 'D', $tamano, '$user', 0)") ;
}
?>