<?php
//************************************************
//Funciones varias
//************************************************
set_error_handler("errordriver");

function validarEncode(string $cadena)
{
//************************************************
//validar string para que sea UTF-8
//Devuelve string UTF-8
//************************************************
$original_encoding = mb_detect_encoding($cadena, "UTF-8, ISO-8859-1, ISO-8859-15", true);
if ($original_encoding != 'UTF-8') {
    $cadena = mb_convert_encoding($cadena, 'UTF-8', $original_encoding);
}
return $cadena;
}

function escribirlog($mensaje)
{
/**
 * Escribe archivo de log de operaciones segun parametros de ubicacion definidos en ini
 * 
 * 
*/
global $RUTA_LOGS;
global $ARCHIVO_LOG;
$file = fopen($RUTA_LOGS . $ARCHIVO_LOG, "a");
fwrite($file, $mensaje . PHP_EOL);
echo $mensaje . PHP_EOL;
fclose($file);
}

function connecttodb()
{
//************************************************
//Genera la conxion a la base de datos, dejando el objeto listo para usar. 
//************************************************
    global $db;
    global $dbConn;
    try {
        $dbConn = new PDO("mysql:host={$db['DB_HOST']};port={$db['DB_PORT']};dbname={$db['DB_DATABASE']};charset=utf8mb4", $db['DB_USERNAME'], $db['DB_PASSWORD']);
        $dbConn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $dbConn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    } catch (PDOException $exception) {
        erroresPDO($exception);
    }
}


function errordriver($errno, $errstr, $errfile, $errline)
{
//************************************************
//Manejador de errores estandares
//Prepara mensaje con descripcion del error y enviar para su escritura en log
//detiene ejecucion del programa
//************************************************
global $INICIODATETIME;
$mensajeparalog = $INICIODATETIME . "| Error nro: " . $errno . " - " . $errstr . " Archivo: " . $errfile . " Linea: " . $errline . "|" . date('Y-m-d H:i:s');
escribirlog($mensajeparalog);
die();
}

function erroresPDO(PDOException $error)
{
//************************************************
//Manejador de errores de PDO
//Prepara mensaje con descripcion del error y enviar para su escritura en log
//Detiene ejecucion del programa
//************************************************
$mensaje = "Error en " . $error->getFile() . " linea " . $error->getLine() . " Descripcion: " . $error->getMessage() . "|" . date('Y-m-d H:i:s');
escribirlog(date('Y-m-d H:i:s') . "|" . $mensaje);
exit($error->getMessage());
}

function cadenaAleatoriaSegura($_caracter = 8)
{
    /**
     * genera una cadena aleatoria de caracteres basicos ASCCI. 
     * 
     * Se puede usar para nombre de archivos validos.
     *  
     */      
    $_chars = 'bcdfghjklmnprstvwxzaeiou0123456789';
    $_result = '';
    
    for($p = 0; $p < $_caracter; $p++){
        $_result .= ($p%2) ? $_chars[mt_rand(19, 33)] : $_chars[mt_rand(0, 18)];
    }
    return $_result;
}

function resizeimg($imagen,$tipo)
{
    /**
     * Funcion para redimencionar las imagenes traidas de FJ.
     * 
     * Tamaño seteado para ser usado en la pagina de Aliadas: 796 * 796
     */
    try {
        $filename = $imagen;
        $width = 796;
        $height = 796;
        list($width_orig, $height_orig) = getimagesize($filename);
        $ratio_orig = $width_orig / $height_orig;
        if ($width / $height > $ratio_orig) {
            $width = $height * $ratio_orig;
        } else {
            $height = $width / $ratio_orig;
        }
        $image_p = imagecreatetruecolor($width, $height);

        imagesavealpha($image_p, true);
        imagealphablending($image_p, false);
        $white = imagecolorallocatealpha($image_p, 255, 255, 255, 127);
        imagefill($image_p, 0, 0, $white);

        switch ($tipo) {
            case 'jpeg':
                $image = imagecreatefromjpeg($filename);
                imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
                imagejpeg($image_p, $imagen, 100);
                break;
            case 'jpg':
                $image = imagecreatefromjpeg($filename);
                imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
                imagejpeg($image_p, $imagen, 100);
                break;
            case 'png':
                //$output = `php -r "imagecreatefrompng('$filename');" 2>&1`;
                // $output = `php -r "ini_set('display_errors', '1');imagecreatefrompng('$filename');" 2>&1`;
		        $output = `"c:\\xampp\\php\\php.exe" -r "ini_set('display_errors', '1');imagecreatefrompng('$filename');" 2>&1`;
                if (!empty($output)){
                    return false; // handle error
                } 
                $image = imagecreatefrompng($filename);
                imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
                imagepng($image_p, $imagen, 0);
                break;
            case 'gif':
                $image = imagecreatefromgif($filename);
                imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
                imagegif($image_p, $imagen, 100);
                break;

            default:
                return false;

        }

        return true;
    } catch(Error $e){
        return false;
    }    



  

}

