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