]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/HTML/QuickForm/Renderer/Tabla.php
02f675942add7d728e2697a7ecbf5f77d9efd6bb
[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         $this->_prepend = "\n<form$attrs>\n";
133     } // end func startForm
134
135    /**
136     * Called when visiting a form, after processing all form elements
137     * Adds required note, form attributes, validation javascript and form content.
138     * 
139     * @param    object      An HTML_QuickForm object being visited
140     * @access   public
141     * @return   void
142     */
143     function finishForm(&$form)
144     {
145         // add a required note, if one is needed
146         if (!empty($form->_required) && !$form->_freezeAll) {
147             $id = $this->_tabla->addRow(
148                 array($form->getRequiredNote()),
149                 array('colspan' => 2, 'cabecera' => true)
150             );
151             //$this->_tabla->updateCellAttributes($id, array('colspan' => 2));
152         }
153         // add form attributes and content
154         //$this->_html = str_replace('{content}', $this->_html, $html);
155         // add a validation script
156         $this->_script = strval($form->getValidationScript());
157         # FIXME - deberia sacarlo del QuickForm
158         #$this->_append = $form->getFormEnd();
159         $this->_append = "\n</form>\n";
160     } // end func finishForm
161       
162    /**
163     * Called when visiting a header element
164     *
165     * @param    object     An HTML_QuickForm_header element being visited
166     * @access   public
167     * @return   void
168     */
169     function renderHeader(&$header)
170     {
171         $name = $header->getName();
172         $this->_tabla->addRow(
173             array($header->toHtml()),
174             array('colspan' => 2, $name => true)
175         );
176     } // end func renderHeader
177
178    /**
179     * Renders an element Html
180     * Called when visiting an element
181     *
182     * @param object     An HTML_QuickForm_element object being visited
183     * @param bool       Whether an element is required
184     * @param string     An error message associated with an element
185     * @access public
186     * @return void
187     */
188     function renderElement(&$element, $required, $error)
189     {
190         if (!$this->_inGroup) {
191             $id = $this->_tabla->addRow(
192                 array(
193                     $element->getLabel() . ($required ? '<font color="red">*</FONT>' : ''),
194                     $element->toHtml() . ($error ? "<br><font color=\"red\">$error</FONT>" : ''),
195                 )
196             );
197             $this->_tabla->updateCellAttributes($id, 0, array('titulo' => true, 'align' => 'left'));
198             $this->_tabla->updateCellAttributes($id, 1, array('align' => 'left'));
199         } else {
200             $this->_groupElements[] = ($element->getLabel() ? ($element->getLabel().'&nbsp;') : '') . $element->toHtml();
201         }
202     } // end func renderElement
203    
204    /**
205     * Renders an hidden element
206     * Called when visiting a hidden element
207     * 
208     * @param object     An HTML_QuickForm_hidden object being visited
209     * @access public
210     * @return void
211     */
212     function renderHidden(&$element)
213     {
214         $this->_prepend .= "\n\t". $element->toHtml();
215     } // end func renderHidden
216
217    /**
218     * Called when visiting a raw HTML/text pseudo-element
219     * 
220     * @param  object     An HTML_QuickForm_html element being visited
221     * @access public
222     * @return void
223     */
224     function renderHtml(&$data)
225     {
226         $this->_tabla->addRow(
227             array($header->toHtml()),
228             array('colspan' => 2)
229         );
230     } // end func renderHtml
231
232    /**
233     * Called when visiting a group, before processing any group elements
234     *
235     * @param object     An HTML_QuickForm_group object being visited
236     * @param bool       Whether a group is required
237     * @param string     An error message associated with a group
238     * @access public
239     * @return void
240     */
241     function startGroup(&$group, $required, $error)
242     {
243         $this->_groupElements = array();
244         $this->_groupError    = $error;
245         $this->_inGroup       = true;
246     } // end func startGroup
247
248    /**
249     * Called when visiting a group, after processing all group elements
250     *
251     * @param    object      An HTML_QuickForm_group object being visited
252     * @access   public
253     * @return   void
254     */
255     function finishGroup(&$group)
256     {
257         $name = $group->getName();
258         $sep = $group->_separator;
259         if (strtolower($name) == 'botones') {
260             $id = $this->_tabla->addRow(
261                 array(join('', $this->_groupElements))
262             );
263             $this->_tabla->updateCellAttributes($id, 0, array('valign' => 'middle', 'align' => 'center', 'colspan' => 2));
264         } else {
265             $id = $this->_tabla->addRow(
266                 array($group->getLabel(), join($sep, $this->_groupElements)),
267                 array('valign' => 'middle', 'align' => 'left')
268             );
269             $this->_tabla->updateCellAttributes($id, 0, array('titulo' => true, 'align' => 'left'));
270         }
271         $this->_inGroup = false;
272     } // end func finishGroup
273     
274    /**
275     *
276     *
277     * @param    mixed   $attrs Html attributes
278     * @access   public
279     * @return   void
280     */
281     function updateAttributes($attrs) {
282         $this->_tabla->updateAttributes($attrs);
283     }
284    /**
285     *
286     *
287     * @param    mixed   $attrs Html attributes
288     * @access   public
289     * @return   void
290     */
291     function setAttributes($attrs) {
292         $this->_tabla->setAttributes($attrs);
293     }
294    /**
295     *
296     *
297     * @access   public
298     * @return   mixed
299     */
300     function getAttributes() {
301         return $this->_tabla->getAttributes();
302     }
303
304    /**
305     *
306     *
307     * @param Tabla $param Objeto tabla alternativo para utilizar
308     *
309     * @access   public
310     */
311     function setTable($param) {
312         $this->_tabla =& $param;
313     }
314
315     function getCSS() {
316         return $this->_tabla->getCSS();
317     }
318
319 } // end class HTML_QuickForm_Renderer_Default
320
321 ?>