/[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.3 - (hide annotations)
Thu May 6 16:27:22 2004 UTC (20 years, 2 months ago) by jonen
Branch: MAIN
Changes since 1.2: +85 -41 lines
 updated all to v2.4.1 - Apr 01, 2004

1 jonen 1.1 <?php
2     /**
3     * This file contains the FormContent class.
4     *
5 jonen 1.3 * $Id: FormContent.inc,v 1.47 2004/03/25 21:02:57 hemna Exp $
6 jonen 1.1 *
7     * @author Walter A. Boring IV <waboring@buildabetterweb.com>
8     * @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     * which have automatic validation. It leaves the
25     * layout of the form up to the child class. It has
26     * a mechanism in place to automagically show a
27     * confirmation 'page' after the data has been submitted
28     * and validated. It also provides a hook for any
29     * '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     * create the FormElement, you call the
40     * FormContent::add_element() method, to add the
41     * 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     * do any "back end" validation of data. Such as, check
64     * 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     * was successfull, including each FormElement object's
70     * validation methods, as well as the FormContent::form_backend_validation()
71     *
72     *
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     * This holds how many actions we have
175     * for this form content
176     */
177     var $_action_counter = 0;
178    
179     /**
180     * Automatically strip slashes from
181     * form values?
182     */
183     var $_stripslashes = FALSE;
184    
185 jonen 1.3 /**
186     * Flag to mark this as having a
187     * File Form Element (child of FEFile)
188     */
189     var $_has_file_element = FALSE;
190    
191     /**
192     * index names of all of the file
193     * form elements (if any).
194     */
195     var $_file_elements = array();
196    
197    
198     /**
199     * The onsubmit value for the form
200     * tag. FormElement childs can
201     * automatically add to this
202     * by implementing the
203     * form_tag_onsubmit() method
204     */
205     var $_form_on_submit = '';
206 jonen 1.1
207    
208     function FormContent($width="100%", $cancel_action=NULL) {
209     $this->set_form_width( $width );
210     $this->set_cancel_action( $cancel_action );
211     }
212    
213     /**
214     * This method is what is called to
215     * build the list of FormElements that
216     * will be used by this form.
217     *
218     */
219     function form_init_elements() {
220     user_error("FormContent::form_init_elements() - Child class must override");
221     }
222    
223    
224     /**
225     * This method is called by the
226     * Form Processor to allow this
227     * class to do any fetching of
228     * data to prepopulate the
229     * form field values.
230     * You typically use this to
231     * read data from a DB.
232     *
233     * This method is only called once
234     * when the form is first hit.
235     *
236     * NOTE: you should build the data
237     * and save it in $this->_init_data
238     */
239     function form_init_data() {
240     $this->_init_data = array();
241     }
242    
243    
244     /**
245     * This method builds the html form.
246     * It is up to the child class to define
247     * the layout of the form and return it
248     * in a phpHtmllib container.
249     *
250     * @return Container
251     */
252     function form() {
253     user_error("FormContent::form() - Child class must override");
254     return NULL;
255     }
256    
257     /**
258 jonen 1.2 * This method lets you provide any javascript
259     * that is associated with the form content.
260     * The FormProcessor will automatically call
261     * this and wrap it in a script tag.
262     *
263     * @return string - raw js.
264     */
265     function javascript() {
266     return NULL;
267     }
268    
269     /**
270 jonen 1.1 * This method allows this class to do any
271     * data munging prior to the form_confirm
272     * method being called @ render time.
273     *
274     * @return TRUE = success
275     * FALSE if u want to trigger an error
276     */
277     function pre_confirm() {
278     return TRUE;
279     }
280 jonen 1.3
281     /**
282     * This is a 'hidden' version of pre_confirm
283     * to allow calling the form elements pre_confirm
284     * methods. This is needed for forms that have
285     * a confirmation requirement and has file inputs.
286     * If the file input FormElement doesn't save off
287     * the uploaded file, then the confirmation page
288     * will not get the file. apache may nuke the temp
289     * file in /tmp.
290     *
291     */
292     function _pre_confirm() {
293     foreach( $this->_file_elements as $name ) {
294     $this->_elements[$name]->_pre_confirm();
295     }
296     }
297 jonen 1.1
298    
299     /**
300     * This function is used to show an intermediary
301     * confirmation page. Use this function to
302     * show a confirmation of the data that was
303     * submitted by the user.
304     * This will get called after all of the
305     * form data was successfully validated.
306     * All of the form data will automatically
307     * be created as hidden form fields. All you
308     * have to do is show the data, and a confirm
309     * submit button.
310     *
311 jonen 1.2 * @param string - the title for the table
312     * @param boolean - show the action buttons?
313 jonen 1.1 * @return mixed - either raw html, or some
314 jonen 1.2 * container HTMLTag object.
315 jonen 1.1 */
316 jonen 1.2 function form_confirm( $title = "Form Confirmation", $show_buttons=TRUE ) {
317     $table = new InfoTable($title, $this->_width);
318 jonen 1.1
319     $this->build_confirm_table( $table );
320    
321     //now add the confirmation button
322     $td = new TDtag(array("colspan" => 2,
323     "class" => "contentnovertical",
324     "align" => "center"),
325     $this->add_action("Confirm"));
326    
327     if ($this->_cancel_action) {
328     $td->add(_HTML_SPACE, $this->add_cancel());
329     }
330    
331 jonen 1.2 if ($show_buttons) {
332     $table->add_row( $td );
333     }
334 jonen 1.1
335     return $table;
336     }
337    
338    
339     /**
340     * This method allows the child to ovveride the
341     * default confirm data. By default the form_confirm()
342     * will show ALL FormElements. This is prolly not good
343     * in case of a form where a password exists.
344     *
345     * @param InfoTable object
346     */
347     function build_confirm_table( &$table ) {
348     foreach( $this->_elements as $label => $element) {
349 jonen 1.3 $c = container(_HTML_SPACE,_HTML_SPACE,
350     $element->get_value_text());
351 jonen 1.1 $c->set_collapse();
352     $div = html_div("", $element->get_label() );
353     $div->set_style("white-space:nowrap;");
354     $table->add_row( $div, $c);
355     }
356     }
357    
358     /**
359     * This method is called after the FormElements
360     * have all been validated, and the form_confirm
361     * has been confirmed. It enables the form to
362     * validate any data against a DB or other backend
363     * processing. This will always get called
364     * before the form_action method is called to ensure
365     * that all form data is valid before form_action()
366     * is called.
367     *
368     *
369     * @return boolean TRUE if successfull
370     * FALSE if errors were detected.
371     */
372     function form_backend_validation() {
373     return TRUE;
374     }
375    
376    
377     /**
378     * This method handles the
379     * action (submit button) that
380     * was submitted. This method
381     * only gets called AFTER all
382     * data has been validated.
383     * This includes the backend
384     * validation. If the form
385     * has the confirmation on,
386     * then this method will be
387     * called after the confirmation
388     * has been accepted.
389     *
390     * NOTE : return TRUE if the action
391     * was succesfully handled.
392     * If FALSE is returned, the
393     * form will be displayed again
394     * with the error message.
395     *
396     * @param array - array of errors if any
397     * @return boolean TRUE = success
398     * FALSE = failed.
399     */
400     function form_action() {
401     user_error("FormContent::form_action() - Child class ".
402     "must override");
403     return FALSE;
404     }
405    
406    
407     /**
408     * This method is called when the form_action()
409     * was successfull, and the form wants to render
410     * some kind of message
411     *
412     * @return mixed
413     */
414     function form_success() {
415 jonen 1.3 if ($this->_action_message != "") {
416     return container($this->_action_message, html_br(2));
417     } else {
418     return NULL;
419     }
420 jonen 1.1 }
421    
422     /**
423     * This function is used to render the error
424     * table for the form. The error data comes
425     * from the FormProcessor or the FormValidation.
426     * NOTE: You can override this method to
427     * show a customized error message(s)
428     *
429     * @return TABLEtag object.
430     */
431     function form_errors() {
432 jonen 1.2 $table = new InfoTable($this->_form_errors_title, $this->get_form_errors_width());
433 jonen 1.1 $errors = FALSE;
434    
435     //walk each visible form element and see if there is an error in it
436     foreach( $this->_elements as $label => $element ) {
437     if ($element->has_error()) {
438 jonen 1.2 $e_errors = $element->get_errors();
439     foreach( $e_errors as $err ) {
440     $span = new SPANtag( array("style" => "padding-right:10px;white-space:nowrap;"),
441     $err['label'] );
442     $table->add_row($span, $err['message']);
443     }
444    
445 jonen 1.1 $errors = TRUE;
446     }
447     }
448     if ($errors) {
449     return $table;
450     } else {
451     return NULL;
452 jonen 1.2 }
453 jonen 1.1 }
454    
455    
456 jonen 1.2 /**
457     * This method returns an array of errors
458     * for all the errors.
459     *
460     * @return array
461     */
462     function get_error_array() {
463     $ret = array();
464     //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     $errors = $element->get_errors();
468     foreach ( $errors as $err ) {
469     $ret[$err['label']] = $err['message'];
470     }
471     }
472     }
473     return $ret;
474     }
475    
476    
477 jonen 1.1 /*****************************/
478     /* form element methods */
479     /*****************************/
480    
481     /**
482     * This method is used to add a
483     * form element
484     *
485     * @param FormElement object
486     */
487     function add_element( &$element ) {
488 jonen 1.2 $element->set_stripslashes( $this->_stripslashes );
489     //in case the element needs it for js
490     $element->set_form_name( $this->_form_name );
491 jonen 1.3 $name = $element->get_label_text();
492     $this->_elements[$name] = &$element;
493    
494     //do we have a File form element?
495     if (is_a($element, 'fefile')) {
496     $this->_has_file_element = TRUE;
497     $this->_file_elements[] = $name;
498     }
499     if ($element->_has_form_on_submit) {
500     $this->_form_on_submit .= $element->form_tag_onsubmit();
501     }
502 jonen 1.1 }
503    
504     /**
505     * This method is used to add a
506     * hidden form field
507     *
508     * @param FormElement object
509     */
510     function add_hidden_element( $label, $value=NULL ) {
511     $element = new FEHidden( $label, $value );
512 jonen 1.2 $element->set_stripslashes( $this->_stripslashes );
513 jonen 1.1 $this->_hidden_elements[$label] = &$element;
514     }
515    
516     /**
517     * This method returns the label object
518     * for a visible form element.
519     *
520     * @param string - the element's label
521     * @return Object
522     */
523     function element_label($label) {
524 jonen 1.2 $this->_test_element($label, "element_label");
525 jonen 1.3 return $this->_elements[$label]->get_label($this);
526 jonen 1.1 }
527    
528     /**
529 jonen 1.2 * This method returns the label object
530     * for a visible form element.
531     *
532     * @param string - the element's label
533     * @return Object
534     */
535     function hidden_element_label($label) {
536     $this->_test_element($label, "element_label", TRUE);
537     return $this->_hidden_elements[$label]->get_label();
538     }
539    
540     /**
541 jonen 1.1 * This method returns the actual form
542     * object that renders the form field.
543     * Such as an INPUTtag object.
544     *
545     * @param string - the element's label
546     * @return Object
547     */
548     function element_form($label) {
549 jonen 1.2 $this->_test_element($label, "element_form");
550 jonen 1.1 return $this->_elements[$label]->get_element();
551     }
552    
553     /**
554     * This method returns the FormElement
555     * based on the label.
556     *
557     * @param string - the element's label
558     * @return Object
559     */
560     function &get_element($label) {
561 jonen 1.2 $this->_test_element($label, "get_element");
562 jonen 1.1 return $this->_elements[$label];
563     }
564    
565     /**
566     * This method is used to set
567     * the value for a non hidden
568     * element
569     *
570     * @param string - the form label
571     * @param value - the new value
572     */
573     function set_element_value($label, $value) {
574 jonen 1.2 $this->_test_element($label, "set_element_value");
575 jonen 1.1 $this->_elements[$label]->set_value($value);
576     }
577    
578     /**
579     * This method is used to get
580     * the value for a non hidden
581     * element
582     *
583     * @param string - the form label
584     * @return value - the new value
585     */
586     function get_element_value($label) {
587 jonen 1.2 $this->_test_element($label, "get_element_value");
588 jonen 1.1 return $this->_elements[$label]->get_value();
589     }
590    
591     /**
592     * This method is used to set
593     * the value for a hidden element
594     *
595     * @param string - the form label
596     * @param value - the new value
597     */
598     function set_hidden_element_value($label, $value) {
599 jonen 1.2 $this->_test_element($label, "set_hidden_element_value", TRUE);
600 jonen 1.1 $this->_hidden_elements[$label]->set_value( $value );
601     }
602    
603     /**
604     * This method is used to get
605     * the value for a hidden element
606     *
607     * @param string - the form label
608     * @return value - the new value
609     */
610     function get_hidden_element_value($label) {
611 jonen 1.2 $this->_test_element($label, "get_hidden_element_value", TRUE);
612 jonen 1.1 return $this->_hidden_elements[$label]->get_value();
613     }
614    
615 jonen 1.3 /**
616     * This method is a helper method to set the
617     * FormElement's tabindex.
618     *
619     * @param string - the form label
620     * @param int - the FormElement's tabindex
621     * @return none
622     */
623     function set_form_tabindex($label, $index) {
624     $this->_test_element($label, "set_form_tabindex");
625     $this->_elements[$label]->set_tabindex($index);
626     }
627    
628     /**
629     * This method is a helper method to get the
630     * FormElement's tabindex.
631     *
632     * @param string - the form label
633     * @param int - the FormElement's tabindex
634     * @return the FormElement's current tabindex
635     */
636     function get_form_tabindex($label, $index) {
637     $this->_test_element($label, "set_form_tabindex");
638     return $this->_elements[$label]->get_tabindex();
639     }
640    
641    
642 jonen 1.1
643     /**
644     * This method is used to create a new error element
645     * during the call to form_action(). This enables us
646     * to do error handling during a transaction into
647     * a DB.
648     *
649     * @param string - the label
650     * @param string - the error message
651     */
652     function add_error( $label, $message ) {
653     if (isset($this->_elements[$label])) {
654     $this->_elements[$label]->set_error_message($message);
655     } else {
656     $this->add_element( new FEError($label, $message) );
657     }
658     }
659    
660    
661     /*****************************/
662     /* Util methods */
663     /*****************************/
664    
665     function set_form_name($name) {
666     $this->_form_name = $name;
667     }
668    
669    
670     /**
671     * Save the action for the form
672     *
673     * @param string - the action from the post.
674     */
675     function set_action($action) {
676     $this->action = $action;
677     }
678    
679     /**
680     * Get the current status of the
681     * action.
682     *
683     * @return string
684     */
685     function get_action() {
686     return $this->action;
687     }
688    
689     /**
690     * this method sets the form name
691     *
692     * @param string - the form name
693     */
694     function set_form_width($width) {
695 jonen 1.2 $this->_width = $width;
696 jonen 1.1 }
697    
698    
699 jonen 1.2 /**
700     * This method returns the width
701     * of the form errors table.
702     * By default it is supposed to be
703     * the same width as the form itself.
704     *
705     * @return int
706     */
707     function get_form_errors_width() {
708     if ($this->_form_errors_width == null) {
709     return $this->_width;
710     } else {
711     return $this->_form_errors_width;
712     }
713     }
714    
715     /**
716     * This method allows you to override
717     * the width of the form errors table.
718     * By default it uses the width of the
719     * form as its size.
720     *
721     * @param string - the width
722     */
723     function set_form_errors_width($width) {
724     $this->_form_errors_width = $width;
725     }
726    
727    
728     /**
729     * This allows us to change the form errors
730     * table title
731     *
732     * @param string - the new title
733     */
734     function set_form_errors_title($title) {
735     $this->_form_errors_title = $title;
736     }
737    
738    
739    
740    
741 jonen 1.1 /**
742     * This function is used to set the
743     * default CSS class used on
744     * form field text when there is no
745     * error on that field
746     *
747     * @param string - the css class to use
748     */
749     function set_default_css( $css ) {
750     $this->_default_label_css = $css;
751     }
752    
753     /**
754     * This function returns the
755     * default css class used for
756     * NON error text.
757     *
758     * @return string - the current default css
759     */
760     function get_default_css() {
761     return $this->_default_label_css;
762     }
763    
764    
765     /**
766     * This function is used to set the
767     * css class that is used on text
768     * when an error on that field is
769     * detected.
770     *
771     * @param string - the css class to use.
772     */
773     function set_error_css( $css ) {
774     $this->_err_label_css = $css;
775     }
776    
777    
778     /**
779     * This sets the $this->_has_confirmation
780     * flag. to let the object know it has
781     * a required confirmation page, which
782     * should get called after the validation
783     * is successfull, and before the action is
784     * handled on the back-end.
785     *
786     * @param boolean - the flag value TRUE/FALSE
787     */
788     function set_confirm( $flag = TRUE ) {
789     $this->_has_confirm = $flag;
790     }
791    
792     /**
793     * This gets the value of the confirmation flag.
794     * which tells the caller that this object
795     * has/doesn't have a required confirmation
796     * page.
797     *
798     * @return boolean
799     */
800     function has_confirm() {
801     return $this->_has_confirm;
802     }
803    
804    
805     /**
806     * This sets the stripslashes flag for
807     * this object.
808     *
809     * @param boolean
810     */
811     function set_stripslashes( $flag = TRUE ) {
812     $this->_stripslashes = $flag;
813     }
814    
815     /**
816     * This sets the action message.
817     * This is called from withint the
818     * form_action() method
819     *
820     * @param string - the action message
821     */
822     function set_action_message($message) {
823     $this->_action_message = $message;
824     }
825    
826    
827     /**
828     * This method sets the javasript action
829     * to be taken when the cancel button
830     * is clicked. Calling this method
831     * w/ a non NULL value automatically enables
832     * the Cancel button.
833     *
834     * @param string - the javascript cancel action
835     */
836     function set_cancel_action($action) {
837     $this->_cancel_action = $action;
838     }
839    
840    
841    
842    
843    
844     /**
845     * This function adds a form submit button
846     * with the appropriate action.
847     *
848     * @param string - the labe/action for the submit
849     * button.
850     * @param bool disable the button
851     * @param string - the onSubmit function (if any)
852     * @param boolean - disable opon submit?
853     * @return INPUTtag object
854     */
855     function add_action( $label, $disabled = false, $submit_function = false,
856     $disable_on_submit = TRUE ) {
857     $style="vertical-align:middle;";
858     // here we mantain a fixed button size if a label length is reasonably small
859     // i.e. OK or Cancel buttons or use padding otherwise
860     if ( strlen($label)<8 ) $style .= "width: 90px;";
861     else $style .= "padding-left: 5px;padding-right:5px;";
862    
863     // Unique button label
864     if (!$this->_action_counter) {
865     $this->_action_counter = 1;
866     }
867     $blabel = FORM_ACTION.$this->_action_counter;
868     $this->_action_counter++;
869    
870     // The onClick is responsible for:
871     // -disabling the action button to discourage stupid users
872     // -setting the action in the _form_action hidden variable
873     // -calling the onSubmit function (if any), since form.submit() will not trigger
874     // the registered onSubmit function
875     // -call the form.submit() function
876    
877     //build the action
878     $onclick = "";
879     if ($disable_on_submit) {
880     $onclick .= "this.form.".$blabel.".disabled=true;";
881     }
882     $onclick .= "this.form.".FORM_ACTION.".value='".$label."';";
883     if ($submit_function) {
884     $onclick .= $submit_function.";";
885     }
886     $onclick .= "this.form.submit();";
887    
888     $attrib = array("style" => $style,
889     "onClick" => $onclick);
890    
891     if ($disabled) $attrib[] = "disabled";
892     return form_submit($blabel, $label, $attrib);
893     }
894    
895    
896     /**
897     * This function adds a submit button that
898     * can have any label. It just makes the
899     * _form_action a hidden field.
900     * NOTE: you can only do this ONCE per form.
901     *
902     * @param string - the label of the button.
903     * @param string - the action value.
904     * @param boolean - disable opon submit?
905     * @return ContainerWidget object
906     */
907     function add_hidden_action( $label, $action, $disable_on_submit=TRUE) {
908     $container = new ContainerWidget;
909     // Unique button label
910     if (!$this->_action_counter) {
911     $this->_action_counter = 1;
912     }
913     $blabel = FORM_ACTION.$this->_action_counter;
914     $this->_action_counter++;
915    
916     //build the action
917     $onclick = "";
918     if ($disable_on_submit) {
919     $onclick .= "this.form.".$blabel.".disabled=true;";
920     }
921     $onclick .= "this.form.".FORM_ACTION.".value='".$action."';";
922     $onclick .= "this.form.submit();";
923    
924     $style = "padding-left: 5px;padding-right:5px;";
925     $attrib = array("style" => $style,
926     "onClick" => $onclick);
927    
928     $container->push(form_submit($blabel, $label,
929     array("style" => $style,
930     "onClick" => $onclick)));
931     return $container;
932     }
933    
934     /**
935     * This function adds an action as an image to
936     * submit the form.
937     *
938     * @param string - the image name path
939     * @param string - the action
940     * @param boolean - disable opon submit?
941     *
942 jonen 1.2 * @return Atag object
943 jonen 1.1 */
944     function add_image_action( $image_name, $action, $disable_on_submit=TRUE ) {
945 jonen 1.2 // Unique button label
946 jonen 1.1 if (!$this->_action_counter) {
947     $this->_action_counter = 1;
948     }
949 jonen 1.2 $blabel = "_form_action".$this->_action_counter;
950 jonen 1.1 $this->_action_counter++;
951    
952 jonen 1.2 $onclick = "document.".$this->_form_name."._form_action.value='".$action."';";
953     $onclick .= "document.".$this->_form_name.".submit();";
954    
955     if ($disable_on_submit) {
956     $click = "javascript:if (!window.global_cntr) {window.global_cntr = 1;} else {window.global_cntr++;} ";
957     $click .= " if(window.global_cntr<2) {";
958     $click .= $onclick."}";
959     }
960    
961     $img = html_img($image_name);
962 jonen 1.1 $img->set_tag_attribute("border", 0 );
963     $img->set_tag_attribute("style", "cursor:hand;");
964    
965 jonen 1.2 $link = html_a("#", $img);
966     $link->set_tag_attribute("onclick", $click);
967     return $link;
968 jonen 1.1 }
969    
970    
971     /**
972     * build a cancel button with a url
973     * to go to
974     *
975     * @param string - the cancel action
976     * @return form button
977     */
978     function add_cancel() {
979    
980     $cancel_button = form_button("cancel","Cancel",
981     array("type"=>"button",
982     "style"=>"width: 90px;",
983     "onClick"=>
984     "javascript:document.location='".$this->_cancel_action."'"));
985     $cancel_button->set_style("vertical-align:middle");
986     return $cancel_button;
987     }
988 jonen 1.2
989     /**
990     * This function is used to set the required field marker
991     *
992     * @param string - the marker
993     */
994     function set_required_marker($marker) {
995     $this->_required_field_marker = $marker;
996     }
997    
998     /**
999     * This sets the required text
1000     *
1001     * @param string
1002     */
1003     function set_required_text($text) {
1004     $this->_required_field_text = $text;
1005    
1006     }
1007    
1008    
1009     /**
1010     * This method tests to see if we
1011     * have an element named $label,
1012     * so we can operate on it.
1013     *
1014     * @param string - the element's label
1015     * @param string - the name of the method that called us
1016     * @param boolean - test a hidden element?
1017     */
1018     function _test_element( $label, $method, $hidden=FALSE ) {
1019     if ($hidden) {
1020     if (!isset($this->_hidden_elements[$label])) {
1021     trigger_error("FormContent::".$method."() - '".$label."' element doesn't exist", E_USER_ERROR);
1022     }
1023     } else {
1024     if (!isset($this->_elements[$label])) {
1025     trigger_error("FormContent::".$method."() - '".$label."' element doesn't exist", E_USER_ERROR);
1026     }
1027     }
1028     }
1029 jonen 1.1
1030    
1031     }
1032     ?>

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