]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/HTML/Tabla.php
Se arreglan bugs reportados por Myrna.
[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
34 class MECON_HTML_Tabla extends HTML_Table {
35     
36     /**
37      * Valores de Configuracion particular
38      *
39      * @var array() $conf
40      * @access protected
41      */
42     var $_conf;
43
44     /**
45      * Atributos de las tablas.
46      *
47      * @var array() attrs
48      * @access protected
49      */
50     var $_attrs;
51
52     /**
53      * Constructor. 
54      * Puede recibir como parametro un string con los atributos que se 
55      * quieren dar a la tabla en cuestion. Estos atributos estan
56      * seteados por default segun el archivo de configuracion.
57      * Ademas puede recibir la indicacion de algun estilo en particular.
58      *
59      * @param mixed $atributos Atributos diferentes a los estandares para la tabla
60      * @param string $estilo Tipo de tabla
61      * 
62      * @access public
63      */
64     function MECON_HTML_Tabla($attrs = null, $estilo = 'comun') 
65     {
66         $this->_conf = include 'MECON/HTML/Tabla/estilo_'.$estilo.'.php'; // Obtengo los valores particulares de configuracion
67         // Seteo los atributos para la tabla
68         $this->_attrs = $this->_conf['atributos']['tabla_comun'];
69         //Genero el objeto HTML_Table
70         if (is_string($attrs)) {
71             $attrs = $this->_parseAttributes($attrs);
72         }
73         if (is_array($attrs)) {
74             if (isset($attrs['width'])) {
75                 $this->_attrs['width'] = $attrs['width'];
76             }
77             if (isset($attrs['bgcolor'])) {
78                 $this->_attrs['bgcolor'] = $attrs['bgcolor'];
79             }
80             if (isset($attrs['cellspacing'])) {
81                 $this->_attrs['cellspacing']  = $attrs['cellspacing'];
82             }            
83             if (isset($attrs['cellpadding'])) {
84                 $this->_attrs['cellpadding']  = $attrs['cellpadding'];
85             }            
86         }        
87         $this->HTML_Table($this->_attrs);
88     }    
89
90     /**                 
91      * Agrega una fila del tipo cabecera tomando colores y demas del  
92      * archivo de configuracion. Recibe como parametro un array con 
93      * los datos a incluir en la linea. Agrega tantas columnas como
94      * elementos tenga el array. Si no recibe parametro alguno, 
95      * inserta una fila en blanco. Devuelve el identificador de la
96      * fila en donde inserto los datos.
97      *
98      * @param array() $contenido Contenido de la fila
99      *
100      * @return int Identificador de Linea
101      * @access public
102      * @deprecated
103      */
104     function agregarFilaCabecera($contenido = '', $atributos = '')
105     {
106         return $this->addRow($contenido, 'cabecera');
107     }
108
109     /**                 
110      * Agrega una fila del tipo comun, 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      * 
121      * @access public
122      * @deprecated
123      */
124     function agregarFila($contenido = '')
125     {
126         return $this->addRow($contenido, 'comun');
127     }
128
129     /**                 
130      * Modifica el atributo rowSpan a la celda pasada por parametro
131      *
132      * @param int $fila    Identificador de la fila que se quiere modificar
133      * @param int $columna Identificador de la columna que se quiere modificar
134      * @param int $valor   Atributo a modificar
135      * 
136      * @access public
137      * @deprecated
138      */
139     function rowSpan($fila, $columna, $valor)
140     {
141         return $this->updateCellAttributes($fila, $columna, 'rowspan="'.$valor.'"');
142     }
143
144     /**                 
145      * Modifica el atributo colSpan a la celda pasada por parametro
146      *
147      * @param int $fila    Identificador de la fila que se quiere modificar    
148      * @param int $columna Identificador de la columna que se quiere modificar
149      * @param int $valor   Atributo a modificar                               
150      * 
151      * @access public
152      * @deprecated
153      */
154     function colSpan($fila, $columna, $valor)
155     {
156         return $this->updateCellAttributes($fila, $columna, 'colspan="'.$valor.'"');
157     }
158
159     /**                 
160      * Modifica el atributo aling de la celda pasada por parametro
161      *
162      * @param int $fila     Identificador de la fila que se quiere modificar      
163      * @param int $columna  Identificador de la columna que se quiere modificar
164      * @param string $valor Atributo a modificar                               
165      * 
166      * @access public
167      * @deprecated
168      */
169     function align($fila, $columna, $valor)
170     {
171         return $this->updateCellAttributes($fila, $columna, 'align="'.$valor.'"');
172     }
173
174     /**
175      * Setea una columna como del tipo cabecera    
176      *
177      * @param int $columna Identificador de la columna que se quiere modificar
178      * 
179      * @access public
180      * @deprecated
181      */
182     function setColCabecera($columna)
183     {
184         return $this->updateColAttributes($columna, 'cabecera');
185     }
186
187     /**                 
188      * Setea una columna como del tipo titulo
189      *
190      * @param int $columna Identificador de la columna que se quiere modificar
191      * 
192      * @access public
193      * @deprecated
194      */
195     function setColTitulo($columna)
196     {
197         return $this->updateColAttributes($columna, 'titulo');
198     }
199
200     /**                 
201      * Alinea una columna entera  
202      *
203      * @param int $columna Identificador de la columna que se quiere modificar
204      * @param string $valor Valor
205      * 
206      * @access public
207      * @deprecated
208      */
209     function setColAlign($columna, $valor)
210     {
211         return $this->updateColAttributes($columna,'align="'.$valor.'"');
212     }
213
214     /**                 
215      * Cambia el tamanio de una columna entera  
216      *
217      * @param int $columna  Identificadore de la columna que se quiere modificar
218      * @param string $valor Valor
219      * 
220      * @access public
221      * @deprecated
222      */
223     function setColWidth($columna, $valor)
224     {
225         return $this->updateColAttributes($columna,'width="'.$valor.'"');
226     }
227
228     /**                 
229      * Cambia el color de fondo de una celda  
230      *
231      * @param int $fila     Identificador de la fila que se quiere modificar    
232      * @param int $columna  Identificador de la columna que se quiere modificar
233      * @param string $valor Atributo a modificar                               
234      *
235      * @access public
236      * @deprecated
237      */
238     function setCellBgcolor($fila, $columna, $valor)
239     {
240         return $this->updateCellAttributes($fila, $columna,'bgcolor="'.$valor.'"');
241     }
242
243     /**                 
244      * Devuelve el html de la tabla
245      *
246      * Devuelve el html de la tabla para que sea mostrado.
247      * Como parametro recibe el indicador de tabla simple.
248      * Si $simple es falso, devuelve el html comun y corriente (con 2
249      * tablas), si es false devuelve una tabla sola.
250      *
251      * @param bool $simple Tipo de tabla que se quiere recibir.
252      *
253      * @return string Html
254      * 
255      * @access public
256      */
257     function toHtml($simple = 0)
258     {
259         // Agregar la tabla de fondo.
260         if ($simple) {
261             $result = parent::toHtml();
262         } else {
263             $contenedora = $this->_conf['atributos']['tabla_contenedora'];
264             $contenedora['width'] = $this->getAttribute('width');
265             $this->updateAttributes(array('width' => '100%'));
266             $tabla_externa =  new HTML_Table($contenedora);
267             $tabla_externa->addRow(array(parent::toHtml()),
268                 $this->_conf['atributos']['celda_contenedora']);
269             $result = $tabla_externa->toHtml();    
270         }
271
272         return $result;
273     }
274
275     /**
276      * Cambia las propiedades de una celda
277      *
278      * Cambia las propiedades de una celda. Si $attrs es un array
279      * asociativo, se setean los atributos representados por las claves
280      * con los valores.
281      *
282      * @param int $row     Identificador de la fila que se quiere modificar    
283      * @param int $col     Identificador de la columna que se quiere modificar
284      * @param mixed $attrs Atributo a modificar                               
285      *
286      * @access public
287      */
288     function updateCellAttributes($row, $col, $attrs)
289     {
290         return parent::updateCellAttributes($row, $col, $this->_translateAttributes($attrs, false));
291     }
292
293     /**
294      * Establece las propiedades de una celda
295      *
296      * Establece las propiedades de una celda. Si $attrs es un array
297      * asociativo, se setean los atributos representados por las claves
298      * con los valores.
299      *
300      * @param int $row     Identificador de la fila que se quiere modificar     
301      * @param int $col     Identificador de la columna que se quiere modificar
302      * @param mixed $attrs Atributo a modificar                               
303      *
304      * @access public
305      */
306     function setCellAttributes($row, $col, $attrs)
307     {
308         return parent::setCellAttributes($row, $col, $this->_translateAttributes($attrs, true));
309     }
310
311     /**
312      * Agrega una fila
313      *
314      * Agrega una fila. El contenido es el que viene representado por 
315      * el array $content. Recibe los atributos en la variable $attrs
316      *
317      * @param mixed $content Contenido
318      * @param mixed $attrs Atributos
319      *
320      * @return int $rowId Identificador de la fila
321      *
322      * @access public
323      */
324     function addRow($content, $attrs = 'comun')
325     {
326         return parent::addRow($content, $attrs);
327     }
328     
329     /**
330      * Convierte un atributo a string
331      * 
332      * Convierte un atributo HTML al string para pasar a los metodos de HTML_Table
333      * Recibe en $attrs los atributos a modificar.
334      *
335      * @param mixed $attrs Atributos.
336      * @param bool  $isSet Indica si hay que setear.
337      *
338      * @return array
339      * @access private
340      */
341     function _translateAttributes($attrs, $isSet)
342     {
343         if (!$attrs) {
344             return array();
345         }
346         if (is_string($attrs)) {
347             $attrs = $this->_parseAttributes($attrs);
348         }
349         if ($isSet) {
350             $rta = $this->_conf['atributos']['celda_comun'];
351         } else {
352             $rta = array();
353         }
354         foreach ($attrs as $attr => $val) {
355             $attr = strtolower($attr);
356             switch ($attr) {
357                 // Estilos de celda
358                 case 'comun':
359                 case 'cabecera':
360                 case 'titulo':
361                     $rta = array_merge($rta, $this->_conf['atributos']["celda_$attr"]);
362                     break;
363                 case 'align':
364                 case 'valign':
365                 case 'width':
366                 case 'height':
367                 case 'rowspan':
368                 case 'colspan':
369                 case 'bgcolor':
370                 case 'class':
371                 case 'border':
372                 case 'cellspacing':
373                 case 'cellpadding':
374                 case 'nowrap':
375                     $rta[$attr] = $val;
376                     break;
377                 case 'spacing':
378                 case 'padding':
379                     $rta["cell$attr"] = $val;
380                     break;
381                 case 'th':
382                     $rta[$attr] = '';
383                     break;
384                 default:
385                     trigger_error("No se permite setear el atributo $attr", E_USER_ERROR);
386             }
387         }
388         return $rta;
389     }
390
391 }
392
393 ?>