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