blob: ab3a12961b87d778bf7a34542b5d5efde2c1511d [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 *
Phil Sturgeon07c1ac82012-03-09 17:03:37 +00005 * An open source application development framework for PHP 5.2.4 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 {
nihaopaul0ba29f52012-03-12 16:46:58 +0800317 // If name is really an array then we'll call the function again using the array
nihaopaul10ecad52012-03-12 16:54:17 +0800318 if (is_array($name))
nihaopaulca5cabc2012-03-12 16:54:04 +0800319 {
nihaopaul0ba29f52012-03-12 16:46:58 +0800320 if ( ! isset($name['options']))
321 {
322 $name['selected'] = false;
323 }
324 if ( ! isset($name['selected']))
325 {
326 $name['selected'] = false;
327 }
328 if ( ! isset($name['extra']))
329 {
330 $name['extra'] = false;
331 }
332 return form_dropdown($name['name'], $name['options'], $name['selected'], $name['extra']);
333 }
334
Derek Allard2067d1a2008-11-13 22:59:24 +0000335 if ( ! is_array($selected))
336 {
337 $selected = array($selected);
338 }
339
340 // If no selected state was submitted we will attempt to set it automatically
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200341 if (count($selected) === 0 && isset($_POST[$name]))
Derek Allard2067d1a2008-11-13 22:59:24 +0000342 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200343 $selected = array($_POST[$name]);
Derek Allard2067d1a2008-11-13 22:59:24 +0000344 }
345
346 if ($extra != '') $extra = ' '.$extra;
347
348 $multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : '';
349
350 $form = '<select name="'.$name.'"'.$extra.$multiple.">\n";
Robin Sowell57fe4102009-03-26 18:58:46 +0000351
Derek Allard2067d1a2008-11-13 22:59:24 +0000352 foreach ($options as $key => $val)
353 {
354 $key = (string) $key;
Derek Allard2067d1a2008-11-13 22:59:24 +0000355
Derek Jones68788d52010-03-05 10:11:31 -0600356 if (is_array($val) && ! empty($val))
Derek Allard78a5fc92009-02-05 16:34:35 +0000357 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200358 $form .= '<optgroup label="'.$key."\">\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000359
Derek Allard78a5fc92009-02-05 16:34:35 +0000360 foreach ($val as $optgroup_key => $optgroup_val)
361 {
Derek Allard86a840c2009-02-05 17:31:58 +0000362 $sel = (in_array($optgroup_key, $selected)) ? ' selected="selected"' : '';
Derek Allard78a5fc92009-02-05 16:34:35 +0000363 $form .= '<option value="'.$optgroup_key.'"'.$sel.'>'.(string) $optgroup_val."</option>\n";
364 }
365
366 $form .= '</optgroup>'."\n";
367 }
368 else
369 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200370 $form .= '<option value="'.$key.'"'.(in_array($key, $selected) ? ' selected="selected"' : '').'>'.(string) $val."</option>\n";
Derek Allard78a5fc92009-02-05 16:34:35 +0000371 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000372 }
373
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200374 $form .= "</select>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000375
376 return $form;
377 }
378}
379
380// ------------------------------------------------------------------------
381
382/**
383 * Checkbox Field
384 *
385 * @access public
386 * @param mixed
387 * @param string
388 * @param bool
389 * @param string
390 * @return string
391 */
392if ( ! function_exists('form_checkbox'))
393{
394 function form_checkbox($data = '', $value = '', $checked = FALSE, $extra = '')
395 {
396 $defaults = array('type' => 'checkbox', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
397
398 if (is_array($data) AND array_key_exists('checked', $data))
399 {
400 $checked = $data['checked'];
401
402 if ($checked == FALSE)
403 {
404 unset($data['checked']);
405 }
406 else
407 {
408 $data['checked'] = 'checked';
409 }
410 }
411
412 if ($checked == TRUE)
413 {
414 $defaults['checked'] = 'checked';
415 }
416 else
417 {
418 unset($defaults['checked']);
419 }
420
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200421 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000422 }
423}
424
425// ------------------------------------------------------------------------
426
427/**
428 * Radio Button
429 *
430 * @access public
431 * @param mixed
432 * @param string
433 * @param bool
434 * @param string
435 * @return string
436 */
437if ( ! function_exists('form_radio'))
438{
439 function form_radio($data = '', $value = '', $checked = FALSE, $extra = '')
440 {
441 if ( ! is_array($data))
Barry Mienydd671972010-10-04 16:33:58 +0200442 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000443 $data = array('name' => $data);
444 }
445
446 $data['type'] = 'radio';
447 return form_checkbox($data, $value, $checked, $extra);
448 }
449}
450
451// ------------------------------------------------------------------------
452
453/**
454 * Submit Button
455 *
456 * @access public
457 * @param mixed
458 * @param string
459 * @param string
460 * @return string
461 */
462if ( ! function_exists('form_submit'))
Barry Mienydd671972010-10-04 16:33:58 +0200463{
Derek Allard2067d1a2008-11-13 22:59:24 +0000464 function form_submit($data = '', $value = '', $extra = '')
465 {
466 $defaults = array('type' => 'submit', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200467 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000468 }
469}
470
471// ------------------------------------------------------------------------
472
473/**
474 * Reset Button
475 *
476 * @access public
477 * @param mixed
478 * @param string
479 * @param string
480 * @return string
481 */
482if ( ! function_exists('form_reset'))
483{
484 function form_reset($data = '', $value = '', $extra = '')
485 {
486 $defaults = array('type' => 'reset', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200487 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000488 }
489}
490
491// ------------------------------------------------------------------------
492
493/**
494 * Form Button
495 *
496 * @access public
497 * @param mixed
498 * @param string
499 * @param string
500 * @return string
501 */
502if ( ! function_exists('form_button'))
503{
504 function form_button($data = '', $content = '', $extra = '')
505 {
Derek Allard904094a2009-02-10 14:00:34 +0000506 $defaults = array('name' => (( ! is_array($data)) ? $data : ''), 'type' => 'button');
Derek Allard2067d1a2008-11-13 22:59:24 +0000507 if ( is_array($data) AND isset($data['content']))
508 {
509 $content = $data['content'];
510 unset($data['content']); // content is not an attribute
511 }
512
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200513 return '<button '._parse_form_attributes($data, $defaults).$extra.'>'.$content."</button>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000514 }
515}
516
517// ------------------------------------------------------------------------
518
519/**
520 * Form Label Tag
521 *
522 * @access public
523 * @param string The text to appear onscreen
524 * @param string The id the label applies to
525 * @param string Additional attributes
526 * @return string
527 */
528if ( ! function_exists('form_label'))
529{
530 function form_label($label_text = '', $id = '', $attributes = array())
531 {
532
533 $label = '<label';
534
535 if ($id != '')
536 {
Barry Mienydd671972010-10-04 16:33:58 +0200537 $label .= " for=\"$id\"";
Derek Allard2067d1a2008-11-13 22:59:24 +0000538 }
539
540 if (is_array($attributes) AND count($attributes) > 0)
541 {
542 foreach ($attributes as $key => $val)
543 {
544 $label .= ' '.$key.'="'.$val.'"';
545 }
546 }
547
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200548 return $label .= ">$label_text</label>";
Derek Allard2067d1a2008-11-13 22:59:24 +0000549 }
550}
551
552// ------------------------------------------------------------------------
553/**
554 * Fieldset Tag
555 *
Derek Jones37f4b9c2011-07-01 17:56:50 -0500556 * Used to produce <fieldset><legend>text</legend>. To close fieldset
Derek Allard2067d1a2008-11-13 22:59:24 +0000557 * use form_fieldset_close()
558 *
559 * @access public
560 * @param string The legend text
561 * @param string Additional attributes
562 * @return string
563 */
564if ( ! function_exists('form_fieldset'))
565{
566 function form_fieldset($legend_text = '', $attributes = array())
567 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200568 $fieldset = '<fieldset'._attributes_to_string($attributes, FALSE).">\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000569 if ($legend_text != '')
570 {
571 $fieldset .= "<legend>$legend_text</legend>\n";
572 }
573
574 return $fieldset;
575 }
576}
577
578// ------------------------------------------------------------------------
579
580/**
581 * Fieldset Close Tag
582 *
583 * @access public
584 * @param string
585 * @return string
586 */
587if ( ! function_exists('form_fieldset_close'))
588{
589 function form_fieldset_close($extra = '')
590 {
591 return "</fieldset>".$extra;
592 }
593}
594
595// ------------------------------------------------------------------------
596
597/**
598 * Form Close Tag
599 *
600 * @access public
601 * @param string
602 * @return string
603 */
604if ( ! function_exists('form_close'))
605{
606 function form_close($extra = '')
607 {
608 return "</form>".$extra;
609 }
610}
611
612// ------------------------------------------------------------------------
613
614/**
615 * Form Prep
616 *
617 * Formats text so that it can be safely placed in a form field in the event it has HTML tags.
618 *
619 * @access public
620 * @param string
621 * @return string
622 */
623if ( ! function_exists('form_prep'))
624{
Derek Jones01a9b102009-07-17 18:30:36 +0000625 function form_prep($str = '', $field_name = '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000626 {
Derek Jones01a9b102009-07-17 18:30:36 +0000627 static $prepped_fields = array();
Barry Mienydd671972010-10-04 16:33:58 +0200628
Derek Allard2067d1a2008-11-13 22:59:24 +0000629 // if the field name is an array we do this recursively
630 if (is_array($str))
631 {
632 foreach ($str as $key => $val)
633 {
634 $str[$key] = form_prep($val);
635 }
636
637 return $str;
638 }
639
640 if ($str === '')
641 {
642 return '';
643 }
644
Derek Jones3eb9fac2009-07-17 20:25:13 +0000645 // we've already prepped a field with this name
646 // @todo need to figure out a way to namespace this so
647 // that we know the *exact* field and not just one with
648 // the same name
Derek Jones01a9b102009-07-17 18:30:36 +0000649 if (isset($prepped_fields[$field_name]))
650 {
Derek Jones3eb9fac2009-07-17 20:25:13 +0000651 return $str;
Derek Jones01a9b102009-07-17 18:30:36 +0000652 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000653
Derek Jones01a9b102009-07-17 18:30:36 +0000654 if ($field_name != '')
655 {
Derek Jones68788d52010-03-05 10:11:31 -0600656 $prepped_fields[$field_name] = $field_name;
Derek Jones01a9b102009-07-17 18:30:36 +0000657 }
Barry Mienydd671972010-10-04 16:33:58 +0200658
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200659 return html_escape($str);
Derek Allard2067d1a2008-11-13 22:59:24 +0000660 }
661}
662
663// ------------------------------------------------------------------------
664
665/**
666 * Form Value
667 *
668 * Grabs a value from the POST array for the specified field so you can
Derek Jones37f4b9c2011-07-01 17:56:50 -0500669 * re-populate an input field or textarea. If Form Validation
Derek Allard2067d1a2008-11-13 22:59:24 +0000670 * is active it retrieves the info from the validation class
671 *
672 * @access public
673 * @param string
674 * @return mixed
675 */
676if ( ! function_exists('set_value'))
677{
678 function set_value($field = '', $default = '')
679 {
680 if (FALSE === ($OBJ =& _get_validation_object()))
681 {
682 if ( ! isset($_POST[$field]))
683 {
684 return $default;
685 }
686
Derek Jones01a9b102009-07-17 18:30:36 +0000687 return form_prep($_POST[$field], $field);
Derek Allard2067d1a2008-11-13 22:59:24 +0000688 }
689
Derek Jones01a9b102009-07-17 18:30:36 +0000690 return form_prep($OBJ->set_value($field, $default), $field);
Derek Allard2067d1a2008-11-13 22:59:24 +0000691 }
692}
693
694// ------------------------------------------------------------------------
695
696/**
697 * Set Select
698 *
699 * Let's you set the selected value of a <select> menu via data in the POST array.
700 * If Form Validation is active it retrieves the info from the validation class
701 *
702 * @access public
703 * @param string
704 * @param string
705 * @param bool
706 * @return string
707 */
708if ( ! function_exists('set_select'))
709{
710 function set_select($field = '', $value = '', $default = FALSE)
711 {
712 $OBJ =& _get_validation_object();
713
714 if ($OBJ === FALSE)
715 {
716 if ( ! isset($_POST[$field]))
717 {
Rick Ellis28e5c8f2009-03-09 22:36:48 +0000718 if (count($_POST) === 0 AND $default == TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000719 {
720 return ' selected="selected"';
721 }
722 return '';
723 }
724
725 $field = $_POST[$field];
726
727 if (is_array($field))
728 {
729 if ( ! in_array($value, $field))
730 {
731 return '';
732 }
733 }
734 else
735 {
736 if (($field == '' OR $value == '') OR ($field != $value))
737 {
738 return '';
739 }
740 }
741
742 return ' selected="selected"';
743 }
744
745 return $OBJ->set_select($field, $value, $default);
746 }
747}
748
749// ------------------------------------------------------------------------
750
751/**
752 * Set Checkbox
753 *
754 * Let's you set the selected value of a checkbox via the value in the POST array.
755 * If Form Validation is active it retrieves the info from the validation class
756 *
757 * @access public
758 * @param string
759 * @param string
760 * @param bool
761 * @return string
762 */
763if ( ! function_exists('set_checkbox'))
764{
765 function set_checkbox($field = '', $value = '', $default = FALSE)
766 {
767 $OBJ =& _get_validation_object();
768
769 if ($OBJ === FALSE)
Barry Mienydd671972010-10-04 16:33:58 +0200770 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000771 if ( ! isset($_POST[$field]))
772 {
Rick Ellis28e5c8f2009-03-09 22:36:48 +0000773 if (count($_POST) === 0 AND $default == TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000774 {
775 return ' checked="checked"';
776 }
777 return '';
778 }
779
780 $field = $_POST[$field];
Barry Mienydd671972010-10-04 16:33:58 +0200781
Derek Allard2067d1a2008-11-13 22:59:24 +0000782 if (is_array($field))
783 {
784 if ( ! in_array($value, $field))
785 {
786 return '';
787 }
788 }
789 else
790 {
791 if (($field == '' OR $value == '') OR ($field != $value))
792 {
793 return '';
794 }
795 }
796
797 return ' checked="checked"';
798 }
799
800 return $OBJ->set_checkbox($field, $value, $default);
801 }
802}
803
804// ------------------------------------------------------------------------
805
806/**
807 * Set Radio
808 *
809 * Let's you set the selected value of a radio field via info in the POST array.
810 * If Form Validation is active it retrieves the info from the validation class
811 *
812 * @access public
813 * @param string
814 * @param string
815 * @param bool
816 * @return string
817 */
818if ( ! function_exists('set_radio'))
819{
820 function set_radio($field = '', $value = '', $default = FALSE)
821 {
822 $OBJ =& _get_validation_object();
823
824 if ($OBJ === FALSE)
825 {
826 if ( ! isset($_POST[$field]))
827 {
Rick Ellis28e5c8f2009-03-09 22:36:48 +0000828 if (count($_POST) === 0 AND $default == TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000829 {
830 return ' checked="checked"';
831 }
832 return '';
833 }
834
835 $field = $_POST[$field];
Barry Mienydd671972010-10-04 16:33:58 +0200836
Derek Allard2067d1a2008-11-13 22:59:24 +0000837 if (is_array($field))
838 {
839 if ( ! in_array($value, $field))
840 {
841 return '';
842 }
843 }
844 else
845 {
846 if (($field == '' OR $value == '') OR ($field != $value))
847 {
848 return '';
849 }
850 }
851
852 return ' checked="checked"';
853 }
854
855 return $OBJ->set_radio($field, $value, $default);
856 }
857}
858
859// ------------------------------------------------------------------------
860
861/**
862 * Form Error
863 *
Derek Jones37f4b9c2011-07-01 17:56:50 -0500864 * Returns the error for a specific form field. This is a helper for the
Derek Allard2067d1a2008-11-13 22:59:24 +0000865 * form validation class.
866 *
867 * @access public
868 * @param string
869 * @param string
870 * @param string
871 * @return string
872 */
873if ( ! function_exists('form_error'))
874{
875 function form_error($field = '', $prefix = '', $suffix = '')
876 {
877 if (FALSE === ($OBJ =& _get_validation_object()))
878 {
879 return '';
880 }
881
882 return $OBJ->error($field, $prefix, $suffix);
883 }
884}
885
886// ------------------------------------------------------------------------
887
888/**
889 * Validation Error String
890 *
Derek Jones37f4b9c2011-07-01 17:56:50 -0500891 * Returns all the errors associated with a form submission. This is a helper
Derek Allard2067d1a2008-11-13 22:59:24 +0000892 * function for the form validation class.
893 *
894 * @access public
895 * @param string
896 * @param string
897 * @return string
898 */
899if ( ! function_exists('validation_errors'))
900{
901 function validation_errors($prefix = '', $suffix = '')
902 {
903 if (FALSE === ($OBJ =& _get_validation_object()))
Greg Akerc83bea62011-04-23 12:12:57 -0500904 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000905 return '';
906 }
907
908 return $OBJ->error_string($prefix, $suffix);
909 }
910}
911
912// ------------------------------------------------------------------------
913
914/**
915 * Parse the form attributes
916 *
917 * Helper function used by some of the form helpers
918 *
919 * @access private
920 * @param array
921 * @param array
922 * @return string
923 */
924if ( ! function_exists('_parse_form_attributes'))
925{
926 function _parse_form_attributes($attributes, $default)
927 {
928 if (is_array($attributes))
929 {
930 foreach ($default as $key => $val)
931 {
932 if (isset($attributes[$key]))
933 {
934 $default[$key] = $attributes[$key];
935 unset($attributes[$key]);
936 }
937 }
938
939 if (count($attributes) > 0)
940 {
941 $default = array_merge($default, $attributes);
942 }
943 }
944
945 $att = '';
Barry Mienydd671972010-10-04 16:33:58 +0200946
Derek Allard2067d1a2008-11-13 22:59:24 +0000947 foreach ($default as $key => $val)
948 {
949 if ($key == 'value')
950 {
Derek Jones01a9b102009-07-17 18:30:36 +0000951 $val = form_prep($val, $default['name']);
Derek Allard2067d1a2008-11-13 22:59:24 +0000952 }
953
954 $att .= $key . '="' . $val . '" ';
955 }
956
957 return $att;
958 }
959}
960
961// ------------------------------------------------------------------------
962
963/**
964 * Attributes To String
965 *
966 * Helper function used by some of the form helpers
967 *
968 * @access private
969 * @param mixed
970 * @param bool
971 * @return string
972 */
973if ( ! function_exists('_attributes_to_string'))
974{
975 function _attributes_to_string($attributes, $formtag = FALSE)
976 {
977 if (is_string($attributes) AND strlen($attributes) > 0)
978 {
979 if ($formtag == TRUE AND strpos($attributes, 'method=') === FALSE)
980 {
981 $attributes .= ' method="post"';
982 }
983
Derek Allard3241d732009-09-17 12:17:45 +0000984 if ($formtag == TRUE AND strpos($attributes, 'accept-charset=') === FALSE)
985 {
986 $attributes .= ' accept-charset="'.strtolower(config_item('charset')).'"';
987 }
988
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200989 return ' '.$attributes;
Derek Allard2067d1a2008-11-13 22:59:24 +0000990 }
Barry Mienydd671972010-10-04 16:33:58 +0200991
Derek Allard2067d1a2008-11-13 22:59:24 +0000992 if (is_object($attributes) AND count($attributes) > 0)
993 {
994 $attributes = (array)$attributes;
995 }
996
Joel Kallman79c1c462011-12-18 19:25:45 -0500997 if (is_array($attributes) AND ($formtag === TRUE OR count($attributes) > 0))
Derek Allard2067d1a2008-11-13 22:59:24 +0000998 {
Derek Allard3241d732009-09-17 12:17:45 +0000999 $atts = '';
Derek Allard2067d1a2008-11-13 22:59:24 +00001000
Derek Allard3241d732009-09-17 12:17:45 +00001001 if ( ! isset($attributes['method']) AND $formtag === TRUE)
1002 {
1003 $atts .= ' method="post"';
1004 }
Derek Allard2067d1a2008-11-13 22:59:24 +00001005
Derek Allard3241d732009-09-17 12:17:45 +00001006 if ( ! isset($attributes['accept-charset']) AND $formtag === TRUE)
1007 {
1008 $atts .= ' accept-charset="'.strtolower(config_item('charset')).'"';
1009 }
Derek Allard2067d1a2008-11-13 22:59:24 +00001010
Derek Allard3241d732009-09-17 12:17:45 +00001011 foreach ($attributes as $key => $val)
1012 {
1013 $atts .= ' '.$key.'="'.$val.'"';
1014 }
1015
1016 return $atts;
Derek Allard2067d1a2008-11-13 22:59:24 +00001017 }
1018 }
1019}
1020
1021// ------------------------------------------------------------------------
1022
1023/**
1024 * Validation Object
1025 *
1026 * Determines what the form validation class was instantiated as, fetches
1027 * the object and returns it.
1028 *
1029 * @access private
1030 * @return mixed
1031 */
1032if ( ! function_exists('_get_validation_object'))
1033{
1034 function &_get_validation_object()
1035 {
1036 $CI =& get_instance();
1037
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001038 // We set this as a variable since we're returning by reference.
Derek Allard2067d1a2008-11-13 22:59:24 +00001039 $return = FALSE;
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02001040
Greg Akerc6d918a2011-04-22 10:17:32 -05001041 if (FALSE !== ($object = $CI->load->is_loaded('form_validation')))
Derek Allard2067d1a2008-11-13 22:59:24 +00001042 {
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001043 if ( ! isset($CI->$object) OR ! is_object($CI->$object))
1044 {
1045 return $return;
1046 }
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02001047
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001048 return $CI->$object;
Derek Allard2067d1a2008-11-13 22:59:24 +00001049 }
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02001050
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001051 return $return;
Derek Allard2067d1a2008-11-13 22:59:24 +00001052 }
1053}
1054
Derek Allard2067d1a2008-11-13 22:59:24 +00001055/* End of file form_helper.php */
patwork64e35cd2011-04-08 15:25:31 +02001056/* Location: ./system/helpers/form_helper.php */