<?php
	class Funciones {

		public static function validar_directorio($par_directorio) {
			//return true;
			$v_existe = file_exists($par_directorio);

			if ($v_existe == false) {

				mkdir($par_directorio);
				//chmod($par_directorio, 0755);

			}

			return $v_existe;
		}

		public static function transforma_correo($correo) {

			$correo_seguro    = explode("@", $correo);
			$correo_seguro[0] = substr($correo,0,2).str_repeat("*", strlen($correo_seguro[0])).substr($correo, strlen($correo_seguro[0]) - 2, 2);
			$correo_seguro[1] = substr($correo_seguro[1],0,1).str_repeat("*", strlen($correo_seguro[1])-3).substr($correo_seguro[1], strlen($correo_seguro[1]) - 3, 3);
			return implode("@", $correo_seguro);

		}

		public static function genera_validador($form) {

			$validador = md5(uniqid(microtime(), true));
			$validador_time = time();
			$_SESSION['verificador'][$form.'_validador'] = array('validador'=>$validador, 'time'=>$validador_time);
                        return $validador;
		}

		public static function verifica_validador($form, $validador, $tiempo=0) {
			//Verifica validador

			if(!isset($_SESSION['verificador'][$form.'_validador'])){
				return false;
			}

			//Compara validador
			if ($_SESSION['verificador'][$form.'_validador']['validador'] !== $validador) {
				return false;
			}

			if($tiempo > 0){
				$tiempo = 43200;
				$validador_age = time() - $_SESSION['verificador'][$form.'_validador']['time'];
				if($validador_age >= $tiempo){
					return false;
				}
			}

			return true;
		}

		public static function detectaNavegador() {
			$navegador=array("IE","OPERA","MOZILLA","NETSCAPE","FIREFOX","SAFARI","CHROME");
			$sisoperativo=array("WIN","MAC","LINUX");

			$info['navegador'] = "N/A";
			$info['sisoperativo']= "N/A";

			//B�squeda del Navegador
			foreach($navegador as $parent){
				$s = strpos(strtoupper($_SERVER['HTTP_USER_AGENT']), $parent);
				$f = $s + strlen($parent);
				$version = substr($_SERVER['HTTP_USER_AGENT'], $f, 15);
				$version = preg_replace('/[^0-9,.]/','',$version);
				if ($s){
					$info['navegador'] = $parent;
					$info['version'] = $version;
				}
			}
			//B�squeda del S.O.
			foreach($sisoperativo as $val){
				if (strpos(strtoupper($_SERVER['HTTP_USER_AGENT']),$val)!==false)
					$info['sisoperativo'] = $val;
			}

			return $info;
		}

		public static function generaCodigoSeguridad(){
			$cadena = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
			//Obtenemos la longitud de la cadena
			$longitudCadena=strlen($cadena);
			//Se define la variable que va a contener el codigo de seguridad
			$security = "";
			//Se define la longitud del codigo
			$longitudSeguridad=10;
			//Creamos el codigo de seguridad
			for($i=1; $i<=$longitudSeguridad; $i++){
				//Definimos numero aleatorio entre 0 y la longitud de la cadena-1
				$pos=rand(0,$longitudCadena-1);
				//Vamos formando el codifo de seguridad en cada iteraccion del bucle, a�adiendo a la cadena $security la digito correspondiente a la posicion $pos en la cadena
				$security .= substr($cadena,$pos,1);
			}

			return $security;
		}

		public static function generaClave(){
			$cadena = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
			//Obtenemos la longitud de la cadena de caracteres
			$longitudCadena=strlen($cadena);
			//Se define la variable que va a contener la contrase�a
			$pass = "";
			//Se define la longitud de la contrase�a
			$longitudPass=10;
			//Creamos la contrase�a
			for($i=1; $i<=$longitudPass; $i++){
				//Definimos numero aleatorio entre 0 y la longitud de la cadena de caracteres-1
				$pos=rand(0,$longitudCadena-1);
				//Vamos formando la contrase�a en cada iteraccion del bucle, a�adiendo a la cadena $pass la letra correspondiente a la posicion $pos en la cadena
				$pass .= substr($cadena,$pos,1);
			}

			return $pass;
		}

		public static function formatFechaSQL2($fecha)
		{
			$dia = substr($fecha,0, 2); // dia
			$g01 = substr($fecha,2, 1); // '-'
			$mes = substr($fecha,3, 2); // mes
			$g02 = substr($fecha,5, 1); // '-'
			$ano = substr($fecha,6, 4); // a�o
			$fec = $ano."-".$mes."-".$dia;
			return $fec;
		}

		public static function codifica($parametro) {

			$llave 	= 'ws/colVet@2019';
			$iv 	= "abcdefgh12345678";
			$result = trim(openssl_encrypt($parametro, "AES-256-CBC" , $llave, NULL, $iv));

			return rawurlencode($result);

			//return base64_encode(base64_encode($parametro));

		}

		public static function decodifica($parametro) {

			$llave 	= 'ws/colVet@2019';

			$parametro = rawurldecode($parametro);
			$iv = "abcdefgh12345678";
			$result = trim(openssl_decrypt($parametro, "AES-256-CBC" , $llave, NULL, $iv));
			return $result;
			//return base64_decode(base64_decode($parametro));

		}

		public static function verifyNull( $p_value ) {
			return ( (strlen( $p_value ) == 0) ? NULL : $p_value );
		}

		public static function processTokenValues( $p_value ) {
			$detalle = null;
			if( strlen($p_value) > 0 ) {
				$token    = explode(',', $p_value);
				$cantidad = count($token);
				$contador = 0;
				$detalle  = '[';

				foreach($token as $rowComplete) {
					$row  = explode(':', $rowComplete);
					$contador++;
					if($cantidad != $contador)
						$detalle .= '{"id": "'.$row[0].'","name":"'.$row[1].'"},';
					else
						$detalle .= '{"id": "'.$row[0].'","name":"'.$row[1].'"}';
				}
				$detalle .= ']';
			}
			return $detalle;
		}

		public static function extensionArchivo($filename){
			return substr(strrchr($filename, '.'), 1);
		}

		public static function fileIsUploaded( $control, $mensajeError ) {
			global $mensaje;
			$archivo             = $_FILES[$control];
			$archivo_tamano      = $archivo['size']/1024;

			if($archivo_tamano > 0) {
				return true;
			} else {
				// $mensaje = 'Debe adjuntar '.$mensajeError;
				return false;
			}

		}

		public static function fileValidate( $control, $configExtension, $configPeso ) {
			global $mensaje;

			$archivo             = $_FILES[$control];
			$archivo_nombre      = $archivo['name'];
			$archivo_extension   = $archivo['type'];
			$archivo_tamano      = $archivo['size']/1024;
			$archivo_tmp_name    = $archivo["tmp_name"];

			if($archivo_tamano > 0) {
				require_once($_SERVER['DOCUMENT_ROOT'].'/varios/variables.php');
				require_once($_SERVER['DOCUMENT_ROOT'].'/varios/funciones.php');

				$arr_extensiones = explode("#", strtoupper( $configExtension ));
				if (!in_array(strtoupper(Funciones::extensionArchivo( strtolower( $archivo_nombre ) )), $arr_extensiones)) {

					$mensaje   = 'Extensión del archivo no permitida: '.Funciones::extensionArchivo($archivo_nombre);
					return false;
				}

				if( $archivo_tamano > $configPeso )
				{
					$mensaje   = 'Tamaño del archivo no permitido.';
					return false;
				}
				return true;
			} else {
				$mensaje   = 'Debe adjuntar un archivo.';
				return false;
			}
		}

		public static function fileUploadProductoFotografia( $control, $productoId, $carpeta ) {
			global $mensaje;

			require_once($_SERVER['DOCUMENT_ROOT'].'/varios/funciones.php');

			$archivo             = $_FILES[$control];
			$archivo_nombre      = $archivo['name'];
			$archivo_tamano      = $archivo['size']/1024;
			$archivo_tmp_name    = $archivo["tmp_name"];
			$archivo_mime        = $archivo['type'];
			$archivo_extension   = Funciones::extensionArchivo($archivo_nombre);

			$uploads_dir = $_SERVER['DOCUMENT_ROOT'].'/archivos/';
			Funciones::validar_directorio($uploads_dir);

			$uploads_dir = $uploads_dir.'producto/';
			Funciones::validar_directorio($uploads_dir);

			$uploads_dir = $uploads_dir.$carpeta.'/';
			Funciones::validar_directorio($uploads_dir);

			$archivo_nombre_bd = md5($archivo_nombre."-". date('Y-m-d H:i:s')).".".$archivo_extension;

			try {
				if(!move_uploaded_file($archivo_tmp_name, $uploads_dir.$archivo_nombre_bd )) {
					$mensaje  = 'Error al subir el archivo';
					return false;

				}

				//$uploads_dir = str_replace( $_SERVER['DOCUMENT_ROOT'], _SERVER_ALUMNO, $uploads_dir );
				$archivoLocation = $uploads_dir.$archivo_nombre_bd;

				require_once($_SERVER['DOCUMENT_ROOT'].'/clases/clase_archivo.php');
				$obj_archivo = new Archivo(null);
				$resultado = $obj_archivo->ingresarArchivo(
								$productoId,
								null,
								$archivo_nombre, $archivo_nombre_bd, $archivo_tamano, $archivo_extension,
								$archivo_mime,
								$uploads_dir
							);

				require_once($_SERVER['DOCUMENT_ROOT'].'/clases/clase_auditoria.php');
				$auditoria_sql = 'CALL SP_archivo_ingresa('.$productoId.', null, '.
									$archivo_nombre.'", "'.$archivo_nombre_bd.'", "'.$archivo_tamano.'", "'.$archivo_extension.'", "'.
									$archivo_mime.'", "'.$uploads_dir.'");';
				$auditoria_accion = "Insert";
				$auditoria_tabla  = "archivo";
				$auditoria_meta   = "Post";
				$auditoria = new Auditoria(null);
				$auditoria->agregaAuditoria('', $auditoria_accion, $auditoria_tabla, $auditoria_sql, $auditoria_meta);
				$auditoria->Close();

				if( !is_array($resultado)
					|| ( is_array($resultado) && $resultado[0] == 0 )
				 ) {
					unlink( $archivoLocation );
					$mensaje = 'No se pudo adjuntar el archivo';
					return false;
				} else {
					return true;
				}
			} catch (\Throwable $th) {
				return false;
			}

		}

		public static function inputVerification( $p_variableName ) {
			if( isset( $_SESSION[ $p_variableName ]) ) {
				echo ' value="'.$_SESSION[ $p_variableName ].'"';
			}
		}

		public static function selectVerification( $p_variableName, $p_value ) {
			$v_filter = '';
			if( isset($_SESSION[ $p_variableName ]) ) {
				$v_filter = $_SESSION[ $p_variableName ];
			}
			if( $p_value == $v_filter ) {
				echo ' selected';
			}
		}

		public static function auditAdd( $accion, $tabla, $sql, $metodo, $resultado, $mensaje ) {
			require_once($_SERVER['DOCUMENT_ROOT'].'/clases/clase_auditoria.php');
			$auditoria = new Auditoria(null);
			$auditoria->agregaAuditoriaResultado( $accion, $tabla, $sql, $metodo, $resultado, $mensaje );
			$auditoria->Close();
		}

		public static function mesFormatoLiteral( $p_numero ) {
			switch ($p_numero) {
				case 1:
					return 'enero';
					break;
				case 2:
					return 'febrero';
					break;
				case 3:
					return 'marzo';
					break;
				case 4:
					return 'abril';
					break;
				case 5:
					return 'mayo';
					break;
				case 6:
					return 'junio';
					break;
				case 7:
					return 'julio';
					break;
				case 8:
					return 'agosto';
					break;
				case 9:
					return 'septiembre';
					break;
				case 10:
					return 'octubre';
					break;
				case 11:
					return 'noviembre';
					break;
				case 12:
					return 'diciembre';
					break;
				default:
					return '';
					break;
			}
		}

		public static function verificar_posicion($pdf) {
			if($pdf->GetY() > 250) {
				$pdf->AddPage();
				return true;
			}
			return false;
		}

		public static function sesionActiva() {
			return isset($_SESSION[_SYSTEM_SESIONID.'userId']);
		}
	}
?>