/** * Abre una conexion en base a la configuracion de la BD * @return \PDO */ protected function getConexion($nameDB = NULL) { //Leo archivo de configuracion de BD si es la primera vez if (self::$config_db == NULL) { if (defined('JSON_CONFIG_BD')) { $json_basededatos = file_get_contents(PATHAPP . CONFIGURATION . JSON_CONFIG_BD); } else { general_error('Data Base', 'The configuration file of the Data Base is not especified', 'error_bd'); } self::$config_db = json_decode($json_basededatos, TRUE); } //Consulta la bd actual si no se indico opcion if ($nameDB == NULL) { $nameDB = self::$config_db['actual_db']; } //Cargo las opciones de la bd actual $cbd = self::$config_db[$nameDB]; $this->currentDB = $nameDB; $this->currentConfiguration =& self::$config_db[$nameDB]; //Abro una conexion try { // 5.3.5 o < y luego 5.3.6 o > //Cuidado que charset=utf8 puede no funcar para versiones viejas y luego en opciones //superiores habria q usar PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8" //Por ahora uso las 2 y anda la que anda //Creo el dsn $dsn = $cbd['driverbd'] . ':host=' . $cbd['hostname'] . ';dbname=' . $cbd['database'] . ';charset=' . $cbd['charset']; //Abro la conexion $gbd = new PDO($dsn, $cbd['user'], $cbd['pass'], array(PDO::ATTR_PERSISTENT => $cbd['persistent'], PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . $cbd['charset'])); if (ENVIRONMENT == 'development') { $gbd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } else { $gbd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); } //Retorno la conexion return $gbd; } catch (PDOException $e) { throw new PDOException($e->getMessage(), $e->getCode()); } }
/** * Ejecuta el cron indicado en el primer parametro pasado al cron */ function execute_cron_controller($params) { //Quito guiones iniciales $cronClass = ltrim($params[1], '-'); $dir = PATHAPP . 'source/crons/' . $cronClass . '.php'; //Analiza si existe el archivo if (file_exists($dir)) { require $dir; $dir = explode("/", $cronClass); $class = $dir[count($dir) - 1]; $cron = new $class(); $method = 'index'; //El segundo parametro puede ser el metodo a ejecutar o una variable if (isset($params[2])) { //Quito posibles guiones iniciales y si el primer caracter es '?' indica que es metodo $arg2 = ltrim($params[2], '-'); if (substr($arg2, 0, 1) == '?') { $method = substr($arg2, 1); } } //Analiza si existe el metodo indicado if (method_exists($cron, $method)) { //Seteo los parametros, los parametros limpiados(los no usados aca) y ejecuto el metodo $cron->setParams($params); $ini = 2; if ($method != 'index') { $ini = 3; } $cron->setCleanParams(array_slice($params, $ini)); $cron->{$method}(); } else { general_error('Cron Controller Error', 'The Cron Controller ' . $cronClass . ' dont implement the method ' . $method . '()'); } } else { general_error('Cron Controller Error', 'The Cron Controller ' . $cronClass . ' dont exist'); } }
/** * Realiza una comprobacion de identidad * Analiza que no se este suplantando la identidad del verdadero usuario */ private function checkIdentity() { if (isset($_SESSION['REMOTE_ADDR']) && isset($_SESSION['HTTP_USER_AGENT'])) { if ($_SESSION['REMOTE_ADDR'] != $_SERVER['REMOTE_ADDR'] || $_SESSION['HTTP_USER_AGENT'] != $_SERVER['HTTP_USER_AGENT']) { general_error('Session - Identity', 'There are a proble with the Sesion identity'); } } else { $_SESSION['REMOTE_ADDR'] = $_SERVER['REMOTE_ADDR']; $_SESSION['HTTP_USER_AGENT'] = $_SERVER['HTTP_USER_AGENT']; } }
/** * Ejecuta el metodo renderizar de un componente * @param type $nombre * @param type $parametros * @param type url */ function execute_component($nombre, $parametros = NULL, $action = NULL) { $componente = NULL; if (isset($GLOBALS['componentes'][$nombre])) { $comp = $GLOBALS['componentes'][$nombre]; $dir = ""; if (!isset($comp['location'])) { $dir = PATHAPP . 'source/components/' . $comp['class'] . '.php'; } else { $dir = PATHAPP . $comp['location'] . '/' . $comp['class'] . '.php'; } require_once $dir; $dir = explode("/", $comp['class']); $class = $dir[count($dir) - 1]; $componente = new $class(); } if ($componente != NULL) { //Analiza si existe el metodo render if (method_exists($componente, 'rendering')) { if ($action != NULL) { if (method_exists($componente, $action)) { $componente->{$action}($parametros); } else { general_error('Component Error', 'The component ' . $nombre . ' dont implement the action ' . $action . '()'); } } return $componente->rendering($parametros); } else { general_error('Component Error', 'The component ' . $nombre . ' dont implement the method rendering()'); } } else { general_error('Component Error', "The component {$nombre} dont exists"); } }
/** * Devuelve el valor segun el archivo de internacionalizacion que se encuentre cargado * @param string $val_key * @param array $params * @return string */ function i18n_value($val_key, $params = NULL) { if (isset($this->i18nContent)) { if (isset($this->i18nContent[$val_key])) { $mensaje = $this->i18nContent[$val_key]; //Analiza si se pasaron parametros y si se pasaron cambia los valores correspondientes if ($params != NULL) { foreach ($params as $key => $valor) { $mensaje = str_replace(":{$key}", $valor, $mensaje); } } return $mensaje; } } else { general_error('I18n Error', 'Not specified any I18n file to make it run the i18n function'); } }
/** * Funcion para setear el codigo del header HTTP * @param int $codigo * @param string $text */ function set_estado_header($codigo = 200, $text = '') { //Arreglo con todos los codigos y su respectivo texto $estados = array(100 => 'Continue', 101 => 'Switching Protocols', 103 => 'Checkpoint', 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', 303 => 'See Other', 304 => 'Not Modified', 306 => 'Switch Proxy', 307 => 'Temporary Redirect', 308 => 'Resume Incomplete', 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported', 511 => 'Network Authentication Required'); //Me fijo que el codigo no sea un string if ($codigo == '' or !is_numeric($codigo)) { general_error('Error Estado HTTP', 'El codigo de estado debe ser numerico'); } //Veo si se paso o no texto y si no, le asigo el del codigo if (isset($estados[$codigo]) and $text == '') { $text = $estados[$codigo]; } //Me fijo que el texto no este vacio if ($text == '') { general_error('Error Estado HTTP', 'No status text available. Please check your status code number or supply your own message text.'); } //Cargo el protocolo $server_protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : FALSE; //Segun el protocolo modifico el header HTTP if (substr(php_sapi_name(), 0, 3) == 'cgi') { header("Status: {$codigo} {$text}", TRUE); } elseif ($server_protocol == 'HTTP/1.1' or $server_protocol == 'HTTP/1.0') { header($server_protocol . " {$codigo} {$text}", TRUE, $codigo); } else { header("HTTP/1.1 {$codigo} {$text}", TRUE, $codigo); } }
/** *Ejecuto el controlador correspondiente */ execute_controller($actual_controller); /** * Lee los filtros que se deben ejecutar despues del procesamiento de la variable config y delega trabajo a archivo filtros.php * En caso de que no haya filtros asignados no delega ningun trabajo */ if (count($filtros_despues) > 0) { execute_filters($filtros_despues); } } else { //Analizo si se pasa por lo menos un parametros (nombre cron), el primer parametros es el nombre del archivo por eso //pregunta por >= 2 if ($argc >= 2) { require PATHFRA . 'modules/cron.php'; execute_cron_controller($argv); } else { general_error('Cron Controller', 'There isent define any cron controller name'); } } /* * Si se esta calculando el tiempo, realiza el calculo y envia la respuesta */ if ($performance != NULL) { $performance->terminate(); $mensaje = 'The execution time of the APP is: ' . $performance->elapsed(); $titulo = 'Performance'; //Muestra la informacion al usuario display_information($titulo, $mensaje); }
/** * Ejecuta el controlador que mapeo anteriormente * @param type $controlador_esp */ function execute_controller($controlador_esp, $uriapp = NULL) { $dir = ""; if (!isset($controlador_esp['location'])) { $dir = PATHAPP . 'source/controllers/' . $controlador_esp['class'] . '.php'; } else { $dir = PATHAPP . $controlador_esp['location'] . '/' . $controlador_esp['class'] . '.php'; } $controlador = NULL; $dinamic_method = FALSE; $method = NULL; //Analiza si existe el archivo if (file_exists($dir)) { require_once $dir; $dir = explode("/", $controlador_esp['class']); $class = $dir[count($dir) - 1]; $controlador = new $class(); //Agrego los parametros URI $uri_params = uri_params($controlador_esp['url'], $uriapp); $dinamic_method = $uri_params['dinamic']; $method = $uri_params['method']; $controlador->setUriParams($uri_params['params']); //Analizo si hay parametros en la configuracion if (isset($controlador_esp['params'])) { foreach ($controlador_esp['params'] as $key => $value) { $controlador->{$key} = $value; } } } else { //Avisa que el archivo no existe general_error('Controller Error', 'The controller ' . $controlador_esp['class'] . ' dont exists'); } //Saca el metodo HTPP y en base a eso hace una llamada al metodo correspondiente $metodo = $_SERVER['REQUEST_METHOD']; if ($dinamic_method) { if (method_exists($controlador, $method)) { $controlador->{$method}(); } else { general_error('HTTP Method Error', "The HTTP method {$method} is not supported"); } } else { switch ($metodo) { case 'GET': $controlador->doGet(); break; case 'POST': $controlador->doPost(); break; case 'UPDATE': $controlador->doUpdate(); break; case 'DELETE': $controlador->doDelete(); break; case 'HEAD': $controlador->doHead(); break; case 'TRACE': $controlador->doTrace(); break; case 'URI': $controlador->doUri(); break; case "OPTIONS": $controlador->doOptions(); break; case 'CONNECT': $controlador->doConnect(); break; default: general_error('HTTP Method Error', "The HTTP method {$metodo} is not supported"); } } }
/** * Analiza si se envia a traves de un parametro get un error HTTP */ function catch_server_error() { if (isset($_GET['error_apache_enola'])) { //Cargo el archivo con los errores $errores = load_framework_file('information/errorsHTTP.ini'); $errores = parse_properties($errores); //Escribo el Log write_log('error_http', $errores[$_GET['error_apache_enola']]); //Muestro el error correspondiente general_error('Error ' . $_GET['error_apache_enola'], $errores[$_GET['error_apache_enola']], 'general_error', $_GET['error_apache_enola']); //No continuo la ejecucion exit; } }