blob: 6efef2324f53aca97e7c4a709286171858966f22 [file] [log] [blame]
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02001<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
Derek Allard2067d1a2008-11-13 22:59:24 +00002/**
3 * CodeIgniter
4 *
Greg Aker741de1c2010-11-10 14:52:57 -06005 * An open source application development framework for PHP 5.1.6 or newer
Derek Allard2067d1a2008-11-13 22:59:24 +00006 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05007 * NOTICE OF LICENSE
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02008 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -05009 * Licensed under the Open Software License version 3.0
Andrey Andreev8bf6bb62012-01-06 16:11:04 +020010 *
Derek Jonesf4a4bd82011-10-20 12:18:42 -050011 * This source file is subject to the Open Software License (OSL 3.0) that is
12 * bundled with this package in the files license.txt / license.rst. It is
13 * also available through the world wide web at this URL:
14 * http://opensource.org/licenses/OSL-3.0
15 * If you did not receive a copy of the license and are unable to obtain it
16 * through the world wide web, please send an email to
17 * licensing@ellislab.com so we can send you a copy immediately.
18 *
Derek Allard2067d1a2008-11-13 22:59:24 +000019 * @package CodeIgniter
Derek Jonesf4a4bd82011-10-20 12:18:42 -050020 * @author EllisLab Dev Team
Greg Aker0defe5d2012-01-01 18:46:41 -060021 * @copyright Copyright (c) 2008 - 2012, EllisLab, Inc. (http://ellislab.com/)
Derek Jonesf4a4bd82011-10-20 12:18:42 -050022 * @license http://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0)
Derek Allard2067d1a2008-11-13 22:59:24 +000023 * @link http://codeigniter.com
24 * @since Version 1.0
Derek Allard2067d1a2008-11-13 22:59:24 +000025 */
26
27// ------------------------------------------------------------------------
28
29/**
30 * CodeIgniter Form Helpers
31 *
32 * @package CodeIgniter
33 * @subpackage Helpers
34 * @category Helpers
Derek Jonesf4a4bd82011-10-20 12:18:42 -050035 * @author EllisLab Dev Team
Derek Allard2067d1a2008-11-13 22:59:24 +000036 * @link http://codeigniter.com/user_guide/helpers/form_helper.html
37 */
38
39// ------------------------------------------------------------------------
40
41/**
42 * Form Declaration
43 *
44 * Creates the opening portion of the form.
45 *
46 * @access public
47 * @param string the URI segments of the form destination
48 * @param array a key/value pair of attributes
49 * @param array a key/value pair hidden data
50 * @return string
Barry Mienydd671972010-10-04 16:33:58 +020051 */
Derek Allard2067d1a2008-11-13 22:59:24 +000052if ( ! function_exists('form_open'))
53{
54 function form_open($action = '', $attributes = '', $hidden = array())
55 {
56 $CI =& get_instance();
57
58 if ($attributes == '')
59 {
Derek Allard3241d732009-09-17 12:17:45 +000060 $attributes = 'method="post"';
Derek Allard2067d1a2008-11-13 22:59:24 +000061 }
62
Phil Sturgeon9d0e6172011-04-02 12:43:55 +010063 // If an action is not a full URL then turn it into one
Phil Sturgeon133beaf2011-03-10 16:38:32 +000064 if ($action && strpos($action, '://') === FALSE)
65 {
Phil Sturgeon52e73182011-03-11 10:17:01 +000066 $action = $CI->config->site_url($action);
Phil Sturgeon133beaf2011-03-10 16:38:32 +000067 }
Derek Allard2067d1a2008-11-13 22:59:24 +000068
Phil Sturgeon9d0e6172011-04-02 12:43:55 +010069 // If no action is provided then set to the current url
70 $action OR $action = $CI->config->site_url($CI->uri->uri_string());
71
Andrey Andreev8bf6bb62012-01-06 16:11:04 +020072 $form = '<form action="'.$action.'"'._attributes_to_string($attributes, TRUE).">\n";
Barry Mienydd671972010-10-04 16:33:58 +020073
Phil Sturgeonf8f04ce2012-03-04 14:21:12 +000074 // Add CSRF field if enabled, but leave it out for GET requests and requests to external websites
75 if ($CI->config->item('csrf_protection') === TRUE AND ! (strpos($action, $CI->config->base_url()) === FALSE OR strpos($form, 'method="get"')))
Derek Allard958543a2010-07-22 14:10:26 -040076 {
Greg Aker1f6f0ab2011-04-07 18:24:53 -050077 $hidden[$CI->security->get_csrf_token_name()] = $CI->security->get_csrf_hash();
Greg Aker28b425a2010-09-15 11:43:23 -050078 }
79
80 if (is_array($hidden) AND count($hidden) > 0)
81 {
Greg Aker9ce43852011-04-19 12:58:52 -050082 $form .= sprintf("<div style=\"display:none\">%s</div>", form_hidden($hidden));
Derek Allard958543a2010-07-22 14:10:26 -040083 }
84
Derek Allard2067d1a2008-11-13 22:59:24 +000085 return $form;
86 }
87}
88
89// ------------------------------------------------------------------------
90
91/**
92 * Form Declaration - Multipart type
93 *
94 * Creates the opening portion of the form, but with "multipart/form-data".
95 *
96 * @access public
97 * @param string the URI segments of the form destination
98 * @param array a key/value pair of attributes
99 * @param array a key/value pair hidden data
100 * @return string
101 */
102if ( ! function_exists('form_open_multipart'))
103{
Ben Edmunds98963b32011-08-20 14:17:16 -0500104 function form_open_multipart($action = '', $attributes = array(), $hidden = array())
Derek Allard2067d1a2008-11-13 22:59:24 +0000105 {
Derek Allard33d4b6a2010-01-17 07:23:00 +0000106 if (is_string($attributes))
107 {
108 $attributes .= ' enctype="multipart/form-data"';
109 }
110 else
111 {
112 $attributes['enctype'] = 'multipart/form-data';
113 }
114
Derek Allard2067d1a2008-11-13 22:59:24 +0000115 return form_open($action, $attributes, $hidden);
116 }
117}
118
119// ------------------------------------------------------------------------
120
121/**
122 * Hidden Input Field
123 *
Derek Jones37f4b9c2011-07-01 17:56:50 -0500124 * Generates hidden fields. You can pass a simple key/value string or an associative
Derek Allard2067d1a2008-11-13 22:59:24 +0000125 * array with multiple values.
126 *
127 * @access public
128 * @param mixed
129 * @param string
130 * @return string
131 */
132if ( ! function_exists('form_hidden'))
133{
Robin Sowell57fe4102009-03-26 18:58:46 +0000134 function form_hidden($name, $value = '', $recursing = FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000135 {
Robin Sowell57fe4102009-03-26 18:58:46 +0000136 static $form;
137
138 if ($recursing === FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000139 {
Robin Sowell57fe4102009-03-26 18:58:46 +0000140 $form = "\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000141 }
142
Robin Sowell57fe4102009-03-26 18:58:46 +0000143 if (is_array($name))
Derek Allard2067d1a2008-11-13 22:59:24 +0000144 {
Robin Sowell57fe4102009-03-26 18:58:46 +0000145 foreach ($name as $key => $val)
146 {
147 form_hidden($key, $val, TRUE);
148 }
149 return $form;
150 }
151
152 if ( ! is_array($value))
153 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200154 $form .= '<input type="hidden" name="'.$name.'" value="'.form_prep($value, $name)."\" />\n";
Robin Sowell57fe4102009-03-26 18:58:46 +0000155 }
156 else
157 {
158 foreach ($value as $k => $v)
159 {
Barry Mienydd671972010-10-04 16:33:58 +0200160 $k = (is_int($k)) ? '' : $k;
Robin Sowell57fe4102009-03-26 18:58:46 +0000161 form_hidden($name.'['.$k.']', $v, TRUE);
162 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000163 }
164
165 return $form;
166 }
167}
168
169// ------------------------------------------------------------------------
170
171/**
172 * Text Input Field
173 *
174 * @access public
175 * @param mixed
176 * @param string
177 * @param string
178 * @return string
179 */
180if ( ! function_exists('form_input'))
181{
182 function form_input($data = '', $value = '', $extra = '')
183 {
184 $defaults = array('type' => 'text', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
185
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200186 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000187 }
188}
189
190// ------------------------------------------------------------------------
191
192/**
193 * Password Field
194 *
195 * Identical to the input function but adds the "password" type
196 *
197 * @access public
198 * @param mixed
199 * @param string
200 * @param string
201 * @return string
202 */
203if ( ! function_exists('form_password'))
204{
205 function form_password($data = '', $value = '', $extra = '')
206 {
207 if ( ! is_array($data))
208 {
209 $data = array('name' => $data);
210 }
211
212 $data['type'] = 'password';
213 return form_input($data, $value, $extra);
214 }
215}
216
217// ------------------------------------------------------------------------
218
219/**
220 * Upload Field
221 *
222 * Identical to the input function but adds the "file" type
223 *
224 * @access public
225 * @param mixed
226 * @param string
227 * @param string
228 * @return string
229 */
230if ( ! function_exists('form_upload'))
231{
232 function form_upload($data = '', $value = '', $extra = '')
233 {
234 if ( ! is_array($data))
235 {
236 $data = array('name' => $data);
237 }
238
239 $data['type'] = 'file';
240 return form_input($data, $value, $extra);
241 }
242}
243
244// ------------------------------------------------------------------------
245
246/**
247 * Textarea field
248 *
249 * @access public
250 * @param mixed
251 * @param string
252 * @param string
253 * @return string
254 */
255if ( ! function_exists('form_textarea'))
256{
257 function form_textarea($data = '', $value = '', $extra = '')
258 {
Phil Sturgeon7de31602011-08-13 10:26:22 -0600259 $defaults = array('name' => (( ! is_array($data)) ? $data : ''), 'cols' => '40', 'rows' => '10');
Derek Allard2067d1a2008-11-13 22:59:24 +0000260
261 if ( ! is_array($data) OR ! isset($data['value']))
262 {
263 $val = $value;
264 }
265 else
266 {
Barry Mienydd671972010-10-04 16:33:58 +0200267 $val = $data['value'];
Derek Allard2067d1a2008-11-13 22:59:24 +0000268 unset($data['value']); // textareas don't use the value attribute
269 }
Barry Mienydd671972010-10-04 16:33:58 +0200270
Derek Jones01a9b102009-07-17 18:30:36 +0000271 $name = (is_array($data)) ? $data['name'] : $data;
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200272 return '<textarea '._parse_form_attributes($data, $defaults).$extra.'>'.form_prep($val, $name)."</textarea>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000273 }
274}
275
276// ------------------------------------------------------------------------
277
278/**
Derek Jones26399292009-04-08 16:14:17 +0000279 * Multi-select menu
280 *
281 * @access public
282 * @param string
283 * @param array
284 * @param mixed
285 * @param string
286 * @return type
287 */
Derek Jones68788d52010-03-05 10:11:31 -0600288if ( ! function_exists('form_multiselect'))
Derek Jones26399292009-04-08 16:14:17 +0000289{
290 function form_multiselect($name = '', $options = array(), $selected = array(), $extra = '')
291 {
292 if ( ! strpos($extra, 'multiple'))
293 {
294 $extra .= ' multiple="multiple"';
295 }
Barry Mienydd671972010-10-04 16:33:58 +0200296
Derek Jones26399292009-04-08 16:14:17 +0000297 return form_dropdown($name, $options, $selected, $extra);
298 }
299}
300
301// --------------------------------------------------------------------
302
303/**
Derek Allard2067d1a2008-11-13 22:59:24 +0000304 * Drop-down Menu
305 *
306 * @access public
307 * @param string
308 * @param array
309 * @param string
310 * @param string
311 * @return string
312 */
313if ( ! function_exists('form_dropdown'))
314{
315 function form_dropdown($name = '', $options = array(), $selected = array(), $extra = '')
316 {
317 if ( ! is_array($selected))
318 {
319 $selected = array($selected);
320 }
321
322 // If no selected state was submitted we will attempt to set it automatically
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200323 if (count($selected) === 0 && isset($_POST[$name]))
Derek Allard2067d1a2008-11-13 22:59:24 +0000324 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200325 $selected = array($_POST[$name]);
Derek Allard2067d1a2008-11-13 22:59:24 +0000326 }
327
328 if ($extra != '') $extra = ' '.$extra;
329
330 $multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : '';
331
332 $form = '<select name="'.$name.'"'.$extra.$multiple.">\n";
Robin Sowell57fe4102009-03-26 18:58:46 +0000333
Derek Allard2067d1a2008-11-13 22:59:24 +0000334 foreach ($options as $key => $val)
335 {
336 $key = (string) $key;
Derek Allard2067d1a2008-11-13 22:59:24 +0000337
Derek Jones68788d52010-03-05 10:11:31 -0600338 if (is_array($val) && ! empty($val))
Derek Allard78a5fc92009-02-05 16:34:35 +0000339 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200340 $form .= '<optgroup label="'.$key."\">\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000341
Derek Allard78a5fc92009-02-05 16:34:35 +0000342 foreach ($val as $optgroup_key => $optgroup_val)
343 {
Derek Allard86a840c2009-02-05 17:31:58 +0000344 $sel = (in_array($optgroup_key, $selected)) ? ' selected="selected"' : '';
Derek Allard78a5fc92009-02-05 16:34:35 +0000345 $form .= '<option value="'.$optgroup_key.'"'.$sel.'>'.(string) $optgroup_val."</option>\n";
346 }
347
348 $form .= '</optgroup>'."\n";
349 }
350 else
351 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200352 $form .= '<option value="'.$key.'"'.(in_array($key, $selected) ? ' selected="selected"' : '').'>'.(string) $val."</option>\n";
Derek Allard78a5fc92009-02-05 16:34:35 +0000353 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000354 }
355
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200356 $form .= "</select>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000357
358 return $form;
359 }
360}
361
362// ------------------------------------------------------------------------
363
364/**
365 * Checkbox Field
366 *
367 * @access public
368 * @param mixed
369 * @param string
370 * @param bool
371 * @param string
372 * @return string
373 */
374if ( ! function_exists('form_checkbox'))
375{
376 function form_checkbox($data = '', $value = '', $checked = FALSE, $extra = '')
377 {
378 $defaults = array('type' => 'checkbox', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
379
380 if (is_array($data) AND array_key_exists('checked', $data))
381 {
382 $checked = $data['checked'];
383
384 if ($checked == FALSE)
385 {
386 unset($data['checked']);
387 }
388 else
389 {
390 $data['checked'] = 'checked';
391 }
392 }
393
394 if ($checked == TRUE)
395 {
396 $defaults['checked'] = 'checked';
397 }
398 else
399 {
400 unset($defaults['checked']);
401 }
402
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200403 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000404 }
405}
406
407// ------------------------------------------------------------------------
408
409/**
410 * Radio Button
411 *
412 * @access public
413 * @param mixed
414 * @param string
415 * @param bool
416 * @param string
417 * @return string
418 */
419if ( ! function_exists('form_radio'))
420{
421 function form_radio($data = '', $value = '', $checked = FALSE, $extra = '')
422 {
423 if ( ! is_array($data))
Barry Mienydd671972010-10-04 16:33:58 +0200424 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000425 $data = array('name' => $data);
426 }
427
428 $data['type'] = 'radio';
429 return form_checkbox($data, $value, $checked, $extra);
430 }
431}
432
433// ------------------------------------------------------------------------
434
435/**
436 * Submit Button
437 *
438 * @access public
439 * @param mixed
440 * @param string
441 * @param string
442 * @return string
443 */
444if ( ! function_exists('form_submit'))
Barry Mienydd671972010-10-04 16:33:58 +0200445{
Derek Allard2067d1a2008-11-13 22:59:24 +0000446 function form_submit($data = '', $value = '', $extra = '')
447 {
448 $defaults = array('type' => 'submit', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200449 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000450 }
451}
452
453// ------------------------------------------------------------------------
454
455/**
456 * Reset Button
457 *
458 * @access public
459 * @param mixed
460 * @param string
461 * @param string
462 * @return string
463 */
464if ( ! function_exists('form_reset'))
465{
466 function form_reset($data = '', $value = '', $extra = '')
467 {
468 $defaults = array('type' => 'reset', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200469 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000470 }
471}
472
473// ------------------------------------------------------------------------
474
475/**
476 * Form Button
477 *
478 * @access public
479 * @param mixed
480 * @param string
481 * @param string
482 * @return string
483 */
484if ( ! function_exists('form_button'))
485{
486 function form_button($data = '', $content = '', $extra = '')
487 {
Derek Allard904094a2009-02-10 14:00:34 +0000488 $defaults = array('name' => (( ! is_array($data)) ? $data : ''), 'type' => 'button');
Derek Allard2067d1a2008-11-13 22:59:24 +0000489 if ( is_array($data) AND isset($data['content']))
490 {
491 $content = $data['content'];
492 unset($data['content']); // content is not an attribute
493 }
494
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200495 return '<button '._parse_form_attributes($data, $defaults).$extra.'>'.$content."</button>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000496 }
497}
498
499// ------------------------------------------------------------------------
500
501/**
502 * Form Label Tag
503 *
504 * @access public
505 * @param string The text to appear onscreen
506 * @param string The id the label applies to
507 * @param string Additional attributes
508 * @return string
509 */
510if ( ! function_exists('form_label'))
511{
512 function form_label($label_text = '', $id = '', $attributes = array())
513 {
514
515 $label = '<label';
516
517 if ($id != '')
518 {
Barry Mienydd671972010-10-04 16:33:58 +0200519 $label .= " for=\"$id\"";
Derek Allard2067d1a2008-11-13 22:59:24 +0000520 }
521
522 if (is_array($attributes) AND count($attributes) > 0)
523 {
524 foreach ($attributes as $key => $val)
525 {
526 $label .= ' '.$key.'="'.$val.'"';
527 }
528 }
529
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200530 return $label .= ">$label_text</label>";
Derek Allard2067d1a2008-11-13 22:59:24 +0000531 }
532}
533
534// ------------------------------------------------------------------------
535/**
536 * Fieldset Tag
537 *
Derek Jones37f4b9c2011-07-01 17:56:50 -0500538 * Used to produce <fieldset><legend>text</legend>. To close fieldset
Derek Allard2067d1a2008-11-13 22:59:24 +0000539 * use form_fieldset_close()
540 *
541 * @access public
542 * @param string The legend text
543 * @param string Additional attributes
544 * @return string
545 */
546if ( ! function_exists('form_fieldset'))
547{
548 function form_fieldset($legend_text = '', $attributes = array())
549 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200550 $fieldset = '<fieldset'._attributes_to_string($attributes, FALSE).">\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000551 if ($legend_text != '')
552 {
553 $fieldset .= "<legend>$legend_text</legend>\n";
554 }
555
556 return $fieldset;
557 }
558}
559
560// ------------------------------------------------------------------------
561
562/**
563 * Fieldset Close Tag
564 *
565 * @access public
566 * @param string
567 * @return string
568 */
569if ( ! function_exists('form_fieldset_close'))
570{
571 function form_fieldset_close($extra = '')
572 {
573 return "</fieldset>".$extra;
574 }
575}
576
577// ------------------------------------------------------------------------
578
579/**
580 * Form Close Tag
581 *
582 * @access public
583 * @param string
584 * @return string
585 */
586if ( ! function_exists('form_close'))
587{
588 function form_close($extra = '')
589 {
590 return "</form>".$extra;
591 }
592}
593
594// ------------------------------------------------------------------------
595
596/**
597 * Form Prep
598 *
599 * Formats text so that it can be safely placed in a form field in the event it has HTML tags.
600 *
601 * @access public
602 * @param string
603 * @return string
604 */
605if ( ! function_exists('form_prep'))
606{
Derek Jones01a9b102009-07-17 18:30:36 +0000607 function form_prep($str = '', $field_name = '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000608 {
Derek Jones01a9b102009-07-17 18:30:36 +0000609 static $prepped_fields = array();
Barry Mienydd671972010-10-04 16:33:58 +0200610
Derek Allard2067d1a2008-11-13 22:59:24 +0000611 // if the field name is an array we do this recursively
612 if (is_array($str))
613 {
614 foreach ($str as $key => $val)
615 {
616 $str[$key] = form_prep($val);
617 }
618
619 return $str;
620 }
621
622 if ($str === '')
623 {
624 return '';
625 }
626
Derek Jones3eb9fac2009-07-17 20:25:13 +0000627 // we've already prepped a field with this name
628 // @todo need to figure out a way to namespace this so
629 // that we know the *exact* field and not just one with
630 // the same name
Derek Jones01a9b102009-07-17 18:30:36 +0000631 if (isset($prepped_fields[$field_name]))
632 {
Derek Jones3eb9fac2009-07-17 20:25:13 +0000633 return $str;
Derek Jones01a9b102009-07-17 18:30:36 +0000634 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000635
Derek Jones01a9b102009-07-17 18:30:36 +0000636 if ($field_name != '')
637 {
Derek Jones68788d52010-03-05 10:11:31 -0600638 $prepped_fields[$field_name] = $field_name;
Derek Jones01a9b102009-07-17 18:30:36 +0000639 }
Barry Mienydd671972010-10-04 16:33:58 +0200640
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200641 return html_escape($str);
Derek Allard2067d1a2008-11-13 22:59:24 +0000642 }
643}
644
645// ------------------------------------------------------------------------
646
647/**
648 * Form Value
649 *
650 * Grabs a value from the POST array for the specified field so you can
Derek Jones37f4b9c2011-07-01 17:56:50 -0500651 * re-populate an input field or textarea. If Form Validation
Derek Allard2067d1a2008-11-13 22:59:24 +0000652 * is active it retrieves the info from the validation class
653 *
654 * @access public
655 * @param string
656 * @return mixed
657 */
658if ( ! function_exists('set_value'))
659{
660 function set_value($field = '', $default = '')
661 {
662 if (FALSE === ($OBJ =& _get_validation_object()))
663 {
664 if ( ! isset($_POST[$field]))
665 {
666 return $default;
667 }
668
Derek Jones01a9b102009-07-17 18:30:36 +0000669 return form_prep($_POST[$field], $field);
Derek Allard2067d1a2008-11-13 22:59:24 +0000670 }
671
Derek Jones01a9b102009-07-17 18:30:36 +0000672 return form_prep($OBJ->set_value($field, $default), $field);
Derek Allard2067d1a2008-11-13 22:59:24 +0000673 }
674}
675
676// ------------------------------------------------------------------------
677
678/**
679 * Set Select
680 *
681 * Let's you set the selected value of a <select> menu via data in the POST array.
682 * If Form Validation is active it retrieves the info from the validation class
683 *
684 * @access public
685 * @param string
686 * @param string
687 * @param bool
688 * @return string
689 */
690if ( ! function_exists('set_select'))
691{
692 function set_select($field = '', $value = '', $default = FALSE)
693 {
694 $OBJ =& _get_validation_object();
695
696 if ($OBJ === FALSE)
697 {
698 if ( ! isset($_POST[$field]))
699 {
Rick Ellis28e5c8f2009-03-09 22:36:48 +0000700 if (count($_POST) === 0 AND $default == TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000701 {
702 return ' selected="selected"';
703 }
704 return '';
705 }
706
707 $field = $_POST[$field];
708
709 if (is_array($field))
710 {
711 if ( ! in_array($value, $field))
712 {
713 return '';
714 }
715 }
716 else
717 {
718 if (($field == '' OR $value == '') OR ($field != $value))
719 {
720 return '';
721 }
722 }
723
724 return ' selected="selected"';
725 }
726
727 return $OBJ->set_select($field, $value, $default);
728 }
729}
730
731// ------------------------------------------------------------------------
732
733/**
734 * Set Checkbox
735 *
736 * Let's you set the selected value of a checkbox via the value in the POST array.
737 * If Form Validation is active it retrieves the info from the validation class
738 *
739 * @access public
740 * @param string
741 * @param string
742 * @param bool
743 * @return string
744 */
745if ( ! function_exists('set_checkbox'))
746{
747 function set_checkbox($field = '', $value = '', $default = FALSE)
748 {
749 $OBJ =& _get_validation_object();
750
751 if ($OBJ === FALSE)
Barry Mienydd671972010-10-04 16:33:58 +0200752 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000753 if ( ! isset($_POST[$field]))
754 {
Rick Ellis28e5c8f2009-03-09 22:36:48 +0000755 if (count($_POST) === 0 AND $default == TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000756 {
757 return ' checked="checked"';
758 }
759 return '';
760 }
761
762 $field = $_POST[$field];
Barry Mienydd671972010-10-04 16:33:58 +0200763
Derek Allard2067d1a2008-11-13 22:59:24 +0000764 if (is_array($field))
765 {
766 if ( ! in_array($value, $field))
767 {
768 return '';
769 }
770 }
771 else
772 {
773 if (($field == '' OR $value == '') OR ($field != $value))
774 {
775 return '';
776 }
777 }
778
779 return ' checked="checked"';
780 }
781
782 return $OBJ->set_checkbox($field, $value, $default);
783 }
784}
785
786// ------------------------------------------------------------------------
787
788/**
789 * Set Radio
790 *
791 * Let's you set the selected value of a radio field via info in the POST array.
792 * If Form Validation is active it retrieves the info from the validation class
793 *
794 * @access public
795 * @param string
796 * @param string
797 * @param bool
798 * @return string
799 */
800if ( ! function_exists('set_radio'))
801{
802 function set_radio($field = '', $value = '', $default = FALSE)
803 {
804 $OBJ =& _get_validation_object();
805
806 if ($OBJ === FALSE)
807 {
808 if ( ! isset($_POST[$field]))
809 {
Rick Ellis28e5c8f2009-03-09 22:36:48 +0000810 if (count($_POST) === 0 AND $default == TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000811 {
812 return ' checked="checked"';
813 }
814 return '';
815 }
816
817 $field = $_POST[$field];
Barry Mienydd671972010-10-04 16:33:58 +0200818
Derek Allard2067d1a2008-11-13 22:59:24 +0000819 if (is_array($field))
820 {
821 if ( ! in_array($value, $field))
822 {
823 return '';
824 }
825 }
826 else
827 {
828 if (($field == '' OR $value == '') OR ($field != $value))
829 {
830 return '';
831 }
832 }
833
834 return ' checked="checked"';
835 }
836
837 return $OBJ->set_radio($field, $value, $default);
838 }
839}
840
841// ------------------------------------------------------------------------
842
843/**
844 * Form Error
845 *
Derek Jones37f4b9c2011-07-01 17:56:50 -0500846 * Returns the error for a specific form field. This is a helper for the
Derek Allard2067d1a2008-11-13 22:59:24 +0000847 * form validation class.
848 *
849 * @access public
850 * @param string
851 * @param string
852 * @param string
853 * @return string
854 */
855if ( ! function_exists('form_error'))
856{
857 function form_error($field = '', $prefix = '', $suffix = '')
858 {
859 if (FALSE === ($OBJ =& _get_validation_object()))
860 {
861 return '';
862 }
863
864 return $OBJ->error($field, $prefix, $suffix);
865 }
866}
867
868// ------------------------------------------------------------------------
869
870/**
871 * Validation Error String
872 *
Derek Jones37f4b9c2011-07-01 17:56:50 -0500873 * Returns all the errors associated with a form submission. This is a helper
Derek Allard2067d1a2008-11-13 22:59:24 +0000874 * function for the form validation class.
875 *
876 * @access public
877 * @param string
878 * @param string
879 * @return string
880 */
881if ( ! function_exists('validation_errors'))
882{
883 function validation_errors($prefix = '', $suffix = '')
884 {
885 if (FALSE === ($OBJ =& _get_validation_object()))
Greg Akerc83bea62011-04-23 12:12:57 -0500886 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000887 return '';
888 }
889
890 return $OBJ->error_string($prefix, $suffix);
891 }
892}
893
894// ------------------------------------------------------------------------
895
896/**
897 * Parse the form attributes
898 *
899 * Helper function used by some of the form helpers
900 *
901 * @access private
902 * @param array
903 * @param array
904 * @return string
905 */
906if ( ! function_exists('_parse_form_attributes'))
907{
908 function _parse_form_attributes($attributes, $default)
909 {
910 if (is_array($attributes))
911 {
912 foreach ($default as $key => $val)
913 {
914 if (isset($attributes[$key]))
915 {
916 $default[$key] = $attributes[$key];
917 unset($attributes[$key]);
918 }
919 }
920
921 if (count($attributes) > 0)
922 {
923 $default = array_merge($default, $attributes);
924 }
925 }
926
927 $att = '';
Barry Mienydd671972010-10-04 16:33:58 +0200928
Derek Allard2067d1a2008-11-13 22:59:24 +0000929 foreach ($default as $key => $val)
930 {
931 if ($key == 'value')
932 {
Derek Jones01a9b102009-07-17 18:30:36 +0000933 $val = form_prep($val, $default['name']);
Derek Allard2067d1a2008-11-13 22:59:24 +0000934 }
935
936 $att .= $key . '="' . $val . '" ';
937 }
938
939 return $att;
940 }
941}
942
943// ------------------------------------------------------------------------
944
945/**
946 * Attributes To String
947 *
948 * Helper function used by some of the form helpers
949 *
950 * @access private
951 * @param mixed
952 * @param bool
953 * @return string
954 */
955if ( ! function_exists('_attributes_to_string'))
956{
957 function _attributes_to_string($attributes, $formtag = FALSE)
958 {
959 if (is_string($attributes) AND strlen($attributes) > 0)
960 {
961 if ($formtag == TRUE AND strpos($attributes, 'method=') === FALSE)
962 {
963 $attributes .= ' method="post"';
964 }
965
Derek Allard3241d732009-09-17 12:17:45 +0000966 if ($formtag == TRUE AND strpos($attributes, 'accept-charset=') === FALSE)
967 {
968 $attributes .= ' accept-charset="'.strtolower(config_item('charset')).'"';
969 }
970
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200971 return ' '.$attributes;
Derek Allard2067d1a2008-11-13 22:59:24 +0000972 }
Barry Mienydd671972010-10-04 16:33:58 +0200973
Derek Allard2067d1a2008-11-13 22:59:24 +0000974 if (is_object($attributes) AND count($attributes) > 0)
975 {
976 $attributes = (array)$attributes;
977 }
978
Joel Kallman79c1c462011-12-18 19:25:45 -0500979 if (is_array($attributes) AND ($formtag === TRUE OR count($attributes) > 0))
Derek Allard2067d1a2008-11-13 22:59:24 +0000980 {
Derek Allard3241d732009-09-17 12:17:45 +0000981 $atts = '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000982
Derek Allard3241d732009-09-17 12:17:45 +0000983 if ( ! isset($attributes['method']) AND $formtag === TRUE)
984 {
985 $atts .= ' method="post"';
986 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000987
Derek Allard3241d732009-09-17 12:17:45 +0000988 if ( ! isset($attributes['accept-charset']) AND $formtag === TRUE)
989 {
990 $atts .= ' accept-charset="'.strtolower(config_item('charset')).'"';
991 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000992
Derek Allard3241d732009-09-17 12:17:45 +0000993 foreach ($attributes as $key => $val)
994 {
995 $atts .= ' '.$key.'="'.$val.'"';
996 }
997
998 return $atts;
Derek Allard2067d1a2008-11-13 22:59:24 +0000999 }
1000 }
1001}
1002
1003// ------------------------------------------------------------------------
1004
1005/**
1006 * Validation Object
1007 *
1008 * Determines what the form validation class was instantiated as, fetches
1009 * the object and returns it.
1010 *
1011 * @access private
1012 * @return mixed
1013 */
1014if ( ! function_exists('_get_validation_object'))
1015{
1016 function &_get_validation_object()
1017 {
1018 $CI =& get_instance();
1019
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001020 // We set this as a variable since we're returning by reference.
Derek Allard2067d1a2008-11-13 22:59:24 +00001021 $return = FALSE;
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02001022
Greg Akerc6d918a2011-04-22 10:17:32 -05001023 if (FALSE !== ($object = $CI->load->is_loaded('form_validation')))
Derek Allard2067d1a2008-11-13 22:59:24 +00001024 {
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001025 if ( ! isset($CI->$object) OR ! is_object($CI->$object))
1026 {
1027 return $return;
1028 }
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02001029
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001030 return $CI->$object;
Derek Allard2067d1a2008-11-13 22:59:24 +00001031 }
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02001032
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001033 return $return;
Derek Allard2067d1a2008-11-13 22:59:24 +00001034 }
1035}
1036
Derek Allard2067d1a2008-11-13 22:59:24 +00001037/* End of file form_helper.php */
patwork64e35cd2011-04-08 15:25:31 +02001038/* Location: ./system/helpers/form_helper.php */