Subversion Repositories Applications.papyrus

Rev

Rev 320 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 320 Rev 443
1
<?php
1
<?php
2
/* vim: set expandtab tabstop=4 shiftwidth=4: */
2
/* vim: set expandtab tabstop=4 shiftwidth=4: */
3
// +----------------------------------------------------------------------+
3
// +----------------------------------------------------------------------+
4
// | PHP version 4.0                                                      |
4
// | PHP version 4.0                                                      |
5
// +----------------------------------------------------------------------+
5
// +----------------------------------------------------------------------+
6
// | Copyright (c) 1997-2003 The PHP Group                                |
6
// | Copyright (c) 1997-2003 The PHP Group                                |
7
// +----------------------------------------------------------------------+
7
// +----------------------------------------------------------------------+
8
// | This source file is subject to version 2.0 of the PHP license,       |
8
// | This source file is subject to version 2.0 of the PHP license,       |
9
// | that is bundled with this package in the file LICENSE, and is        |
9
// | that is bundled with this package in the file LICENSE, and is        |
10
// | available at through the world-wide-web at                           |
10
// | available at through the world-wide-web at                           |
11
// | http://www.php.net/license/2_02.txt.                                 |
11
// | http://www.php.net/license/2_02.txt.                                 |
12
// | If you did not receive a copy of the PHP license and are unable to   |
12
// | If you did not receive a copy of the PHP license and are unable to   |
13
// | obtain it through the world-wide-web, please send a note to          |
13
// | obtain it through the world-wide-web, please send a note to          |
14
// | license@php.net so we can mail you a copy immediately.               |
14
// | license@php.net so we can mail you a copy immediately.               |
15
// +----------------------------------------------------------------------+
15
// +----------------------------------------------------------------------+
16
// | Author: Ron McClain <ron@humaniq.com>                                |
16
// | Author: Ron McClain <ron@humaniq.com>                                |
17
// +----------------------------------------------------------------------+
17
// +----------------------------------------------------------------------+
18
//
18
//
19
// $Id: Object.php,v 1.1 2005-03-30 08:50:33 jpm Exp $
19
// $Id: Object.php,v 1.2 2005-09-20 17:01:22 ddelon Exp $
20
 
20
 
21
require_once('HTML/QuickForm/Renderer.php');
21
require_once('HTML/QuickForm/Renderer.php');
22
 
22
 
23
/**
23
/**
24
 * A concrete renderer for HTML_QuickForm, makes an object from form contents
24
 * A concrete renderer for HTML_QuickForm, makes an object from form contents
25
 *
25
 *
26
 * Based on HTML_Quickform_Renderer_Array code
26
 * Based on HTML_Quickform_Renderer_Array code
27
 *
27
 *
28
 * @public
28
 * @access public
29
 */
29
 */
30
class HTML_QuickForm_Renderer_Object extends HTML_QuickForm_Renderer {
30
class HTML_QuickForm_Renderer_Object extends HTML_QuickForm_Renderer
-
 
31
{
31
    /**
32
    /**
32
     * The object being generated
33
     * The object being generated
33
     * @var object $_obj
34
     * @var object $_obj
34
     */
35
     */
35
    var $_obj= null;
36
    var $_obj= null;
36
 
37
 
37
    /**
38
    /**
38
     * Number of sections in the form (i.e. number of headers in it)
39
     * Number of sections in the form (i.e. number of headers in it)
39
     * @var integer $_sectionCount
40
     * @var integer $_sectionCount
40
     */
41
     */
41
    var $_sectionCount;
42
    var $_sectionCount;
42
 
43
 
43
    /**
44
    /**
44
    * Current section number
45
    * Current section number
45
    * @var integer $_currentSection
46
    * @var integer $_currentSection
46
    */
47
    */
47
    var $_currentSection;
48
    var $_currentSection;
48
 
49
 
49
    /**
50
    /**
50
    * Object representing current group
51
    * Object representing current group
51
    * @var object $_currentGroup
52
    * @var object $_currentGroup
52
    */
53
    */
53
    var $_currentGroup = null;
54
    var $_currentGroup = null;
54
 
55
 
55
    /**
56
    /**
56
     * Class of Element Objects
57
     * Class of Element Objects
57
     * @var object $_elementType
58
     * @var object $_elementType
58
     */
59
     */
59
    var $_elementType = 'QuickFormElement';
60
    var $_elementType = 'QuickFormElement';
60
 
61
 
61
    /**
62
    /**
62
    * Additional style information for different elements  
63
    * Additional style information for different elements  
63
    * @var array $_elementStyles
64
    * @var array $_elementStyles
64
    */
65
    */
65
    var $_elementStyles = array();
66
    var $_elementStyles = array();
66
 
67
 
67
    /**
68
    /**
68
    * true: collect all hidden elements into string; false: process them as usual form elements
69
    * true: collect all hidden elements into string; false: process them as usual form elements
69
    * @var bool $_collectHidden
70
    * @var bool $_collectHidden
70
    */
71
    */
71
    var $_collectHidden = false;
72
    var $_collectHidden = false;
72
 
73
 
73
 
74
 
74
    /**
75
    /**
75
     * Constructor
76
     * Constructor
76
     *
77
     *
77
     * @param collecthidden bool    true: collect all hidden elements
78
     * @param collecthidden bool    true: collect all hidden elements
78
     * @public
79
     * @access public
79
     */
80
     */
80
    function HTML_QuickForm_Renderer_Object($collecthidden = false) 
81
    function HTML_QuickForm_Renderer_Object($collecthidden = false) 
81
    {
82
    {
82
        $this->HTML_QuickForm_Renderer();
83
        $this->HTML_QuickForm_Renderer();
83
        $this->_collectHidden = $collecthidden;
84
        $this->_collectHidden = $collecthidden;
84
        $this->_obj = new QuickformForm;
85
        $this->_obj = new QuickformForm;
85
    }
86
    }
86
 
87
 
87
    /**
88
    /**
88
     * Return the rendered Object
89
     * Return the rendered Object
89
     * @public
90
     * @access public
90
     */
91
     */
91
    function toObject() 
92
    function toObject() 
92
    {
93
    {
93
        return $this->_obj;
94
        return $this->_obj;
94
    }
95
    }
95
 
96
 
96
    /**
97
    /**
97
     * Set the class of the form elements.  Defaults to StdClass.
98
     * Set the class of the form elements.  Defaults to QuickformElement.
98
     * @param type string   Name of element class
99
     * @param type string   Name of element class
99
     * @public
100
     * @access public
100
     */
101
     */
101
    function setElementType($type) {
102
    function setElementType($type)
-
 
103
    {
102
        $this->_elementType = $type;
104
        $this->_elementType = $type;
103
    }
105
    }
104
 
106
 
105
    function startForm(&$form) 
107
    function startForm(&$form) 
106
    {
108
    {
107
        $this->_obj->frozen = $form->isFrozen();
109
        $this->_obj->frozen = $form->isFrozen();
108
        $this->_obj->javascript = $form->getValidationScript();
110
        $this->_obj->javascript = $form->getValidationScript();
109
        $this->_obj->attributes = $form->getAttributes(true);
111
        $this->_obj->attributes = $form->getAttributes(true);
110
        $this->_obj->requirednote = $form->getRequiredNote();
112
        $this->_obj->requirednote = $form->getRequiredNote();
111
        $this->_obj->errors = new StdClass;
113
        $this->_obj->errors = new StdClass;
112
 
114
 
113
        if($this->_collectHidden) {
115
        if($this->_collectHidden) {
114
            $this->_obj->hidden = '';
116
            $this->_obj->hidden = '';
115
        }
117
        }
116
        $this->_elementIdx = 1;
118
        $this->_elementIdx = 1;
117
        $this->_currentSection = null;
119
        $this->_currentSection = null;
118
        $this->_sectionCount = 0;
120
        $this->_sectionCount = 0;
119
    } // end func startForm
121
    } // end func startForm
120
 
122
 
121
    function renderHeader(&$header) 
123
    function renderHeader(&$header) 
122
    {
124
    {
123
        $hobj = new StdClass;
125
        $hobj = new StdClass;
124
        $hobj->header = $header->toHtml();
126
        $hobj->header = $header->toHtml();
125
        $this->_obj->sections[$this->_sectionCount] = $hobj;
127
        $this->_obj->sections[$this->_sectionCount] = $hobj;
126
        $this->_currentSection = $this->_sectionCount++;
128
        $this->_currentSection = $this->_sectionCount++;
127
    }
129
    }
-
 
130
 
128
    function renderElement(&$element, $required, $error) 
131
    function renderElement(&$element, $required, $error) 
129
    {
132
    {
130
        $elObj = $this->_elementToObject($element, $required, $error);
133
        $elObj = $this->_elementToObject($element, $required, $error);
131
        if(!empty($error)) {
134
        if(!empty($error)) {
132
            $name = $elObj->name;
135
            $name = $elObj->name;
133
            $this->_obj->errors->$name = $error;
136
            $this->_obj->errors->$name = $error;
134
        }
137
        }
135
        $this->_storeObject($elObj);
138
        $this->_storeObject($elObj);
136
    } // end func renderElement
139
    } // end func renderElement
137
 
140
 
-
 
141
    function renderHidden(&$element)
138
    function renderHidden(&$element) {
142
    {
139
        if($this->_collectHidden) {
143
        if($this->_collectHidden) {
140
            $this->_obj->hidden .= $element->toHtml() . "\n";
144
            $this->_obj->hidden .= $element->toHtml() . "\n";
141
        } else {
145
        } else {
142
            $this->renderElement($element, false, null);
146
            $this->renderElement($element, false, null);
143
        }
147
        }
144
    } //end func renderHidden
148
    } //end func renderHidden
145
 
149
 
146
    function startGroup(&$group, $required, $error) 
150
    function startGroup(&$group, $required, $error) 
147
    {
151
    {
148
        $this->_currentGroup = $this->_elementToObject($group, $required, $error);
152
        $this->_currentGroup = $this->_elementToObject($group, $required, $error);
149
        if(!empty($error)) {
153
        if(!empty($error)) {
150
            $name = $this->_currentGroup->name;
154
            $name = $this->_currentGroup->name;
151
            $this->_view->errors->$name = $error;
155
            $this->_obj->errors->$name = $error;
152
        }
156
        }
153
    } // end func startGroup
157
    } // end func startGroup
154
 
158
 
155
    function finishGroup(&$group) 
159
    function finishGroup(&$group) 
156
    {
160
    {
157
        $this->_storeObject($this->_currentGroup);
161
        $this->_storeObject($this->_currentGroup);
158
        $this->_currentGroup = null;
162
        $this->_currentGroup = null;
159
    } // end func finishGroup
163
    } // end func finishGroup
160
 
164
 
161
    /**
165
    /**
162
     * Creates an object representing an element
166
     * Creates an object representing an element
163
     *
167
     *
164
     * @private
168
     * @access private
165
     * @param element object    An HTML_QuickForm_element object
169
     * @param element object    An HTML_QuickForm_element object
166
     * @param required bool         Whether an element is required
170
     * @param required bool         Whether an element is required
167
     * @param error string    Error associated with the element
171
     * @param error string    Error associated with the element
168
     * @return object
172
     * @return object
169
     */
173
     */
170
    function _elementToObject(&$element, $required, $error) 
174
    function _elementToObject(&$element, $required, $error) 
171
    {
175
    {
172
        if($this->_elementType) {
176
        if($this->_elementType) {
173
            $ret = new $this->_elementType;
177
            $ret = new $this->_elementType;
174
        }
178
        }
175
        $ret->name = $element->getName();
179
        $ret->name = $element->getName();
176
        $ret->value = $element->getValue();
180
        $ret->value = $element->getValue();
177
        $ret->type = $element->getType();
181
        $ret->type = $element->getType();
178
        $ret->frozen = $element->isFrozen();
182
        $ret->frozen = $element->isFrozen();
179
        $labels = $element->getLabel();
183
        $labels = $element->getLabel();
180
        if (is_array($labels)) {
184
        if (is_array($labels)) {
181
            $ret->label = array_shift($labels);
185
            $ret->label = array_shift($labels);
182
            foreach ($labels as $key => $label) {
186
            foreach ($labels as $key => $label) {
183
                $key = is_int($key)? $key + 2: $key;
187
                $key = is_int($key)? $key + 2: $key;
184
                $ret->{'label_' . $key} = $label;
188
                $ret->{'label_' . $key} = $label;
185
            }
189
            }
186
        } else {
190
        } else {
187
            $ret->label = $labels;
191
            $ret->label = $labels;
188
        }
192
        }
189
        $ret->required = $required;
193
        $ret->required = $required;
190
        $ret->error = $error;
194
        $ret->error = $error;
191
 
195
 
192
        if(isset($this->_elementStyles[$ret->name])) {
196
        if(isset($this->_elementStyles[$ret->name])) {
193
            $ret->style = $this->_elementStyles[$ret->name];
197
            $ret->style = $this->_elementStyles[$ret->name];
194
            $ret->styleTemplate = "styles/". $ret->style .".html";
198
            $ret->styleTemplate = "styles/". $ret->style .".html";
195
        }
199
        }
196
        if($ret->type == 'group') {
200
        if($ret->type == 'group') {
197
            $ret->separator = $element->_separator;
201
            $ret->separator = $element->_separator;
198
            $ret->elements = array();
202
            $ret->elements = array();
199
        } else {
203
        } else {
200
            $ret->html = $element->toHtml();
204
            $ret->html = $element->toHtml();
201
        }
205
        }
202
        return $ret;
206
        return $ret;
203
    }
207
    }
204
 
208
 
205
    /** 
209
    /** 
206
     * Stores an object representation of an element in the form array
210
     * Stores an object representation of an element in the form array
207
     *
211
     *
208
     * @private
212
     * @access private
209
     * @param elObj object     Object representation of an element
213
     * @param elObj object     Object representation of an element
210
     * @return void
214
     * @return void
211
     */
215
     */
212
    function _storeObject($elObj) 
216
    function _storeObject($elObj) 
213
    {
217
    {
214
        $name = $elObj->name;
218
        $name = $elObj->name;
215
        if(is_object($this->_currentGroup) && $elObj->type != 'group') {
219
        if(is_object($this->_currentGroup) && $elObj->type != 'group') {
216
            $this->_currentGroup->elements[] = $elObj;
220
            $this->_currentGroup->elements[] = $elObj;
217
        } elseif (isset($this->_currentSection)) {
221
        } elseif (isset($this->_currentSection)) {
218
            $this->_obj->sections[$this->_currentSection]->elements[] = $elObj;
222
            $this->_obj->sections[$this->_currentSection]->elements[] = $elObj;
219
        } else {
223
        } else {
220
            $this->_obj->elements[] = $elObj;
224
            $this->_obj->elements[] = $elObj;
221
        }
225
        }
222
    }
226
    }
223
 
227
 
224
    function setElementStyle($elementName, $styleName = null)
228
    function setElementStyle($elementName, $styleName = null)
225
    {
229
    {
226
        if(is_array($elementName)) {
230
        if(is_array($elementName)) {
227
            $this->_elementStyles = array_merge($this->_elementStyles, $elementName);
231
            $this->_elementStyles = array_merge($this->_elementStyles, $elementName);
228
        } else {
232
        } else {
229
            $this->_elementStyles[$elementName] = $styleName;
233
            $this->_elementStyles[$elementName] = $styleName;
230
        }
234
        }
231
    }
235
    }
232
 
236
 
233
} // end class HTML_QuickForm_Renderer_Object
237
} // end class HTML_QuickForm_Renderer_Object
234
 
238
 
235
 
239
 
236
 
240
 
237
/**
241
/**
238
 * @abstract Long Description
-
 
239
 * This class represents the object passed to outputObject()
242
 * Convenience class for the form object passed to outputObject()
240
 * 
243
 * 
241
 * Eg.  
244
 * Eg.  
242
 * {form.outputJavaScript():h}
245
 * {form.outputJavaScript():h}
243
 * {form.outputHeader():h}
246
 * {form.outputHeader():h}
244
 *   <table>
247
 *   <table>
245
 *     <tr>
248
 *     <tr>
246
 *       <td>{form.name.label:h}</td><td>{form.name.html:h}</td>
249
 *       <td>{form.name.label:h}</td><td>{form.name.html:h}</td>
247
 *     </tr>
250
 *     </tr>
248
 *   </table>
251
 *   </table>
249
 * </form>
252
 * </form>
250
 * 
-
 
251
 * @public
-
 
252
 */
253
 */
253
class QuickformForm {
254
class QuickformForm
-
 
255
{
254
    /**
256
   /**
255
     * Whether the form has been frozen
257
    * Whether the form has been frozen
256
     * @var boolean $frozen
258
    * @var boolean $frozen
257
     */
259
    */
258
    var $frozen;        
260
    var $frozen;
259
    
261
 
260
    /**
262
   /**
261
     * Javascript for client-side validation
263
    * Javascript for client-side validation
262
     * @var string $javascript
264
    * @var string $javascript
263
     */
265
    */
264
     var $javascript;
266
    var $javascript;
-
 
267
 
-
 
268
   /**
-
 
269
    * Attributes for form tag
-
 
270
    * @var string $attributes
-
 
271
    */
-
 
272
    var $attributes;
-
 
273
 
-
 
274
   /**
-
 
275
    * Note about required elements
-
 
276
    * @var string $requirednote
-
 
277
    */
-
 
278
    var $requirednote;
-
 
279
 
-
 
280
   /**
-
 
281
    * Collected html of all hidden variables
-
 
282
    * @var string $hidden
-
 
283
    */
-
 
284
    var $hidden;
-
 
285
 
-
 
286
   /**
-
 
287
    * Set if there were validation errors.  
-
 
288
    * StdClass object with element names for keys and their
-
 
289
    * error messages as values
-
 
290
    * @var object $errors
-
 
291
    */
-
 
292
    var $errors;
265
 
293
 
266
     /**
-
 
267
      * Attributes for form tag
-
 
268
      * @var string $attributes
-
 
269
      */
-
 
270
     var $attributes;
-
 
271
 
-
 
272
     /**
-
 
273
      * Note about required elements
-
 
274
      * @var string $requirednote
-
 
275
      */
-
 
276
     var $requirednote;
-
 
277
 
-
 
278
     /**
-
 
279
      * Collected html of all hidden variables
-
 
280
      * @var string $hidden
-
 
281
      */
-
 
282
     var $hidden;
-
 
283
 
-
 
284
     /**
-
 
285
      * Set if there were validation errors.  
-
 
286
      * StdClass object with element names for keys and their
-
 
287
      * error messages as values
-
 
288
      * @var object $errors
-
 
289
      */
-
 
290
     var $errors;
-
 
291
 
-
 
292
     /**
294
   /**
293
      * Array of QuickformElementObject elements.  If there are headers in the form
295
    * Array of QuickformElementObject elements.  If there are headers in the form
294
      * this will be empty and the elements will be in the 
296
    * this will be empty and the elements will be in the 
295
      * separate sections
297
    * separate sections
296
      * @var array $elements
298
    * @var array $elements
297
      */
299
    */
298
     var $elements;
300
    var $elements;
299
 
301
 
300
     /**
302
   /**
301
      * Array of sections contained in the document
303
    * Array of sections contained in the document
302
      * @var array $sections
304
    * @var array $sections
303
      */
305
    */
304
     var $sections;
306
    var $sections;
305
 
307
 
306
     /**
308
   /**
307
      * Output &lt;form&gt; header
309
    * Output &lt;form&gt; header
308
      * {form.outputHeader():h} 
310
    * {form.outputHeader():h} 
309
      * @return string    &lt;form attributes&gt;
311
    * @return string    &lt;form attributes&gt;
310
      */
312
    */
-
 
313
    function outputHeader()
311
     function outputHeader() {
314
    {
312
        $hdr = "<form " . $this->attributes . ">\n";
-
 
313
        return $hdr;
315
        return "<form " . $this->attributes . ">\n";
-
 
316
    }
314
       }
317
 
315
     /**
318
   /**
316
      * Output form javascript
319
    * Output form javascript
317
      * {form.outputJavaScript():h}
320
    * {form.outputJavaScript():h}
318
      * @return string    Javascript
321
    * @return string    Javascript
319
      */
322
    */
-
 
323
    function outputJavaScript()
320
     function outputJavaScript() {
324
    {
321
        return $this->javascript;
325
        return $this->javascript;
322
     }
326
    }
323
} // end class QuickformForm
327
} // end class QuickformForm
324
 
328
 
325
 
329
 
326
/**
330
/**
327
 * Convenience class describing a form element.
331
 * Convenience class describing a form element.
328
 * The properties defined here will be available from 
332
 * The properties defined here will be available from 
329
 * your flexy templates by referencing
333
 * your flexy templates by referencing
330
 * {form.zip.label:h}, {form.zip.html:h}, etc.
334
 * {form.zip.label:h}, {form.zip.html:h}, etc.
331
 */
335
 */
332
class QuickformElement {
336
class QuickformElement
333
    
337
{
334
    /**
338
    /**
335
     * Element name
339
     * Element name
336
     * @var string $name
340
     * @var string $name
337
     */
341
     */
338
    var $name;
342
    var $name;
339
 
343
 
340
    /**
344
    /**
341
     * Element value
345
     * Element value
342
     * @var mixed $value
346
     * @var mixed $value
343
     */
347
     */
344
    var $value;
348
    var $value;
345
 
349
 
346
    /**
350
    /**
347
     * Type of element
351
     * Type of element
348
     * @var string $type
352
     * @var string $type
349
     */
353
     */
350
    var $type;
354
    var $type;
351
 
355
 
352
    /**
356
    /**
353
     * Whether the element is frozen
357
     * Whether the element is frozen
354
     * @var boolean $frozen
358
     * @var boolean $frozen
355
     */
359
     */
356
    var $frozen;
360
    var $frozen;
357
 
361
 
358
    /**
362
    /**
359
     * Label for the element
363
     * Label for the element
360
     * @var string $label
364
     * @var string $label
361
     */
365
     */
362
    var $label;
366
    var $label;
363
 
367
 
364
    /**
368
    /**
365
     * Whether element is required
369
     * Whether element is required
366
     * @var boolean $required
370
     * @var boolean $required
367
     */
371
     */
368
    var $required;
372
    var $required;
369
 
373
 
370
    /**
374
    /**
371
     * Error associated with the element
375
     * Error associated with the element
372
     * @var string $error
376
     * @var string $error
373
     */
377
     */
374
    var $error;
378
    var $error;
375
 
379
 
376
    /**
380
    /**
377
     * Some information about element style
381
     * Some information about element style
378
     * @var string $style
382
     * @var string $style
379
     */
383
     */
380
    var $style;
384
    var $style;
381
 
385
 
382
    /**
386
    /**
383
     * HTML for the element
387
     * HTML for the element
384
     * @var string $html
388
     * @var string $html
385
     */
389
     */
386
    var $html;
390
    var $html;
387
 
391
 
388
    /**
392
    /**
389
     * If element is a group, the group separator
393
     * If element is a group, the group separator
390
     * @var mixed $separator
394
     * @var mixed $separator
391
     */
395
     */
392
    var $separator;
396
    var $separator;
393
 
397
 
394
    /**
398
    /**
395
     * If element is a group, an array of subelements
399
     * If element is a group, an array of subelements
396
     * @var array $elements
400
     * @var array $elements
397
     */
401
     */
398
    var $elements;
402
    var $elements;
399
 
403
 
400
    function isType($type)
404
    function isType($type)
401
    {
405
    {
402
        if($this->type == $type) {
406
        return ($this->type == $type);
403
            return true;
-
 
404
        } else {
-
 
405
            return false;
-
 
406
        }
-
 
407
    }
407
    }
408
    
408
 
409
    function notFrozen()
409
    function notFrozen()
410
    {
410
    {
411
        if(!$this->frozen) {
411
        return !$this->frozen;
412
            return true;
-
 
413
        } else {
-
 
414
            return false;
-
 
415
        }
-
 
416
    }
412
    }
417
 
413
 
418
    function isButton()
414
    function isButton()
419
    {
415
    {
420
        if($this->type == "submit" || $this->type == "reset") {
416
        return ($this->type == "submit" || $this->type == "reset");
421
            return true;
-
 
422
        } else {
-
 
423
            return false;
-
 
424
        }
-
 
425
    }
417
    }
-
 
418
 
-
 
419
 
-
 
420
   /**
-
 
421
    * XXX: why does it use Flexy when all other stuff here does not depend on it?
426
 
422
    */
427
    function outputStyle()
423
    function outputStyle()
428
    {
-
 
429
        $filename = "styles/".$this->style.".html";
424
    {
430
        ob_start();
425
        ob_start();
431
        HTML_Template_Flexy::staticQuickTemplate($filename, $this);
426
        HTML_Template_Flexy::staticQuickTemplate('styles/' . $this->style . '.html', $this);
432
        $ret = ob_get_contents();
427
        $ret = ob_get_contents();
433
        ob_end_clean();
428
        ob_end_clean();
434
        return $ret;
429
        return $ret;
435
    }
430
    }
436
 
-
 
437
} // end class QuickformElement
431
} // end class QuickformElement
438
?>
-
 
439
432
?>
-
 
433