// * 'clave_cuenta_email' = // * 'servidor_email' = // * 'remitente_email' = // // $_SESSION["ses_cuenta_mail"] = ""; // $_SESSION["ses_pass_cuenta"] = ""; // $_SESSION["ses_servidor_mail"] = ""; // El tipo de envio permite definir si se envian via email // los archivos adjuntos de los mensajes en el mismo mail // o se envia un link $_SESSION["ses_tipo_envio"] = "link"; /* "adjunto" */ // Solo si se trabaja con la interfaz con Moodle $_SESSION["ses_url_moodle"] = ""; /* Sino se utiliza dejar en blanco */ $_SESSION["ses_ancho_ticket"] = "300"; // Unidad de medida en pixeles // Nombre del grupo de templates (tpl) que utilizará $_SESSION["nombre_template"] = 'original'; // Indica si debe comprobar o no los cambios en los templates para ver si se tiene que recompilar el template o no. En producción sería recomendable dejarlo en “false” para mejorar el rendimiento. $_SESSION["chequeo_cambios_template"] = true; //valores para saber si se ejecutan los ganchos con el server de tickets $_SESSION["ses_usa_tickets"] = false; $_SESSION["ses_clave_tickets"] = '¡guar*387#3w'; $_SESSION["ses_servidor_ticket"] = 'localhost.localdomain'; // Variable para restringir el acceso de exploradores normales a interfaz WAP // Descomentar si no se desea restringir el explorador // true - restringe // false - se puede navergar wap con cualquier explorador // $restringirExplorador = true; $restringirExplorador = false; //comentar si se quiere restringir el explorador ?> raiseErrorFn = 'verificarError'; $objCC->Connect($_SESSION["sCon"], $_SESSION["ses_sUser"], $_SESSION["sPasswd"], $_SESSION["sDB"]); // Si la conexion es ODBC el locale se setea en US // para poder unificar el pasaje de paremtros DATE // los parametros tipo DATE se pasan con $db->DBDate() if (strtoupper($_SESSION["sTipoCon"]) == "ODBC") $objCC->SetDateLocale('US'); self::$conexion = $objCC; } return self::$conexion; } } class logger { static protected $path; static function add($txt) { if (! USAR_LOG ) return; if(!isset(self::$path)) { $archivo = str_replace('/','_',$_SERVER["SCRIPT_NAME"]); self::$path = guarani_dir() . '/log/log__' . date('Ymd__His') . '__' . $archivo; file_put_contents(self::$path, $txt . "\n"); } else { file_put_contents(self::$path, $txt . "\n", FILE_APPEND); } } } function guarani_dir() { return realpath(dirname(dirname(dirname(__FILE__)))); } /** * Convierte una fecha expresada como string a un mktime * $cadena: la cadena a convertir * $formatocadena: el formato en que viene la fecha en $cadena * debe contener "d", "m", "Y" * $separador: el separador de dias meses y años */ function cadena_a_mktime ($cadena, $formatocadena) { for ($i=0; $i 0) $_SESSION["ses_sALIAS"] = '/' . (substr($_SERVER["SCRIPT_NAME"], 1, $pos - 1)) . '/'; else $_SESSION["ses_sALIAS"] = '/'; } /** * Para que el envio de mensajes no vaya a la pantalla, archivo php.ini deberia tener * configuracion: * * display_errors = Off * error_reporting= E_ALL * log_errors = On * error_log = * */ function verificarError($tipo, $accion, $nro_error, $msg_error, $sql, $inputarr, $obj) { // Solo genero el output del error si el error es < 0 y no se estan // mostrando los errores en pantalla. if ($nro_error != 0 && ini_get('log_errors') == 1 && ini_get('display_errors') == 0) user_error("La sentencia SQL: " . $sql . " provocó error nro: " . $nro_error . " [" . $msg_error . "]", E_USER_NOTICE ); } /** * Para G3W * Devuelve una conexión con los datos del * archivo parametros.inc.php */ function conectar($strCheck = true) { return obj_conexion::conectar(); } /** * Para WAP * Devuelve una conexión con los datos del * archivo parametros.inc.php */ function w_conectar($strCheck = true) { if (!isset($_SESSION["sTipoCon"])) { $url = apPATH . "w_notificarse.php?fueraFrameSet=1&fStatus=-1&fMsg=".urlencode("La sesión finalizó"); header("Location: $url"); exit; } $objCC = ADONewConnection($_SESSION["sTipoCon"]); $objCC->raiseErrorFn = 'verificarError'; $objCC->Connect($_SESSION["sCon"], $_SESSION["ses_sUser"], $_SESSION["sPasswd"], $_SESSION["sDB"]); // Si la conexion es ODBC el locale se setea en US // para poder unificar el pasaje de paremtros DATE // los parametros tipo DATE se pasan con $db->DBDate() if (strtoupper($_SESSION["sTipoCon"]) == "ODBC") $objCC->SetDateLocale('US'); return $objCC; } /** * Verifica si el usuario está presente en la sessión. */ function IsSessionOK() { if (!isset($_SESSION["ses_sUser"])) { header("Location: ../notificarse.php?fueraFrameSet=1&fStatus=-1&fMsg=".urlencode("La sesion finalizó. Tenes que ingresar de nuevo al sistema.")); exit; } } /** * Recupera y controla la unidad académica de la sesión */ function getUA() { if (!isset($_SESSION["ses_unidad_academica"])) { header("Location: ../notificarse.php?fueraFrameSet=1&fStatus=-1&fMsg=".urlencode("La sesion finalizó. Tenes que ingresar de nuevo al sistema.")); exit; } else return $_SESSION["ses_unidad_academica"]; } /** * Recupera y controla el usuario de la sesión */ function getUsuario() { if (!isset($_SESSION["ses_sUsuario"])) { header("Location: ../notificarse.php?fueraFrameSet=1&fStatus=-1&fMsg=".urlencode("La sesion finalizó. Tenes que ingresar de nuevo al sistema.")); exit; } else return $_SESSION["ses_sUsuario"]; } /** * Recupera y controla el Nro. de Inscripción de la sesión */ function getNroInscripcion() { if (!isset($_SESSION["ses_nro_inscripcion"])) { header("Location: ../notificarse.php?fueraFrameSet=1&fStatus=-1&fMsg=".urlencode("La sesion finalizó. Tenes que ingresar de nuevo al sistema.")); exit; } else return $_SESSION["ses_nro_inscripcion"]; } /** * Formatea la fecha entregada por los * stored procedures de Informix. */ function ConvertirFecha($fecha,$tipo) { $nom_dias = array(0 => "Domingo", 1 => "Lunes", 2 => "Martes", 3 => "Miércoles", 4 => "Jueves", 5 => "Viernes", 6 => "Sábado"); if ($tipo === 4 or $tipo === 6) { $date = mktime(0,0,0, substr($fecha,5,2), substr($fecha,8,2), substr($fecha,0,4) ); } switch($tipo) { // De 2005-12-20 -> 20/12/2005 case 1: if (strlen($fecha)>0 && strlen($fecha)<11 && !(substr($fecha,4,1)=='/' || substr($fecha,4,1)=='-')) { // si viene un date $fecha = date('Y-m-d', cadena_a_mktime($fecha,$_SESSION["ses_formato_fecha_web"])); } return substr($fecha,8,2) . "/" . substr($fecha,5,2) . "/" . substr($fecha,0,4); // De 19-12-2001 -> 19/12/2001 case 2: return substr($fecha,0,2) . "/" . substr($fecha,3,2) . "/" . substr($fecha,6,4); // De 19/12/2005 -> 2005-12-19 00:00:00 case 3: return substr($fecha,6,4) . "-" . substr($fecha,3,2) . "-" . substr($fecha,0,2) . ' 00:00:00'; // De 2005/12/20 -> Lunes 20/12/2005 case 4: return $nom_dias[date("w",$date)] . ", " . substr($fecha,8,2) . "/" . substr($fecha,5,2) . "/" . substr($fecha,0,4); // De 2005/12/20 -> 20-12-2005 case 5: return str_replace("/","-",$fecha); // De 2005/12/20 -> Lunes case 6: return $nom_dias[date("w",$date)]; // De 12:34:55 -> 12:34 case 7: return substr($fecha,0,2) . ':' . substr($fecha,3,2); // De 2005-12-19 01:20:00 -> 19/12/2005 01:20 case 8: return substr($fecha,8,2) . "/" . substr($fecha,5,2) . "/" . substr($fecha,0,4) . " " . substr($fecha,11,2) . ':' . substr($fecha,14,2); // De 2005-12-20 -> 20-12-2005 case 9: return substr($fecha,8,2) . "-" . substr($fecha,5,2) . "-" . substr($fecha,0,4); // De 20/12/2005 -> 2005-12-20 (Se utiliza junto con $objCon->DBDate('2005-12-20') para sp con param ingreso tipo date) case 10: return substr($fecha,6,4) . "-" . substr($fecha,3,2) . "-" . substr($fecha,0,2); // De 20/12/2005 01:30 -> 2005-12-20 01:30 (Se utiliza junto con $objCon->DBTimeStamp('2005-12-20 01:30:00') para sp con param ingreso tipo date) case 11: return substr($fecha,6,4) . "-" . substr($fecha,3,2) . "-" . substr($fecha,0,2) . " " . substr($fecha,11,5) . ":00"; } } /** * Encripta las URLs G3W */ function ArmaLink($link) { //Cambia el algoritmo de encriptar //se genera un id para indexar el arreglo en $_SESSION prefijado con "par_oper_" //posicion del caracter ? dentro del link $pos = strpos($link,"?"); if ($pos > 1) { //$crypt = new proCrypt(); //$crypt->__set("key", qs_clave); //$crypt->__set("iv", vector_inicial); //parte del url $url = substr(trim($link),0,$pos); //parte del querystring $qs = substr(trim($link),$pos+1,strlen(trim($link))- $pos); $token = uniqid(null, true); parse_str($qs,$qs_parseado); foreach($qs_parseado as $key => $value) { $_SESSION["par_oper_" . $key][$token] = $qs_parseado[$key]; } //encripto el querystring //$qs = "?qs=" . urlencode($crypt->encrypt("idToken=" . $token)); $qs = "?qs=" . $token; return $url . $qs; } else { return $link; } } function ArmaLinkMenu($link) { //Cambia el algoritmo de encriptar //se genera un id para indexar el arreglo en $_SESSION prefijado con "par_menu_" //posicion del caracter ? dentro del link $pos = strpos($link,"?"); if ($pos > 1) { //$crypt = new proCrypt(); //$crypt->__set("key", qs_clave); //$crypt->__set("iv", vector_inicial); //parte del url $url = substr(trim($link),0,$pos); //parte del querystring $qs = substr(trim($link),$pos+1,strlen(trim($link))- $pos); $token = uniqid(null, true); parse_str($qs,$qs_parseado); foreach($qs_parseado as $key => $value) { $_SESSION["par_menu_" . $key][$token] = $qs_parseado[$key]; } //encripto el querystring //$qs = "?qs=" . urlencode($crypt->encrypt("idToken=" . $token)); $qs = "?qs=" . $token; return $url . $qs; } else { return $link; } } /** * Encripta las URLs WAP y pasa los parametros por Session en un array[par_pagwap_nombrepagina][idSel] * y en el link pasa por get el idSel=$i para que la proxima pagina sepa cual fue la selección * $i es un numero que identifica las posibles selecciones que se pasan ala proxima pagina. */ function ArmaLinkWap($link,$i,$pagina) { return ArmaLink($link); // //posicion del caracter ? dentro del link // $pos = strpos($link,"?"); // $pagina = basename($pagina); // $crypt = new MD5Crypt(); // // if ($pos > 1) // { // //parte del url // $url = substr(trim($link),0,$pos); // //parte del querystring // $qs = substr(trim($link),$pos+1,strlen(trim($link))- $pos); // //encripto el querystring // parse_str ($qs,$salida); // // // $_SESSION["par_pagwap_".$pagina][$i] = $salida; // $qs = "?qs=" . urlencode($crypt->Encrypt("idSel=".$i,qs_clave)); // // return $url . $qs; // } // else // { // $qs = "?qs=" . urlencode($crypt->Encrypt("idSel=".$i,qs_clave)); // return $link . $qs; // } } /** * Encripta las URLs G3W para activacion de claves y/o cuentas de correo */ function ArmaLinkActivar($link) { //Cambia el algoritmo de encriptar //se genera un id para indexar el arreglo en $_SESSION prefijado con "par_oper_" //posicion del caracter ? dentro del link $pos = strpos($link,"?"); if ($pos > 1) { $crypt = new proCrypt(); $crypt->__set("key", qs_clave); $crypt->__set("iv", vector_inicial); //parte del url $url = substr(trim($link),0,$pos); //parte del querystring $qs = substr(trim($link),$pos+1,strlen(trim($link))- $pos); //encripto el querystring $qs = "?qse=" . urlencode($crypt->encrypt($qs)); return $url . $qs; } else { return $link; } } /** * Retorna en el arreglo $parametros * las variables de $_GET, $_POST y $_SESSION * ademas: * "nombre_operacion" * "titulo_pagina" * "sub_pagina_XX" * "PagAnterior" * "PagSiguiente" */ function Cargar_parametros() { if (USAR_LOG_DUMP_PARAMETROS) { $dump_get = "\n_GET_\n" . print_r($_GET, true) . "\n\n"; $dump_post ="\n_POST_\n" . print_r($_POST, true). "\n\n"; $dump_ses = "\n_SESSION_\n" .print_r($_SESSION, true). "\n\n"; logger::add($dump_get); logger::add($dump_post); logger::add($dump_ses); } //$objCon = conectar(); //print_r(basename($_SERVER['SCRIPT_NAME'])); /* if (isset($_POST["operacion"])) { echo 'existe operacion en post'; die; } */ if (isset($_GET["qs"])) { // $qs_crypt = Desencriptar($_GET["qs"]); // parse_str($qs_crypt,$qs); $qs = array('idToken' => $_GET["qs"]); $parametros = array_merge($_POST,$qs); // echo "--------------------- parametros ----------------------------------------"; // print "
";
//      print_r($_SESSION);
//      print "
"; // echo "-------------------------------------------------------------------------". "
"; } elseif (isset($_GET["qse"])){ $qs_crypt = Desencriptar($_GET["qse"]); parse_str($qs_crypt,$qs); $parametros = array_merge($_POST,$qs); } else $parametros = $_POST; foreach ($_SESSION as $key => $value) { if (substr($key,0,4) == "ses_") $parametros[substr($key,4)] = $_SESSION[$key]; if ((substr($key,0,9) == "par_oper_") && (isset($parametros["idToken"])) && (isset($_SESSION[$key][$parametros["idToken"]]))) { $parametros[substr($key,9)] = $_SESSION[$key][$parametros["idToken"]]; } if ((substr($key,0,9) == "par_menu_") && (isset($parametros["idToken"])) && (isset($_SESSION[$key][$parametros["idToken"]]))) { $parametros[substr($key,9)] = $_SESSION[$key][$parametros["idToken"]]; if ($key == "par_menu_nombre_operacion") $_SESSION["ses_nombre_operacion"] = $_SESSION[$key][$parametros["idToken"]]; } // Cargo en parametros las variables de session de la seleccion correspondiente a la pagina anterior if ((substr($key,0,11) == "par_pagwap_") && (isset($parametros["idSel"])) && (isset($_SESSION[$key][$parametros["idSel"]])) && ((substr($key,11) == basename($_SERVER['SCRIPT_NAME'])))) { $parametros = array_merge($parametros,$_SESSION[$key][$parametros["idSel"]]); } } // echo "--------------------- parametros luego de la carga ----------------------------------------"; // print "
";
//     print_r($parametros);
//     //print_r($_GET);
//     print "
"; // echo "-------------------------------------------------------------------------". "
"; // Ahora saco la pagina siguiente y anterior si es que existen... $sPagina = preg_replace('#^' . $parametros["sALIAS"] . '#' , '', $_SERVER["SCRIPT_NAME"]); if (array_key_exists("operacion", $parametros)) { $pagid = str_replace('=','',base64_encode($sPagina)); $id_cache = 'cache_hilo_paginas_net__' . $parametros["operacion"] . "_". $pagid. "_" . $parametros["interfaz"]; $path = guarani_dir() . '/temp/' . $id_cache . '.php'; if(USAR_CACHE && is_file($path)) { logger::add('PAGINAS NET: cache: ' . $id_cache); require_once($path); $dao = new $id_cache(); $rsPaginas = $dao->get_datos(); } else { logger::add('PAGINAS NET: DB'); $objCon = conectar(); $strSQL = "EXECUTE PROCEDURE sp_paginas_net('" . $parametros["operacion"] . "','". $sPagina . "'," . $parametros["interfaz"] . ");"; $rs = $objCon->Execute($strSQL); $rsPaginas = $rs->getArray(); $rs->close(); if (USAR_CACHE) { $clase = new clase_datos($id_cache); $clase->agregar_metodo_datos('get_datos', $rsPaginas); $clase->guardar($path); } } if (!empty($rsPaginas)){ $iOrden = $rsPaginas[0][2]; $_SESSION["ses_titulo_pagina"] = $rsPaginas[0][3]; $parametros["titulo_pagina"] = $rsPaginas[0][3]; foreach($rsPaginas as $pagina) { if ($iOrden > $pagina[1] && ($pagina[1] != $pagina[2])) $parametros["PagAnterior"] = $parametros["sALIAS"] . $pagina[0]; else $parametros["PagSiguiente"] = $parametros["sALIAS"] . $pagina[0]; /* Tengo carpetas? * * ACA SE PODRIA METER UN CACHE * */ if ($pagina[4] != "") { $objCon = conectar(); $strSQL = "EXECUTE PROCEDURE sp_paginas('" . $pagina[4] . "')"; //echo $strSQL; $rsSubPag = $objCon->Execute($strSQL); //print_r($rsSubPag->getArray()); if (!$rsSubPag->EOF) { $parametros["sub_paginas"] = $rsSubPag->RecordCount(); $i = 1; while (!$rsSubPag->EOF) { $parametros["sub_pagina_" . $i]["titulo"] = $rsSubPag->fields[2]; $parametros["sub_pagina_" . $i]["pagina"] = $rsSubPag->fields[3]; $rsSubPag->MoveNext(); $i++; } } } } } } // no permito usuarios de mas de 20 caracteres if (array_key_exists("fUsuario",$parametros)) $parametros["fUsuario"] = substr($parametros["fUsuario"],0,20 ); if (array_key_exists("usuario",$parametros)) $parametros["usuario"] = substr($parametros["usuario"],0,20); // para debuguear muestra en la parte superior los parametros que se pasan por URL // print "
";
     // print_r($parametros);
     // print "
"; /* foreach ($parametros as $cadena) { if (TieneSubCadenasInvalidasParametros($cadena)) { // print "
";
//    	  print_r($parametros);
//	      print "
"; $url = ArmaLink(sPATH."www/notificarse.php?" . "fStatus=". urlencode(-1) . "&fMsg=" . urlencode("-746, La información enviada tiene caracteres no permitidos.") ."&operacion=".urlencode($parametros["operacion"])); header("Location: $url"); exit; } } */ switch (basename($_SERVER['SCRIPT_NAME'])) { case "operaciones.php": foreach ($_SESSION as $key => $value) { if (substr($key, 0, 9) == "par_menu_") unset($_SESSION[$key]); } break; case "elegirUbicacion.php": case "notificarse.php": case "armarReporte.php": case "armarReportePlanilla.php": case "bajarArchivo.php": case "cargarCampo.php": case "verDetalle.php": case "verEscalaNotas.php": case "print.lib.php": case "barra.inc.php": break; default: foreach ($_SESSION as $key => $value) { if (substr($key, 0, 9) == "par_oper_") unset($_SESSION[$key]); } } if (USAR_LOG_DUMP_PARAMETROS) { $dump_par = "\n_PARAMETROS_\n" .print_r($parametros, true). "\n\n"; logger::add($dump_par); } return $parametros; } /** * Reemplaza un null por * un mensaje de texto */ function nvl($str, $valor = "Sin información.") { if ($str == "" || $str == '//' || $str == '() ') return $valor; else return $str; } /** * Retorna las magnitudes de * bytes en formato legible. */ function parseBytes($val) { $val = trim($val); $ultimo = $val{strlen($val)-1}; switch($ultimo) { case 'k': case 'K': return ((int)$val) . ' kilobytes'; break; case 'm': case 'M': return ((int)$val) . ' megabytes'; break; default: return ((int)$val) . ' bytes'; } } /** * Retorna las distintas magnitudes * su equivalente en bytes. */ function return_bytes($val) { $val = trim($val); $ultimo = $val{strlen($val)-1}; switch($ultimo) { case 'k': case 'K': return (int) $val * 1024; break; case 'm': case 'M': return (int) $val * 1048576; break; default: return $val; } } /** * Ejecuta un script php y retorna su contenido * El parametro $template es el path del archivo * a ejecutar. */ function procesarTemplate($template, &$parametros, &$objCon) { $content = file_get_contents($template); ob_start(); $content = str_replace('<'.'?php','<'.'?',$content); eval('?'.'>'.trim($content).'<'.'?'); $content = ob_get_contents(); ob_end_clean(); return $content; } /** * Funcion interna utilizada por * ordenarRS. */ function comparar($aa, $bb,$campos, $i) { if ($i == count($campos)) return 0 ; $arr = explode(",",$campos[$i][1]); $a = $aa[$campos[$i][0]]; $b = $bb[$campos[$i][0]]; switch ($arr[0]) { // Es un date, formato: 2005/12/20 -> 20/12/2005 case "date": { if (count($arr)==3) { $_a = cadena_a_mktime($a,$arr[2] ); $_b = cadena_a_mktime($b,$arr[2] ); } else { if (substr($a,4,1) == '/') { $_a = mktime(0,0,0, substr($a,5,2), substr($a,8,2), substr($a,0,4) ); $_b = mktime(0,0,0, substr($b,5,2), substr($b,8,2), substr($b,0,4) ); } else { $_a = strtotime($a); $_b = strtotime($b); } } if ($_a == $_b) return comparar($aa, $bb,$campos,$i + 1); elseif (strcasecmp($arr[1],"DESC") == 0 && ($_a < $_b)) return 1; elseif (strcasecmp($arr[1],"DESC") == 0 && ($_a > $_b)) return -1; elseif (strcasecmp($arr[1],"ASC") == 0 && ($_a < $_b)) return -1; elseif (strcasecmp($arr[1],"ASC") == 0 && ($_a > $_b)) return 1; }; break; // Es un datetime, formato: 2001-12-19 13:15:00 case "datetime": { $_a = mktime(substr($a,11), substr($a,14), substr($a,17), substr($a,5,2), substr($a,8,2), substr($a,0,4) ); $_b = mktime(substr($b,11), substr($b,14), substr($b,17), substr($b,5,2), substr($b,8,2), substr($b,0,4) ); if ($_a == $_b) return comparar($aa, $bb,$campos,$i + 1); elseif (strcasecmp($arr[1],"DESC") == 0 && ($_a < $_b)) return 1; elseif (strcasecmp($arr[1],"DESC") == 0 && ($_a > $_b)) return -1; elseif (strcasecmp($arr[1],"ASC") == 0 && ($_a < $_b)) return -1; elseif (strcasecmp($arr[1],"ASC") == 0 && ($_a > $_b)) return 1; }; break; // Es un string case "string": { if (strcmp($a,$b) == 0) return comparar($aa, $bb,$campos,$i + 1); elseif (strcasecmp($arr[1],"DESC") == 0 && (strcmp($a,$b) < 0)) return 1; elseif (strcasecmp($arr[1],"DESC") == 0 && (strcmp($a,$b) > 0)) return -1; elseif (strcasecmp($arr[1],"ASC") == 0 && (strcmp($a,$b) < 0)) return -1; elseif (strcasecmp($arr[1],"ASC") == 0 && (strcmp($a,$b) > 0)) return 1; }; break; // Por defecto es un integer o un float. default: { if ($a == $b) return comparar($aa, $bb,$campos,$i + 1); elseif (strcasecmp($arr[1],"DESC") == 0 && $a < $b) return 1; elseif (strcasecmp($arr[1],"DESC") == 0 && $a > $b) return -1; elseif (strcasecmp($arr[1],"ASC") == 0 && $a < $b) return -1; elseif (strcasecmp($arr[1],"ASC") == 0 && $a > $b) return 1; } } } /** * Funcion interna utilizada por * ordenarRS. */ function cmp($a, $b) { return comparar($a,$b,$a["campos"],0); } /** * Ordena un result set siguiendo los campos * detallado en el arreglo campos. * * Ej: ordenarRS($rs, array(0 => array(0,"date,DESC"), 1 => array(3,"string,ASC"), 2 => array(4,"integer,DESC"))) */ function ordenarRS($rs, $campos) { $arr = $rs->GetArray(); return ordenarArrayRs($arr, $campos); } function ordenarArrayRs($arr, $campos) { for ($i=0;$i < count($arr);$i++) { $arr[$i]["campos"] = $campos; } usort($arr,'cmp'); for ($i=0;$i < count($arr);$i++) { unset($arr[$i]["campos"]); } return $arr; } /** * Retorna un arreglo con dos posiciones: * pos 0: el arreglo filtrado. * pos 1: los bloques a mostrar. */ function scrollArray($arr, $ind, $field) { // Cantidad de bloques a mostrar $cant_blocks = 20; if (floor(count($arr)/10)<$cant_blocks) { $cant_blocks = floor(count($arr)/10); } if ($cant_blocks==0) { $cant_blocks = 1; } // Si el indice es -1 entonces muestro el // primer bloque if ($ind == -1) { $ind = 0; } $blocks = array(); $count_rs = count($arr); if ($count_rs < $cant_blocks) { $ret = $arr; $blocks[0]["inf"] = $arr[0][$field]; $blocks[0]["sup"] = $arr[$count_rs - 1][$field]; } else { $ret = array(); $k = 0; $divisor = round($count_rs / $cant_blocks); $blocks[0]["inf"] = $arr[0][$field]; if ($divisor == 1) $ret = $arr; else for ($i=0; $i < $count_rs; $i++) { if (floor($i / $divisor) == $ind) { $ret[$k] = $arr[$i]; $k++; } if (floor($i / $divisor) != floor(($i + 1) / $divisor)) { $blocks[floor($i / $divisor)]["sup"] = $arr[$i][$field]; if ($i < count($arr)-1) { $blocks[floor(($i + 1) / $divisor)]["inf"] = $arr[$i + 1][$field]; } } } $blocks[count($blocks)-1]["sup"] = $arr[$count_rs - 1][$field]; } return array(0 => $ret, 1 => $blocks); } function filtrarRS($rs, $campoRS, $condicion, $valor) { $ret = array(); if (!$rs || $rs->EOF) return $ret; $arr = $rs->GetArray(); $borro = false; for ($i=0; $i < count($arr); $i++) { if (is_numeric($valor)) { if (is_numeric($arr[$i][$campoRS])) eval('$borro=' . $arr[$i][$campoRS] . ' ' . $condicion. ' ' . $valor . ';'); else eval('$borro="' . $arr[$i][$campoRS] . '" ' . $condicion. ' ' . $valor . ';'); } else { if (is_numeric($arr[$i][$campoRS])) eval('$borro=' . $arr[$i][$campoRS] . ' ' . $condicion. ' "' . $valor . '";'); else eval('$borro="' . $arr[$i][$campoRS] . '" ' . $condicion. ' "' . $valor . '";'); } if (! $borro) $ret[] = $arr[$i]; } return $ret; } /** * Lee un parametro del sistema */ function leerParametro($obj, $nombreParam) { $strSQL = "execute procedure sp_param_sistema('" . $nombreParam . "')"; $rsParamSistema = $obj->Execute($strSQL); if (!$rsParamSistema || $rsParamSistema->EOF) return ''; return $rsParamSistema->fields[0]; } /** * Recupera la fecha del servidor * de bases de datos. */ function fechaActual($obj) { $srtSQL = "EXECUTE PROCEDURE fecha_actual()"; $rsFecha = $obj->Execute($srtSQL); if (!$rsFecha || $rsFecha->EOF) return ''; return $rsFecha->fields[0]; } /** * Envia un mail. * * $direcciones es un arreglo tal: * * $direcciones[0]["e_mail"] = "dariom@gmail.com"; * $direcciones[0]["apellido"] = "Dario"; * $direcciones[0]["nombres"] = "Martinez"; * $direcciones[1]["e_mail"] = "otro@gmail.com"; * $direcciones[1]["apellido"] = "Dario2"; * $direcciones[1]["nombres"] = "Martinez2"; * * $archivos es un arreglo tal: * * $archivos["../cursos/temp24.tmp"] = "documento 1.doc" */ function enviarMail($objCon, $from_name, $titulo, $direcciones, $cuerpoHTML, $archivos) { if (count($direcciones) == 0) return false; /* Para enviar correo HTML, puede definir la cabecera Content-type. */ $cabeceras = "MIME-Version: 1.0\r\n"; $cabeceras .= "Content-type: text/html; charset=iso-8859-1\r\n"; $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Subject = $titulo; // $mail->SMTPDebug = true; for ($i=0; $i < count($direcciones);$i++) { if (array_key_exists("e_mail",$direcciones[$i])) { $mail->AddBCC($direcciones[$i]["e_mail"],$direcciones[$i]["nombres"] . $direcciones[$i]["apellido"] ); } } if ($_SESSION["ses_tipo_envio"] == "adjunto" && is_array($archivos)) { foreach ($archivos as $path => $nombre) { $mail->AddAttachment($path,$nombre); } } /* Esto se hace en el template ahora !!!! if ($_SESSION["ses_tipo_envio"] != "adjunto") { if ($archivos != '') { $cuerpoHTML .= '
'; foreach ($archivos as $path => $nombre) { $cuerpoHTML .= '' . $nombre . '
'; } } } */ $mail->FromName = $from_name; $usuario_smtp = leerParametro($objCon, 'cuenta_email'); $servidor = leerParametro($objCon, 'servidor_email'); $clave_smtp = leerParametro($objCon,'clave_cuenta_email'); $remitente = leerParametro($objCon, 'remitente_email'); $mail->From = $remitente; $mail->Host = $servidor; $mail->Mailer = "smtp"; //Verificar si su servidor de correo utiliza o no //autentificacion if ($usuario_smtp <> '') { $mail->SMTPAuth = true; $mail->Username = $usuario_smtp; $mail->Password = $clave_smtp; } else { $mail->SMTPAuth = false; } // $mail->SMTPDebug = true; $mail->IsHTML(true); $mail->Body = $cuerpoHTML; $ret = $mail->Send(); return $ret; } /** * Traduce los codigo de turnos a formato * leible. */ function DecodeTurno($turno,$acute=true) { switch ($turno) { case "M": return ($acute === true ? "Mañana" : "Mañana"); break; case "T": return "Tarde"; break; case "N": return "Noche"; break; default : return "Sin definir"; } } function DecodeTipoInscExam($tipo_inscripcion) { switch ($tipo_inscripcion) { case "L": return "Libre"; case "R": return "Regulares"; case "A": return "Libres y Regulares"; case "T": return "Tesis"; default : return ; } } /** * Guarda un valor durante la ejecucion de la operacion */ function setCampo($id_cache, $nombres, &$arr) { $_SESSION["__campo__" . $id_cache] = array(); for ($i=0; $i < count($arr); $i++) { $row = array(); foreach ($nombres as $nombre => $pos) $row[$nombre] = $arr[$i][$pos]; $_SESSION["__campo__" . $id_cache][] = $row; } } /** * Recupera un valor durante la ejecucion de la operacion */ function getValorCampo($id_cache, $pares_busc, $nombre_ret) { $arr = $_SESSION["__campo__" . $id_cache]; for ($i =0 ; $i < count($arr); $i++){ $intEncontro = 1; foreach ($pares_busc as $nombre => $valor){ if ($arr[$i][$nombre] <> $valor){ $intEncontro = 0; break; } } if ($intEncontro == 1) return $arr[$i][$nombre_ret]; } } /** * Verifica un RS, si no esta seteado devuelve -1 * si esta seteado y es EOF devuelve -2 * sino de echo 'imprimo array session
'; vuelve 0 */ function verificarRs($rs) { if (!$rs) { return -1; } else { if ($rs->EOF) { return -2; } else { return 0; } } } /** * Dado un Qs devuelve el contenido desencriptado en un string * **/ function Desencriptar($qs) { $crypt = new proCrypt(); $crypt->__set("key", qs_clave); $crypt->__set("iv", vector_inicial); $desencriptado = $crypt->decrypt($qs); $desencriptado = trim($desencriptado); return $desencriptado; } /** * ArmarAtras(): * SOLO WAP * Arma el link para la pagina anterior (se hizo de esta manera ya que si se pasaban * los datos por url, el tamaño del qs no era soportado por el gatway de algunas empresas de * celulares ) * * EJ; $url = ArmarAtras(); * ?> * ">Volver * $value) { if (substr($key,0,11) == "par_pagwap_") { unset ($_SESSION[$key]); } } } /** * Verifica si el browser tiene las cookies habilitadas * **/ function cookiesHabilitadas() { if(isset($_COOKIE['micookie'])) { return true; } else if(!isset($_GET['ok'])) { if(!isset($_COOKIE['micookie'])) { setcookie('micookie', 'valor'); header('Location: '.$_SERVER["SCRIPT_NAME"]. '?ok=1'); exit; } } else { if(!isset($_COOKIE['micookie'])) { if(isset($_GET['ok'])) { return false; } else { setcookie('micookie', 'valor'); header('Location: '.$_SERVER["SCRIPT_NAME"]. '?ok=1'); exit; } } else { return true; } } } /** * generarClave() genera una nueva clave , se pasan como parametros la unidad academica y * la identificacion del usuario para tener la posibilidad de usar estos datos como parte * de la nueva clave, y $ cant es la cantidad de caracteres de la clave **/ function generarClave($unidad_academica, $identifica, $cant, $es_numerica) { if ($es_numerica=='S') { $str = "234567890234567890234567890"; } else { $str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz234567890"; } // del str se quitan la L minuscula y el 1 para evitar confusiones $cad = str_shuffle($str); return substr($cad,0,$cant); } /** * Duplica las comillas en una cadena * para el envio al servidor * Informix con D'Angelo da error * con D''Angelo no * */ function DuplicarComillas ($pCadena){ // array de cadenas inválidas $arrCadenaInvalida = array ("'",'"'); // array de cadenas sustitutas $arrCadenaSustituta = array ("''", '""'); // retorno la cadena con las comillas duplicadas return str_replace($arrCadenaInvalida, $arrCadenaSustituta,$pCadena); } function DuplicarComillasSimples ($pCadena){ // retorno la cadena con las comillas simples duplicadas return str_replace("'", "''",$pCadena); } function DuplicarComillasDobles ($pCadena){ // retorno la cadena con las comillas dobles duplicadas return str_replace('"', '""',$pCadena); } function TieneSubCadenasInvalidas($CheckStr){ $SubCadInvalidas= array("|","%27","'",'"'); foreach ($SubCadInvalidas as $cadena) { if (strstr($CheckStr,$cadena)) { return true; } } return false; } function es_numerico($value) { return (preg_match ("/^-?\d+$/",$value)==1); } function muestra_template( $params = array() ) { // Directorio actual de std_functions.lib.php $dir_actual = dirname(__FILE__); require_once($dir_actual.'/../../smarty/Smarty.class.php'); // Obtengo el template seleccionado if (!isset($_SESSION['nombre_template']) or $_SESSION['nombre_template'] == '') { $nombreTemplate = 'original'; } else { $nombreTemplate = $_SESSION['nombre_template']; } // Obtengo si debe o no verificar el chequeo de modificacion de los templates if (!isset($_SESSION['chequeo_cambios_template']) or $_SESSION['chequeo_cambios_template'] == '') { $chequeo = false; } else { $chequeo = true; } // Armo el directorio principal $dir = $dir_actual . '/../../templates/' . $nombreTemplate; //$archivo = basename( $_SERVER['SCRIPT_NAME'], '.php') . '.tpl'; if (isset($params["template_a_mostrar"])) { $archivo = $params["template_a_mostrar"]; } else { $archivo = basename( $_SERVER['SCRIPT_NAME'], '.php') . '.tpl'; } $template = new Smarty(); //$template->caching = true; $template->compile_check = $chequeo; // Configuro los directorios de smarty $template->template_dir = $dir.'/templates/'; $template->compile_dir = $dir.'/templates_c/'; $template->config_dir = $dir.'/configs/'; $template->cache_dir = $dir.'/cache/'; $template->plugin_dir = $dir.'/plugins/'; $template->config_load('configuracion.ini'); // Asigno los parametros al template if ( is_array($params) ) { if (!empty($params)) { foreach ($params as $key => $valor) { $template->assign($key, $valor); } } } else { $template->assign('parametro', $params); } $template->assign('version', getVersion() ); $template->display($archivo); exit(); } global $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; if (isset($_SESSION['debug']) and ($_SESSION['debug'] == true)) { ini_set('display_errors', '1'); error_reporting (E_ALL); } ?>