/[cvs]/nfo/php/libs/com.newsblob.phphtmllib/form/FormContent.inc
ViewVC logotype

Annotation of /nfo/php/libs/com.newsblob.phphtmllib/form/FormContent.inc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (hide annotations)
Thu Aug 11 14:09:26 2005 UTC (18 years, 11 months ago) by jonen
Branch: MAIN
CVS Tags: HEAD
Changes since 1.3: +232 -68 lines
+ updated to version 2.5.3

1 jonen 1.1 <?php
2     /**
3     * This file contains the FormContent class.
4     *
5 jonen 1.4 * $Id: FormContent.inc,v 1.58.2.6 2005/05/12 01:24:02 hemna Exp $
6 jonen 1.1 *
7 jonen 1.4 * @author Walter A. Boring IV <waboring@newsblob.com>
8 jonen 1.1 * @author Suren Markossian <suren@cbestwhat?>
9     * @package phpHtmlLib
10     * @subpackage FormProcessing
11     *
12     * @copyright LGPL - See LICENCE
13     *
14     */
15    
16     /**
17     * Make sure we include the Processor
18     */
19     require_once($phphtmllib."/form/FormProcessor.inc");
20    
21     /**
22     * This class is used to build and render the form.
23     * It builds a form by creating FormElement objects
24 jonen 1.4 * which have automatic validation. It leaves the
25 jonen 1.1 * layout of the form up to the child class. It has
26 jonen 1.4 * a mechanism in place to automagically show a
27 jonen 1.1 * confirmation 'page' after the data has been submitted
28 jonen 1.4 * and validated. It also provides a hook for any
29 jonen 1.1 * 'back end' validation of data. Finally, it provides
30     * a function for handling the action of the form, which
31     * only gets call after ALL validation has passed.
32     *
33     * Functions:
34     *
35     * form_init_elements() - This function is used to
36     * build the FormElement objects that will be used
37     * by the form. This function is called EVERY time
38     * the FormContent class is instantiated. After you
39 jonen 1.4 * create the FormElement, you call the
40     * FormContent::add_element() method, to add the
41 jonen 1.1 * FormElement object to the form. You will then
42     * call the 2 methods FormContent::element_label() and
43     * FormContent::element_form() to get access to the
44     * FormElement's label and form field respectively.
45     *
46     * form_init_data() - This is called only the first time
47     * the form is encountered. It Allows you to populate
48     * the FormElements with data from a DB for example.
49     * You would use FormContent::set_element_value() or
50     * FormContent::set_hidden_element_value() inside here.
51     *
52     * form() - This is the method that gets called to build
53     * the layout for your form. Typically you use a table
54     * and add the label in the first <td> and the form field
55     * itself in the 2nd <td>. So there are 2 methods in
56     * the FormContent object that allow u to get access to
57     * the FormElements label, and form field.
58     * FormContent::element_label() and
59     * FormContent::element_form().
60     *
61     *
62     * form_backend_validation() - This method enables you to
63 jonen 1.4 * do any "back end" validation of data. Such as, check
64 jonen 1.1 * for a duplicate in the DB on a create/new form. This
65     * is called after the FormElement's validation methods have
66     * passed.
67     *
68     * form_action() - This method is called after ALL validation
69 jonen 1.4 * was successfull, including each FormElement object's
70 jonen 1.1 * validation methods, as well as the FormContent::form_backend_validation()
71 jonen 1.4 *
72 jonen 1.1 *
73     *
74     * @package phpHtmlLib
75     * @subpackage FormProcessing
76     */
77     class FormContent {
78    
79     /**
80     * This holds the name of the form
81     * for js that needs it
82     */
83     var $_form_name;
84    
85    
86     /**
87     * This holds the array of
88     * hidden form elements
89     * used in this form
90     */
91     var $_hidden_elements = array();
92    
93     /**
94     * This holds the array of
95     * non-hidden elements
96     */
97     var $_elements = array();
98    
99    
100     /**
101     * This holds the default
102     * css class for form field
103     * label text.
104     *
105     */
106     var $_default_label_css = "formlabel";
107    
108     /**
109     * This is the css class used
110     * for fields that have an error
111     *
112     */
113     var $_error_label_css = "formlabelerror";
114    
115     /**
116     * flag to let the FormProcessor
117     * object know this form has a
118     * confirmation page that is required
119     */
120     var $_has_confirm = FALSE;
121    
122    
123     /**
124     * Holds the width to be used for the
125     * error table
126     * DEFAULT: 95%
127     *
128     */
129     var $_width = "600";
130    
131 jonen 1.2 /**
132     * Holds the width (if any) of the errors
133     * table that will be rendered. If the
134     * value is null, the $this->_width value
135     * is used instead.
136     */
137     var $_form_errors_width = null;
138    
139    
140     /**
141     * The form errors table title
142     */
143     var $_form_errors_title = "Form Errors";
144    
145 jonen 1.1
146     /**
147     * The message that is set
148     * during the form_action
149     */
150     var $_action_message = "";
151    
152    
153     /**
154     * The action to take opon clicking
155     * the "Cancel" button
156     */
157     var $_cancel_action = NULL;
158    
159    
160     /**
161     * Text to show denoted required
162     * fields for the form.
163     *
164     */
165     var $_required_field_text = " - required field";
166    
167     /**
168     * marker for the required field
169     *
170     */
171     var $_required_field_marker = "*";
172    
173 jonen 1.2 /**
174 jonen 1.4 * The form Element's flag to add the :
175     * character at the end of the label.
176     */
177     var $_label_colon_flag = FALSE;
178    
179     /**
180 jonen 1.2 * This holds how many actions we have
181     * for this form content
182     */
183     var $_action_counter = 0;
184    
185     /**
186 jonen 1.4 * Automatically strip slashes from
187 jonen 1.2 * form values?
188     */
189     var $_stripslashes = FALSE;
190    
191 jonen 1.3 /**
192     * Flag to mark this as having a
193     * File Form Element (child of FEFile)
194     */
195     var $_has_file_element = FALSE;
196    
197     /**
198     * index names of all of the file
199     * form elements (if any).
200     */
201     var $_file_elements = array();
202    
203    
204     /**
205     * The onsubmit value for the form
206 jonen 1.4 * tag. FormElement childs can
207 jonen 1.3 * automatically add to this
208 jonen 1.4 * by implementing the
209 jonen 1.3 * form_tag_onsubmit() method
210     */
211     var $_form_on_submit = '';
212 jonen 1.4
213     /**
214     * The onsubmit value for the form
215     * tag. This is used by form action
216     * elements to add disable on submit
217     */
218     var $_form_action_elements_on_submit = '';
219    
220     /**
221     * This is the FormValidation object
222     * used to validate the form elements
223     */
224     var $_FormValidation = NULL;
225    
226    
227     /**
228     * Indicates this entire FormContent
229     * is in readonly mode. This forces
230     * all of the FormElement to be in
231     * readonly mode.
232     *
233     */
234     var $_is_readonly = FALSE;
235 jonen 1.1
236    
237     function FormContent($width="100%", $cancel_action=NULL) {
238     $this->set_form_width( $width );
239     $this->set_cancel_action( $cancel_action );
240     }
241    
242     /**
243     * This method is what is called to
244     * build the list of FormElements that
245     * will be used by this form.
246     *
247     */
248     function form_init_elements() {
249     user_error("FormContent::form_init_elements() - Child class must override");
250     }
251    
252    
253     /**
254     * This method is called by the
255     * Form Processor to allow this
256     * class to do any fetching of
257     * data to prepopulate the
258     * form field values.
259     * You typically use this to
260     * read data from a DB.
261     *
262     * This method is only called once
263     * when the form is first hit.
264     *
265     * NOTE: you should build the data
266     * and save it in $this->_init_data
267     */
268     function form_init_data() {
269     $this->_init_data = array();
270     }
271    
272    
273     /**
274     * This method builds the html form.
275     * It is up to the child class to define
276     * the layout of the form and return it
277     * in a phpHtmllib container.
278     *
279     * @return Container
280     */
281     function form() {
282     user_error("FormContent::form() - Child class must override");
283     return NULL;
284     }
285    
286     /**
287 jonen 1.2 * This method lets you provide any javascript
288     * that is associated with the form content.
289     * The FormProcessor will automatically call
290     * this and wrap it in a script tag.
291     *
292     * @return string - raw js.
293     */
294     function javascript() {
295     return NULL;
296     }
297    
298     /**
299 jonen 1.4 * This method allows this class to do any
300 jonen 1.1 * data munging prior to the form_confirm
301     * method being called @ render time.
302     *
303     * @return TRUE = success
304     * FALSE if u want to trigger an error
305     */
306     function pre_confirm() {
307     return TRUE;
308     }
309 jonen 1.3
310     /**
311     * This is a 'hidden' version of pre_confirm
312     * to allow calling the form elements pre_confirm
313     * methods. This is needed for forms that have
314     * a confirmation requirement and has file inputs.
315     * If the file input FormElement doesn't save off
316     * the uploaded file, then the confirmation page
317     * will not get the file. apache may nuke the temp
318     * file in /tmp.
319     *
320     */
321     function _pre_confirm() {
322     foreach( $this->_file_elements as $name ) {
323     $this->_elements[$name]->_pre_confirm();
324     }
325     }
326 jonen 1.4
327 jonen 1.1
328     /**
329     * This function is used to show an intermediary
330     * confirmation page. Use this function to
331     * show a confirmation of the data that was
332     * submitted by the user.
333     * This will get called after all of the
334     * form data was successfully validated.
335     * All of the form data will automatically
336     * be created as hidden form fields. All you
337     * have to do is show the data, and a confirm
338     * submit button.
339     *
340 jonen 1.2 * @param string - the title for the table
341     * @param boolean - show the action buttons?
342 jonen 1.1 * @return mixed - either raw html, or some
343 jonen 1.4 * container HTMLTag object.
344 jonen 1.1 */
345 jonen 1.2 function form_confirm( $title = "Form Confirmation", $show_buttons=TRUE ) {
346     $table = new InfoTable($title, $this->_width);
347 jonen 1.1
348     $this->build_confirm_table( $table );
349    
350     //now add the confirmation button
351     $td = new TDtag(array("colspan" => 2,
352     "class" => "contentnovertical",
353     "align" => "center"),
354     $this->add_action("Confirm"));
355    
356     if ($this->_cancel_action) {
357     $td->add(_HTML_SPACE, $this->add_cancel());
358     }
359    
360 jonen 1.2 if ($show_buttons) {
361     $table->add_row( $td );
362     }
363 jonen 1.1
364     return $table;
365     }
366    
367    
368     /**
369     * This method allows the child to ovveride the
370     * default confirm data. By default the form_confirm()
371     * will show ALL FormElements. This is prolly not good
372     * in case of a form where a password exists.
373     *
374     * @param InfoTable object
375     */
376     function build_confirm_table( &$table ) {
377     foreach( $this->_elements as $label => $element) {
378 jonen 1.4 $c = container(_HTML_SPACE, $element->get_value_text());
379 jonen 1.1 $c->set_collapse();
380 jonen 1.4 $div = html_div("", $element->get_label($this) );
381 jonen 1.1 $div->set_style("white-space:nowrap;");
382     $table->add_row( $div, $c);
383     }
384     }
385    
386     /**
387     * This method is called after the FormElements
388     * have all been validated, and the form_confirm
389     * has been confirmed. It enables the form to
390     * validate any data against a DB or other backend
391 jonen 1.4 * processing. This will always get called
392 jonen 1.1 * before the form_action method is called to ensure
393     * that all form data is valid before form_action()
394     * is called.
395     *
396     *
397     * @return boolean TRUE if successfull
398     * FALSE if errors were detected.
399     */
400     function form_backend_validation() {
401     return TRUE;
402     }
403    
404    
405     /**
406     * This method handles the
407     * action (submit button) that
408     * was submitted. This method
409     * only gets called AFTER all
410     * data has been validated.
411     * This includes the backend
412     * validation. If the form
413     * has the confirmation on,
414     * then this method will be
415     * called after the confirmation
416     * has been accepted.
417     *
418     * NOTE : return TRUE if the action
419     * was succesfully handled.
420     * If FALSE is returned, the
421     * form will be displayed again
422     * with the error message.
423     *
424     * @param array - array of errors if any
425     * @return boolean TRUE = success
426     * FALSE = failed.
427     */
428     function form_action() {
429     user_error("FormContent::form_action() - Child class ".
430     "must override");
431     return FALSE;
432     }
433    
434    
435     /**
436     * This method is called when the form_action()
437     * was successfull, and the form wants to render
438     * some kind of message
439     *
440     * @return mixed
441     */
442     function form_success() {
443 jonen 1.3 if ($this->_action_message != "") {
444     return container($this->_action_message, html_br(2));
445     } else {
446     return NULL;
447     }
448 jonen 1.1 }
449    
450     /**
451     * This function is used to render the error
452     * table for the form. The error data comes
453     * from the FormProcessor or the FormValidation.
454     * NOTE: You can override this method to
455     * show a customized error message(s)
456     *
457     * @return TABLEtag object.
458     */
459     function form_errors() {
460 jonen 1.4 $table = new ErrorBoxWidget($this->_form_errors_title,
461     $this->get_form_errors_width());
462 jonen 1.1 $errors = FALSE;
463    
464 jonen 1.4 //walk each visible form element and see if there is an error in it
465     foreach( $this->_elements as $label => $element ) {
466     if ($element->has_error()) {
467     $e_errors = $element->get_errors();
468     foreach( $e_errors as $err ) {
469     $table->add($err['label'], $err['message']);
470     }
471     $errors = TRUE;
472     }
473     }
474     if ($errors) {
475     return $table;
476     } else {
477     return NULL;
478     }
479 jonen 1.1 }
480    
481    
482 jonen 1.2 /**
483     * This method returns an array of errors
484     * for all the errors.
485     *
486     * @return array
487     */
488     function get_error_array() {
489     $ret = array();
490     //walk each visible form element and see if there is an error in it
491     foreach( $this->_elements as $label => $element ) {
492     if ($element->has_error()) {
493     $errors = $element->get_errors();
494     foreach ( $errors as $err ) {
495     $ret[$err['label']] = $err['message'];
496 jonen 1.4 }
497 jonen 1.2 }
498     }
499     return $ret;
500     }
501    
502    
503 jonen 1.1 /*****************************/
504     /* form element methods */
505     /*****************************/
506    
507     /**
508     * This method is used to add a
509     * form element
510     *
511     * @param FormElement object
512     */
513     function add_element( &$element ) {
514 jonen 1.2 $element->set_stripslashes( $this->_stripslashes );
515     //in case the element needs it for js
516     $element->set_form_name( $this->_form_name );
517 jonen 1.3 $name = $element->get_label_text();
518     $this->_elements[$name] = &$element;
519    
520     //do we have a File form element?
521     if (is_a($element, 'fefile')) {
522     $this->_has_file_element = TRUE;
523     $this->_file_elements[] = $name;
524     }
525     if ($element->_has_form_on_submit) {
526     $this->_form_on_submit .= $element->form_tag_onsubmit();
527     }
528 jonen 1.4
529     if ($this->_label_colon_flag) {
530     $element->set_colon_flag(TRUE);
531     }
532 jonen 1.1 }
533    
534     /**
535     * This method is used to add a
536     * hidden form field
537     *
538     * @param FormElement object
539     */
540     function add_hidden_element( $label, $value=NULL ) {
541     $element = new FEHidden( $label, $value );
542 jonen 1.2 $element->set_stripslashes( $this->_stripslashes );
543 jonen 1.4 $element->set_form_name( $this->_form_name );
544 jonen 1.1 $this->_hidden_elements[$label] = &$element;
545     }
546 jonen 1.4
547     /**
548     * This function adds a form submit button
549     * with the appropriate action.
550     *
551     * @param string - the labe/action for the submit
552     * button.
553     * @param bool disable the button
554     * @param string - the onSubmit function (if any)
555     * @param boolean - disable opon submit?
556     * @return INPUTtag object
557     */
558     function add_action_element($label, $disabled = false, $submit_function = false,
559     $disable_on_submit = TRUE) {
560    
561     $style="vertical-align:middle;";
562     // here we mantain a fixed button size if a label length is reasonably small
563     // i.e. OK or Cancel buttons or use padding otherwise
564     if (strlen($label)<8) $style .= "width:100px;";
565     else $style .= "padding-left:5px;padding-right:5px;";
566    
567     $button_name = FORM_ACTION . $this->_action_counter++;
568     $button_id = $this->_form_name . "action_" . $button_name;
569    
570     $attributes = array("id" => $button_id,
571     "onclick" =>"this.form." . FORM_ACTION . ".value='".$label."';",
572     "style" => $style);
573    
574     if ($disabled) $attributes[] = "disabled";
575    
576     $this->_action_elements[$label] = form_submit($button_name, $label, $attributes);
577    
578     if ($disable_on_submit) {
579     $this->_form_action_elements_on_submit .= "if (document.getElementById('" . $button_id . "')) document.getElementById('" . $button_id . "').disabled=true;";
580     }
581     }
582    
583     /**
584     * This function returns a submit action
585     * by label
586     *
587     * @param string label
588     *
589     * @return object
590     */
591     function get_action_element($label) {
592     return $this->_action_elements[$label];
593     }
594 jonen 1.1
595     /**
596     * This method returns the label object
597     * for a visible form element.
598     *
599     * @param string - the element's label
600     * @return Object
601     */
602     function element_label($label) {
603 jonen 1.2 $this->_test_element($label, "element_label");
604 jonen 1.3 return $this->_elements[$label]->get_label($this);
605 jonen 1.1 }
606    
607     /**
608 jonen 1.2 * This method returns the label object
609     * for a visible form element.
610     *
611     * @param string - the element's label
612     * @return Object
613     */
614     function hidden_element_label($label) {
615     $this->_test_element($label, "element_label", TRUE);
616 jonen 1.4 return $this->_hidden_elements[$label]->get_label($this);
617 jonen 1.2 }
618    
619     /**
620 jonen 1.1 * This method returns the actual form
621     * object that renders the form field.
622     * Such as an INPUTtag object.
623     *
624     * @param string - the element's label
625     * @return Object
626     */
627     function element_form($label) {
628 jonen 1.2 $this->_test_element($label, "element_form");
629 jonen 1.4 return $this->_elements[$label]->get_form_element($this->is_readonly());
630 jonen 1.1 }
631    
632     /**
633     * This method returns the FormElement
634     * based on the label.
635     *
636     * @param string - the element's label
637     * @return Object
638     */
639     function &get_element($label) {
640 jonen 1.2 $this->_test_element($label, "get_element");
641 jonen 1.1 return $this->_elements[$label];
642     }
643    
644     /**
645     * This method is used to set
646     * the value for a non hidden
647     * element
648     *
649     * @param string - the form label
650     * @param value - the new value
651     */
652     function set_element_value($label, $value) {
653 jonen 1.2 $this->_test_element($label, "set_element_value");
654 jonen 1.1 $this->_elements[$label]->set_value($value);
655     }
656    
657     /**
658     * This method is used to get
659     * the value for a non hidden
660     * element
661     *
662     * @param string - the form label
663     * @return value - the new value
664     */
665     function get_element_value($label) {
666 jonen 1.2 $this->_test_element($label, "get_element_value");
667 jonen 1.1 return $this->_elements[$label]->get_value();
668     }
669    
670     /**
671     * This method is used to set
672     * the value for a hidden element
673     *
674     * @param string - the form label
675     * @param value - the new value
676     */
677     function set_hidden_element_value($label, $value) {
678 jonen 1.2 $this->_test_element($label, "set_hidden_element_value", TRUE);
679 jonen 1.1 $this->_hidden_elements[$label]->set_value( $value );
680     }
681    
682     /**
683     * This method is used to get
684     * the value for a hidden element
685     *
686     * @param string - the form label
687     * @return value - the new value
688     */
689     function get_hidden_element_value($label) {
690 jonen 1.2 $this->_test_element($label, "get_hidden_element_value", TRUE);
691 jonen 1.1 return $this->_hidden_elements[$label]->get_value();
692     }
693    
694 jonen 1.3 /**
695     * This method is a helper method to set the
696     * FormElement's tabindex.
697 jonen 1.4 *
698 jonen 1.3 * @param string - the form label
699     * @param int - the FormElement's tabindex
700     * @return none
701     */
702     function set_form_tabindex($label, $index) {
703     $this->_test_element($label, "set_form_tabindex");
704     $this->_elements[$label]->set_tabindex($index);
705     }
706    
707     /**
708     * This method is a helper method to get the
709     * FormElement's tabindex.
710 jonen 1.4 *
711 jonen 1.3 * @param string - the form label
712     * @param int - the FormElement's tabindex
713     * @return the FormElement's current tabindex
714     */
715     function get_form_tabindex($label, $index) {
716     $this->_test_element($label, "set_form_tabindex");
717     return $this->_elements[$label]->get_tabindex();
718     }
719    
720 jonen 1.4 /**
721     * This method is used to test
722     * if the element exists in a form
723     *
724     * @param string - the form label
725     * @return bool
726     */
727     function element_exists($label) {
728     return (isset($this->_elements[$label]) || isset($this->_hidden_elements[$label]));
729     }
730 jonen 1.1
731     /**
732     * This method is used to create a new error element
733     * during the call to form_action(). This enables us
734 jonen 1.4 * to do error handling during a transaction into
735 jonen 1.1 * a DB.
736     *
737     * @param string - the label
738     * @param string - the error message
739     */
740     function add_error( $label, $message ) {
741     if (isset($this->_elements[$label])) {
742     $this->_elements[$label]->set_error_message($message);
743     } else {
744     $this->add_element( new FEError($label, $message) );
745 jonen 1.4 }
746 jonen 1.1 }
747    
748    
749 jonen 1.4 /**
750     * This sets the readonly flag.
751     * When this flag is set, all of the
752     * FormElements will be set to readonly.
753     *
754     * @param bool TRUE = readonly
755     */
756     function set_readonly($flag=TRUE) {
757     $this->_is_readonly = $flag;
758     }
759    
760     /**
761     * Is this element in read only mode?
762     *
763     * @return bool
764     */
765     function is_readonly() {
766     return $this->_is_readonly;
767     }
768    
769    
770 jonen 1.1 /*****************************/
771     /* Util methods */
772     /*****************************/
773    
774     function set_form_name($name) {
775     $this->_form_name = $name;
776     }
777    
778 jonen 1.4 function get_form_name() {
779     return $this->_form_name;
780     }
781    
782 jonen 1.1
783     /**
784     * Save the action for the form
785     *
786     * @param string - the action from the post.
787     */
788     function set_action($action) {
789     $this->action = $action;
790     }
791    
792     /**
793     * Get the current status of the
794     * action.
795     *
796     * @return string
797     */
798     function get_action() {
799     return $this->action;
800     }
801    
802     /**
803     * this method sets the form name
804     *
805     * @param string - the form name
806     */
807     function set_form_width($width) {
808 jonen 1.2 $this->_width = $width;
809 jonen 1.1 }
810    
811    
812 jonen 1.2 /**
813     * This method returns the width
814     * of the form errors table.
815     * By default it is supposed to be
816     * the same width as the form itself.
817     *
818     * @return int
819     */
820     function get_form_errors_width() {
821     if ($this->_form_errors_width == null) {
822     return $this->_width;
823     } else {
824     return $this->_form_errors_width;
825 jonen 1.4 }
826 jonen 1.2 }
827    
828     /**
829     * This method allows you to override
830     * the width of the form errors table.
831     * By default it uses the width of the
832     * form as its size.
833     *
834 jonen 1.4 * @param string - the width
835 jonen 1.2 */
836     function set_form_errors_width($width) {
837     $this->_form_errors_width = $width;
838     }
839    
840    
841     /**
842     * This allows us to change the form errors
843     * table title
844     *
845     * @param string - the new title
846     */
847     function set_form_errors_title($title) {
848     $this->_form_errors_title = $title;
849     }
850 jonen 1.4
851    
852 jonen 1.2
853    
854 jonen 1.1 /**
855     * This function is used to set the
856     * default CSS class used on
857     * form field text when there is no
858     * error on that field
859     *
860     * @param string - the css class to use
861     */
862     function set_default_css( $css ) {
863     $this->_default_label_css = $css;
864     }
865    
866     /**
867     * This function returns the
868     * default css class used for
869     * NON error text.
870     *
871     * @return string - the current default css
872     */
873     function get_default_css() {
874     return $this->_default_label_css;
875     }
876    
877    
878     /**
879     * This function is used to set the
880     * css class that is used on text
881     * when an error on that field is
882     * detected.
883     *
884     * @param string - the css class to use.
885     */
886     function set_error_css( $css ) {
887     $this->_err_label_css = $css;
888     }
889    
890    
891     /**
892     * This sets the $this->_has_confirmation
893     * flag. to let the object know it has
894     * a required confirmation page, which
895     * should get called after the validation
896     * is successfull, and before the action is
897     * handled on the back-end.
898     *
899     * @param boolean - the flag value TRUE/FALSE
900     */
901     function set_confirm( $flag = TRUE ) {
902     $this->_has_confirm = $flag;
903     }
904    
905     /**
906     * This gets the value of the confirmation flag.
907     * which tells the caller that this object
908     * has/doesn't have a required confirmation
909     * page.
910     *
911     * @return boolean
912     */
913     function has_confirm() {
914     return $this->_has_confirm;
915     }
916    
917    
918     /**
919     * This sets the stripslashes flag for
920     * this object.
921     *
922     * @param boolean
923     */
924     function set_stripslashes( $flag = TRUE ) {
925     $this->_stripslashes = $flag;
926     }
927    
928     /**
929     * This sets the action message.
930     * This is called from withint the
931 jonen 1.4 * form_action() method
932 jonen 1.1 *
933     * @param string - the action message
934     */
935     function set_action_message($message) {
936     $this->_action_message = $message;
937     }
938    
939    
940     /**
941     * This method sets the javasript action
942 jonen 1.4 * to be taken when the cancel button
943 jonen 1.1 * is clicked. Calling this method
944     * w/ a non NULL value automatically enables
945     * the Cancel button.
946     *
947     * @param string - the javascript cancel action
948     */
949     function set_cancel_action($action) {
950     $this->_cancel_action = $action;
951     }
952    
953 jonen 1.4 /**
954     * This method sets the flag to have ALL of the
955     * FormElement's labels be appended with a :
956     * character. Some folks like this for some
957     * completely unexplained reason.
958     */
959     function set_colon_flag($flag=TRUE) {
960     $this->_label_colon_flag = $flag;
961     }
962 jonen 1.1
963    
964    
965     /**
966     * This function adds a form submit button
967     * with the appropriate action.
968     *
969     * @param string - the labe/action for the submit
970     * button.
971     * @param bool disable the button
972     * @param string - the onSubmit function (if any)
973     * @param boolean - disable opon submit?
974     * @return INPUTtag object
975     */
976     function add_action( $label, $disabled = false, $submit_function = false,
977     $disable_on_submit = TRUE ) {
978     $style="vertical-align:middle;";
979     // here we mantain a fixed button size if a label length is reasonably small
980     // i.e. OK or Cancel buttons or use padding otherwise
981     if ( strlen($label)<8 ) $style .= "width: 90px;";
982     else $style .= "padding-left: 5px;padding-right:5px;";
983    
984     // Unique button label
985     if (!$this->_action_counter) {
986     $this->_action_counter = 1;
987     }
988     $blabel = FORM_ACTION.$this->_action_counter;
989     $this->_action_counter++;
990    
991 jonen 1.4 // The onclick is responsible for:
992 jonen 1.1 // -disabling the action button to discourage stupid users
993     // -setting the action in the _form_action hidden variable
994     // -calling the onSubmit function (if any), since form.submit() will not trigger
995     // the registered onSubmit function
996     // -call the form.submit() function
997    
998     //build the action
999     $onclick = "";
1000     if ($disable_on_submit) {
1001     $onclick .= "this.form.".$blabel.".disabled=true;";
1002     }
1003     $onclick .= "this.form.".FORM_ACTION.".value='".$label."';";
1004     if ($submit_function) {
1005     $onclick .= $submit_function.";";
1006     }
1007 jonen 1.4
1008     if ($disable_on_submit) {
1009     $onclick .= "this.form.submit();";
1010     }
1011 jonen 1.1
1012     $attrib = array("style" => $style,
1013 jonen 1.4 "onclick" => $onclick);
1014 jonen 1.1
1015     if ($disabled) $attrib[] = "disabled";
1016     return form_submit($blabel, $label, $attrib);
1017     }
1018    
1019    
1020     /**
1021     * This function adds a submit button that
1022     * can have any label. It just makes the
1023     * _form_action a hidden field.
1024     * NOTE: you can only do this ONCE per form.
1025     *
1026     * @param string - the label of the button.
1027     * @param string - the action value.
1028     * @param boolean - disable opon submit?
1029     * @return ContainerWidget object
1030     */
1031     function add_hidden_action( $label, $action, $disable_on_submit=TRUE) {
1032     $container = new ContainerWidget;
1033     // Unique button label
1034     if (!$this->_action_counter) {
1035     $this->_action_counter = 1;
1036     }
1037     $blabel = FORM_ACTION.$this->_action_counter;
1038     $this->_action_counter++;
1039    
1040     //build the action
1041     $onclick = "";
1042     if ($disable_on_submit) {
1043     $onclick .= "this.form.".$blabel.".disabled=true;";
1044     }
1045     $onclick .= "this.form.".FORM_ACTION.".value='".$action."';";
1046     $onclick .= "this.form.submit();";
1047    
1048     $style = "padding-left: 5px;padding-right:5px;";
1049     $attrib = array("style" => $style,
1050 jonen 1.4 "onclick" => $onclick);
1051 jonen 1.1
1052     $container->push(form_submit($blabel, $label,
1053     array("style" => $style,
1054 jonen 1.4 "onclick" => $onclick)));
1055 jonen 1.1 return $container;
1056     }
1057    
1058     /**
1059     * This function adds an action as an image to
1060     * submit the form.
1061     *
1062     * @param string - the image name path
1063     * @param string - the action
1064     * @param boolean - disable opon submit?
1065     *
1066 jonen 1.2 * @return Atag object
1067 jonen 1.1 */
1068     function add_image_action( $image_name, $action, $disable_on_submit=TRUE ) {
1069 jonen 1.2 // Unique button label
1070 jonen 1.1 if (!$this->_action_counter) {
1071     $this->_action_counter = 1;
1072     }
1073 jonen 1.2 $blabel = "_form_action".$this->_action_counter;
1074 jonen 1.1 $this->_action_counter++;
1075    
1076 jonen 1.2 $onclick = "document.".$this->_form_name."._form_action.value='".$action."';";
1077     $onclick .= "document.".$this->_form_name.".submit();";
1078    
1079     if ($disable_on_submit) {
1080     $click = "javascript:if (!window.global_cntr) {window.global_cntr = 1;} else {window.global_cntr++;} ";
1081     $click .= " if(window.global_cntr<2) {";
1082     $click .= $onclick."}";
1083     }
1084 jonen 1.4
1085 jonen 1.2 $img = html_img($image_name);
1086 jonen 1.1 $img->set_tag_attribute("border", 0 );
1087     $img->set_tag_attribute("style", "cursor:hand;");
1088    
1089 jonen 1.2 $link = html_a("#", $img);
1090     $link->set_tag_attribute("onclick", $click);
1091     return $link;
1092 jonen 1.1 }
1093    
1094    
1095     /**
1096 jonen 1.4 * build a cancel button with a url
1097 jonen 1.1 * to go to
1098     *
1099 jonen 1.4 * @param string - the cancel action
1100 jonen 1.1 * @return form button
1101     */
1102     function add_cancel() {
1103    
1104     $cancel_button = form_button("cancel","Cancel",
1105     array("type"=>"button",
1106     "style"=>"width: 90px;",
1107 jonen 1.4 "onclick"=>
1108 jonen 1.1 "javascript:document.location='".$this->_cancel_action."'"));
1109     $cancel_button->set_style("vertical-align:middle");
1110     return $cancel_button;
1111     }
1112 jonen 1.4
1113 jonen 1.2 /**
1114     * This function is used to set the required field marker
1115     *
1116     * @param string - the marker
1117     */
1118     function set_required_marker($marker) {
1119 jonen 1.4 $this->_required_field_marker = $marker;
1120     }
1121    
1122     /**
1123     * This function is used to get the required field marker
1124     *
1125     * @return string - the marker
1126     */
1127     function get_required_marker() {
1128     if (is_object($this->_required_field_marker)) {
1129     return $this->_required_field_marker->render();
1130     } else {
1131     return $this->_required_field_marker;
1132     }
1133 jonen 1.2 }
1134 jonen 1.4
1135 jonen 1.2 /**
1136     * This sets the required text
1137     *
1138     * @param string
1139     */
1140     function set_required_text($text) {
1141     $this->_required_field_text = $text;
1142 jonen 1.4
1143 jonen 1.2 }
1144    
1145    
1146     /**
1147     * This method tests to see if we
1148     * have an element named $label,
1149     * so we can operate on it.
1150     *
1151     * @param string - the element's label
1152     * @param string - the name of the method that called us
1153     * @param boolean - test a hidden element?
1154     */
1155     function _test_element( $label, $method, $hidden=FALSE ) {
1156     if ($hidden) {
1157     if (!isset($this->_hidden_elements[$label])) {
1158     trigger_error("FormContent::".$method."() - '".$label."' element doesn't exist", E_USER_ERROR);
1159     }
1160     } else {
1161     if (!isset($this->_elements[$label])) {
1162     trigger_error("FormContent::".$method."() - '".$label."' element doesn't exist", E_USER_ERROR);
1163     }
1164 jonen 1.4 }
1165 jonen 1.2 }
1166 jonen 1.1
1167 jonen 1.4 /**
1168     * return the values of all visible form elements as an array
1169     *
1170     * @access public
1171     * @return array
1172     *
1173     */
1174     function get_all_element_values()
1175     {
1176    
1177     foreach ($this->_elements as $element) {
1178     $data[$element->get_element_name()] = $element->get_value();
1179     }
1180    
1181     return $data;
1182    
1183     }
1184    
1185     /**
1186     * This method is used to keep a local reference
1187     * of the FormProcessor's FormValidation object
1188     *
1189     * @param FormValidation object
1190     */
1191     function _set_validation_object(&$FormValidation) {
1192     $this->_FormValidation =& $FormValidation;
1193     }
1194 jonen 1.1
1195     }
1196     ?>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed