X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/31af0f03bf1e076750834d288f8cd81a92cf3ccf..51a1428cd773aa45b8da0bb9b715784c16c93c44:/lib/MECON/HTML/Tabla.php diff --git a/lib/MECON/HTML/Tabla.php b/lib/MECON/HTML/Tabla.php index e6010a7..c5d2765 100644 --- a/lib/MECON/HTML/Tabla.php +++ b/lib/MECON/HTML/Tabla.php @@ -26,7 +26,7 @@ $Id$ require_once 'HTML/Table.php'; require_once 'MECON/HTML/Image.php'; -require_once 'MECON/DB/Pager.php'; +require_once 'MECON/HTML/Link.php'; /** * Libreria para le manejo de las tablas de los sistemas de intranet. @@ -73,7 +73,7 @@ class MECON_HTML_Tabla extends HTML_Table { * seteados por default segun el archivo de configuracion. * Ademas puede recibir la indicacion de algun estilo en particular. * - * @param mixed $atributos Atributos diferentes a los estandares para la tabla + * @param mixed $attrs Atributos diferentes a los estandares para la tabla * @param string $estilo Tipo de tabla * * @access public @@ -108,149 +108,6 @@ class MECON_HTML_Tabla extends HTML_Table { } - /** - * Agrega una fila del tipo cabecera tomando colores y demas del - * archivo de configuracion. Recibe como parametro un array con - * los datos a incluir en la linea. Agrega tantas columnas como - * elementos tenga el array. Si no recibe parametro alguno, - * inserta una fila en blanco. Devuelve el identificador de la - * fila en donde inserto los datos. - * - * @param array() $contenido Contenido de la fila - * - * @return int Identificador de Linea - * @access public - * @deprecated - */ - function agregarFilaCabecera($contenido = '', $atributos = '') { - return $this->addRow($contenido, 'cabecera'); - } - - /** - * Agrega una fila del tipo comun, tomando colores y demas del - * archivo de configuracion. Recibe como parametro un array con - * los datos a incluir en la linea. Agrega tantas columnas como - * elementos tenga el array. Si no recibe parametro alguno, - * inserta una fila en blanco. Devuelve el identificador de la - * fila en donde inserto los datos. - * - * @param array() $contenido Contenido de la fila - * - * @return int Identificador de Linea - * - * @access public - * @deprecated - */ - function agregarFila($contenido = '') { - return $this->addRow($contenido, 'comun'); - } - - /** - * Modifica el atributo rowSpan a la celda pasada por parametro - * - * @param int $fila Identificador de la fila que se quiere modificar - * @param int $columna Identificador de la columna que se quiere modificar - * @param int $valor Atributo a modificar - * - * @access public - * @deprecated - */ - function rowSpan($fila, $columna, $valor) { - return $this->updateCellAttributes($fila, $columna, 'rowspan="'.$valor.'"'); - } - - /** - * Modifica el atributo colSpan a la celda pasada por parametro - * - * @param int $fila Identificador de la fila que se quiere modificar - * @param int $columna Identificador de la columna que se quiere modificar - * @param int $valor Atributo a modificar - * - * @access public - * @deprecated - */ - function colSpan($fila, $columna, $valor) { - return $this->updateCellAttributes($fila, $columna, 'colspan="'.$valor.'"'); - } - - /** - * Modifica el atributo aling de la celda pasada por parametro - * - * @param int $fila Identificador de la fila que se quiere modificar - * @param int $columna Identificador de la columna que se quiere modificar - * @param string $valor Atributo a modificar - * - * @access public - * @deprecated - */ - function align($fila, $columna, $valor) { - return $this->updateCellAttributes($fila, $columna, 'align="'.$valor.'"'); - } - - /** - * Setea una columna como del tipo cabecera - * - * @param int $columna Identificador de la columna que se quiere modificar - * - * @access public - * @deprecated - */ - function setColCabecera($columna) { - return $this->updateColAttributes($columna, 'cabecera'); - } - - /** - * Setea una columna como del tipo titulo - * - * @param int $columna Identificador de la columna que se quiere modificar - * - * @access public - * @deprecated - */ - function setColTitulo($columna) { - return $this->updateColAttributes($columna, 'titulo'); - } - - /** - * Alinea una columna entera - * - * @param int $columna Identificador de la columna que se quiere modificar - * @param string $valor Valor - * - * @access public - * @deprecated - */ - function setColAlign($columna, $valor) { - return $this->updateColAttributes($columna,'align="'.$valor.'"'); - } - - /** - * Cambia el tamanio de una columna entera - * - * @param int $columna Identificadore de la columna que se quiere modificar - * @param string $valor Valor - * - * @access public - * @deprecated - */ - function setColWidth($columna, $valor) { - return $this->updateColAttributes($columna,'width="'.$valor.'"'); - } - - /** - * Cambia el color de fondo de una celda - * - * @param int $fila Identificador de la fila que se quiere modificar - * @param int $columna Identificador de la columna que se quiere modificar - * @param string $valor Atributo a modificar - * - * @access public - * @deprecated - */ - function setCellBgcolor($fila, $columna, $valor) { - return $this->updateCellAttributes($fila, $columna,'bgcolor="'.$valor.'"'); - } - /** * Devuelve el html de la tabla * @@ -284,15 +141,7 @@ class MECON_HTML_Tabla extends HTML_Table { $tabla_externa = new HTML_Table(array('width'=>'100%','border'=>0)); } // Si tiene cabecera, la agrega. - if ($this->_cabecera) { - $tabla_externa->addRow($this->_cabecera, array( - 'valign' => 'middle', - 'width' => '33%', - )); - $tabla_externa->updateCellAttributes(0, 0, array('align' => 'left')); - $tabla_externa->updateCellAttributes(0, 1, array('align' => 'center')); - $tabla_externa->updateCellAttributes(0, 2, array('align' => 'right')); - } + $this->_addSpecialRow($this->_cabecera, $tabla_externa); // Si tiene cabecera o pie, agrega la tabla original. if ($this->_cabecera or $this->_pie) { //$id = $tabla_externa->addRow($result); @@ -304,16 +153,35 @@ class MECON_HTML_Tabla extends HTML_Table { )); } // Si tiene pie, lo agrega. - if ($this->_pie) { - $id = $tabla_externa->addRow($this->_pie, array( + $this->_addSpecialRow($this->_pie, $tabla_externa); + return ($this->_cabecera or $this->_pie) ? $tabla_externa->toHtml() : $result; + } + + function _addSpecialRow($array, &$tabla) { + if ($array) { + $row = array(); + foreach ($array as $key => $val) { + $row[$key] = $val ? $val : ' '; + } + $id = $tabla->addRow($row, array( 'valign' => 'middle', - 'width' => '33%', + 'width' => '33%', )); - $tabla_externa->updateCellAttributes($id, 0, array('align' => 'left')); - $tabla_externa->updateCellAttributes($id, 1, array('align' => 'center')); - $tabla_externa->updateCellAttributes($id, 2, array('align' => 'right')); + // Si no hay celda central, hace colspan. + if ($array[0] and !$array[1]) { + $tabla->updateCellAttributes($id, 0, array( + 'colspan' => 2, + 'width' => '67%')); + /* } XXX se complica hacer el colspan para atras: + elseif ($array[2] and !$array[1]) { + $tabla->updateCellAttributes($id, 1, array( + 'colspan' => 2, + 'width' => '67%')); */ + } + $tabla->updateCellAttributes($id, 0, array('align' => 'left')); + $tabla->updateCellAttributes($id, 1, array('align' => 'center')); + $tabla->updateCellAttributes($id, 2, array('align' => 'right')); } - return ($this->_cabecera or $this->_pie) ? $tabla_externa->toHtml() : $result; } /** @@ -398,7 +266,9 @@ class MECON_HTML_Tabla extends HTML_Table { case 'comun': case 'cabecera': case 'titulo': - $rta = array_merge($rta, $this->_conf['atributos']["celda_$attr"]); + $rta = array_merge($rta, + $this->_conf['atributos']["celda_$attr"]); + $rta[$attr] = $attr; break; case 'align': case 'valign': @@ -421,6 +291,20 @@ class MECON_HTML_Tabla extends HTML_Table { case 'th': $rta[$attr] = ''; break; + case 'clara': + $tmp = $this->_conf['atributos']['celda_comun']; + $tmp['bgcolor'] = $this->_conf['atributos']['celda_titulo']['bgcolor']; + $tmp['class'] = $this->_conf['atributos']['celda_titulo']['class']; + $rta = array_merge($rta, $tmp); + $rta[$attr] = $attr; + break; + case 'oscura': + $tmp = $this->_conf['atributos']['celda_comun']; + $tmp['bgcolor'] = $this->_conf['atributos']['celda_cabecera']['bgcolor']; + $tmp['class'] = $this->_conf['atributos']['celda_cabecera']['class']; + $rta = array_merge($rta, $tmp); + $rta[$attr] = $attr; + break; default: trigger_error("No se permite setear el atributo $attr", E_USER_ERROR); } @@ -441,7 +325,7 @@ class MECON_HTML_Tabla extends HTML_Table { * Setea la cabecera. * Ejemplo: * @code - * $tabla->setCabecera(array('Hola', ' ', 'mundo!')); + * $tabla->setCabecera(array('Hola', '', 'mundo!')); * @endcode * * @param array $cabecera Array de 3 elementos, que son la celda izquierda, @@ -469,7 +353,7 @@ class MECON_HTML_Tabla extends HTML_Table { */ function updateCabecera($cabecera, $lugar) { if (!$this->_cabecera) { - $this->_cabecera = array(' ', ' ', ' '); + $this->_cabecera = array('', '', ''); } if ($lugar == 'izquierda') { $this->_cabecera[0] = $cabecera; @@ -509,7 +393,7 @@ class MECON_HTML_Tabla extends HTML_Table { */ function updatePie($pie, $lugar) { if (!$this->_pie) { - $this->_pie = array(' ', ' ', ' '); + $this->_pie = array('', '', ''); } if ($lugar == 'izquierda') { $this->_pie[0] = $pie; @@ -541,7 +425,7 @@ class MECON_HTML_Tabla extends HTML_Table { * @endcode * * @param string $id Identificador del link predefinido. Puede ser 'volver', - * 'nuevo', 'nuevos', 'anterior' y 'siguiente'. + * 'nuevo', 'nuevos', 'buscar', 'anterior' y 'siguiente'. * @param MECON_HTML_Link $link Link a usar. Si no tiene contenidos, se pone * uno por defecto. Si es null, se pone como * link la página actual. @@ -556,7 +440,7 @@ class MECON_HTML_Tabla extends HTML_Table { } switch ($id) { case 'nuevo': - $img = new MECON_HTML_Image('/MECON/images/general_nuevo', '-<'); + $img = new MECON_HTML_Image('/MECON/images/general_nuevo', '->'); // Si no tiene titulo, le pone titulo por defecto. if (!$link->getContents()) { $link->setContents('Nuevo'); @@ -565,7 +449,7 @@ class MECON_HTML_Tabla extends HTML_Table { $this->updateCabecera($link, 'derecha'); break; case 'nuevos': - $img = new MECON_HTML_Image('/MECON/images/general_muchos_nuevo', '-<'); + $img = new MECON_HTML_Image('/MECON/images/general_muchos_nuevo', '->'); // Si no tiene titulo, le pone titulo por defecto. if (!$link->getContents()) { $link->setContents('Nuevos'); @@ -573,8 +457,17 @@ class MECON_HTML_Tabla extends HTML_Table { $link->addContents($img); $this->updateCabecera($link, 'derecha'); break; + case 'buscar': + $img = new MECON_HTML_Image('/MECON/images/general_lupa', 'Q'); + // Si no tiene titulo, le pone titulo por defecto. + if (!$link->getContents()) { + $link->setContents('Buscar'); + } + $link->addContents($img); + $this->updateCabecera($link, 'derecha'); + break; case 'siguiente': - $img = new MECON_HTML_Image('/MECON/images/general_posterior', '-<'); + $img = new MECON_HTML_Image('/MECON/images/general_posterior', '->'); // Si no tiene titulo, le pone titulo por defecto. if (!$link->getContents()) { $link->setContents('Siguiente'); @@ -583,7 +476,7 @@ class MECON_HTML_Tabla extends HTML_Table { $this->updatePie($link, 'derecha'); break; case 'volver': - $img = new MECON_HTML_Image('/MECON/images/general_anterior', '>-'); + $img = new MECON_HTML_Image('/MECON/images/general_anterior', '<-'); // Si no tiene titulo, le pone titulo por defecto. $cont = $link->getContents() ? $link->getContents() : 'Volver'; $link->setContents($img); @@ -591,7 +484,7 @@ class MECON_HTML_Tabla extends HTML_Table { $this->updateCabecera($link, 'izquierda'); break; case 'anterior': - $img = new MECON_HTML_Image('/MECON/images/general_anterior', '>-'); + $img = new MECON_HTML_Image('/MECON/images/general_anterior', '<-'); // Si no tiene titulo, le pone titulo por defecto. $cont = $link->getContents() ? $link->getContents() : 'Anterior'; $link->setContents($img); @@ -603,112 +496,6 @@ class MECON_HTML_Tabla extends HTML_Table { } } - /** - * Agrega un páginador a la tabla, basado en un resultado de una base de datos. - * Ejemplo: - * @code - * $tabla = new MECON_HTML_Tabla(); - * $result = $db->query('SELECT * FROM tabla'); - * if (DB::isError($result)) { - * die('Error'); - * } - * $pager = $tabla->addPager($result); - * $tabla->addRow(array('Nombre', 'Apellido'), 'cabecera'); - * if ($pager->numRows()) { - * while ($row = $pager->fetchRow(DB_FETCHMODE_ASSOC)) { - * $tabla->addRow(array($row['nombre'], $row['apellido'])); - * } - * } else { - * $tabla->addRow(array(new MECON_HTML_Error('No se encontraron agentes.')), - * array('colspan' => 2)); - * } - * $tabla->display(); - * @endcode - * - * @param DB_Result $result Resultado de una consulta de base de datos. - * @param mixed $tipo Tipo de link(s) a agregar. Puede ser: - * - * Puede pasarse uno solo como un string o varios como un - * array. Si se pasa 'todo', se incluyen todos. - * Si se pasa null, se incluyen 'anterior', - * 'siguiente' y 'paginas'. - * @param mixed $link Dirección a la que apuntan los links generados. Puede - * ser un MECON_HTML_Link (para poder pasar variables por - * GET) o un string. - * @param int $limit Parámetro usado para crear el MECON_DB_Pager. - * @param int $maxpages Parámetro usado para crear el MECON_DB_Pager. - * - * @return MECON_DB_Pager Pager que se puede usar para realizar los fetch de - * los resultados de la página actual. - * - * @see MECON_DB_Pager - */ - function addPager($result, $tipo = null, $link = null, $limit = 10, $maxpages = 21) { - // Creo el pager con el resultado. - $pager = new MECON_DB_Pager($result, @$_GET['pager_from'], $limit, $maxpages); - // Obtengo un link válido. - if (!$link) { - $link = @$_SERVER['PHP_SELF']; - } - if (is_string($link)) { - $link = new MECON_HTML_Link($link, ''); - } - // Si es el tipo por defecto pone paginador nada más. - if (!$tipo) { - $tipo = array('anterior', 'paginas', 'siguiente'); - } - // Convierte tipo a array. - if (!is_array($tipo)) { - $tipo = array($tipo); - } - // Si se quiere mostrar todas las decoraciones del paginador. - if (in_array('todo', $tipo)) { - $tipo = array('anterior', 'paginas', 'siguiente', 'total', 'info'); - } - // Me fijo si tiene cada uno de los elementos y los agrego. - if (in_array('anterior', $tipo) and $pager->numRows() and $pager->currentpage != 1) { - $link->setGetVar('pager_from', $pager->prev); - $this->addLink('anterior', $link); - } - if (in_array('siguiente', $tipo) and $pager->numRows() and $pager->currentpage != $pager->numpages) { - $link->setGetVar('pager_from', $pager->next); - $this->addLink('siguiente', $link); - } - if (in_array('paginas', $tipo) and $pager->numRows() and $pager->numpages > 1) { - $from = @$_GET['pager_from']; - $pags = ''; - $lnk = $link->getContents(); - foreach ($pager->pages as $page => $start_row) { - if ($start_row == $from) { - $pags .= $page; - } else { - $link->setGetVar('pager_from', $start_row); - $link->setContents($page); - $pags .= $link->toHtml(); - } - if ($page != $pager->lastpage) { - $pags .= ' | '; - } - } - $link->setContents($lnk); - $this->updatePie($pags, 'centro'); - } - if (in_array('total', $tipo) and $pager->numRows()) { - $this->updateCabecera('Se encontraron ' . $pager->numrows . ' resultados.', 'izquierda'); - } - if (in_array('info', $tipo) and $pager->numRows()) { - $this->updateCabecera('Página ' . $pager->currentpage . ' de ' . $pager->numpages - . ' - ' . $pager->limit . ' resultados por página.', 'derecha'); - } - return $pager; - } - } ?>