/[cvs]/nfo/php/libs/com.newsblob.phphtmllib/examples/form3.php
ViewVC logotype

Contents of /nfo/php/libs/com.newsblob.phphtmllib/examples/form3.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (show annotations)
Thu May 6 16:57:23 2004 UTC (20 years, 2 months ago) by jonen
Branch: MAIN
CVS Tags: HEAD
 updated all to v2.4.1 - Apr 01, 2004

1 <?php
2
3 /**
4 * This is an unrealistic example form that uses all available form elements.
5 * No items have explicitly been marked as required, enabling you to test
6 * individual elements by entering good data or garbage and seeing the result.
7 *
8 * $Id: form3.php,v 1.8 2004/03/28 19:46:20 culley Exp $
9 *
10 * @author Culley Harrelson <culley@fastmail.fm>
11 * @package phpHtmlLib
12 * @subpackage form-examples
13 * @version 1.0.0
14 *
15 */
16 function xxx($var) { echo "<xmp>"; var_dump($var); echo "</xmp>"; }
17
18 // Include the phphtmllib libraries
19 $phphtmllib = $_SERVER["DOCUMENT_ROOT"] . "/phphtmllib";
20 include_once("$phphtmllib/includes.inc");
21
22 // Include the Form Processing objects
23 include_once($phphtmllib."/form/includes.inc");
24
25
26 //use the class we defined from
27 //Example 3.
28 include_once($phphtmllib."/examples/MyLayoutPage.inc");
29
30 /**
31 * A simple Page Layout object child. this came from Example 3.
32 *
33 * @author Culley Harrelson <culley@fastmail.fm>
34 * @package phpHtmlLib
35 * @subpackage form-examples
36 *
37 */
38 class Form3Page extends MyLayoutPage {
39
40 function content_block() {
41 //build the FormProcessor, and add the
42 //Form content object that the FormProcessor
43 //will use. Make the width of the form 95%
44 return new FormProcessor(new SampleForm('95%'));
45 }
46 }
47
48
49 /**
50 * This is the Class that handles the building of the Form itself. It creates
51 * the Form Elements inside the form_init_elements() method.
52 *
53 * @author Culley Harrelson <culley@fastmail.fm>
54 * @package phpHtmlLib
55 * @subpackage form-examples
56 *
57 */
58
59 class SampleForm extends FormContent { // {{{
60
61 /**
62 * This method gets called EVERY time the object is created. It is used to
63 * build all of the FormElement objects used in this Form.
64 *
65 */
66 function form_init_elements() {
67
68 // we want an confirmation page for this form.
69 $this->set_confirm();
70
71 // now start to add the Form Elements that will be used in this form.
72
73 // FEButton (label $label, string $value, [string $action = NULL],
74 // [int $width = NULL], [int $height = NULL])
75 $this->add_element(new FEButton("FEButton Label", 'button-value', 'javascript-action'));
76
77 // FECheckBox (label $label, string $text)
78 $this->add_element(new FECheckBox("FECheckBox Label", 'checkbox-text'));
79
80 // FEDataList (string $label, [boolean $required = TRUE], [int $width
81 // = NULL], [int $height = NULL], [array $data_list = array()])
82 $list = new FECheckBoxList("FECheckBoxList label", FALSE,
83 "200px", "80px",
84 array("Testing 123" => "foo",
85 "my value is bar" => "bar",
86 "Somone's test" => "blah",
87 "Slerm" => "slerm",
88 "my value is hat" => "hat",
89 "One" => 1));
90 $list->disable_item("Testing 123");
91 $this->add_element($list);
92
93 // FEComboListBox (string $label, [boolean $required = TRUE], [int
94 // $width = "200px"], [int $height = "100px"], [array $from_data_list =
95 // array()], [array $to_data_list = array()])
96 $combo_list = new FEComboListBox("FEComboListBox Label", false, '300px',
97 '100px', array('one' => 1, 'two' => 2), array('three' => 3, 'four' => 4));
98 $combo_list->set_to_label('this is the to label');
99 $combo_list->set_from_label('this is the from label');
100 $this->add_element($combo_list);
101
102 // FEConfirmActionButton (mixed $label, mixed $value, [mixed $message
103 // = NULL], [mixed $width = NULL], [mixed $height = NULL])
104 $this->add_element(new FEConfirmActionButton("FEConfirmActionButton label",
105 'click me for a javascript confirmation', 'Are you sure?'));
106
107 // the constructor for FEPassword and FEConfirmPassword are the same as FEText
108 $password = new FEPassword("FEPassword label", false, "200px");
109 $this->add_element($password);
110
111 $confirm = new FEConfirmPassword("FEConfirmPassword label", false, "200px");
112
113 // add the password FormElement to the ConfirmPassword FormElement so
114 // we can make sure they match.
115 $confirm->password($password);
116 $this->add_element($confirm);
117
118 // These elements have the same constructor as FEText
119 $this->add_element(new FEDomainName("FEDomainName label", false, "200px"));
120 $this->add_element(new FEEmail("FEEmail label", false, "200px"));
121 $this->add_element(new FEEmailMany("FEEmailMany label (comma separated)", false, "400px"));
122
123 // file upload
124 $file = new FEFile("FEFile label", false, "200px");
125 $file->add_valid_type('image/gif');
126 $file->add_valid_type('image/jpeg');
127 $file->set_max_size(1024 * 2);
128 $this->add_element($file);
129
130 // FEHidden (mixed $label, [mixed $value = NULL])
131 $this->add_element(new FEHidden("FEHidden label", 'the hidden value'));
132
133 // FEHostNameWithPort (label $label, [bool $required = TRUE], [int
134 // $width = NULL], [int $maxlength = NULL], [bool $seperate_port =
135 // FALSE])
136 $this->add_element(new FEHostNameWithPort("FEHostNameWithPort label", false));
137
138 // Same constructor as FEText
139 $this->add_element(new FEIPAddress("FEIPAddress label", false, "200px"));
140
141 // Same constructor as FEHostNameWithPort
142 $this->add_element(new FEIPAddressWithPort("FEIPAddressWithPort label", false));
143
144 // your standard drop down select list
145 $list_box_collapsed = new FEListBox('FEListBoxCollapsed label', false, '200px');
146 $list_box_collapsed->set_list_data(array('one' => 1, 'two' => 2, 'three' => 3, 'four' => 4));
147 $this->add_element($list_box_collapsed);
148
149 // same as the above select list but with a height setting
150 $list_box = new FEListBox('FEListBox label', false, '200px', '100px');
151 $list_box->set_list_data(array('one' => 1, 'two' => 2, 'three' => 3, 'four' => 4));
152 $this->add_element($list_box);
153
154 // FEMonths($label, $required = TRUE, $width = NULL, $height = NULL, $locale = 'en', $format = 'long') {
155 $this->add_element(new FEMonths("FEMonths label", false));
156
157 // FEYears($label, $required = TRUE, $width = NULL, $height = NULL, $min_year = 2000, $max_year = 2010) {
158 $this->add_element(new FEYears("FEYears label", false, null, null, date('Y'), date('Y') + 10));
159
160 // FEDays($label, $required = TRUE, $width = NULL, $height = NULL) {
161 $this->add_element(new FEDays("FEDays label", false));
162
163 // set the locale to dutch
164 setlocale(LC_TIME, 'nl_NL');
165
166 // TODO: document this
167 $date_element = new FEDate("FEDate label", false, null, null, 'Fdy', 1970, 1975);
168 // $date_element->set_short_months();
169 // $date_element->set_min_year(1970);
170 // $date_element->set_max_year(1975);
171 // $date_element->set_format('Fdy');
172 $date_element->set_text_format("%s %s, %s");
173 // $date_element->set_text_format("%04d-%02d-%02d");
174 $this->add_element($date_element);
175
176 // a list box that allows you to select multiple items
177 $m_list_box = new FEMultiListBox('FEMultiListBox label', false, '200px', '100px');
178 $m_list_box->set_list_data(array('one' => 1, 'two' => 2, 'three' => 3, 'four' => 4));
179 $this->add_element($m_list_box);
180
181 // Same constructor as FEText
182 $this->add_element(new FEName("FEName label", false, "200px"));
183
184 $nested_list_box = new FENestedListBox('FENestedListBox label', false, '200px', '100px');
185 $data = array("Test" => 1, "Foo" => array("value" => 2, "items" => array("Blah" => 3, "php" => 4)), "Bar" => array("value" => 5, "items" => array("testing" => array("value" => 6, "items" => array("ugh" => 7)), "again" => 8)));
186 $nested_list_box->set_list_data($data);
187 $this->add_element($nested_list_box);
188
189 // Same constructor as FEText
190 $this->add_element(new FENumber("FENumber label", false, "200px"));
191 $this->add_element(new FENumberFloat("FENumberFloat label", false, "200px"));
192 $this->add_element(new FENumberFloat("FENumberFloat label", false, "200px"));
193
194 // FENumberInRange (label $label, [bool $required = TRUE], [int $width
195 // = NULL], [int $maxlength = NULL], int $min, [int $max = 100],
196 // [boolean $label_flag = TRUE])
197 $this->add_element(new FENumberInRange("FENumberInRange label", false, "200px", null, 1, 10));
198
199
200 // Same constructor as FEText
201 $this->add_element(new FENumberPrice("FENumberPrice label", false, "200px"));
202
203 // FERadioGroup (label $label, [array $data_list = array()])
204 $this->add_element(new FERadioGroup("FERadioGroup label",
205 array('one' => 1, 'two' => 2, 'three' => 3, 'four' => 4)));
206
207 // this is the same as the above radio group but it is handled
208 // differently in the display method below
209 $this->add_element(new FERadioGroup("FERadioGroup vertical label",
210 array('one' => 1, 'two' => 2, 'three' => 3, 'four' => 4)));
211
212 // add constructor label here.
213 $this->add_element( new FERegEx("FERegEx label", false, '200px', 3,
214 '/^1[a-z]T$/', 'This field must equal 1[a-z]T') );
215
216 $this->add_element(new FEText("FEText label", false, "200px"));
217
218 // FETextArea (label $label, [bool $required = TRUE], int $rows, int
219 // $cols, [int $width = NULL], [int $height = NULL], [int
220 // $limit_char_count = -1])
221 $this->add_element(new FETextArea("FETextArea label", false, 10, 50, null, 300));
222
223 // FEUnitedStates (string $label, [boolean $required = TRUE], [int
224 // $width = NULL], [int $height = NULL], array 4)
225 $this->add_element(new FEUnitedStates("FEUnitedStates label", false));
226
227 // Same constructor as FEText
228 $this->add_element(new FEUrl("FEUrl label", false, "200px"));
229 $this->add_element(new FEUrlStrict("FEUrlStrict label", false, "200px"));
230
231 // FEYesNoListBox (label $label, [bool $required = TRUE], [array
232 // $width = NULL], [int $height = NULL], [string $yes_value = "yes"],
233 // [string $no_value = "no"])
234 $this->add_element(new FEYesNoListBox("FEYesNoListBox label", false));
235
236 // FEYesNoRadioGroup (label $label, [bool $required = TRUE], [string
237 // $yes_value = "yes"], [string $no_value = "no"])
238 $this->add_element(new FEYesNoRadioGroup("FEYesNoRadioGroup label", false));
239
240 // FEZipcode (label $label, [bool $required = false], [int $width =
241 // NULL], [int $maxlength = 5])
242 $this->add_element(new FEZipcode("FEZipcode label", false));
243
244 // FESubmitButton (label $label, string $value, [int $width = NULL],
245 // [int $height = NULL])
246 $this->add_element(new FESubmitButton("FESubmitButton label", 'submit button value'));
247
248 }
249
250 /**
251 * This method is called only the first time the form page is hit. This
252 * enables u to query a DB and pre populate the FormElement objects with
253 * data.
254 *
255 */
256 function form_init_data() {
257 //this sets the value to the FERadioGroup first value to 3 or 'three'
258 $this->set_element_value('FERadioGroup label', 3);
259
260 //this sets the value to the FERadioGroup vertical to 2 or 'two'
261 $this->set_element_value('FERadioGroup vertical label', 2);
262
263 //this sets the default value of the FEYesNoRadioGroup to no
264 $this->set_element_value('FEYesNoRadioGroup label', 'no');
265
266 //the default values for check boxes take a boolean
267 $this->set_element_value('FECheckBox Label', true);
268
269 //the default values for FEDate elements should be an ISO 8601 date string
270 $this->set_element_value('FEDate label', '1974-10-07');
271 }
272
273
274 /**
275 * This is the method that builds the layout of where the FormElements will
276 * live. You can lay it out any way you like.
277 *
278 */
279 function form() {
280
281 $table = &html_table($this->_width,0,0,2);
282
283 // add each element to the form as it was included above
284 foreach(array_keys($this->_elements) as $label) {
285 switch ($label) {
286 case 'FERadioGroup vertical label':
287 // a radio group can be displayed vertically by changing
288 // the br flag on get_element to true
289 $element =& $this->get_element($label);
290 $table->add_row($this->element_label($label), $element->get_element(null, true));
291 break;
292 default:
293 $table->add_row($this->element_label($label), $this->element_form($label));
294 break;
295 }
296 }
297
298
299 return $table;
300 }
301
302 /**
303 * This method gets called after the FormElement data has passed the
304 * validation. This enables you to validate the data against some backend
305 * mechanism, say a DB.
306 *
307 */
308 function form_backend_validation() {
309 //$this->add_error("uh oh", "some bogus error happened");
310 //return FALSE;
311 return TRUE;
312 }
313
314 /**
315 * This method is called ONLY after ALL validation has passed. This is the
316 * method that allows you to do something with the data, say insert/update
317 * records in the DB.
318 *
319 */
320 function form_action() {
321 //$this->add_error("uh oh", "some bogus error happened");
322 //return FALSE;
323 $this->set_action_message("WOO!");
324 $dump = html_xmp();
325 foreach( $this->_elements as $label => $element ) {
326 $dump->add( $label." = ".print_r($element->get_value(),true) );
327 }
328
329 print $dump->render();
330 exit;
331 return TRUE;
332 }
333 } //}}}
334
335
336 $page = new Form3Page("Form Example 3");
337 print $page->render();
338
339 ?>

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