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