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