<?php
/*
  ===============================================================

  inGenio X
  http://ingenio.area421.com

  Created by 
  Julian Moreno Hidalgo (Software developer)
  Jesus Moreno Hidalgo (Communication's tree)

  inGenio X is a free software licensed under CC-GNU GPL

  ===============================================================
*/
	if (!defined("IGNX")) { die("Attempt..."); }

/*****************************************************
  * Funciones para crear fechas
  *
  * crear_fecha_segundos()
  * 	retorna los segundos desde 01/01/1970
  * $m -> mes de dos cifras
  * $d -> dia de dos cifras
  * $a -> anyo de cuatro cifras
  * 	--> se usa solo en la entrada admin
  *
  * crear_fecha_hoy()
  *		igual que la anterior pero dia en curso
  *
  * salida_fecha_latin()
  * 	retorna una fecha del tipo 25/10/2008
  * 	--> se usa tambien en la salida admin
  *
  * salida_fecha_literal()
  * 	retorna una fecha del tipo Dec 12, 2008
  *
*****************************************************/

function crear_fecha_segundos ($m, $d, $a)
{
	$fecha = mktime(0,0,0,$m, $d, $a);
	return $fecha;
}

function crear_fecha_hoy()
{
	$hoy = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
	return $hoy;
}

function salida_fecha_latin ($seg)
{
	$fecha = date("d/m/Y", $seg);
	return $fecha;
}

function salida_fecha_literal ($seg)
{
	$fecha = date("F d, Y", $seg);
	return $fecha;
}


/*****************************************************
  * Funcion para crear una lista select 
  * de registros mostrados por pagina en listado
  *
  * $num_selec -> es la cantidad de opciones maxima de la lista
  *					sin contar el $num_max y la funcion todos
  * $num_max -> es el numero que se requiere por defecto
  *
*****************************************************/

function mostrar_listado ($num_selec,$num_max)
{
	$total = ($num_max / $num_selec) < $num_selec ? floor($num_max / $num_selec) : $num_selec ;
	$num_mostrar = array();
	$num_mostrar[0] = $num_max;
	for ($i=0; $i<$total; $i++)
	{
		if ((floor($num_mostrar[$i] / 2) != 0 ))
		{
			$num_mostrar[$i+1] = floor($num_mostrar[$i] / 2) ;
		
		}
		
	}
	return $num_mostrar;

}
/*****************************************************
  * Funcion para generar un .js y escribir el email
  *
  * $arc_w -> es el archivo que se va a escribir
  * $email -> es el email que se desea instalar
  * $link -> es el link para ver en web
  *
*****************************************************/

function generar_email ($arc_w,$email,$link)
{

	// abre archivo
	$f = fopen($arc_w,"w");
	
	// rotulo
	fwrite($f,"// Archivo autogenerado por inGenio X para enmascarar el email\n");
	
	// escritura de funcion
	fwrite($f,"function ingenio_cm() {\n// incluir el email\nvar email = '".$email."';\n");
	fwrite($f,"// incluir el link\nvar link = '".$link."';\n");
	fwrite($f,"document.write('<a href=\"mailto:'+email+'\">'+link+'</a>');\n}");
	
	// cierra archivo
	fclose($f);
}
/*****************************************************
  * Funcion para generar una lista de archivos para tinyMCE
  *
  * $dir -> es el directorio donde se encuentran los archivos
  * $arc_w -> es el archivo que se va a escribir
  * $ruta -> es la ruta para que aparezcan en web los archivos
  *
*****************************************************/

function generar_lista_archivos ($dir,$arc_w,$ruta)
{
	// extensiones de archivos
	// imagenes
	$dir_img = array(".jpg",".jpeg",".png",".gif");
	// archivos multimedia
	$dir_media = array(".swf",".mov",".wmv",".mp4",".rm",".avi",".mpg");
	
	$escr_img = "";
	$escr_media = "";
	
	// abre archivo
	$f = fopen($arc_w,"w");
	
	// rotulo
	fwrite($f,"// Archivo autogenerado por inGenio X para tinyMCE\n");
	
	// inicio de imagenes
	fwrite($f,"// imagenes\n");
	fwrite($f,"var tinyMCEImageList = new Array(");
		
		$dirt = opendir($dir);
		while (($arc = readdir($dirt)) !== false )
		{			
			for ($i=0; $i<count($dir_img); $i++)
			{
				if (strstr($arc,$dir_img[$i]))
				{
					$escr_img .= "\n[\"".$arc."\", \"".$ruta.$arc."\"],";
				
				}
						
			}
		}
		closedir($dirt);
	// quita la coma final	
	$escr_img = substr($escr_img, 0, -1);
	
	fwrite($f,$escr_img."\n);");
	
	// retorno
	fwrite($f,"\n");
	
	// inicio de media
	fwrite($f,"// media\n");
	fwrite($f,"var tinyMCEMediaList = new Array(");
	
		$dirt = opendir($dir);
		while (($arc = readdir($dirt)) !== false )
		{
			for ($i=0; $i<count($dir_media); $i++)
			{
				if (strstr($arc,$dir_media[$i]))
				{
					$escr_media .= "\n[\"".$arc."\", \"".$ruta.$arc."\"],";
				
				}
						
			}
			
		}
		closedir($dirt);
	// quita la coma final	
	$escr_media = substr($escr_media, 0, -1);
	
	fwrite($f,$escr_media."\n);");

	// cierra archivo
	fclose($f);

}

/*********************************************************
  *	funciones para SEF URL
  *
  *	Se llama -> SEFcompleURL(titulo)
  *
  *	SEFcompleURL = retorna el titulo convertido
  *	  en palabras sin caracteres especiales y separadas por guiones
  *   Opcional -> quita palabras con SEFpalabras()
  *
  *	$titulo = es la cadena que hay que convertir
  *
  *	SEFpalabras = quita palabras de $num de letras
  *
/********************************************************/

function SEFcompleURL($titulo)
{
	//convierte a minusculas
	$titulo = strtolower(trim($titulo));
	// borrar palabras
	//$titulo = SEFpalabras($titulo,"2");
	// quita acentos
	$titulo = htmlentities($titulo);
	$titulo = preg_replace ('/&([a-zA-Z])(uml|acute|grave|circ|tilde|cedil|ring);/', '$1', $titulo);
	$titulo = html_entity_decode($titulo);	
	// borra caracteres especiales
	$titulo = preg_replace ('/[^[:space:]a-zA-Z0-9]/', '', $titulo);
	// sustituye espacios por guiones
	$titulo = str_replace(" ","-",trim($titulo));	
	$titulo = strtolower($titulo);
	return $titulo;
}

function SEFpalabras($titulo,$num)
{	
	$titulo = explode(" ",$titulo);
	$titulo_s = "";
		for ($n = 0; $n < count($titulo); $n++) {
			if (strlen($titulo[$n]) > $num)
			{
				$titulo_s .= $titulo[$n]." ";
			}		
		}
	
	return $titulo_s;
 }


/**********************************************************
  * Funcion generar_imagenes:
  *
  *		Genera una imagen de $ancho_max y de $alto_max partiendo
  *		de una imagen gif|jpg|jpeg|png
  *
  *    	@ruta_or_foto = lugar donde se encuentra la foto a generar
  *    	@ruta_sal_foto = lugar donde se van a llevar las dos fotos
  *    	@img = el nombre completo de la foto
  *    	@ancho_max= el numero de pixeles de ancho de la foto normal
  *    	@alto_max  = el numero de pixeles de alto de la foto normal
  *    	$id_img  = el id de la foto como prefijo del nombre
  *    	$modo  = es el modo para realizar diversas funciones
  *
  *
  **********************************************************/

function generar_imagenes($ruta_or_foto, $ruta_sal_foto, $img, $ancho_max, $alto_max, $id_img, $modo = '')
{
   	// directorio
    if (!$ruta_sal_foto) $ruta_sal_foto = $ruta_or_foto;

    // prefijos de modo
    if ($modo == "amp") { $prenom = "F"; $prenom2 = "FA";}  // imagenes
    if ($modo == "mult3") { $prenom = "MT";} // multimedia (embed)
    if ($modo == "mult") { $prenom = "MT"; $prenom2 = "M";} // multimedia (flv|mp3)
    if ($modo == "cab") { $prenom = "FC"; } // items
    if ($modo == "cat") { $prenom = "CAT"; } // categrias
    if ($modo == "arc") { $prenom = "ARC"; } // archivos publicos
    if ($modo == "arcp") { $prenom = "ARCP"; } // archivos privados
    if ($modo == "lk") { $prenom = "LK"; } // links
    if ($modo == "pag") { $prenom = "PAG"; } // paginas adicionales
    if ($modo == "can") { $prenom = "CAN"; } // canales
    if ($modo == "cata") { $prenom = "CATA"; } // catalogos
    if ($modo == "catp") { $prenom = "CATP"; } // categorias privadas
    

    // ancho, alto y tipo de la imagen original
    list($or_w, $or_h, $or_t) = getimagesize($ruta_or_foto.$img);
    
    // ratio
    $ratio = ($or_h / $or_w);

    // crear la imagen
    if ($or_t == '1')
    { 
         // original
         $or_image = imagecreatefromgif($ruta_or_foto.$img);
	
	} else if ($or_t == '2') {
         
         // original
         $or_image = imagecreatefromjpeg($ruta_or_foto.$img);
    
    } else if ($or_t == '3') {
         
         // original
         $or_image = imagecreatefrompng($ruta_or_foto.$img);
	
	}
    
    if ($modo == "amp" || $modo == "mult") // generar la ampliacion
    {
    
		if ($or_t == '1')
		{ 
			// transparentes
			imagecolortransparent($or_image, imagecolorallocate($or_image, 0, 0, 0));
			imagealphablending($or_image, false);
			imagesavealpha($or_image, true);
         	
         	// generar ampliacion
         	imagegif($or_image, $ruta_sal_foto.$prenom2.'_'.$id_img.'_'.$img);
		
		} else if ($or_t == '2') {
         	
         	// generar ampliacion
			imagejpeg($or_image, $ruta_sal_foto.$prenom2.'_'.$id_img.'_'.$img, 100);
		
		} else if ($or_t == '3') {
         
			// transparentes
			imagealphablending($or_image, false);
			imagesavealpha($or_image, true);
         	
         	// generar ampliacion
			imagepng($or_image, $ruta_sal_foto.$prenom2.'_'.$id_img.'_'.$img);
		
		}   
   
	} // fin ampliacion


    // resto de imagenes
    // cambiar imagen?
    if ($or_w > $ancho_max || $or_h > $alto_max) {
         	
         	
         	if ($modo == "amp" || $modo == "mult" || $modo == "mult3")
         	{
         	
            	// es imagen vertical (alto)
            	if ($or_h > $ancho_max && $or_w < $or_h) {
            		$rs_h = $alto_max;
           			$rs_w = $rs_h / $ratio;
            
            	// es imagen horizontal (ancho)
            	} else if ($or_h > $ancho_max && $or_w > $or_h) {
                  	$rs_w = $ancho_max;
                  	$rs_h = $ratio * $rs_w;
            
            	// es cuadrada
            	// se modifica solo el ancho
            	} else {
                 	$rs_w = $ancho_max;
                 	$rs_h = $ratio * $rs_w;
            	}
         	
         	} else {
         	
                 // se modifica solo el ancho
                 $rs_w = $ancho_max;
                 $rs_h = $ratio * $rs_w;
         	
         	}
    	
        $rs_image = imagecreatetruecolor($rs_w, $rs_h);
		
    	// remuestrear la imagen
    	if ($or_t == '1') // GIF
    	{ 
			// transparentes
			imagecolortransparent($rs_image, imagecolorallocate($rs_image, 0, 0, 0));
			imagealphablending($rs_image, false);
			imagesavealpha($rs_image, true);
        	imagecopyresampled($rs_image, $or_image, 0, 0, 0, 0, $rs_w, $rs_h, $or_w, $or_h);
			
         	imagegif($rs_image, $ruta_sal_foto.$prenom.'_'.$id_img.'_'.$img);

		} else if ($or_t == '2') { // JPG
         
        	imagecopyresampled($rs_image, $or_image, 0, 0, 0, 0, $rs_w, $rs_h, $or_w, $or_h);

         	imagejpeg($rs_image, $ruta_sal_foto.$prenom.'_'.$id_img.'_'.$img, 100);
         	    
   	 	} else if ($or_t == '3') { // PNG
         
			// transparentes
			imagealphablending($rs_image, false);
			imagesavealpha($rs_image, true);
        	imagecopyresampled($rs_image, $or_image, 0, 0, 0, 0, $rs_w, $rs_h, $or_w, $or_h);

         	imagepng($rs_image, $ruta_sal_foto.$prenom.'_'.$id_img.'_'.$img);
	
		}

		// borrar cache
		imagedestroy($rs_image);
        
   	// no cambiar imagen
    } else {
             
             
    	// imagen original
    	if ($or_t == '1') // GIF
    	{ 
			// transparentes
			imagecolortransparent($or_image, imagecolorallocate($or_image, 0, 0, 0));
			imagealphablending($or_image, false);
			imagesavealpha($or_image, true);

         	imagegif($or_image, $ruta_sal_foto.$prenom.'_'.$id_img.'_'.$img);

		} else if ($or_t == '2') { // JPG
         
         	imagejpeg($or_image, $ruta_sal_foto.$prenom.'_'.$id_img.'_'.$img, 100);
         
		} else if ($or_t == '3') { // PNG
         
			// transparentes
			imagealphablending($or_image, false);
			imagesavealpha($or_image, true);

         	imagepng($or_image, $ruta_sal_foto.$prenom.'_'.$id_img.'_'.$img);
	
		}
		
    } // fin cambiar imagen?

    return true;

}
 
/**********************************************************
* Funcion de redireccion
**********************************************************/
function Redir( $url )  
{
	header("Location: ".$url);
	exit;
}

/**********************************************************
* Funcion que genera fecha GTM 00-00-00 00:00:00
**********************************************************/
function datetime_gmt()
{
	return gmdate("Y-m-d H:i:s");
}

/**********************************************************
  * Funcion de paginas:
  
// $total = es el numero de items que se buscan
// $sig = es el numero de inicio del limite
// $pag = es el numero de pagina actual
// $items_pag = es el numero de items fijado en la configuracion
// $ruta = es la ruta de la paginacion (debe incluir -> &sig=)

************************************************************/

function paginas_gral ($total, $sig, $pag, $items_pag, $ruta)
{
	$paginas = '';
	$ini = $sig;
	$antes = $ini-$items_pag;
	$sigue = $ini+$items_pag;
	$resto = $total-$ini;
	$numpag=ceil($total/$items_pag);
		
	
	// cantidad maxima de paginas a mostrar
	// antes y despues de la actual
	// sin contar primera y ultima
	$cm = CONFIG_4;
	
	if ($numpag > $cm)
	{
		if ($pag <= $cm)
		{ 
			$c=1; 
		
		} else { 
		
		$c=$pag-$cm;
		
		}
		
	
		if (($pag+$cm) > $numpag)
		{
	
			$t=$numpag;
	
		} else {

			$t=$pag+$cm;	
	
		}
	
	} else {
		
		$c=1; $t=$numpag;
	}


	// si hay registros
	if ($total > 0 && $total > $items_pag)
	{
	
		// anterior
		if ($ini > 0)
		{
			$paginas .= '<a href="'.$ruta.$antes.AMPER.'pag'.IGUAL.($pag-1).'">'.LEN_36.'</a>&nbsp;&nbsp;';
	
		}

		// primera pagina
		if ($c > 1)
		{
			
			$mas = $c > 2 ? "...&nbsp;" : "";			
			$ahora = '0';
			$paginas .= '<a href="'.$ruta.$ahora.AMPER.'pag'.IGUAL.'1">1</a>&nbsp;'.$mas;
			
		}
		
		// paginas intermedias
		for($i=$c;$i<=$t;$i++)
		{
			if ($i==1)
			{ 
				$ahora = '0'; 
			} else if ($i>=2)
			{ 
				$ahora = $items_pag*($i-1);
			}
			
			if ($i==$pag)
			{
				$paginas .= '<strong>'.$i.'</strong>&nbsp;';
			
			} else {
			
				$paginas .= '<a href="'.$ruta.$ahora.AMPER.'pag'.IGUAL.$i.'">'.$i.'</a>&nbsp;';
			
			}
		}
		
		// ultima pagina
		if ($t < $numpag)
		{

			$mas = $t < $numpag-1 ? "...&nbsp;" : "";
			$ahora = $items_pag*($numpag-1);
			$paginas .= $mas.'<a href="'.$ruta.$ahora.AMPER.'pag'.IGUAL.$numpag.'">'.$numpag.'</a>&nbsp;';
			
		}
		
		// siguiente
		if ($resto > $items_pag)
		{
			$paginas .= '&nbsp;&nbsp;<a href="'.$ruta.$sigue.AMPER.'pag'.IGUAL.($pag+1).'">'.LEN_35.'</a>';
	
		}
		
		return $paginas;
	
	} else {
		
		// retorno vacio
		return $paginas;	
	}


}

/*****************************************************
  * Funciones para carga manual de archivos
  *
  * getfilesdir() -> es la que extrae los archivos del directorio
  *					 con las extensiones especificadas
  *
  * $dir -> es el directorio donde se encuentran los archivos o la ruta del directorio.
  *			No debe terminar en barra /
  * $tabla -> es la tabla donde se busca el archivo
  * $ext -> son las extensiones en el formato ej. (jpg|gif|png)
  *
  * existefiledb() -> es la que reconoce si exite el archivo en la base.
  *					  Es llamada en la funcion anterior
  *
  * $filename -> es el nombre del archivo a buscar
  * $tabla -> es la tabla donde se busca el archivo
  *
*****************************************************/

function existefiledb ($filename,$tabla)
{
	$q = myquery("SELECT * FROM ".$tabla." WHERE archivo='".$filename."'","[core.funciones]");
	$cnt_file = mynumrows($q);
	
	// si no existe retorna '0'
	return $cnt_file;

}

function getfilesdir( $dir, $tabla = '', $ext = '' )
{
	$dh = opendir($dir);
	$files = array();
	while (false !== ($filename = readdir($dh))) 
	{
		
		if ($tabla != "")
		{
		
			if ( !is_dir($dir.'/'.$filename) && existefiledb($filename,$tabla) == 0 && strpos($filename," ") === false && substr($filename,0,1) != "." && $filename != "index.php")
			{
				if (trim($ext) == "")
				{
					
					$files[] = substr($dir."/".$filename,3);
				
				} else {
				
					if (preg_match('/\.'.$ext.'$/i', $filename))
					{
						$files[] = substr($dir."/".$filename,3);
					}
			
				}
			}
			
		} else {

			if ( !is_dir($dir.'/'.$filename) && strpos($filename," ") === false && substr($filename,0,1) != "." && $filename != "index.php")
			{
				if (trim($ext) == "")
				{
					
					$files[] = substr($dir."/".$filename,3);
				
				} else {
				
					if (preg_match('/\.'.$ext.'$/i', $filename))
					{
						$files[] = substr($dir."/".$filename,3);
					}
			
				}
			}
				
		}
	
	} // del while
	
	closedir($dh);
	return $files;
	
}

/*****************************************************
  * Funcion para listar directorios de un directorio especificado
  *
  * $dir -> es el directorio donde se encuentran los directorios.
  *			No debe terminar en barra /
  *
*****************************************************/

function getdircomple ($dir)
{
	$dh = opendir($dir);
	$dirs = array();
	while (false !== ($dirname = readdir($dh))) 
	{
		if (is_dir($dir))
		{
			$dirs[] = $dirname;
	
		}
	} // del while

	closedir($dh);
	return $dirs;

}

/**********************************************************
* Funciones para identificar si exite un archivo desde una URL
* $filePath -> es la URL donde se encuentra el archivo
* get_headers_x() -> carga las cabeceras para PHP < 5.x
**********************************************************/

function file_exists_url($filePath)
{
	if (substr($filePath,0,7) == "http://")
	{
		$AgetHeaders = get_headers_x($filePath);
		if (preg_match("|200|", $AgetHeaders[0])) // HTTP/1.1 200 OK
		{
    		return true;
    		
		} else {
		
    		return false;
		}
	
	} else {
	
		return file_exists($filePath);
	
	}
}				

function get_headers_x($url,$format=0)
{
        
	// PHP < 5.x
	if(!function_exists('get_headers'))
	{        

		$headers = array();
    	$url = parse_url($url);
    	$host = isset($url['host']) ? $url['host'] : '';
    	$port = isset($url['port']) ? $url['port'] : 80;
    	$path = (isset($url['path']) ? $url['path'] : '/') . (isset($url['query']) ? '?' . $url['query'] : '');
    	$fp = fsockopen($host, $port, $errno, $errstr, 15);
    	if ($fp)
    	{
        	$hdr = "GET $path HTTP/1.1\r\n";
        	$hdr .= "Host: $host \r\n";
        	$hdr .= "Connection: Close\r\n\r\n";
        	fwrite($fp, $hdr);
        	while (!feof($fp) && $line = trim(fgets($fp, 1024)))
        	{
            	if ($line == "\r\n") break;
            	list($key, $val) = explode(': ', $line, 2);
            	if ($format)
                	if ($val) $headers[$key] = $val;
                	else $headers[] = $key;
            	else $headers[] = $line;
        	}
        	fclose($fp);
        	return $headers;
    	} else {
    	return false;
   		}
    
     } else {
     
     	// PHP > 5.x
     	return get_headers($url,$format);
     
     }
}

/**********************************************************
* Funcion para encontrar la cadena buscada y devolver
* lo anterior o el resto, con o sin la cadena que se busca
* $str -> es la cadena donde se busca
* $chars -> es la cadena que se busca
* $modo -> es el modo:
*			1=antes sin $chars | 2=resto sin $chars
*			3=antes con $chars | 4=resto con $chars
**********************************************************/

function str_antes_resto( $str, $chars, $modo )
{
	$num = strpos($str, $chars);
	// si integer
	if (is_int($num))
	{
		if ($modo == 1)
		{
			return substr($str, 0, $num);
		
		} else if ($modo == 2)
		{
			return substr($str, $num + strlen($chars));
		
		} else if ($modo == 3)
		{
		
			return substr($str, 0, $num + strlen($chars));
		
		} else if ($modo == 4)
		{
		
			return strstr($str, $chars);
		
		}
	
	} else {
	
		return $str;
	}
	
}

/**********************************************************
* Funcion para reconocer el 'peso' de un archivo dado
* $url -> es la URL donde esta el archivo
* $n -> identifica el modo de calculo (true|false)
*				true -> modo URL normal
*				false -> modo URL externa
*
* NOTA: utiliza la funcion get_headers_x() para el modo URL externa
*
**********************************************************/

function filesize_comple( $url, $n=true )
{

	if ($n)
	{
	
		$x = filesize ($url);
	
	} else {
		
		$x = array_change_key_case(get_headers_x($url, 1),CASE_LOWER);
		$x = $x['content-length'];
	}
	
	$file_size = array_reduce (array (" B", " Kb", " Mb"), create_function ('$a,$b', 'return is_numeric($a)?($a>=1024?$a/1024:number_format($a,2).$b):$a;'), $x);
	
	return $file_size;
	
}


?>