blob: 37337d9753e8559a4f45a4410ec82cebc4bd0d62 [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
nihaopaulb6a84432012-03-12 17:06:42 +0800318 if (is_array($name) && isset($name['name']))
nihaopaulca5cabc2012-03-12 16:54:04 +0800319 {
nihaopaul8abb67c2012-03-12 17:00:32 +0800320
nihaopaul0ba29f52012-03-12 16:46:58 +0800321 if ( ! isset($name['options']))
322 {
nihaopaul08631572012-03-12 17:18:57 +0800323 $name['options'] = array();
nihaopaul8abb67c2012-03-12 17:00:32 +0800324 }
325
nihaopaul0ba29f52012-03-12 16:46:58 +0800326 if ( ! isset($name['selected']))
327 {
nihaopaul08631572012-03-12 17:18:57 +0800328 $name['selected'] = array();
nihaopaul0ba29f52012-03-12 16:46:58 +0800329 }
nihaopaul8abb67c2012-03-12 17:00:32 +0800330
nihaopaul0ba29f52012-03-12 16:46:58 +0800331 if ( ! isset($name['extra']))
332 {
nihaopaul08631572012-03-12 17:18:57 +0800333 $name['extra'] = '';
nihaopaul0ba29f52012-03-12 16:46:58 +0800334 }
nihaopaul8abb67c2012-03-12 17:00:32 +0800335
nihaopaul0ba29f52012-03-12 16:46:58 +0800336 return form_dropdown($name['name'], $name['options'], $name['selected'], $name['extra']);
337 }
338
Derek Allard2067d1a2008-11-13 22:59:24 +0000339 if ( ! is_array($selected))
340 {
341 $selected = array($selected);
342 }
343
344 // If no selected state was submitted we will attempt to set it automatically
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200345 if (count($selected) === 0 && isset($_POST[$name]))
Derek Allard2067d1a2008-11-13 22:59:24 +0000346 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200347 $selected = array($_POST[$name]);
Derek Allard2067d1a2008-11-13 22:59:24 +0000348 }
349
350 if ($extra != '') $extra = ' '.$extra;
351
352 $multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : '';
353
354 $form = '<select name="'.$name.'"'.$extra.$multiple.">\n";
Robin Sowell57fe4102009-03-26 18:58:46 +0000355
Derek Allard2067d1a2008-11-13 22:59:24 +0000356 foreach ($options as $key => $val)
357 {
358 $key = (string) $key;
Derek Allard2067d1a2008-11-13 22:59:24 +0000359
Derek Jones68788d52010-03-05 10:11:31 -0600360 if (is_array($val) && ! empty($val))
Derek Allard78a5fc92009-02-05 16:34:35 +0000361 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200362 $form .= '<optgroup label="'.$key."\">\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000363
Derek Allard78a5fc92009-02-05 16:34:35 +0000364 foreach ($val as $optgroup_key => $optgroup_val)
365 {
Derek Allard86a840c2009-02-05 17:31:58 +0000366 $sel = (in_array($optgroup_key, $selected)) ? ' selected="selected"' : '';
Derek Allard78a5fc92009-02-05 16:34:35 +0000367 $form .= '<option value="'.$optgroup_key.'"'.$sel.'>'.(string) $optgroup_val."</option>\n";
368 }
369
370 $form .= '</optgroup>'."\n";
371 }
372 else
373 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200374 $form .= '<option value="'.$key.'"'.(in_array($key, $selected) ? ' selected="selected"' : '').'>'.(string) $val."</option>\n";
Derek Allard78a5fc92009-02-05 16:34:35 +0000375 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000376 }
377
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200378 $form .= "</select>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000379
380 return $form;
381 }
382}
383
384// ------------------------------------------------------------------------
385
386/**
387 * Checkbox Field
388 *
389 * @access public
390 * @param mixed
391 * @param string
392 * @param bool
393 * @param string
394 * @return string
395 */
396if ( ! function_exists('form_checkbox'))
397{
398 function form_checkbox($data = '', $value = '', $checked = FALSE, $extra = '')
399 {
400 $defaults = array('type' => 'checkbox', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
401
402 if (is_array($data) AND array_key_exists('checked', $data))
403 {
404 $checked = $data['checked'];
405
406 if ($checked == FALSE)
407 {
408 unset($data['checked']);
409 }
410 else
411 {
412 $data['checked'] = 'checked';
413 }
414 }
415
416 if ($checked == TRUE)
417 {
418 $defaults['checked'] = 'checked';
419 }
420 else
421 {
422 unset($defaults['checked']);
423 }
424
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200425 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000426 }
427}
428
429// ------------------------------------------------------------------------
430
431/**
432 * Radio Button
433 *
434 * @access public
435 * @param mixed
436 * @param string
437 * @param bool
438 * @param string
439 * @return string
440 */
441if ( ! function_exists('form_radio'))
442{
443 function form_radio($data = '', $value = '', $checked = FALSE, $extra = '')
444 {
445 if ( ! is_array($data))
Barry Mienydd671972010-10-04 16:33:58 +0200446 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000447 $data = array('name' => $data);
448 }
449
450 $data['type'] = 'radio';
451 return form_checkbox($data, $value, $checked, $extra);
452 }
453}
454
455// ------------------------------------------------------------------------
456
457/**
458 * Submit Button
459 *
460 * @access public
461 * @param mixed
462 * @param string
463 * @param string
464 * @return string
465 */
466if ( ! function_exists('form_submit'))
Barry Mienydd671972010-10-04 16:33:58 +0200467{
Derek Allard2067d1a2008-11-13 22:59:24 +0000468 function form_submit($data = '', $value = '', $extra = '')
469 {
470 $defaults = array('type' => 'submit', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200471 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000472 }
473}
474
475// ------------------------------------------------------------------------
476
477/**
478 * Reset Button
479 *
480 * @access public
481 * @param mixed
482 * @param string
483 * @param string
484 * @return string
485 */
486if ( ! function_exists('form_reset'))
487{
488 function form_reset($data = '', $value = '', $extra = '')
489 {
490 $defaults = array('type' => 'reset', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200491 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000492 }
493}
494
495// ------------------------------------------------------------------------
496
497/**
498 * Form Button
499 *
500 * @access public
501 * @param mixed
502 * @param string
503 * @param string
504 * @return string
505 */
506if ( ! function_exists('form_button'))
507{
508 function form_button($data = '', $content = '', $extra = '')
509 {
Derek Allard904094a2009-02-10 14:00:34 +0000510 $defaults = array('name' => (( ! is_array($data)) ? $data : ''), 'type' => 'button');
Derek Allard2067d1a2008-11-13 22:59:24 +0000511 if ( is_array($data) AND isset($data['content']))
512 {
513 $content = $data['content'];
514 unset($data['content']); // content is not an attribute
515 }
516
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200517 return '<button '._parse_form_attributes($data, $defaults).$extra.'>'.$content."</button>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000518 }
519}
520
521// ------------------------------------------------------------------------
522
523/**
524 * Form Label Tag
525 *
526 * @access public
527 * @param string The text to appear onscreen
528 * @param string The id the label applies to
529 * @param string Additional attributes
530 * @return string
531 */
532if ( ! function_exists('form_label'))
533{
534 function form_label($label_text = '', $id = '', $attributes = array())
535 {
536
537 $label = '<label';
538
539 if ($id != '')
540 {
Barry Mienydd671972010-10-04 16:33:58 +0200541 $label .= " for=\"$id\"";
Derek Allard2067d1a2008-11-13 22:59:24 +0000542 }
543
544 if (is_array($attributes) AND count($attributes) > 0)
545 {
546 foreach ($attributes as $key => $val)
547 {
548 $label .= ' '.$key.'="'.$val.'"';
549 }
550 }
551
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200552 return $label .= ">$label_text</label>";
Derek Allard2067d1a2008-11-13 22:59:24 +0000553 }
554}
555
556// ------------------------------------------------------------------------
557/**
558 * Fieldset Tag
559 *
Derek Jones37f4b9c2011-07-01 17:56:50 -0500560 * Used to produce <fieldset><legend>text</legend>. To close fieldset
Derek Allard2067d1a2008-11-13 22:59:24 +0000561 * use form_fieldset_close()
562 *
563 * @access public
564 * @param string The legend text
565 * @param string Additional attributes
566 * @return string
567 */
568if ( ! function_exists('form_fieldset'))
569{
570 function form_fieldset($legend_text = '', $attributes = array())
571 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200572 $fieldset = '<fieldset'._attributes_to_string($attributes, FALSE).">\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000573 if ($legend_text != '')
574 {
575 $fieldset .= "<legend>$legend_text</legend>\n";
576 }
577
578 return $fieldset;
579 }
580}
581
582// ------------------------------------------------------------------------
583
584/**
585 * Fieldset Close Tag
586 *
587 * @access public
588 * @param string
589 * @return string
590 */
591if ( ! function_exists('form_fieldset_close'))
592{
593 function form_fieldset_close($extra = '')
594 {
595 return "</fieldset>".$extra;
596 }
597}
598
599// ------------------------------------------------------------------------
600
601/**
602 * Form Close Tag
603 *
604 * @access public
605 * @param string
606 * @return string
607 */
608if ( ! function_exists('form_close'))
609{
610 function form_close($extra = '')
611 {
612 return "</form>".$extra;
613 }
614}
615
616// ------------------------------------------------------------------------
617
618/**
619 * Form Prep
620 *
621 * Formats text so that it can be safely placed in a form field in the event it has HTML tags.
622 *
623 * @access public
624 * @param string
625 * @return string
626 */
627if ( ! function_exists('form_prep'))
628{
Derek Jones01a9b102009-07-17 18:30:36 +0000629 function form_prep($str = '', $field_name = '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000630 {
Derek Jones01a9b102009-07-17 18:30:36 +0000631 static $prepped_fields = array();
Barry Mienydd671972010-10-04 16:33:58 +0200632
Derek Allard2067d1a2008-11-13 22:59:24 +0000633 // if the field name is an array we do this recursively
634 if (is_array($str))
635 {
636 foreach ($str as $key => $val)
637 {
638 $str[$key] = form_prep($val);
639 }
640
641 return $str;
642 }
643
644 if ($str === '')
645 {
646 return '';
647 }
648
Derek Jones3eb9fac2009-07-17 20:25:13 +0000649 // we've already prepped a field with this name
650 // @todo need to figure out a way to namespace this so
651 // that we know the *exact* field and not just one with
652 // the same name
Derek Jones01a9b102009-07-17 18:30:36 +0000653 if (isset($prepped_fields[$field_name]))
654 {
Derek Jones3eb9fac2009-07-17 20:25:13 +0000655 return $str;
Derek Jones01a9b102009-07-17 18:30:36 +0000656 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000657
Derek Jones01a9b102009-07-17 18:30:36 +0000658 if ($field_name != '')
659 {
Derek Jones68788d52010-03-05 10:11:31 -0600660 $prepped_fields[$field_name] = $field_name;
Derek Jones01a9b102009-07-17 18:30:36 +0000661 }
Barry Mienydd671972010-10-04 16:33:58 +0200662
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200663 return html_escape($str);
Derek Allard2067d1a2008-11-13 22:59:24 +0000664 }
665}
666
667// ------------------------------------------------------------------------
668
669/**
670 * Form Value
671 *
672 * Grabs a value from the POST array for the specified field so you can
Derek Jones37f4b9c2011-07-01 17:56:50 -0500673 * re-populate an input field or textarea. If Form Validation
Derek Allard2067d1a2008-11-13 22:59:24 +0000674 * is active it retrieves the info from the validation class
675 *
676 * @access public
677 * @param string
678 * @return mixed
679 */
680if ( ! function_exists('set_value'))
681{
682 function set_value($field = '', $default = '')
683 {
684 if (FALSE === ($OBJ =& _get_validation_object()))
685 {
686 if ( ! isset($_POST[$field]))
687 {
688 return $default;
689 }
690
Derek Jones01a9b102009-07-17 18:30:36 +0000691 return form_prep($_POST[$field], $field);
Derek Allard2067d1a2008-11-13 22:59:24 +0000692 }
693
Derek Jones01a9b102009-07-17 18:30:36 +0000694 return form_prep($OBJ->set_value($field, $default), $field);
Derek Allard2067d1a2008-11-13 22:59:24 +0000695 }
696}
697
698// ------------------------------------------------------------------------
699
700/**
701 * Set Select
702 *
703 * Let's you set the selected value of a <select> menu via data in the POST array.
704 * If Form Validation is active it retrieves the info from the validation class
705 *
706 * @access public
707 * @param string
708 * @param string
709 * @param bool
710 * @return string
711 */
712if ( ! function_exists('set_select'))
713{
714 function set_select($field = '', $value = '', $default = FALSE)
715 {
716 $OBJ =& _get_validation_object();
717
718 if ($OBJ === FALSE)
719 {
720 if ( ! isset($_POST[$field]))
721 {
Rick Ellis28e5c8f2009-03-09 22:36:48 +0000722 if (count($_POST) === 0 AND $default == TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000723 {
724 return ' selected="selected"';
725 }
726 return '';
727 }
728
729 $field = $_POST[$field];
730
731 if (is_array($field))
732 {
733 if ( ! in_array($value, $field))
734 {
735 return '';
736 }
737 }
738 else
739 {
740 if (($field == '' OR $value == '') OR ($field != $value))
741 {
742 return '';
743 }
744 }
745
746 return ' selected="selected"';
747 }
748
749 return $OBJ->set_select($field, $value, $default);
750 }
751}
752
753// ------------------------------------------------------------------------
754
755/**
756 * Set Checkbox
757 *
758 * Let's you set the selected value of a checkbox via the value in the POST array.
759 * If Form Validation is active it retrieves the info from the validation class
760 *
761 * @access public
762 * @param string
763 * @param string
764 * @param bool
765 * @return string
766 */
767if ( ! function_exists('set_checkbox'))
768{
769 function set_checkbox($field = '', $value = '', $default = FALSE)
770 {
771 $OBJ =& _get_validation_object();
772
773 if ($OBJ === FALSE)
Barry Mienydd671972010-10-04 16:33:58 +0200774 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000775 if ( ! isset($_POST[$field]))
776 {
Rick Ellis28e5c8f2009-03-09 22:36:48 +0000777 if (count($_POST) === 0 AND $default == TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000778 {
779 return ' checked="checked"';
780 }
781 return '';
782 }
783
784 $field = $_POST[$field];
Barry Mienydd671972010-10-04 16:33:58 +0200785
Derek Allard2067d1a2008-11-13 22:59:24 +0000786 if (is_array($field))
787 {
788 if ( ! in_array($value, $field))
789 {
790 return '';
791 }
792 }
793 else
794 {
795 if (($field == '' OR $value == '') OR ($field != $value))
796 {
797 return '';
798 }
799 }
800
801 return ' checked="checked"';
802 }
803
804 return $OBJ->set_checkbox($field, $value, $default);
805 }
806}
807
808// ------------------------------------------------------------------------
809
810/**
811 * Set Radio
812 *
813 * Let's you set the selected value of a radio field via info in the POST array.
814 * If Form Validation is active it retrieves the info from the validation class
815 *
816 * @access public
817 * @param string
818 * @param string
819 * @param bool
820 * @return string
821 */
822if ( ! function_exists('set_radio'))
823{
824 function set_radio($field = '', $value = '', $default = FALSE)
825 {
826 $OBJ =& _get_validation_object();
827
828 if ($OBJ === FALSE)
829 {
830 if ( ! isset($_POST[$field]))
831 {
Rick Ellis28e5c8f2009-03-09 22:36:48 +0000832 if (count($_POST) === 0 AND $default == TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000833 {
834 return ' checked="checked"';
835 }
836 return '';
837 }
838
839 $field = $_POST[$field];
Barry Mienydd671972010-10-04 16:33:58 +0200840
Derek Allard2067d1a2008-11-13 22:59:24 +0000841 if (is_array($field))
842 {
843 if ( ! in_array($value, $field))
844 {
845 return '';
846 }
847 }
848 else
849 {
850 if (($field == '' OR $value == '') OR ($field != $value))
851 {
852 return '';
853 }
854 }
855
856 return ' checked="checked"';
857 }
858
859 return $OBJ->set_radio($field, $value, $default);
860 }
861}
862
863// ------------------------------------------------------------------------
864
865/**
866 * Form Error
867 *
Derek Jones37f4b9c2011-07-01 17:56:50 -0500868 * Returns the error for a specific form field. This is a helper for the
Derek Allard2067d1a2008-11-13 22:59:24 +0000869 * form validation class.
870 *
871 * @access public
872 * @param string
873 * @param string
874 * @param string
875 * @return string
876 */
877if ( ! function_exists('form_error'))
878{
879 function form_error($field = '', $prefix = '', $suffix = '')
880 {
881 if (FALSE === ($OBJ =& _get_validation_object()))
882 {
883 return '';
884 }
885
886 return $OBJ->error($field, $prefix, $suffix);
887 }
888}
889
890// ------------------------------------------------------------------------
891
892/**
893 * Validation Error String
894 *
Derek Jones37f4b9c2011-07-01 17:56:50 -0500895 * Returns all the errors associated with a form submission. This is a helper
Derek Allard2067d1a2008-11-13 22:59:24 +0000896 * function for the form validation class.
897 *
898 * @access public
899 * @param string
900 * @param string
901 * @return string
902 */
903if ( ! function_exists('validation_errors'))
904{
905 function validation_errors($prefix = '', $suffix = '')
906 {
907 if (FALSE === ($OBJ =& _get_validation_object()))
Greg Akerc83bea62011-04-23 12:12:57 -0500908 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000909 return '';
910 }
911
912 return $OBJ->error_string($prefix, $suffix);
913 }
914}
915
916// ------------------------------------------------------------------------
917
918/**
919 * Parse the form attributes
920 *
921 * Helper function used by some of the form helpers
922 *
923 * @access private
924 * @param array
925 * @param array
926 * @return string
927 */
928if ( ! function_exists('_parse_form_attributes'))
929{
930 function _parse_form_attributes($attributes, $default)
931 {
932 if (is_array($attributes))
933 {
934 foreach ($default as $key => $val)
935 {
936 if (isset($attributes[$key]))
937 {
938 $default[$key] = $attributes[$key];
939 unset($attributes[$key]);
940 }
941 }
942
943 if (count($attributes) > 0)
944 {
945 $default = array_merge($default, $attributes);
946 }
947 }
948
949 $att = '';
Barry Mienydd671972010-10-04 16:33:58 +0200950
Derek Allard2067d1a2008-11-13 22:59:24 +0000951 foreach ($default as $key => $val)
952 {
953 if ($key == 'value')
954 {
Derek Jones01a9b102009-07-17 18:30:36 +0000955 $val = form_prep($val, $default['name']);
Derek Allard2067d1a2008-11-13 22:59:24 +0000956 }
957
958 $att .= $key . '="' . $val . '" ';
959 }
960
961 return $att;
962 }
963}
964
965// ------------------------------------------------------------------------
966
967/**
968 * Attributes To String
969 *
970 * Helper function used by some of the form helpers
971 *
972 * @access private
973 * @param mixed
974 * @param bool
975 * @return string
976 */
977if ( ! function_exists('_attributes_to_string'))
978{
979 function _attributes_to_string($attributes, $formtag = FALSE)
980 {
981 if (is_string($attributes) AND strlen($attributes) > 0)
982 {
983 if ($formtag == TRUE AND strpos($attributes, 'method=') === FALSE)
984 {
985 $attributes .= ' method="post"';
986 }
987
Derek Allard3241d732009-09-17 12:17:45 +0000988 if ($formtag == TRUE AND strpos($attributes, 'accept-charset=') === FALSE)
989 {
990 $attributes .= ' accept-charset="'.strtolower(config_item('charset')).'"';
991 }
992
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200993 return ' '.$attributes;
Derek Allard2067d1a2008-11-13 22:59:24 +0000994 }
Barry Mienydd671972010-10-04 16:33:58 +0200995
Derek Allard2067d1a2008-11-13 22:59:24 +0000996 if (is_object($attributes) AND count($attributes) > 0)
997 {
998 $attributes = (array)$attributes;
999 }
1000
Joel Kallman79c1c462011-12-18 19:25:45 -05001001 if (is_array($attributes) AND ($formtag === TRUE OR count($attributes) > 0))
Derek Allard2067d1a2008-11-13 22:59:24 +00001002 {
Derek Allard3241d732009-09-17 12:17:45 +00001003 $atts = '';
Derek Allard2067d1a2008-11-13 22:59:24 +00001004
Derek Allard3241d732009-09-17 12:17:45 +00001005 if ( ! isset($attributes['method']) AND $formtag === TRUE)
1006 {
1007 $atts .= ' method="post"';
1008 }
Derek Allard2067d1a2008-11-13 22:59:24 +00001009
Derek Allard3241d732009-09-17 12:17:45 +00001010 if ( ! isset($attributes['accept-charset']) AND $formtag === TRUE)
1011 {
1012 $atts .= ' accept-charset="'.strtolower(config_item('charset')).'"';
1013 }
Derek Allard2067d1a2008-11-13 22:59:24 +00001014
Derek Allard3241d732009-09-17 12:17:45 +00001015 foreach ($attributes as $key => $val)
1016 {
1017 $atts .= ' '.$key.'="'.$val.'"';
1018 }
1019
1020 return $atts;
Derek Allard2067d1a2008-11-13 22:59:24 +00001021 }
1022 }
1023}
1024
1025// ------------------------------------------------------------------------
1026
1027/**
1028 * Validation Object
1029 *
1030 * Determines what the form validation class was instantiated as, fetches
1031 * the object and returns it.
1032 *
1033 * @access private
1034 * @return mixed
1035 */
1036if ( ! function_exists('_get_validation_object'))
1037{
1038 function &_get_validation_object()
1039 {
1040 $CI =& get_instance();
1041
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001042 // We set this as a variable since we're returning by reference.
Derek Allard2067d1a2008-11-13 22:59:24 +00001043 $return = FALSE;
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02001044
Greg Akerc6d918a2011-04-22 10:17:32 -05001045 if (FALSE !== ($object = $CI->load->is_loaded('form_validation')))
Derek Allard2067d1a2008-11-13 22:59:24 +00001046 {
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001047 if ( ! isset($CI->$object) OR ! is_object($CI->$object))
1048 {
1049 return $return;
1050 }
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02001051
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001052 return $CI->$object;
Derek Allard2067d1a2008-11-13 22:59:24 +00001053 }
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02001054
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001055 return $return;
Derek Allard2067d1a2008-11-13 22:59:24 +00001056 }
1057}
1058
Derek Allard2067d1a2008-11-13 22:59:24 +00001059/* End of file form_helper.php */
patwork64e35cd2011-04-08 15:25:31 +02001060/* Location: ./system/helpers/form_helper.php */