1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
8 meconlib is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2 of the License, or (at your option)
13 meconlib is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License; if not,
18 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 Boston, MA 02111-1307 USA
20 -------------------------------------------------------------------------------
21 Creado: fri mar 21 ART 2003
22 Autor: Martin Marrese <mmarre@mecon.gov.ar>
23 -------------------------------------------------------------------------------
25 -----------------------------------------------------------------------------*/
27 require_once 'HTML/Table.php';
30 * Libreria para le manejo de las tablas de los sistemas de intranet.
33 class MECON_HTML_Tabla extends HTML_Table {
36 * Valores de Configuracion particular
44 * Atributos de las tablas.
52 * Íconos e información que va arriba de la tabla.
57 var $_cabecera = array();
60 * Íconos e información que va abajo de la tabla.
69 * Puede recibir como parametro un string con los atributos que se
70 * quieren dar a la tabla en cuestion. Estos atributos estan
71 * seteados por default segun el archivo de configuracion.
72 * Ademas puede recibir la indicacion de algun estilo en particular.
74 * @param mixed $atributos Atributos diferentes a los estandares para la tabla
75 * @param string $estilo Tipo de tabla
79 function MECON_HTML_Tabla($attrs = null, $estilo = 'comun') {
80 // Obtengo los valores particulares de configuracion.
81 $this->_conf = include(dirname(__FILE__) . '/Tabla/estilo_' . $estilo . '.php');
82 // Seteo los atributos para la tabla
83 $this->_attrs = $this->_conf['atributos']['tabla_comun'];
84 //Genero el objeto HTML_Table
85 if (is_string($attrs)) {
86 $attrs = $this->_parseAttributes($attrs);
88 if (is_array($attrs)) {
89 if (isset($attrs['width'])) {
90 $this->_attrs['width'] = $attrs['width'];
92 if (isset($attrs['bgcolor'])) {
93 $this->_attrs['bgcolor'] = $attrs['bgcolor'];
95 if (isset($attrs['cellspacing'])) {
96 $this->_attrs['cellspacing'] = $attrs['cellspacing'];
98 if (isset($attrs['cellpadding'])) {
99 $this->_attrs['cellpadding'] = $attrs['cellpadding'];
102 $this->HTML_Table($this->_attrs);
103 if (isset($attrs['align'])) {
104 $this->_attrs['align'] = $attrs['align'];
110 * Agrega una fila del tipo cabecera tomando colores y demas del
111 * archivo de configuracion. Recibe como parametro un array con
112 * los datos a incluir en la linea. Agrega tantas columnas como
113 * elementos tenga el array. Si no recibe parametro alguno,
114 * inserta una fila en blanco. Devuelve el identificador de la
115 * fila en donde inserto los datos.
117 * @param array() $contenido Contenido de la fila
119 * @return int Identificador de Linea
123 function agregarFilaCabecera($contenido = '', $atributos = '') {
124 return $this->addRow($contenido, 'cabecera');
128 * Agrega una fila del tipo comun, tomando colores y demas del
129 * archivo de configuracion. Recibe como parametro un array con
130 * los datos a incluir en la linea. Agrega tantas columnas como
131 * elementos tenga el array. Si no recibe parametro alguno,
132 * inserta una fila en blanco. Devuelve el identificador de la
133 * fila en donde inserto los datos.
135 * @param array() $contenido Contenido de la fila
137 * @return int Identificador de Linea
142 function agregarFila($contenido = '') {
143 return $this->addRow($contenido, 'comun');
147 * Modifica el atributo rowSpan a la celda pasada por parametro
149 * @param int $fila Identificador de la fila que se quiere modificar
150 * @param int $columna Identificador de la columna que se quiere modificar
151 * @param int $valor Atributo a modificar
156 function rowSpan($fila, $columna, $valor) {
157 return $this->updateCellAttributes($fila, $columna, 'rowspan="'.$valor.'"');
161 * Modifica el atributo colSpan a la celda pasada por parametro
163 * @param int $fila Identificador de la fila que se quiere modificar
164 * @param int $columna Identificador de la columna que se quiere modificar
165 * @param int $valor Atributo a modificar
170 function colSpan($fila, $columna, $valor) {
171 return $this->updateCellAttributes($fila, $columna, 'colspan="'.$valor.'"');
175 * Modifica el atributo aling de la celda pasada por parametro
177 * @param int $fila Identificador de la fila que se quiere modificar
178 * @param int $columna Identificador de la columna que se quiere modificar
179 * @param string $valor Atributo a modificar
184 function align($fila, $columna, $valor) {
185 return $this->updateCellAttributes($fila, $columna, 'align="'.$valor.'"');
189 * Setea una columna como del tipo cabecera
191 * @param int $columna Identificador de la columna que se quiere modificar
196 function setColCabecera($columna) {
197 return $this->updateColAttributes($columna, 'cabecera');
201 * Setea una columna como del tipo titulo
203 * @param int $columna Identificador de la columna que se quiere modificar
208 function setColTitulo($columna) {
209 return $this->updateColAttributes($columna, 'titulo');
213 * Alinea una columna entera
215 * @param int $columna Identificador de la columna que se quiere modificar
216 * @param string $valor Valor
221 function setColAlign($columna, $valor) {
222 return $this->updateColAttributes($columna,'align="'.$valor.'"');
226 * Cambia el tamanio de una columna entera
228 * @param int $columna Identificadore de la columna que se quiere modificar
229 * @param string $valor Valor
234 function setColWidth($columna, $valor) {
235 return $this->updateColAttributes($columna,'width="'.$valor.'"');
239 * Cambia el color de fondo de una celda
241 * @param int $fila Identificador de la fila que se quiere modificar
242 * @param int $columna Identificador de la columna que se quiere modificar
243 * @param string $valor Atributo a modificar
248 function setCellBgcolor($fila, $columna, $valor) {
249 return $this->updateCellAttributes($fila, $columna,'bgcolor="'.$valor.'"');
253 * Devuelve el html de la tabla
255 * Devuelve el html de la tabla para que sea mostrado.
256 * Como parametro recibe el indicador de tabla simple.
257 * Si $simple es falso, devuelve el html comun y corriente (con 2
258 * tablas), si es false devuelve una tabla sola.
260 * @param bool $simple Tipo de tabla que se quiere recibir.
262 * @return string Html
266 function toHtml($simple = 0) {
268 $result = parent::toHtml();
269 // Agregar la tabla de fondo.
271 $contenedora = $this->_conf['atributos']['tabla_contenedora'];
272 $contenedora['width'] = $this->getAttribute('width');
273 $contenedora['align'] = $this->_attrs['align'];
274 $this->updateAttributes(array('width' => '100%'));
275 $tabla_externa = new HTML_Table($contenedora);
276 $tabla_externa->addRow(array(parent::toHtml()),
277 $this->_conf['atributos']['celda_contenedora']);
278 $result = $tabla_externa->toHtml();
280 // Si tiene pie o cabecera, crea tabla.
281 if ($this->_cabecera or $this->_pie) {
282 $tabla_externa = new HTML_Table(array('width'=>'100%','border'=>0));
284 // Si tiene cabecera, la agrega.
285 if ($this->_cabecera) {
286 $tabla_externa->addRow($this->_cabecera, array(
287 'valign' => 'middle',
290 $tabla_externa->updateCellAttributes(0, 0, array('align' => 'left'));
291 $tabla_externa->updateCellAttributes(0, 1, array('align' => 'center'));
292 $tabla_externa->updateCellAttributes(0, 2, array('align' => 'right'));
294 // Si tiene cabecera o pie, agrega la tabla original.
295 if ($this->_cabecera or $this->_pie) {
296 //$id = $tabla_externa->addRow($result);
297 $tabla_externa->addRow(array($result), array(
299 'valign' => 'middle',
304 // Si tiene pie, lo agrega.
306 $id = $tabla_externa->addRow($this->_pie, array(
307 'valign' => 'middle',
310 $tabla_externa->updateCellAttributes($id, 0, array('align' => 'left'));
311 $tabla_externa->updateCellAttributes($id, 1, array('align' => 'center'));
312 $tabla_externa->updateCellAttributes($id, 2, array('align' => 'right'));
314 return ($this->_cabecera or $this->_pie) ? $tabla_externa->toHtml() : $result;
318 * Cambia las propiedades de una celda
320 * Cambia las propiedades de una celda. Si $attrs es un array
321 * asociativo, se setean los atributos representados por las claves
324 * @param int $row Identificador de la fila que se quiere modificar
325 * @param int $col Identificador de la columna que se quiere modificar
326 * @param mixed $attrs Atributo a modificar
330 function updateCellAttributes($row, $col, $attrs) {
331 return parent::updateCellAttributes($row, $col, $this->_translateAttributes($attrs, false));
335 * Establece las propiedades de una celda
337 * Establece las propiedades de una celda. Si $attrs es un array
338 * asociativo, se setean los atributos representados por las claves
341 * @param int $row Identificador de la fila que se quiere modificar
342 * @param int $col Identificador de la columna que se quiere modificar
343 * @param mixed $attrs Atributo a modificar
347 function setCellAttributes($row, $col, $attrs) {
348 return parent::setCellAttributes($row, $col, $this->_translateAttributes($attrs, true));
354 * Agrega una fila. El contenido es el que viene representado por
355 * el array $content. Recibe los atributos en la variable $attrs
357 * @param mixed $content Contenido
358 * @param mixed $attrs Atributos
360 * @return int $rowId Identificador de la fila
364 function addRow($content, $attrs = 'comun') {
365 return parent::addRow($content, $attrs);
369 * Convierte un atributo a string
371 * Convierte un atributo HTML al string para pasar a los metodos de HTML_Table
372 * Recibe en $attrs los atributos a modificar.
374 * @param mixed $attrs Atributos.
375 * @param bool $isSet Indica si hay que setear.
380 function _translateAttributes($attrs, $isSet) {
384 if (is_string($attrs)) {
385 $attrs = $this->_parseAttributes($attrs);
388 $rta = $this->_conf['atributos']['celda_comun'];
392 foreach ($attrs as $attr => $val) {
393 $attr = strtolower($attr);
399 $rta = array_merge($rta, $this->_conf['atributos']["celda_$attr"]);
417 $rta["cell$attr"] = $val;
423 trigger_error("No se permite setear el atributo $attr", E_USER_ERROR);
430 * Obtiene la Cascade Style Sheet para esta tabla.
432 * @return string Path 'web' a la css.
435 return $this->_conf['css'];
442 * $tabla->setCabecera(array('Hola', ' ', 'mundo!'));
445 * @param array $cabecera Array de 3 elementos, que son la celda izquierda,
446 * central y derecha de la cabecera (en ese órden).
448 function setCabecera($cabecera) {
449 if (count($pie) != 3) {
450 $this->raiseError('Parámetro incorrecto: debe ser un array de 3 elementos.');
452 $this->_cabecera = $cabecera;
456 * Agrega información a la cabecera de la tabla.
459 * $tabla->updateCabecera('Hola', 'izquierda');
460 * $tabla->updateCabecera('mundo!', 'derecha');
463 * @param mixed $cabecera Celda a agregar a la cabecera. Puede ser un string
464 * o un objeto con un método toHtml().
465 * @param string $lugar Lugar en donde poner la cabecera. Puede ser
466 * 'izquierda', 'centro' o 'derecha'.
468 function updateCabecera($cabecera, $lugar) {
469 if (!$this->_cabecera) {
470 $this->_cabecera = array(' ', ' ', ' ');
472 if ($lugar == 'izquierda') {
473 $this->_cabecera[0] = $cabecera;
474 } elseif ($lugar == 'centro') {
475 $this->_cabecera[1] = $cabecera;
476 } elseif ($lugar == 'derecha') {
477 $this->_cabecera[2] = $cabecera;
479 $this->raiseError('Parámetro incorrecto: lugar debe ser izquierda, centro o derecha.');
486 * @param array $pie Array de 3 elementos, que son la celda izquierda,
487 * central y derecha del pie (en ese órden).
489 * @see Ejemplo en setCabecera().
491 function setPie($pie) {
492 if (count($pie) != 3) {
493 $this->raiseError('Parámetro incorrecto: debe ser un array de 3 elementos.');
499 * Agrega información al pie de la tabla.
501 * @param mixed $pie Celda a agregar al pie. Puede ser un string
502 * o un objeto con un método toHtml().
503 * @param string $lugar Lugar en donde poner el pie. Puede ser
504 * 'izquierda', 'centro' o 'derecha'.
506 * @see Ejemplo en updateCabecera().
508 function updatePie($pie, $lugar) {
510 $this->_pie = array(' ', ' ', ' ');
512 if ($lugar == 'izquierda') {
513 $this->_pie[0] = $pie;
514 } elseif ($lugar == 'centro') {
515 $this->_pie[1] = $pie;
516 } elseif ($lugar == 'derecha') {
517 $this->_pie[2] = $pie;
519 $this->raiseError('Parámetro incorrecto: lugar debe ser izquierda, centro o derecha.');