Пример #1
0
 /**
  * Método para generar un mensaje de alerta, párametros que puede recibir: "icon: icono", "title: ", "subtext: ", "name: ", "autoOpen: "
  * @param type $text
  * @param type $params
  * @return type
  */
 public static function alert($text, $params = '')
 {
     //Extraigo los parametros
     $params = Util::getParams(func_get_args());
     $icon = isset($params['icon']) ? $params['icon'] : 'icon-exclamation-sign';
     $title = isset($params['title']) ? '<i class="' . $icon . '" style="padding-right:5px; margin-top:5px;"></i>' . $params['title'] : null;
     $subtext = isset($params['subtext']) ? "<p style='margin-top: 10px'>{$params['subtext']}</p>" : null;
     $name = isset($params['name']) ? trim($params['name'], '()') : "dwModal" . rand(10, 5000);
     $autoOpen = isset($params['autoOpen']) ? true : false;
     $modal = '<div class="modal hide" id="' . $name . '">';
     $modal .= '<div class="modal-header">';
     $modal .= '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>';
     $modal .= $title ? "<h3>{$title}</h3>" : '';
     $modal .= '</div>';
     $modal .= "<div class=\"modal-body\">{$text} {$subtext}</div>";
     $modal .= '<div class="modal-footer">';
     $modal .= '<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Aceptar</button>';
     $modal .= '</div>';
     $modal .= '</div>';
     $modal .= '<script type="text/javascript">';
     $modal .= "function {$name}() { \$('#{$name}').modal('show'); }; ";
     if ($autoOpen) {
         $modal .= '$(function(){ ' . $name . '(); });';
     }
     $modal .= "\$('#{$name}').on('shown', function () { \$('.btn-primary', '#{$name}').focus(); });";
     $modal .= '</script>';
     return $modal . PHP_EOL;
 }
Пример #2
0
 /**
  * Enruta el controlador actual a otro módulo, controlador, o a otra acción
  * @deprecated Se mantiene por legacy temporalmente
  * @example
  * Redirect::route_to("module: modulo", "controller: nombre", "action: accion", "parameters: 1/2")
  */
 public static function route_to()
 {
     static $cyclic = 0;
     $url = Util::getParams(func_get_args());
     if (isset($url['module'])) {
         $vars['module'] = $url['module'];
         $vars['controller'] = 'index';
         $vars['action'] = 'index';
         $vars['parameters'] = array();
         $vars['controller_path'] = $url['module'] . '/index';
     }
     if (isset($url['controller'])) {
         $vars['controller'] = $url['controller'];
         $vars['action'] = 'index';
         $vars['parameters'] = array();
         $vars['controller_path'] = isset($url['module']) ? $url['module'] . '/' . $url['controller'] : $url['controller'];
     }
     if (isset($url['action'])) {
         $vars['action'] = $url['action'];
         $vars['parameters'] = array();
     }
     if (isset($url['parameters'])) {
         $vars['parameters'] = explode('/', $url['parameters']);
     } elseif (isset($url['id'])) {
         // Deprecated
         $vars['parameters'] = array($url['id']);
     } else {
         $vars['parameters'] = array();
     }
     if (++$cyclic > 1000) {
         throw new KumbiaException('Se ha detectado un enrutamiento cíclico. Esto puede causar problemas de estabilidad');
     }
     Router::to($vars, TRUE);
 }
Пример #3
0
 /**
  * Constructor del Autenticador
  *
  * @param string $adapter
  */
 public function __construct()
 {
     $extra_args = Util::getParams(func_get_args());
     if (isset($extra_args[0])) {
         $adapter = $extra_args[0];
         unset($extra_args[0]);
     } else {
         $adapter = 'model';
     }
     $this->set_adapter($adapter, $this, $extra_args);
 }
Пример #4
0
 /**
  * Agrega un nodo a la salida XML
  * 
  * <code>
  * $xml->addNode(array('value' => 1, 'text' => 'Prueba', 'selected' => '0'));
  * $xml->addNode('value: 1', 'text: Prueba', 'selected: 0');
  * </code>
  * 
  * @param array $arr
  */
 public function add_node($arr)
 {
     $this->_xml->startElement('row');
     if (!is_array($arr)) {
         $arr = Util::getParams(func_get_args());
     }
     foreach ($arr as $key => $value) {
         $this->_xml->writeAttribute($key, $value);
     }
     $this->_xml->endElement();
 }
Пример #5
0
 public static function imagen($imagen, $alt = "", $w = 0, $h = 0)
 {
     $params = is_array($imagen) ? $imagen : Util::getParams(func_get_args());
     if ($alt != "") {
         $params["alt"] = str_replace(":", "###", $alt);
         $params["title"] = str_replace(":", "###", $alt);
     }
     if ($w != "") {
         $params["width"] = $w;
     }
     if ($h != "") {
         $params["height"] = $h;
     }
     $params["border"] = "0";
     return str_replace("###", ":", img_tag($params));
 }
Пример #6
0
 public static function formularioInicio($accion, $contenedor = "ajax", $referencia = 0)
 {
     $params = is_array($accion) ? $accion : Util::getParams(func_get_args());
     $params["enctype"] = "multipart/form-data";
     if ($referencia == 0) {
         $referencia = rand(0, 999999);
     }
     $params["name"] = "f" . $referencia;
     $params["id"] = "f" . $referencia;
     $opciones = 'target: "#' . $contenedor . '"';
     if (isset($params["success"])) {
         $opciones .= ', success: function() { ' . $params["success"] . ' }';
     }
     if (isset($params["before"])) {
         $opciones .= ', beforeSubmit: function() { ' . $params["before"] . ' }';
     }
     $code = '<script type="text/javascript"> $.metadata.setType("attr", "validate"); $(document).ready(function() { $("#' . $params["id"] . '").validate({});  $("#' . $params["id"] . '").ajaxForm({ ' . $opciones . ' }); }); </script>';
     $code .= form_tag($params);
     return $code;
 }
Пример #7
0
 /**
  * Enrutamiento interno
  * @example
  * Redirect::intern("module: modulo", "controller: nombre", "action: accion", "parameters: 1/2")
  */
 public static function internal()
 {
     static $cyclic = 0;
     $url = Util::getParams(func_get_args());
     $default = array('controller' => 'index', 'action' => 'index');
     $url['parameters'] = isset($url['parameters']) ? explode('/', $url['parameters']) : array();
     if (isset($url['module'])) {
         $vars = $url + $default;
         $vars['controller_path'] = $vars['module'] . '/' . $vars['controller'];
     } elseif (isset($url['controller'])) {
         $vars = $url + $default;
         $vars['controller_path'] = $vars['controller'];
     } else {
         $vars = $url;
     }
     if (++$cyclic > 1000) {
         throw new KumbiaException('Se ha detectado un enrutamiento cíclico. Esto puede causar problemas de estabilidad');
     }
     Router::to($vars, TRUE);
 }
Пример #8
0
 /**
  * Enruta a un modelo, controlador, accion y pasa parámetros      
  */
 public static function toRoute()
 {
     $url = Util::getParams(func_get_args());
     if (!isset($url['module'])) {
         $url['module'] = null;
     }
     if (!isset($url['action'])) {
         $url['action'] = 'index';
     }
     if (!isset($url['parameters'])) {
         $url['parameters'] = null;
     }
     if (Input::isAjax() && APP_AJAX) {
         $href = trim("{$url['module']}/{$url['controller']}/{$url['action']}/{$url['parameters']}/", '/');
         echo DwJs::setUrl($href);
     }
     if ($url['parameters'] == null) {
         Redirect::route_to("module: {$url['module']}", "controller: {$url['controller']}", "action: {$url['action']}");
     } else {
         Redirect::route_to("module: {$url['module']}", "controller: {$url['controller']}", "action: {$url['action']}", "parameters: {$url['parameters']}");
     }
 }
Пример #9
0
    public static function imagen($imagen, $alt = "", $radio = true)
    {
        $params = is_array($imagen) ? $imagen : Util::getParams(func_get_args());
        if ($alt != "") {
            $params["alt"] = str_replace(":", "###", $alt);
            $params["title"] = str_replace(":", "###", $alt);
        }
        $params["border"] = "0";
        if ($radio) {
            $params["id"] = "jcrop";
        } else {
            $params["id"] = "jcropRECTANGULO";
        }
        $code = str_replace("###", ":", img_tag($params));
        $code .= '<input type="hidden" size="4" id="imagen" name="imagen" value="' . $imagen . '" /> 
            			<input type="hidden" size="4" id="x1" name="x1" />
						<input type="hidden" size="4" id="y1" name="y1" /> 
						<input type="hidden" size="4" id="x2" name="x2" /> 
						<input type="hidden" size="4" id="y2" name="y2" /> 
						<input type="hidden" size="4" id="w" name="w" /> 
						<input type="hidden" size="4" id="h" name="h" />';
        return $code;
    }
Пример #10
0
 /**
  * Método para generar un mensaje de alerta, párametros que puede recibir: "icon: icono", "title: ", "subtext: ", "name: ", "autoOpen: "
  * @param type $text
  * @param type $params
  * @return type
  */
 public static function alert($text, $params = '')
 {
     //Extraigo los parametros
     $params = Util::getParams(func_get_args());
     $icon = isset($params['icon']) ? $params['icon'] : 'fa-exclamation-sign';
     $title = isset($params['title']) ? '<i class="' . $icon . '" style="padding-right:5px; margin-top:5px;"></i>' . $params['title'] : null;
     $subtext = isset($params['subtext']) ? "<p style='margin-top: 10px'>{$params['subtext']}</p>" : null;
     $name = isset($params['name']) ? trim($params['name'], '()') : "dwModal" . rand(10, 5000);
     $autoOpen = isset($params['autoOpen']) ? true : false;
     $button = isset($params['show_button']) && Filter::get($params['show_button'], 'lower') == 'false' ? false : true;
     $style = isset($params['style']) ? $params['style'] : '';
     $modal = '<div class="modal fade" tabindex="-1" id="' . $name . '" role="dialog" aria-labelledby="' . $name . '" aria-hidden="true">';
     $modal .= '<div class="modal-dialog" style="' . $style . '">';
     $modal .= '<div class="modal-content">';
     $modal .= '<div class="modal-header">';
     $modal .= '<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>';
     $modal .= $title ? "<h4 class=\"modal-title\">{$title}</h4>" : '';
     $modal .= '</div>';
     $modal .= "<div class=\"modal-body\">{$text} {$subtext}</div>";
     if ($button) {
         $modal .= '<div class="modal-footer">';
         $modal .= '<button class="btn btn-primary" data-dismiss="modal" aria-hidden="true">Aceptar</button>';
         $modal .= '</div>';
     }
     $modal .= '</div>';
     $modal .= '</div>';
     $modal .= '</div>';
     $modal .= self::open();
     $modal .= "function {$name}() { \$('#{$name}').modal('show'); }; ";
     if ($autoOpen) {
         $modal .= '$(function(){ ' . $name . '(); });';
     }
     $modal .= "\$('#{$name}').on('shown.bs.modal', function () { \$('.btn-primary', '#{$name}').focus(); });";
     $modal .= self::close();
     return $modal;
 }
Пример #11
0
 public function setMimes($name)
 {
     $params = is_array($name) ? $name : Util::getParams(func_get_args());
     $this->array_mimes = $params;
 }
Пример #12
0
 /**
  * Devuelve un LIMIT valido para un SELECT del RBDM
  *
  * @param string $sql
  * @return string
  */
 public function limit($sql)
 {
     $params = Util::getParams(func_get_args());
     $limit = '';
     if (isset($params['offset'])) {
         $limit .= " SKIP {$params['offset']}";
     }
     if (isset($params['limit'])) {
         $limit .= " FIRST {$params['limit']}";
     }
     return str_ireplace("SELECT ", "SELECT {$limit} ", $sql);
 }
Пример #13
0
 /**
  * Devuelve un LIMIT valido para un SELECT del RBDM
  *
  * @param string $sql consulta sql
  * @return string
  */
 public function limit($sql)
 {
     $params = Util::getParams(func_get_args());
     $sql_new = $sql;
     if (isset($params['limit']) && is_numeric($params['limit'])) {
         $sql_new .= " LIMIT {$params['limit']}";
     }
     if (isset($params['offset']) && is_numeric($params['offset'])) {
         $sql_new .= " OFFSET {$params['offset']}";
     }
     return $sql_new;
 }
Пример #14
0
 /**
  * Método para paginar resultados utilizando el método find_all_by_sql de los modelos <br>
  *
  * Retorna un PageObject que tiene los siguientes atributos: <br>
  * next: numero de pagina siguiente, si no hay pagina siguiente entonces es false <br>
  * prev: numero de pagina anterior, si no hay pagina anterior entonces es false <br>
  * current: numero de pagina actual <br>
  * total: total de paginas que se pueden mostrar <br>
  * items: array de items de la pagina <br>
  * counter: Número que lleva el conteo de la página <br>
  * size: Total de registros <br>
  * per_page: cantidad de elementos por pagina <br>
  *
  *
  * @param string $model modelo
  * @param string $sql consulta sql
  * @return stdClass
  */
 public static function paginate_by_sql($model, $sql)
 {
     $params = Util::getParams(func_get_args());
     $page_number = isset($params['page']) ? Filter::get($params['page'], 'numeric') : 1;
     //Numero de la página
     $per_page = isset($params['per_page']) ? Filter::get($params['per_page'], 'numeric') : DATAGRID;
     //Datos por página
     $counter = $page_number > 1 ? $page_number * $per_page - ($per_page - 1) : 1;
     //Determino el contador para utilizarlo en la vista
     $start = $per_page * ($page_number - 1);
     //Determino el offset
     $page = new stdClass();
     //Instancia del objeto contenedor de pagina
     $total_items = $model->count_by_sql("SELECT COUNT(*) FROM ({$sql}) AS t");
     //Se cuentan los registros
     $page->items = $model->find_all_by_sql($model->limit($sql, "offset: {$start}", "limit: {$per_page}"));
     //Se efectua la búsqueda
     //Se efectuan los cálculos para las paginas
     $page->next = $start + $per_page < $total_items ? $page_number + 1 : false;
     $page->prev = $page_number > 1 ? $page_number - 1 : false;
     $page->current = $page_number;
     $page->total_page = ceil($total_items / $per_page);
     if ($page->total_page < $page_number && $total_items > 0) {
         $page->prev = false;
         $url = Router::get('route');
         $url = explode('pag', $url);
         $url = trim($url[0], '/');
         DwMessage::error('La página solicitada no se encuentra en el paginador.  <br />' . DwHtml::link($url, 'Regresar a la página 1'));
     }
     $page->counter = $total_items >= $counter ? $counter : 1;
     $page->size = $total_items;
     $page->per_page = $per_page;
     return $page;
 }
 /**
  * Devuelve un LIMIT válido para un SELECT del RBDM
  *
  * @param string $sql consulta sql
  * @return string
  */
 public function limit($sql)
 {
     $params = Util::getParams(func_get_args());
     //TODO: añadirle el offset
     if (isset($params['limit'])) {
         $sql = str_ireplace("SELECT ", "SELECT TOP {$params['limit']} ", $sql);
     }
     return $sql;
 }
Пример #16
0
 /**
  * páginador por sql
  *
  * @param object $model Modelo a paginar
  * @param string $sql Consulta sql
  *
  * page: número de página a mostrar (por defecto la página 1)
  * per_page: cantidad de registros por página (por defecto 10 registros por página)
  *
  *
  * Retorna un PageObject que tiene los siguientes atributos:
  *  next: numero de página siguiente, si no hay página siguiente entonces es false
  *  prev: numero de página anterior, si no hay página anterior entonces es false
  *  current: numero de página actual
  *  total: total de páginas que se pueden mostrar
  *  items: array de registros de la página
  *  count: Total de registros
  *
  * @example
  *  $page = paginate_by_sql('usuario', 'SELECT * FROM usuario' , 'per_page: 5', "page: $page_num");
  *
  * @return stdClass
  * */
 public static function paginate_by_sql($model, $sql)
 {
     $params = Util::getParams(func_get_args());
     $page_number = isset($params['page']) ? (int) $params['page'] : 1;
     $per_page = isset($params['per_page']) ? (int) $params['per_page'] : 10;
     //Si la página o por página es menor de 1 (0 o negativo)
     if ($page_number < 1 || $per_page < 1) {
         throw new KumbiaException("La página {$page_number} no existe en el páginador");
     }
     $start = $per_page * ($page_number - 1);
     //Instancia del objeto contenedor de página
     $page = new stdClass();
     //Cuento las apariciones atraves de una tabla derivada
     $n = $model->count_by_sql("SELECT COUNT(*) FROM ({$sql}) AS t");
     //si el inicio es superior o igual al conteo de elementos,
     //entonces la página no existe, exceptuando cuando es la página 1
     if ($page_number > 1 && $start >= $n) {
         throw new KumbiaException("La página {$page_number} no existe en el páginador");
     }
     $page->items = $model->find_all_by_sql($model->limit($sql, "offset: {$start}", "limit: {$per_page}"));
     //Se efectuan los calculos para las páginas
     $page->next = $start + $per_page < $n ? $page_number + 1 : false;
     $page->prev = $page_number > 1 ? $page_number - 1 : false;
     $page->current = $page_number;
     $page->total = ceil($n / $per_page);
     $page->count = $n;
     $page->per_page = $per_page;
     return $page;
 }
Пример #17
0
 public static function textarea($nombre, $valor = "")
 {
     $params = is_array($nombre) ? $nombre : Util::getParams(func_get_args());
     $params["name"] = $nombre;
     $params["id"] = $nombre;
     $params[1] = $valor;
     return textarea_tag($params);
 }
Пример #18
0
 /**
  * Devuelve un LIMIT valido para un SELECT del RBDM
  *
  * @param string $sql
  * @return string
  */
 public function limit($sql)
 {
     $params = Util::getParams(func_get_args());
     if (!isset($params['offset']) && isset($params['limit'])) {
         return str_ireplace("SELECT ", "SELECT TOP {$params['limit']} ", $sql);
     }
     $orderby = stristr($sql, 'ORDER BY');
     if ($orderby !== false) {
         $sort = stripos($orderby, 'desc') !== false ? 'desc' : 'asc';
         $order = str_ireplace('ORDER BY', '', $orderby);
         $order = trim(preg_replace('/ASC|DESC/i', '', $order));
     }
     $sql = preg_replace('/^SELECT\\s/i', 'SELECT TOP ' . $params[offset] . ' ', $sql);
     $sql = 'SELECT * FROM (SELECT TOP ' . $params[limit] . ' * FROM (' . $sql . ') AS itable';
     if ($orderby !== false) {
         $sql .= ' ORDER BY ' . $order . ' ';
         $sql .= stripos($sort, 'asc') !== false ? 'DESC' : 'ASC';
     }
     $sql .= ') AS otable';
     if ($orderby !== false) {
         $sql .= ' ORDER BY ' . $order . ' ' . $sort;
     }
     return $sql;
 }
 /**
  * Crea una relacion n-n o 1-n inversa entre dos modelos
  *
  * @param string $relation
  *
  * model : nombre del modelo al que se refiere
  * fk : campo por el cual se relaciona (llave foranea)
  * key: campo llave que identifica al propio modelo
  * through : atrav�s de que tabla
  */
 protected function has_and_belongs_to_many($relation)
 {
     $params = Util::getParams(func_get_args());
     for ($i = 0; isset($params[$i]); $i++) {
         $relation = Util::smallcase($params[$i]);
         if (!array_key_exists($relation, $this->_has_and_belongs_to_many)) {
             $this->_has_and_belongs_to_many[$relation] = new stdClass();
             $this->_has_and_belongs_to_many[$relation]->model = isset($params['model']) ? $params['model'] : $relation;
             $this->_has_and_belongs_to_many[$relation]->fk = isset($params['fk']) ? $params['fk'] : "{$relation}_id";
             $this->_has_and_belongs_to_many[$relation]->key = isset($params['key']) ? $params['key'] : Util::smallcase(get_class($this)) . '_id';
             if (isset($params['through'])) {
                 $this->_has_and_belongs_to_many[$relation]->through = $params['through'];
             }
         }
     }
 }
Пример #20
0
 /**
  * Renderiza una vista parcial
  *
  * @param string $partial vista a renderizar
  * @param string $__time tiempo de cache
  * @param array $params
  * @param string $group grupo de cache
  * @return string
  * @throw KumbiaException
  */
 public static function partial($partial, $__time = '', $params = NULL, $group = 'kumbia.partials')
 {
     if (PRODUCTION && $__time && !Cache::driver()->start($__time, $partial, $group)) {
         return;
     }
     //Verificando el partials en el dir app
     $__file = APP_PATH . "views/_shared/partials/{$partial}.phtml";
     if (!is_file($__file)) {
         //Verificando el partials en el dir core
         $__file = CORE_PATH . "views/partials/{$partial}.phtml";
     }
     if ($params) {
         if (is_string($params)) {
             $params = Util::getParams(explode(',', $params));
         }
         // carga los parametros en el scope
         extract($params, EXTR_OVERWRITE);
     }
     // carga la vista parcial
     if (!(include $__file)) {
         throw new KumbiaException('Vista Parcial "' . $__file . '" no se encontro');
     }
     // se guarda en la cache de ser requerido
     if (PRODUCTION && $__time) {
         Cache::driver()->end();
     }
 }
Пример #21
0
/**
 * Permite incluir un objeto flash dentro de una vista respetando
 * las convenciones de directorios y rutas en Kumbia
 *
 * @param string $data url del archivo flash con o sin extension .swf<br/>
 * height: Alto del flash<br/>
 * width: Ancho del flash<br/>
 * wmode: Modo en que se muestra el flash
 *
 * @return string
 */
function swf_tag($data)
{
    $params = is_array($data) ? $data : Util::getParams(func_get_args());
    if (!isset($params['data']) && isset($params[0])) {
        $temp = str_replace(".swf", "", $params[0]);
        $params['data'] = PUBLIC_PATH . "swf/{$temp}.swf";
        unset($params[0]);
    } else {
        $temp = str_replace(".swf", "", $params['data']);
        $params['data'] = PUBLIC_PATH . "swf/{$temp}.swf";
    }
    if (!isset($params['type'])) {
        $params['type'] = 'application/x-shockwave-flash';
    }
    if (!isset($params['wmode'])) {
        $wmode = 'transparent';
    } else {
        $wmode = $params['wmode'];
        unset($params['wmode']);
    }
    $code = xhtml_start_tag('object', $params);
    $code .= '<param name="movie" value="' . $params['data'] . '" />';
    $code .= '<param name="wmode" value="' . $wmode . '" />';
    $code .= xhtml_end_tag('object');
    return $code;
}
Пример #22
0
 /**
  * Realiza un conteo de filas
  *
  * @param string $what
  * @return integer
  */
 public function count($what = '')
 {
     $what = Util::getParams(func_get_args());
     if ($this->schema) {
         $table = "{$this->schema}.{$this->source}";
     } else {
         $table = $this->source;
     }
     unset($what['order']);
     if (isset($what['distinct']) && $what['distinct']) {
         if (isset($what['group'])) {
             $select = "SELECT COUNT(*) FROM (SELECT DISTINCT {$what['distinct']} FROM {$table} ";
             $select .= $this->convert_params_to_sql($what);
             $select .= ') AS t ';
         } else {
             $select = "SELECT COUNT(DISTINCT {$what['distinct']}) FROM {$table} ";
             $select .= $this->convert_params_to_sql($what);
         }
     } else {
         if (isset($what['group']) && isset($what['paginated'])) {
             $select = "SELECT COUNT(*) FROM (SELECT {$table}.* FROM {$table} ";
             $select .= $this->convert_params_to_sql($what);
             $select .= ') AS t';
         } else {
             $select = "SELECT COUNT(*) FROM {$table} ";
             $select .= $this->convert_params_to_sql($what);
         }
     }
     $num = $this->db->fetch_one($select);
     return $num[0];
 }
Пример #23
0
 /**
  * Enruta el controlador actual a otro controlador, o a otra acción
  * Ej:
  * <code>
  * kumbia::route_to(["module: modulo"], "controller: nombre", ["action: accion"], ["id: id"])
  * </code>
  *
  * @return null
  */
 public static function route_to()
 {
     static $cyclic = 0;
     self::$vars['routed'] = false;
     $cyclic_routing = false;
     $url = Util::getParams(func_get_args());
     //print_r ($url);
     if (isset($url['module'])) {
         // Verifica para asignar correctamente los parametros en all_parameters,
         // efectuando los debidos corrimientos de ser necesario
         if (self::$vars['module']) {
             self::$vars['all_parameters'][0] = $url['module'];
         } else {
             array_unshift(self::$vars['all_parameters'], $url['module']);
         }
         self::$vars['module'] = $url['module'];
         self::$vars['controller'] = 'index';
         self::$vars['action'] = "index";
         self::$vars['routed'] = true;
     }
     if (isset($url['controller'])) {
         self::$vars['controller'] = $url['controller'];
         // Verifica para asignar correctamente los parametros en all_parameters,
         // efectuando los debidos corrimientos de ser necesario
         if (self::$vars['module']) {
             self::$vars['all_parameters'][1] = $url['controller'];
         } else {
             self::$vars['all_parameters'][0] = $url['controller'];
         }
         self::$vars['action'] = "index";
         self::$vars['routed'] = true;
         $app_controller = util::camelcase($url['controller']) . "Controller";
     }
     if (isset($url['action'])) {
         self::$vars['action'] = $url['action'];
         // Verifica para asignar correctamente los parametros en all_parameters,
         // efectuando los debidos corrimientos de ser necesario
         if (self::$vars['module']) {
             self::$vars['all_parameters'][2] = $url['action'];
         } else {
             self::$vars['all_parameters'][1] = $url['action'];
         }
         self::$vars['routed'] = true;
     }
     if (isset($url['id'])) {
         self::$vars['id'] = $url['id'];
         /**
          * Verifico para asignar correctamente los parametros en all_parameters,
          * efectuando los debidos corrimientos de ser necesario
          **/
         if (self::$vars['module']) {
             self::$vars['all_parameters'][3] = $url['action'];
         } else {
             self::$vars['all_parameters'][2] = $url['action'];
         }
         self::$vars['parameters'][0] = $url['id'];
         self::$vars['routed'] = true;
     }
     $cyclic++;
     if ($cyclic >= 1000) {
         throw new KumbiaException("Se ha detectado un enrutamiento cíclico. Esto puede causar problemas de estabilidad", 1000);
     }
     //return null;
 }
Пример #24
0
 /**
  * Paginador por sql
  *	
  * @param string $model nombre del modelo
  * @param string $sql consulta sql
  *
  * page: numero de pagina a mostrar (por defecto la pagina 1)
  * per_page: cantidad de elementos por pagina (por defecto 10 items por pagina)
  *			
  *	
  * Retorna un PageObject que tiene los siguientes atributos:
  *  next: numero de pagina siguiente, si no hay pagina siguiente entonces es false
  *  prev: numero de pagina anterior, si no hay pagina anterior entonces es false
  *  current: numero de pagina actual
  *  total: total de paginas que se pueden mostrar
  *  items: array de items de la pagina
  *  count: Total de registros
  *
  * Ejemplos:
  *  $page = paginate_by_sql('usuario', 'SELECT * FROM usuario' , 'per_page: 5', "page: $page_num");
  *	
  * @return object
  **/
 public static function paginate_by_sql($model, $sql)
 {
     $params = Util::getParams(func_get_args());
     $page_number = isset($params['page']) ? $params['page'] : 1;
     $per_page = isset($params['per_page']) ? $params['per_page'] : 10;
     $start = $per_page * ($page_number - 1);
     /**
      * Si es una cadena, instancio el modelo
      **/
     if (is_string($params[0])) {
         $m = Util::camelcase($params[0]);
         $model = ActiveRecord::get($m);
     }
     /**
      * Instancia del objeto contenedor de pagina
      **/
     $page = new stdClass();
     /**
      * Cuento las apariciones atraves de una tabla derivada
      **/
     $n = $model->count_by_sql("SELECT COUNT(*) FROM ({$sql}) AS t");
     $page->items = $model->find_all_by_sql($model->limit($sql, "offset: {$start}", "limit: {$per_page}"));
     /**
      * Se efectuan los calculos para las paginas
      **/
     $page->next = $start + $per_page < $n ? $page_number + 1 : false;
     $page->prev = $page_number > 1 ? $page_number - 1 : false;
     $page->current = $page_number;
     $page->total = $n % $per_page ? (int) ($n / $per_page) + 1 : $n / $per_page;
     $page->count = $n;
     $page->per_page = $per_page;
     return $page;
 }