]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/HTML/QuickForm/Renderer/Tabla.php
- Correccion de bugs
[mecon/meconlib.git] / lib / MECON / HTML / QuickForm / Renderer / 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: jue jul 17 15:36:26 ART 2003
22 Autor:  Leandro Lucarella <llucar@mecon.gov.ar>
23 -------------------------------------------------------------------------------
24 $Id$
25 -----------------------------------------------------------------------------*/
26
27 require_once 'HTML/QuickForm/Renderer.php';
28 require_once 'MECON/HTML/Tabla.php';
29
30 /**
31  * QuickForm renderer que usa Tabla como backend.
32  * Basado en el QuickForm Renderer basico.
33  * 
34  * @access public
35  */
36 class MECON_HTML_QuickForm_Renderer_Tabla extends HTML_QuickForm_Renderer {
37
38    /**
39     * Tabla usada para dibujar el formulario.
40     * @var      object Tabla
41     * @access   private
42     */
43     var $tabla;
44
45    /**
46     * HTML con los scripts para poner antes del formulario (tipicamente
47     * un javascript).
48     * @var      string
49     * @access   private
50     */
51     var $_script = '';
52
53    /**
54     * HTML para agregar antes de la tabla (tipicamente un javascript).
55     * @var      string
56     * @access   private
57     */
58     var $_prepend = '';
59
60    /**
61     * HTML para agregar despues de la tabla.
62     * @var      string
63     * @access   private
64     */
65     var $_append = '';
66
67    /**
68     * True if we are inside a group 
69     * @var      bool
70     * @access   private
71     */
72     var $_inGroup = false;
73
74    /**
75     * Group error related message.
76     * @var      string
77     * @access   private
78     */
79     var $_groupError = '';
80
81    /**
82     * Array with HTML generated for group elements
83     * @var      array
84     * @access   private
85     */
86     var $_groupElements = array();
87
88    /**
89     * Constructor.
90     *
91     * @param  mixed $param Array o sting con el estilo de la tabla u objeto
92     * tabla alternativo para usar.
93     *
94     * @access public
95     */
96     function MECON_HTML_QuickForm_Renderer_Tabla($param = array())
97     {
98         $this->HTML_QuickForm_Renderer();
99         if (is_a($param, 'Tabla')) {
100             $this->setTable($param);
101         }
102         else {
103             $this->tabla =& new MECON_HTML_Tabla($param);
104         }
105     } // end constructor
106
107    /**
108     * returns the HTML generated for the form
109     *
110     * @access public
111     * @return string
112     */
113     function toHtml()
114     {
115         return  $this->_script . $this->_prepend .
116                 $this->tabla->toHtml() .
117                 $this->_append;
118     } // end func toHtml
119     
120    /**
121     * Called when visiting a form, before processing any form elements
122     *
123     * @param    object      An HTML_QuickForm object being visited
124     * @access   public
125     * @return   void
126     */
127     function startForm(&$form)
128     {
129         # FIXME - deberia sacarlo del QuickForm
130         #$this->_prepend = $form->getFormStart();
131 #        $attrs = $form->getAttributesString();
132         $attrs = $form->getAttributes(true);
133         $this->_prepend = "\n<form$attrs>\n";
134
135     } // end func startForm
136
137    /**
138     * Called when visiting a form, after processing all form elements
139     * Adds required note, form attributes, validation javascript and form content.
140     * 
141     * @param    object      An HTML_QuickForm object being visited
142     * @access   public
143     * @return   void
144     */
145     function finishForm(&$form)
146     {
147         // add a required note, if one is needed
148         if (!empty($form->_required) && !$form->_freezeAll) {
149             $id = $this->tabla->addRow(
150                 array('<font size="-2">'.$form->getRequiredNote().'</font>'),
151                 array('colspan' => 2, 'cabecera' => true)
152             );
153             //$this->tabla->updateCellAttributes($id, array('colspan' => 2));
154         }
155         // add form attributes and content
156         //$this->_html = str_replace('{content}', $this->_html, $html);
157         // add a validation script
158         $this->_script = strval($form->getValidationScript());
159         # FIXME - deberia sacarlo del QuickForm
160         #$this->_append = $form->getFormEnd();
161         $this->_append = "\n</form>\n";
162     } // end func finishForm
163       
164    /**
165     * Called when visiting a header element
166     *
167     * @param    object     An HTML_QuickForm_header element being visited
168     * @access   public
169     * @return   void
170     */
171     function renderHeader(&$header)
172     {
173         $name = $header->getName();
174         $this->tabla->addRow(
175             array($header->toHtml()),
176             array('colspan' => 2, $name => true)
177         );
178     } // end func renderHeader
179
180    /**
181     * Renders an element Html
182     * Called when visiting an element
183     *
184     * @param object     An HTML_QuickForm_element object being visited
185     * @param bool       Whether an element is required
186     * @param string     An error message associated with an element
187     * @access public
188     * @return void
189     */
190     function renderElement(&$element, $required, $error)
191     {
192         if (!$this->_inGroup) {
193             $id = $this->tabla->addRow(
194                 array(
195                     $element->getLabel() . ($required ? '<font color="red">*</FONT>' : ''),
196                     $element->toHtml() . ($error ? "<br><font color=\"red\">$error</FONT>" : ''),
197                 )
198             );
199             $this->tabla->updateCellAttributes($id, 0, array('titulo' => true, 'align' => 'left'));
200             $this->tabla->updateCellAttributes($id, 1, array('align' => 'left'));
201         } else {
202             $this->_groupElements[] = ($element->getLabel() ? ($element->getLabel().'&nbsp;') : '') . $element->toHtml();
203         }
204     } // end func renderElement
205    
206    /**
207     * Renders an hidden element
208     * Called when visiting a hidden element
209     * 
210     * @param object     An HTML_QuickForm_hidden object being visited
211     * @access public
212     * @return void
213     */
214     function renderHidden(&$element)
215     {
216         $this->_prepend .= "\n\t". $element->toHtml();
217     } // end func renderHidden
218
219    /**
220     * Called when visiting a raw HTML/text pseudo-element
221     * 
222     * @param  object     An HTML_QuickForm_html element being visited
223     * @access public
224     * @return void
225     */
226     function renderHtml(&$data)
227     {
228         $this->tabla->addRow(
229             array($header->toHtml()),
230             array('colspan' => 2)
231         );
232     } // end func renderHtml
233
234    /**
235     * Called when visiting a group, before processing any group elements
236     *
237     * @param object     An HTML_QuickForm_group object being visited
238     * @param bool       Whether a group is required
239     * @param string     An error message associated with a group
240     * @access public
241     * @return void
242     */
243     function startGroup(&$group, $required, $error)
244     {
245         $this->_groupElements = array();
246         $this->_groupError    = $error;
247         $this->_inGroup       = true;
248     } // end func startGroup
249
250    /**
251     * Called when visiting a group, after processing all group elements
252     *
253     * @param    object      An HTML_QuickForm_group object being visited
254     * @access   public
255     * @return   void
256     */
257     function finishGroup(&$group)
258     {
259         $name = $group->getName();
260         $sep = $group->_separator;
261         if (strtolower($name) == 'botones') {
262             $id = $this->tabla->addRow(
263                 array(join('', $this->_groupElements))
264             );
265             $this->tabla->updateCellAttributes($id, 0, array('valign' => 'middle', 'align' => 'center', 'colspan' => 2));
266         } else {
267             $id = $this->tabla->addRow(
268                 array($group->getLabel(), join($sep, $this->_groupElements)),
269                 array('valign' => 'middle', 'align' => 'left')
270             );
271             $this->tabla->updateCellAttributes($id, 0, array('titulo' => true, 'align' => 'left'));
272         }
273         $this->_inGroup = false;
274     } // end func finishGroup
275     
276    /**
277     * Actualiza atributos de la tabla interna.
278     *
279     * @param    mixed   $attrs Html attributes
280     * @access   public
281     * @return   void
282     * @deprecated Usar $renderer->tabla->updateAttributes().
283     */
284     function updateAttributes($attrs) {
285         $this->tabla->updateAttributes($attrs);
286     }
287    /**
288     * Setea atributos.
289     *
290     * @param    mixed   $attrs Html attributes
291     * @access   public
292     * @return   void
293     * @deprecated Usar $renderer->tabla->setAttributes().
294     */
295     function setAttributes($attrs) {
296         $this->tabla->setAttributes($attrs);
297     }
298    /**
299     * Obtiene atributos.
300     *
301     * @access   public
302     * @return   mixed
303     * @deprecated Usar $renderer->tabla->getAttributes().
304     */
305     function getAttributes() {
306         return $this->tabla->getAttributes();
307     }
308
309    /**
310     * Setea la tabla que utilizará el renderer.
311     *
312     * @param Tabla $param Objeto tabla alternativo para utilizar
313     *
314     * @access   public
315     *
316     * @deprecated Usar $renderer->tabla.
317     */
318     function setTable(&$param) {
319         $this->tabla =& $param;
320     }
321
322     function getCSS() {
323         return $this->tabla->getCSS();
324     }
325
326 } // end class HTML_QuickForm_Renderer_Default
327
328 ?>