]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/HTML/Tabla.php
Se corrige documentacion.
[mecon/meconlib.git] / lib / MECON / HTML / Tabla.php
1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3                              Ministerio de Economía
4                                     meconlib
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
7
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)
11 any later version.
12
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.
16  
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 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'HTML/Table.php';
28
29 /**
30  * Libreria para le manejo de las tablas de los sistemas de intranet.
31  *
32  */
33 class MECON_HTML_Tabla extends HTML_Table {
34     
35     /**
36      * Valores de Configuracion particular
37      *
38      * @var array() $conf
39      * @access protected
40      */
41     var $_conf;
42
43     /**
44      * Atributos de las tablas.
45      *
46      * @var array() attrs
47      * @access protected
48      */
49     var $_attrs;
50
51     /**
52      * Íconos e información que va arriba de la tabla.
53      *
54      * @var array()
55      * @access private.
56      */
57     var $_cabecera = array();
58
59     /**
60      * Íconos e información que va abajo de la tabla.
61      *
62      * @var array()
63      * @access private.
64      */
65     var $_pie = array();
66
67     /**
68      * Constructor. 
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.
73      *
74      * @param mixed $atributos Atributos diferentes a los estandares para la tabla
75      * @param string $estilo Tipo de tabla
76      * 
77      * @access public
78      */
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);
87         }
88         if (is_array($attrs)) {
89             if (isset($attrs['width'])) {
90                 $this->_attrs['width'] = $attrs['width'];
91             }
92             if (isset($attrs['bgcolor'])) {
93                 $this->_attrs['bgcolor'] = $attrs['bgcolor'];
94             }
95             if (isset($attrs['cellspacing'])) {
96                 $this->_attrs['cellspacing']  = $attrs['cellspacing'];
97             }            
98             if (isset($attrs['cellpadding'])) {
99                 $this->_attrs['cellpadding']  = $attrs['cellpadding'];
100             }            
101         }        
102         $this->HTML_Table($this->_attrs);
103             if (isset($attrs['align'])) {
104                 $this->_attrs['align'] = $attrs['align'];
105             }
106
107     }    
108
109     /**                 
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.
116      *
117      * @param array() $contenido Contenido de la fila
118      *
119      * @return int Identificador de Linea
120      * @access public
121      * @deprecated
122      */
123     function agregarFilaCabecera($contenido = '', $atributos = '') {
124         return $this->addRow($contenido, 'cabecera');
125     }
126
127     /**                 
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.
134      *
135      * @param array() $contenido Contenido de la fila
136      *
137      * @return int Identificador de Linea
138      * 
139      * @access public
140      * @deprecated
141      */
142     function agregarFila($contenido = '') {
143         return $this->addRow($contenido, 'comun');
144     }
145
146     /**                 
147      * Modifica el atributo rowSpan a la celda pasada por parametro
148      *
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
152      * 
153      * @access public
154      * @deprecated
155      */
156     function rowSpan($fila, $columna, $valor) {
157         return $this->updateCellAttributes($fila, $columna, 'rowspan="'.$valor.'"');
158     }
159
160     /**                 
161      * Modifica el atributo colSpan a la celda pasada por parametro
162      *
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                               
166      * 
167      * @access public
168      * @deprecated
169      */
170     function colSpan($fila, $columna, $valor) {
171         return $this->updateCellAttributes($fila, $columna, 'colspan="'.$valor.'"');
172     }
173
174     /**                 
175      * Modifica el atributo aling de la celda pasada por parametro
176      *
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                               
180      * 
181      * @access public
182      * @deprecated
183      */
184     function align($fila, $columna, $valor) {
185         return $this->updateCellAttributes($fila, $columna, 'align="'.$valor.'"');
186     }
187
188     /**
189      * Setea una columna como del tipo cabecera    
190      *
191      * @param int $columna Identificador de la columna que se quiere modificar
192      * 
193      * @access public
194      * @deprecated
195      */
196     function setColCabecera($columna) {
197         return $this->updateColAttributes($columna, 'cabecera');
198     }
199
200     /**                 
201      * Setea una columna como del tipo titulo
202      *
203      * @param int $columna Identificador de la columna que se quiere modificar
204      * 
205      * @access public
206      * @deprecated
207      */
208     function setColTitulo($columna) {
209         return $this->updateColAttributes($columna, 'titulo');
210     }
211
212     /**                 
213      * Alinea una columna entera  
214      *
215      * @param int $columna Identificador de la columna que se quiere modificar
216      * @param string $valor Valor
217      * 
218      * @access public
219      * @deprecated
220      */
221     function setColAlign($columna, $valor) {
222         return $this->updateColAttributes($columna,'align="'.$valor.'"');
223     }
224
225     /**                 
226      * Cambia el tamanio de una columna entera  
227      *
228      * @param int $columna  Identificadore de la columna que se quiere modificar
229      * @param string $valor Valor
230      * 
231      * @access public
232      * @deprecated
233      */
234     function setColWidth($columna, $valor) {
235         return $this->updateColAttributes($columna,'width="'.$valor.'"');
236     }
237
238     /**                 
239      * Cambia el color de fondo de una celda  
240      *
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                               
244      *
245      * @access public
246      * @deprecated
247      */
248     function setCellBgcolor($fila, $columna, $valor) {
249         return $this->updateCellAttributes($fila, $columna,'bgcolor="'.$valor.'"');
250     }
251
252     /**                 
253      * Devuelve el html de la tabla
254      *
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.
259      *
260      * @param bool $simple Tipo de tabla que se quiere recibir.
261      *
262      * @return string Html
263      * 
264      * @access public
265      */
266     function toHtml($simple = 0) {
267         if ($simple) {
268             $result = parent::toHtml();
269         // Agregar la tabla de fondo.
270         } else {
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();    
279         }
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));
283         }
284         // Si tiene cabecera, la agrega.
285         if ($this->_cabecera) {
286             $tabla_externa->addRow($this->_cabecera, array(
287                 'valign' => 'middle',
288                 'width'  => '33%',
289             ));
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'));
293         }
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(
298                 'align'   => 'center',
299                 'valign'  => 'middle',
300                 'width'   => '100%',
301                 'colspan' => '3',
302             ));
303         }
304         // Si tiene pie, lo agrega.
305         if ($this->_pie) {
306             $id = $tabla_externa->addRow($this->_pie, array(
307                 'valign' => 'middle',
308                 'width' => '33%',
309             ));
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'));
313         }
314         return ($this->_cabecera or $this->_pie) ? $tabla_externa->toHtml() : $result;
315     }
316
317     /**
318      * Cambia las propiedades de una celda
319      *
320      * Cambia las propiedades de una celda. Si $attrs es un array
321      * asociativo, se setean los atributos representados por las claves
322      * con los valores.
323      *
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                               
327      *
328      * @access public
329      */
330     function updateCellAttributes($row, $col, $attrs) {
331         return parent::updateCellAttributes($row, $col, $this->_translateAttributes($attrs, false));
332     }
333
334     /**
335      * Establece las propiedades de una celda
336      *
337      * Establece las propiedades de una celda. Si $attrs es un array
338      * asociativo, se setean los atributos representados por las claves
339      * con los valores.
340      *
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                               
344      *
345      * @access public
346      */
347     function setCellAttributes($row, $col, $attrs) {
348         return parent::setCellAttributes($row, $col, $this->_translateAttributes($attrs, true));
349     }
350
351     /**
352      * Agrega una fila
353      *
354      * Agrega una fila. El contenido es el que viene representado por 
355      * el array $content. Recibe los atributos en la variable $attrs
356      *
357      * @param mixed $content Contenido
358      * @param mixed $attrs Atributos
359      *
360      * @return int $rowId Identificador de la fila
361      *
362      * @access public
363      */
364     function addRow($content, $attrs = 'comun') {
365         return parent::addRow($content, $attrs);
366     }
367     
368     /**
369      * Convierte un atributo a string
370      * 
371      * Convierte un atributo HTML al string para pasar a los metodos de HTML_Table
372      * Recibe en $attrs los atributos a modificar.
373      *
374      * @param mixed $attrs Atributos.
375      * @param bool  $isSet Indica si hay que setear.
376      *
377      * @return array
378      * @access private
379      */
380     function _translateAttributes($attrs, $isSet) {
381         if (!$attrs) {
382             return array();
383         }
384         if (is_string($attrs)) {
385             $attrs = $this->_parseAttributes($attrs);
386         }
387         if ($isSet) {
388             $rta = $this->_conf['atributos']['celda_comun'];
389         } else {
390             $rta = array();
391         }
392         foreach ($attrs as $attr => $val) {
393             $attr = strtolower($attr);
394             switch ($attr) {
395                 // Estilos de celda
396                 case 'comun':
397                 case 'cabecera':
398                 case 'titulo':
399                     $rta = array_merge($rta, $this->_conf['atributos']["celda_$attr"]);
400                     break;
401                 case 'align':
402                 case 'valign':
403                 case 'width':
404                 case 'height':
405                 case 'rowspan':
406                 case 'colspan':
407                 case 'bgcolor':
408                 case 'class':
409                 case 'border':
410                 case 'cellspacing':
411                 case 'cellpadding':
412                 case 'nowrap':
413                     $rta[$attr] = $val;
414                     break;
415                 case 'spacing':
416                 case 'padding':
417                     $rta["cell$attr"] = $val;
418                     break;
419                 case 'th':
420                     $rta[$attr] = '';
421                     break;
422                 default:
423                     trigger_error("No se permite setear el atributo $attr", E_USER_ERROR);
424             }
425         }
426         return $rta;
427     }
428
429     /**
430      * Obtiene la Cascade Style Sheet para esta tabla.
431      *
432      * @return string Path 'web' a la css.
433      */
434     function getCSS() {
435         return $this->_conf['css'];
436     }
437
438     /**
439      * Setea la cabecera.
440      * Ejemplo:
441      * @code
442      * $tabla->setCabecera(array('Hola', '&nbsp;', 'mundo!'));
443      * @endcode
444      *
445      * @param array $cabecera Array de 3 elementos, que son la celda izquierda,
446      *                        central y derecha de la cabecera (en ese órden).
447      */
448     function setCabecera($cabecera) {
449         if (count($pie) != 3) {
450             $this->raiseError('Parámetro incorrecto: debe ser un array de 3 elementos.');
451         }
452         $this->_cabecera = $cabecera;
453     }
454
455     /**
456      * Agrega información a la cabecera de la tabla.
457      * Ejemplo:
458      * @code
459      * $tabla->updateCabecera('Hola', 'izquierda');
460      * $tabla->updateCabecera('mundo!', 'derecha');
461      * @endcode
462      *
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'.
467      */
468     function updateCabecera($cabecera, $lugar) {
469         if (!$this->_cabecera) {
470             $this->_cabecera = array('&nbsp;', '&nbsp;', '&nbsp;');
471         }
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;
478         } else {
479             $this->raiseError('Parámetro incorrecto: lugar debe ser izquierda, centro o derecha.');
480         }
481     }
482
483     /**
484      * Setea el pie.
485      *
486      * @param array $pie Array de 3 elementos, que son la celda izquierda,
487      *                   central y derecha del pie (en ese órden).
488      *
489      * @see Ejemplo en setCabecera().
490      */
491     function setPie($pie) {
492         if (count($pie) != 3) {
493             $this->raiseError('Parámetro incorrecto: debe ser un array de 3 elementos.');
494         }
495         $this->_pie = $pie;
496     }
497
498     /**
499      * Agrega información al pie de la tabla.
500      *
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'.
505      *
506      * @see Ejemplo en updateCabecera().
507      */
508     function updatePie($pie, $lugar) {
509         if (!$this->_pie) {
510             $this->_pie = array('&nbsp;', '&nbsp;', '&nbsp;');
511         }
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;
518         } else {
519             $this->raiseError('Parámetro incorrecto: lugar debe ser izquierda, centro o derecha.');
520         }
521     }
522
523 }
524
525 ?>