Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- error_reporting(E_ALL);
- ini_set('display_errors', TRUE);
- class iGrid
- {
- /**
- * Nombre del modelo en que se trabajara.
- *
- * @var string
- */
- private $_model = NULL;
- /**
- * Nombre del metodo a utilizar para obtener los datos.
- *
- * @var string
- */
- private $_method = NULL;
- /**
- * Parametros que se pasaran al metodo.
- *
- * @var array
- */
- private $_params = array();
- /**
- * Instancia del modelo cargado.
- *
- * @var object
- */
- private $_modelAsoc = NULL;
- /**
- * RecordSet con los nombres de las cabeceras.
- *
- * @var array
- */
- private $_recordSetHeaders = array();
- /**
- * RecordSet con los registros obtenidos por el metodo($this->_method).
- *
- * @var array
- */
- private $_recordSet = array();
- /**
- * Total de Registros depues de ejecutar el metodo.
- *
- * @var int
- */
- private $_totalRecords = 0;
- /**
- * Contenedor de los campos a mostrar en las relaciones.
- *
- * @var array
- */
- private $_fieldsFK = array();
- /**
- * Contenedor de las configuraciones generales de la grilla.
- *
- * actions => (bool) Activa las acciones para cara registro.
- * search => (bool) Activa la opcion de buscar.
- * paginate => (bool) Muestra el paginador.
- * select_check => (bool) Activa los checks para cada registro.
- * action_edit => Nombre de la acción para editar un registro.
- * action_delete => Nombre de la acción para eliminar un registro.
- *
- * @var array
- */
- private $_configGrid = array(
- 'actions' => 0,
- 'search' => 0,
- 'paginate' => 0,
- 'select_check' => 0,
- 'action_edit' => 'editar',
- 'action_delete' => 'eliminar'
- );
- /**
- * Matriz con la informacion necesaria para configurar la salida del breadcrumb.
- *
- * toupper => (bool) Transforma a mayusculas(strtoupper) los titulos.
- * tolower => (bool) Transforma a minusculas(strtolower) los titulos.
- * ucfirst => (bool) Convierte a mayuscula(ucfirst) la primera letra de los titulos.
- *
- * @var array
- */
- private $_attrsHeaders = Array(
- 'toupper' => FALSE,
- 'tolower' => FALSE,
- 'ucfirst' => FALSE
- );
- /**
- * Contiene los headers que se pintaran en pantalla.
- *
- * @var array
- */
- public $headers = array();
- /**
- * Contenedor de las acciones que se van a mostrar en el grid.
- *
- * @var array
- */
- private $_actions = array();
- /**
- * Contenedor de las acciones predefinidas y su configuración.
- *
- * @var array
- */
- private $_recordSetActions = array(
- 'edit' => array(
- 'title' => 'Editar',
- 'url' => '%ctrl/%action_edit/%id',
- 'show' => TRUE
- ),
- 'delete' => array(
- 'title' => 'Eliminar',
- 'url' => '%ctrl/%action_delete/%id',
- 'show' => TRUE
- )
- );
- public function __construct($model = NULL, $method = NULL, $params = array())
- {
- $this->_model = $model;
- $this->_method = $method;
- $this->_params = $params;
- $this->_getRecordSet();
- }
- /**
- * Obtiene las cabeceras de las columnas, obtenidas del metodo ejecutado.
- *
- * @return void
- */
- private function _getModelHeaders()
- {
- foreach($this->_modelAsoc->fields as $v) $this->_recordSetHeaders[$v] = array('title' => $v, 'show' => TRUE);
- }
- /**
- * Obtiene los registros a mostrar.
- *
- * @return void
- */
- private function _getRecordSet()
- {
- $this->_modelAsoc = Load::model($this->_model);
- $this->_getModelHeaders();
- if(Validate::isNull($this->_method))
- $this->_recordSet = $this->_modelAsoc->find();
- else
- $this->_recordSet = (count($this->_params) > 0) ? $this->_modelAsoc->{$this->_method}($this->_params) : $this->_modelAsoc->{$this->_method}();
- $this->_configGrid['paginate'] = isset($this->_recordSet ->items);
- $this->_totalRecords = count($this->_configGrid['paginate'] ? $this->_recordSet ->items : $this->_recordSet );
- }
- /**
- * Filtra las acctiones que se van a mostrar,
- *
- * @return void
- */
- private function _processActions()
- {
- foreach($this->_recordSetActions as $k => $item) if($item['show']) $this->_actions[$k] = $item;
- }
- /**
- * Procesa los header, aplicando estilos y filtrando los header que se mostran.
- *
- * @return void
- */
- private function _processHeaders()
- {
- $this->_stylingHeaders(); /* Aplica los estilos a las cabeceras */
- foreach($this->_recordSetHeaders as $k => $item) if($item['show']) $this->headers[$k] = $item['title'];
- }
- /**
- * Aplica los estilos a los encabezados, segun la configuracion en $this->_attrs.
- *
- * @return void
- */
- private function _stylingHeaders()
- {
- foreach($this->_recordSetHeaders as $k => $v)
- {
- $this->_recordSetHeaders[$k]['title'] = $this->_attrsHeaders['toupper'] ?
- strtoupper($v['title']) :
- ($this->_attrsHeaders['tolower'] ?
- strtolower($v['title']) :
- ($this->_attrsHeaders['ucfirst'] ?
- ucfirst($v['title']) : $v['title']));
- }
- }
- /**
- * Agregar una nueva acción.
- *
- * @param $k string Key de la accion en la matriz contenedora.
- * @param $title string Titulo que aparecera en la acción.
- * @param $url string URL a donde apuntara la acción-
- */
- public function addAction($k = NULL, $title = NULL, $url = NULL)
- {
- if(array_key_exists($k, $this->_recordSetActions)) return;
- $this->_recordSetActions[$k] = array('title' => $title, 'url' => $url, 'show' => TRUE);
- }
- /**
- * Agrega una nueva asociación para las FK del modelo.
- *
- * @param $params string Cadena con los parametros a procesar, el formato es campo_fk:nombre_campo_en_tabla_fk,
- * para mas de un header se pueden definir en una sola cadena separada por comas(,), ejemplo 'perfil_id:nombre'.
- * @return void
- */
- public function addFieldFK($params = NULL)
- {
- if(Validate::isNull($params)) return;
- $params = explode(',', $params);
- foreach($params as $item)
- {
- $item = explode(':', $item);
- if(count($item) != 2) continue;
- $fk_header = trim($item[0]);
- $fk_field = trim($item[1]);
- if(!array_key_exists($fk_header, $this->_recordSetHeaders)) continue;
- $model = Util::camelcase(substr($fk_header, 0, -3));
- $this->_fieldsFK[$fk_header] = array('model' => $model, 'field' => $fk_field);
- }
- }
- /**
- * Retorna TRUE en caso de existir datos en el RecordSet o FALSE en caso contrario.
- *
- * @return boolean
- */
- public function existRecords(){ return $this->_totalRecords > 0; }
- public function generate()
- {
- $this->_processHeaders(); /* Filtra las cabeceras a mostrar y las asigna a la variable */
- if($this->getConfig('actions')) $this->_processActions();
- return $this;
- }
- /**
- * Genera los links de las acciones y retorna el html.
- *
- * @param $item object Objeto con la informacion del registro.
- * @return string
- */
- public function getActions($item = NULL)
- {
- if(!$this->getConfig('actions')) return;
- $html = NULL;
- $patterns = array('/%ctrl/','/%id/', '/%action_edit/', '/%action_delete/');
- $replacements = array(Router::get('controller'), $item->id, $this->getConfig('action_edit'), $this->getConfig('action_delete'));
- foreach($this->_actions as $action)
- {
- $action['url'] = preg_replace($patterns, $replacements, $action['url']);
- $html[] = Html::link($action['url'], $action['title']);
- }
- return implode(' | ', $html);
- }
- /**
- * Obtiene una configuracion general para la grilla.
- *
- * Estilos disponibles:
- *
- * actions => (bool) Activa las acciones para cara registro.
- * search => (bool) Activa la opcion de buscar.
- * paginate => (bool) Muestra el paginador.
- * select_check => (bool) Activa los checks para cada registro.
- *
- * @param string $key Configuracion para obtener.
- * @return void
- */
- public function getConfig($k = NULL)
- {
- if(Validate::isNull($k) && !array_key_exists($k, $this->_configGrid)) return;
- return $this->_configGrid[$k];
- }
- /**
- * Obtiene el recordset para iterar.
- *
- * @return array
- */
- public function getRecordSet($full = FALSE)
- {
- return $full ? $this->_recordSet : ($this->_configGrid['paginate'] ? $this->_recordSet->items : $this->_recordSet);
- }
- /**
- * Obtiene el campo correcto para listar.
- *
- * return mixed
- */
- public function getRow($k = NULL, &$item = NULL)
- {
- return array_key_exists($k, $this->_fieldsFK) ? $item->{"get{$this->_fieldsFK[$k]['model']}"}()->{$this->_fieldsFK[$k]['field']} : $item->$k;
- }
- /**
- * Devuelve el total de registros obtenidos al ejecutar el metodo del modelo.
- *
- * @return int
- */
- public function getTotalRecords(){ return $this->_totalRecords; }
- /**
- * Define que headers no deben mostrarse en la lista.
- *
- * @param $key string Nombre de los headers a ocultar, para mas de un header se pueden
- * definir en una sola cadena separada por comas(,), ejemplo 'id, nombre'.
- * @return void
- */
- public function hiddenHeaders($k = NULL)
- {
- if(Validate::isNull($k)) return;
- foreach(explode(',', $k) as $item)
- {
- if(!array_key_exists($item, $this->_recordSetHeaders)) continue;
- $this->_recordSetHeaders[$item]['show'] = FALSE;
- }
- }
- /**
- * Renombra el titulo de los headers.
- *
- * @param $params string Cadena con los parametros a procesar, el formato es nombre_anterior:nombre_nuevo,
- * para mas de un header se pueden definir en una sola cadena separada por comas(,), ejemplo 'perfil_id:Perfil'.
- * @return void
- */
- public function renameHerders($params = NULL)
- {
- if(Validate::isNull($params)) return;
- $params = explode(',', $params);
- foreach($params as $item)
- {
- $item = explode(':', $item);
- if(count($item) != 2) continue;
- $k = trim($item[0]);
- $v = trim($item[1]);
- if(!array_key_exists($k, $this->_recordSetHeaders)) continue;
- $this->_recordSetHeaders[$k]['title'] = $v;
- }
- }
- /**
- * Modifica la configuración de una accion.
- *
- * @return void
- */
- public function setActions($k = NULL, $v = NULL)
- {
- if(Validate::isNull($k) || Validate::isNull($v)) return;
- if(!array_key_exists($k, $this->_recordSetActions)) return;
- $this->_recordSetActions[$k]['title'] = $v;
- }
- /**
- * Modifica una configuracion para el grid.
- *
- * Configuraciones disponibles:
- *
- * search => (bool) Activa la opcion de buscar, por default FALSE.
- * paginate => (bool) Muestra el paginador, por default FALSE.
- *
- * @param $k string Configuración a modificar.
- * @param $v mixed Valor para la configuración.
- * @return void
- */
- public function setConfig($params = NULL)
- {
- if(Validate::isNull($params)) return;
- $params = explode(',', $params);
- foreach($params as $item)
- {
- $item = explode(':', $item);
- if(count($item) != 2) continue;
- $k = trim($item[0]);
- $v = trim($item[1]);
- if(!array_key_exists($k, $this->_configGrid)) return;
- $this->_configGrid[$k] = $v;
- }
- }
- /**
- * Modifica el estilo de las cabeceras.
- *
- * Estilos disponibles:
- *
- * toupper => (bool) Transforma a mayusculas(strtoupper) los titulos, por default FALSE.
- * tolower => (bool) Transforma a minusculas(strtolower) los titulos, por default FALSE.
- * ucfirst => (bool) Convierte a mayuscula(ucfirst) la primera letra de los titulos, por default FALSE.
- *
- * @param string $k Estilo a modificar.
- * @param mixed $v Valor que va tomar el estilo.
- * @return void
- */
- public function setStyleHeader($k = NULL, $v = NULL)
- {
- if(!(Validate::isNull($k) || Validate::isNull($v)))
- if(array_key_exists($k, $this->_attrsHeaders)) $this->_attrsHeaders[$k] = $v;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement