blob: 2592890cdb8a944de46afcb866693b27f8b907fd [file] [log] [blame]
Andrey Andreevc5536aa2012-11-01 17:33:58 +02001<?php
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
darwinel871754a2014-02-11 17:34:57 +010021 * @copyright Copyright (c) 2008 - 2014, 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
Andrey Andreevc5536aa2012-11-01 17:33:58 +020025 * @filesource
Derek Allard2067d1a2008-11-13 22:59:24 +000026 */
Andrey Andreevc5536aa2012-11-01 17:33:58 +020027defined('BASEPATH') OR exit('No direct script access allowed');
Derek Allard2067d1a2008-11-13 22:59:24 +000028
Derek Allard2067d1a2008-11-13 22:59:24 +000029/**
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
Derek Allard2067d1a2008-11-13 22:59:24 +000041if ( ! function_exists('form_open'))
42{
Timothy Warren01b129a2012-04-27 11:36:50 -040043 /**
44 * Form Declaration
45 *
46 * Creates the opening portion of the form.
47 *
48 * @param string the URI segments of the form destination
49 * @param array a key/value pair of attributes
50 * @param array a key/value pair hidden data
51 * @return string
52 */
vlakoffea19bc42013-07-27 10:07:43 +020053 function form_open($action = '', $attributes = array(), $hidden = array())
Derek Allard2067d1a2008-11-13 22:59:24 +000054 {
55 $CI =& get_instance();
56
Andrey Andreevea41c8a2014-02-26 18:31:02 +020057 // If no action is provided then set to the current url
58 if ( ! $action)
59 {
60 $action = $CI->config->site_url($CI->uri->uri_string());
61 }
vlakoffc4f9c622013-07-27 10:08:00 +020062 // If an action is not a full URL then turn it into one
Andrey Andreevea41c8a2014-02-26 18:31:02 +020063 elseif (strpos($action, '://') === FALSE)
vlakoffc4f9c622013-07-27 10:08:00 +020064 {
65 $action = $CI->config->site_url($action);
66 }
vlakoffc4f9c622013-07-27 10:08:00 +020067
vlakoffea19bc42013-07-27 10:07:43 +020068 $attributes = _attributes_to_string($attributes);
69
70 if (stripos($attributes, 'method=') === FALSE)
Andrey Andreev122ca9b2013-07-26 18:16:26 +030071 {
72 $attributes .= ' method="post"';
73 }
Derek Allard2067d1a2008-11-13 22:59:24 +000074
vlakoffea19bc42013-07-27 10:07:43 +020075 if (stripos($attributes, 'accept-charset=') === FALSE)
76 {
77 $attributes .= ' accept-charset="'.strtolower(config_item('charset')).'"';
78 }
79
vlakoffea19bc42013-07-27 10:07:43 +020080 $form = '<form action="'.$action.'"'.$attributes.">\n";
Barry Mienydd671972010-10-04 16:33:58 +020081
Andrey Andreev93a83c72012-03-26 21:24:02 +030082 // Add CSRF field if enabled, but leave it out for GET requests and requests to external websites
Andrey Andreevea41c8a2014-02-26 18:31:02 +020083 if ($CI->config->item('csrf_protection') === TRUE && strpos($action, $CI->config->base_url()) !== FALSE && ! stripos($form, 'method="get"'))
Derek Allard958543a2010-07-22 14:10:26 -040084 {
Greg Aker1f6f0ab2011-04-07 18:24:53 -050085 $hidden[$CI->security->get_csrf_token_name()] = $CI->security->get_csrf_hash();
Greg Aker28b425a2010-09-15 11:43:23 -050086 }
87
Andrey Andreev93a83c72012-03-26 21:24:02 +030088 if (is_array($hidden) && count($hidden) > 0)
Greg Aker28b425a2010-09-15 11:43:23 -050089 {
Andrey Andreev3c32a112012-06-16 18:05:34 +030090 $form .= '<div style="display:none;">'.form_hidden($hidden).'</div>';
Derek Allard958543a2010-07-22 14:10:26 -040091 }
92
Derek Allard2067d1a2008-11-13 22:59:24 +000093 return $form;
94 }
95}
96
97// ------------------------------------------------------------------------
98
Derek Allard2067d1a2008-11-13 22:59:24 +000099if ( ! function_exists('form_open_multipart'))
100{
Timothy Warren01b129a2012-04-27 11:36:50 -0400101 /**
102 * Form Declaration - Multipart type
103 *
104 * Creates the opening portion of the form, but with "multipart/form-data".
105 *
106 * @param string the URI segments of the form destination
107 * @param array a key/value pair of attributes
108 * @param array a key/value pair hidden data
109 * @return string
110 */
Ben Edmunds98963b32011-08-20 14:17:16 -0500111 function form_open_multipart($action = '', $attributes = array(), $hidden = array())
Derek Allard2067d1a2008-11-13 22:59:24 +0000112 {
Derek Allard33d4b6a2010-01-17 07:23:00 +0000113 if (is_string($attributes))
114 {
115 $attributes .= ' enctype="multipart/form-data"';
116 }
117 else
118 {
119 $attributes['enctype'] = 'multipart/form-data';
120 }
121
Derek Allard2067d1a2008-11-13 22:59:24 +0000122 return form_open($action, $attributes, $hidden);
123 }
124}
125
126// ------------------------------------------------------------------------
127
Derek Allard2067d1a2008-11-13 22:59:24 +0000128if ( ! function_exists('form_hidden'))
129{
Timothy Warren01b129a2012-04-27 11:36:50 -0400130 /**
131 * Hidden Input Field
132 *
133 * Generates hidden fields. You can pass a simple key/value string or
134 * an associative array with multiple values.
135 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200136 * @param mixed $name Field name
137 * @param string $value Field value
138 * @param bool $recursing
Timothy Warren01b129a2012-04-27 11:36:50 -0400139 * @return string
140 */
Robin Sowell57fe4102009-03-26 18:58:46 +0000141 function form_hidden($name, $value = '', $recursing = FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000142 {
Robin Sowell57fe4102009-03-26 18:58:46 +0000143 static $form;
144
145 if ($recursing === FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000146 {
Robin Sowell57fe4102009-03-26 18:58:46 +0000147 $form = "\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000148 }
149
Robin Sowell57fe4102009-03-26 18:58:46 +0000150 if (is_array($name))
Derek Allard2067d1a2008-11-13 22:59:24 +0000151 {
Robin Sowell57fe4102009-03-26 18:58:46 +0000152 foreach ($name as $key => $val)
153 {
154 form_hidden($key, $val, TRUE);
155 }
Andrey Andreevea41c8a2014-02-26 18:31:02 +0200156
Robin Sowell57fe4102009-03-26 18:58:46 +0000157 return $form;
158 }
159
160 if ( ! is_array($value))
161 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200162 $form .= '<input type="hidden" name="'.$name.'" value="'.form_prep($value)."\" />\n";
Robin Sowell57fe4102009-03-26 18:58:46 +0000163 }
164 else
165 {
166 foreach ($value as $k => $v)
167 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300168 $k = is_int($k) ? '' : $k;
Robin Sowell57fe4102009-03-26 18:58:46 +0000169 form_hidden($name.'['.$k.']', $v, TRUE);
170 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000171 }
172
173 return $form;
174 }
175}
176
177// ------------------------------------------------------------------------
178
Derek Allard2067d1a2008-11-13 22:59:24 +0000179if ( ! function_exists('form_input'))
180{
Timothy Warren01b129a2012-04-27 11:36:50 -0400181 /**
182 * Text Input Field
183 *
184 * @param mixed
185 * @param string
186 * @param string
187 * @return string
188 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000189 function form_input($data = '', $value = '', $extra = '')
190 {
Andrey Andreevea41c8a2014-02-26 18:31:02 +0200191 $defaults = array(
192 'type' => 'text',
193 'name' => is_array($data) ? '' : $data,
194 'value' => $value
195 );
Derek Allard2067d1a2008-11-13 22:59:24 +0000196
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200197 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000198 }
199}
200
201// ------------------------------------------------------------------------
202
Derek Allard2067d1a2008-11-13 22:59:24 +0000203if ( ! function_exists('form_password'))
204{
Timothy Warren01b129a2012-04-27 11:36:50 -0400205 /**
206 * Password Field
207 *
208 * Identical to the input function but adds the "password" type
209 *
210 * @param mixed
211 * @param string
212 * @param string
213 * @return string
214 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000215 function form_password($data = '', $value = '', $extra = '')
216 {
Andrey Andreevea41c8a2014-02-26 18:31:02 +0200217 is_array($data) OR $data = array('name' => $data);
Derek Allard2067d1a2008-11-13 22:59:24 +0000218 $data['type'] = 'password';
219 return form_input($data, $value, $extra);
220 }
221}
222
223// ------------------------------------------------------------------------
224
Derek Allard2067d1a2008-11-13 22:59:24 +0000225if ( ! function_exists('form_upload'))
226{
Timothy Warren01b129a2012-04-27 11:36:50 -0400227 /**
228 * Upload Field
229 *
230 * Identical to the input function but adds the "file" type
231 *
232 * @param mixed
233 * @param string
234 * @param string
235 * @return string
236 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000237 function form_upload($data = '', $value = '', $extra = '')
238 {
Bo-Yi Wu06ddcf02013-02-18 08:52:05 +0800239 $defaults = array('type' => 'file', 'name' => '');
Andrey Andreev99ba3a22013-02-15 22:42:22 +0200240 is_array($data) OR $data = array('name' => $data);
Derek Allard2067d1a2008-11-13 22:59:24 +0000241 $data['type'] = 'file';
Andrey Andreev99ba3a22013-02-15 22:42:22 +0200242 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000243 }
244}
245
246// ------------------------------------------------------------------------
247
Derek Allard2067d1a2008-11-13 22:59:24 +0000248if ( ! function_exists('form_textarea'))
249{
Timothy Warren01b129a2012-04-27 11:36:50 -0400250 /**
251 * Textarea field
252 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200253 * @param mixed $data
254 * @param string $value
255 * @param string $extra
Timothy Warren01b129a2012-04-27 11:36:50 -0400256 * @return string
257 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000258 function form_textarea($data = '', $value = '', $extra = '')
259 {
Andrey Andreevea41c8a2014-02-26 18:31:02 +0200260 $defaults = array(
261 'name' => is_array($data) ? '' : $data,
262 'cols' => '40',
263 'rows' => '10'
264 );
Derek Allard2067d1a2008-11-13 22:59:24 +0000265
266 if ( ! is_array($data) OR ! isset($data['value']))
267 {
268 $val = $value;
269 }
270 else
271 {
Barry Mienydd671972010-10-04 16:33:58 +0200272 $val = $data['value'];
Derek Allard2067d1a2008-11-13 22:59:24 +0000273 unset($data['value']); // textareas don't use the value attribute
274 }
Barry Mienydd671972010-10-04 16:33:58 +0200275
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200276 return '<textarea '._parse_form_attributes($data, $defaults).$extra.'>'.form_prep($val, TRUE)."</textarea>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000277 }
278}
279
280// ------------------------------------------------------------------------
281
Derek Jones68788d52010-03-05 10:11:31 -0600282if ( ! function_exists('form_multiselect'))
Derek Jones26399292009-04-08 16:14:17 +0000283{
Timothy Warren01b129a2012-04-27 11:36:50 -0400284 /**
285 * Multi-select menu
286 *
287 * @param string
288 * @param array
289 * @param mixed
290 * @param string
291 * @return string
292 */
Derek Jones26399292009-04-08 16:14:17 +0000293 function form_multiselect($name = '', $options = array(), $selected = array(), $extra = '')
294 {
295 if ( ! strpos($extra, 'multiple'))
296 {
297 $extra .= ' multiple="multiple"';
298 }
Barry Mienydd671972010-10-04 16:33:58 +0200299
Derek Jones26399292009-04-08 16:14:17 +0000300 return form_dropdown($name, $options, $selected, $extra);
301 }
302}
303
304// --------------------------------------------------------------------
305
Derek Allard2067d1a2008-11-13 22:59:24 +0000306if ( ! function_exists('form_dropdown'))
307{
Timothy Warren01b129a2012-04-27 11:36:50 -0400308 /**
309 * Drop-down Menu
310 *
Brennan Thompson40cd6002014-02-14 12:06:38 -0700311 * @param mixed $data
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200312 * @param mixed $options
313 * @param mixed $selected
314 * @param mixed $extra
Timothy Warren01b129a2012-04-27 11:36:50 -0400315 * @return string
316 */
Brennan Thompson40cd6002014-02-14 12:06:38 -0700317 function form_dropdown($data = '', $options = array(), $selected = array(), $extra = '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000318 {
Brennan Thompson1d03ef42014-02-17 12:08:22 -0700319 $defaults = array('name' => is_array($data) ? '' : $data);
Brennan Thompson82c78a92014-02-17 10:02:19 -0700320
321 if (is_array($data) && isset($data['selected']))
Andrey Andreev93a83c72012-03-26 21:24:02 +0300322 {
Brennan Thompson40cd6002014-02-14 12:06:38 -0700323 $selected = $data['selected'];
324 unset($data['selected']); // selects don't have a selected attribute
Andrey Andreev93a83c72012-03-26 21:24:02 +0300325 }
326
Andrey Andreev582ebcb2012-10-27 00:52:15 +0300327 is_array($selected) OR $selected = array($selected);
Derek Allard2067d1a2008-11-13 22:59:24 +0000328
329 // If no selected state was submitted we will attempt to set it automatically
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200330 if (count($selected) === 0 && isset($_POST[$name]))
Derek Allard2067d1a2008-11-13 22:59:24 +0000331 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200332 $selected = array($_POST[$name]);
Derek Allard2067d1a2008-11-13 22:59:24 +0000333 }
Brennan Thompson82c78a92014-02-17 10:02:19 -0700334
Brennan Thompsonc8ba6632014-02-16 19:36:00 -0700335 if (is_array($data) && isset($data['options']))
Brennan Thompson40cd6002014-02-14 12:06:38 -0700336 {
337 $options = $data['options'];
338 unset($data['options']); // selects don't use an options attribute
339 }
Brennan Thompson21ef97e2014-02-16 11:01:03 -0700340
341 is_array($options) OR $options = array($options);
Brennan Thompson82c78a92014-02-17 10:02:19 -0700342
Brennan Thompson1d03ef42014-02-17 12:08:22 -0700343 $extra = _attributes_to_string($extra);
Brennan Thompson82c78a92014-02-17 10:02:19 -0700344
Derek Allard2067d1a2008-11-13 22:59:24 +0000345 $multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : '';
Brennan Thompson82c78a92014-02-17 10:02:19 -0700346
Brennan Thompson1d03ef42014-02-17 12:08:22 -0700347 $form = '<select '.rtrim(_parse_form_attributes($data, $defaults)).$extra.$multiple.">\n";
Brennan Thompson82c78a92014-02-17 10:02:19 -0700348
Derek Allard2067d1a2008-11-13 22:59:24 +0000349 foreach ($options as $key => $val)
350 {
351 $key = (string) $key;
Derek Allard2067d1a2008-11-13 22:59:24 +0000352
Andrey Andreev6b114ae2012-07-13 12:05:52 +0300353 if (is_array($val))
Derek Allard78a5fc92009-02-05 16:34:35 +0000354 {
Andrey Andreev6b114ae2012-07-13 12:05:52 +0300355 if (empty($val))
356 {
357 continue;
358 }
359
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200360 $form .= '<optgroup label="'.$key."\">\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000361
Derek Allard78a5fc92009-02-05 16:34:35 +0000362 foreach ($val as $optgroup_key => $optgroup_val)
363 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300364 $sel = in_array($optgroup_key, $selected) ? ' selected="selected"' : '';
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200365 $form .= '<option value="'.form_prep($optgroup_key).'"'.$sel.'>'
Brennan Thompson82c78a92014-02-17 10:02:19 -0700366 .(string) $optgroup_val."</option>\n";
Derek Allard78a5fc92009-02-05 16:34:35 +0000367 }
368
Andrey Andreev93a83c72012-03-26 21:24:02 +0300369 $form .= "</optgroup>\n";
Derek Allard78a5fc92009-02-05 16:34:35 +0000370 }
371 else
372 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200373 $form .= '<option value="'.form_prep($key).'"'
Brennan Thompson82c78a92014-02-17 10:02:19 -0700374 .(in_array($key, $selected) ? ' selected="selected"' : '').'>'
375 .(string) $val."</option>\n";
Derek Allard78a5fc92009-02-05 16:34:35 +0000376 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000377 }
Brennan Thompson82c78a92014-02-17 10:02:19 -0700378
Andrey Andreev93a83c72012-03-26 21:24:02 +0300379 return $form."</select>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000380 }
381}
382
383// ------------------------------------------------------------------------
384
Derek Allard2067d1a2008-11-13 22:59:24 +0000385if ( ! function_exists('form_checkbox'))
386{
Timothy Warren01b129a2012-04-27 11:36:50 -0400387 /**
388 * Checkbox Field
389 *
390 * @param mixed
391 * @param string
392 * @param bool
393 * @param string
394 * @return string
395 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000396 function form_checkbox($data = '', $value = '', $checked = FALSE, $extra = '')
397 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300398 $defaults = array('type' => 'checkbox', 'name' => ( ! is_array($data) ? $data : ''), 'value' => $value);
Derek Allard2067d1a2008-11-13 22:59:24 +0000399
Andrey Andreev93a83c72012-03-26 21:24:02 +0300400 if (is_array($data) && array_key_exists('checked', $data))
Derek Allard2067d1a2008-11-13 22:59:24 +0000401 {
402 $checked = $data['checked'];
403
Michiel Vugteveen910ff7a2012-06-06 20:03:14 +0200404 if ($checked == FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000405 {
406 unset($data['checked']);
407 }
408 else
409 {
410 $data['checked'] = 'checked';
411 }
412 }
413
Michiel Vugteveen910ff7a2012-06-06 20:03:14 +0200414 if ($checked == TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000415 {
416 $defaults['checked'] = 'checked';
417 }
418 else
419 {
420 unset($defaults['checked']);
421 }
422
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200423 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000424 }
425}
426
427// ------------------------------------------------------------------------
428
Derek Allard2067d1a2008-11-13 22:59:24 +0000429if ( ! function_exists('form_radio'))
430{
Timothy Warren01b129a2012-04-27 11:36:50 -0400431 /**
432 * Radio Button
433 *
434 * @param mixed
435 * @param string
436 * @param bool
437 * @param string
438 * @return string
439 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000440 function form_radio($data = '', $value = '', $checked = FALSE, $extra = '')
441 {
Andrey Andreevea41c8a2014-02-26 18:31:02 +0200442 is_array($data) OR $data = array('name' => $data);
Derek Allard2067d1a2008-11-13 22:59:24 +0000443 $data['type'] = 'radio';
444 return form_checkbox($data, $value, $checked, $extra);
445 }
446}
447
448// ------------------------------------------------------------------------
449
Derek Allard2067d1a2008-11-13 22:59:24 +0000450if ( ! function_exists('form_submit'))
Barry Mienydd671972010-10-04 16:33:58 +0200451{
Timothy Warren01b129a2012-04-27 11:36:50 -0400452 /**
453 * Submit Button
454 *
455 * @param mixed
456 * @param string
457 * @param string
458 * @return string
459 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000460 function form_submit($data = '', $value = '', $extra = '')
461 {
Andrey Andreevea41c8a2014-02-26 18:31:02 +0200462 $defaults = array(
463 'type' => 'submit',
464 'name' => is_array($data) ? '' : $data,
465 'value' => $value
466 );
467
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200468 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000469 }
470}
471
472// ------------------------------------------------------------------------
473
Derek Allard2067d1a2008-11-13 22:59:24 +0000474if ( ! function_exists('form_reset'))
475{
Timothy Warren01b129a2012-04-27 11:36:50 -0400476 /**
477 * Reset Button
478 *
479 * @param mixed
480 * @param string
481 * @param string
482 * @return string
483 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000484 function form_reset($data = '', $value = '', $extra = '')
485 {
Andrey Andreevea41c8a2014-02-26 18:31:02 +0200486 $defaults = array(
487 'type' => 'reset',
488 'name' => is_array($data) ? '' : $data,
489 'value' => $value
490 );
491
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200492 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000493 }
494}
495
496// ------------------------------------------------------------------------
497
Derek Allard2067d1a2008-11-13 22:59:24 +0000498if ( ! function_exists('form_button'))
499{
Timothy Warren01b129a2012-04-27 11:36:50 -0400500 /**
501 * Form Button
502 *
503 * @param mixed
504 * @param string
505 * @param string
506 * @return string
507 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000508 function form_button($data = '', $content = '', $extra = '')
509 {
Andrey Andreevea41c8a2014-02-26 18:31:02 +0200510 $defaults = array(
511 'name' => is_array($data) ? '' : $data,
512 'type' => 'button'
513 );
514
Andrey Andreev93a83c72012-03-26 21:24:02 +0300515 if (is_array($data) && isset($data['content']))
Derek Allard2067d1a2008-11-13 22:59:24 +0000516 {
517 $content = $data['content'];
518 unset($data['content']); // content is not an attribute
519 }
520
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200521 return '<button '._parse_form_attributes($data, $defaults).$extra.'>'.$content."</button>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000522 }
523}
524
525// ------------------------------------------------------------------------
526
Derek Allard2067d1a2008-11-13 22:59:24 +0000527if ( ! function_exists('form_label'))
528{
Timothy Warren01b129a2012-04-27 11:36:50 -0400529 /**
530 * Form Label Tag
531 *
532 * @param string The text to appear onscreen
533 * @param string The id the label applies to
534 * @param string Additional attributes
535 * @return string
536 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000537 function form_label($label_text = '', $id = '', $attributes = array())
538 {
539
540 $label = '<label';
541
Alex Bilbie773ccc32012-06-02 11:11:08 +0100542 if ($id !== '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000543 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300544 $label .= ' for="'.$id.'"';
Derek Allard2067d1a2008-11-13 22:59:24 +0000545 }
546
Andrey Andreev93a83c72012-03-26 21:24:02 +0300547 if (is_array($attributes) && count($attributes) > 0)
Derek Allard2067d1a2008-11-13 22:59:24 +0000548 {
549 foreach ($attributes as $key => $val)
550 {
551 $label .= ' '.$key.'="'.$val.'"';
552 }
553 }
554
Andrey Andreev93a83c72012-03-26 21:24:02 +0300555 return $label.'>'.$label_text.'</label>';
Derek Allard2067d1a2008-11-13 22:59:24 +0000556 }
557}
558
559// ------------------------------------------------------------------------
Timothy Warren01b129a2012-04-27 11:36:50 -0400560
Derek Allard2067d1a2008-11-13 22:59:24 +0000561if ( ! function_exists('form_fieldset'))
562{
Timothy Warren01b129a2012-04-27 11:36:50 -0400563 /**
564 * Fieldset Tag
565 *
566 * Used to produce <fieldset><legend>text</legend>. To close fieldset
567 * use form_fieldset_close()
568 *
569 * @param string The legend text
vlakoffea19bc42013-07-27 10:07:43 +0200570 * @param array Additional attributes
Timothy Warren01b129a2012-04-27 11:36:50 -0400571 * @return string
572 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000573 function form_fieldset($legend_text = '', $attributes = array())
574 {
vlakoffea19bc42013-07-27 10:07:43 +0200575 $fieldset = '<fieldset'._attributes_to_string($attributes).">\n";
Alex Bilbie773ccc32012-06-02 11:11:08 +0100576 if ($legend_text !== '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000577 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300578 return $fieldset.'<legend>'.$legend_text."</legend>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000579 }
580
581 return $fieldset;
582 }
583}
584
585// ------------------------------------------------------------------------
586
Derek Allard2067d1a2008-11-13 22:59:24 +0000587if ( ! function_exists('form_fieldset_close'))
588{
Timothy Warren01b129a2012-04-27 11:36:50 -0400589 /**
590 * Fieldset Close Tag
591 *
592 * @param string
593 * @return string
594 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000595 function form_fieldset_close($extra = '')
596 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300597 return '</fieldset>'.$extra;
Derek Allard2067d1a2008-11-13 22:59:24 +0000598 }
599}
600
601// ------------------------------------------------------------------------
602
Derek Allard2067d1a2008-11-13 22:59:24 +0000603if ( ! function_exists('form_close'))
604{
Timothy Warren01b129a2012-04-27 11:36:50 -0400605 /**
606 * Form Close Tag
607 *
608 * @param string
609 * @return string
610 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000611 function form_close($extra = '')
612 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300613 return '</form>'.$extra;
Derek Allard2067d1a2008-11-13 22:59:24 +0000614 }
615}
616
617// ------------------------------------------------------------------------
618
Derek Allard2067d1a2008-11-13 22:59:24 +0000619if ( ! function_exists('form_prep'))
620{
Timothy Warren01b129a2012-04-27 11:36:50 -0400621 /**
622 * Form Prep
623 *
624 * Formats text so that it can be safely placed in a form field in the event it has HTML tags.
625 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200626 * @param string|string[] $str Value to escape
627 * @param bool $is_textarea Whether we're escaping for a textarea element
628 * @return string|string[] Escaped values
Timothy Warren01b129a2012-04-27 11:36:50 -0400629 */
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200630 function form_prep($str = '', $is_textarea = FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000631 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200632 if (is_array($str))
633 {
634 foreach (array_keys($str) as $key)
635 {
636 $str[$key] = form_prep($str[$key], $is_textarea);
637 }
638
639 return $str;
640 }
641
642 if ($is_textarea === TRUE)
643 {
644 return str_replace(array('<', '>'), array('&lt;', '&gt;'), stripslashes($str));
645 }
646
Andrey Andreev075f6fa2012-11-01 15:18:44 +0200647 return str_replace(array("'", '"'), array('&#39;', '&quot;'), stripslashes($str));
Derek Allard2067d1a2008-11-13 22:59:24 +0000648 }
649}
650
651// ------------------------------------------------------------------------
652
Derek Allard2067d1a2008-11-13 22:59:24 +0000653if ( ! function_exists('set_value'))
654{
Timothy Warren01b129a2012-04-27 11:36:50 -0400655 /**
656 * Form Value
657 *
658 * Grabs a value from the POST array for the specified field so you can
659 * re-populate an input field or textarea. If Form Validation
660 * is active it retrieves the info from the validation class
661 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200662 * @param string $field Field name
663 * @param string $default Default value
664 * @param bool $is_textarea Whether the field is a textarea element
665 * @return string
Timothy Warren01b129a2012-04-27 11:36:50 -0400666 */
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200667 function set_value($field = '', $default = '', $is_textarea = FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000668 {
nisheeth-barthwal77236e02013-03-25 23:42:36 +0530669 $CI =& get_instance();
Derek Allard2067d1a2008-11-13 22:59:24 +0000670
nisheeth-barthwal47ea5a82013-03-26 18:57:28 +0530671 $value = (isset($CI->form_validation) && is_object($CI->form_validation) && $CI->form_validation->has_rule($field))
672 ? $CI->form_validation->set_value($field, $default)
673 : $CI->input->post($field, FALSE);
674
675 return form_prep($value === NULL ? $default : $value, $is_textarea);
Derek Allard2067d1a2008-11-13 22:59:24 +0000676 }
677}
678
679// ------------------------------------------------------------------------
680
Derek Allard2067d1a2008-11-13 22:59:24 +0000681if ( ! function_exists('set_select'))
682{
Timothy Warren01b129a2012-04-27 11:36:50 -0400683 /**
684 * Set Select
685 *
686 * Let's you set the selected value of a <select> menu via data in the POST array.
687 * If Form Validation is active it retrieves the info from the validation class
688 *
689 * @param string
690 * @param string
691 * @param bool
692 * @return string
693 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000694 function set_select($field = '', $value = '', $default = FALSE)
695 {
Andrey Andreev67f6a5e2013-09-13 16:21:31 +0300696 $CI =& get_instance();
Derek Allard2067d1a2008-11-13 22:59:24 +0000697
Andrey Andreev67f6a5e2013-09-13 16:21:31 +0300698 if (isset($CI->form_validation) && is_object($CI->form_validation) && $CI->form_validation->has_rule($field))
Derek Allard2067d1a2008-11-13 22:59:24 +0000699 {
Andrey Andreev67f6a5e2013-09-13 16:21:31 +0300700 return $CI->form_validation->set_select($field, $value, $default);
701 }
702 elseif (($input = $CI->input->post($field, FALSE)) === NULL)
703 {
704 return ($default === TRUE) ? ' selected="selected"' : '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000705 }
Andrey Andreeva587a932013-10-23 19:57:46 +0300706
707 $value = (string) $value;
708 if (is_array($input))
Andrey Andreevd3b7e242013-09-13 18:36:29 +0300709 {
Andrey Andreeva587a932013-10-23 19:57:46 +0300710 // Note: in_array('', array(0)) returns TRUE, do not use it
711 foreach ($input as &$v)
712 {
713 if ($value === $v)
714 {
715 return ' selected="selected"';
716 }
717 }
718
719 return '';
Andrey Andreevd3b7e242013-09-13 18:36:29 +0300720 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000721
Andrey Andreevd3b7e242013-09-13 18:36:29 +0300722 return ($input === $value) ? ' selected="selected"' : '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000723 }
724}
725
726// ------------------------------------------------------------------------
727
Derek Allard2067d1a2008-11-13 22:59:24 +0000728if ( ! function_exists('set_checkbox'))
729{
Timothy Warren01b129a2012-04-27 11:36:50 -0400730 /**
731 * Set Checkbox
732 *
733 * Let's you set the selected value of a checkbox via the value in the POST array.
734 * If Form Validation is active it retrieves the info from the validation class
735 *
736 * @param string
737 * @param string
738 * @param bool
739 * @return string
740 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000741 function set_checkbox($field = '', $value = '', $default = FALSE)
742 {
Andrey Andreevae50f552013-09-13 16:17:41 +0300743 $CI =& get_instance();
Derek Allard2067d1a2008-11-13 22:59:24 +0000744
Andrey Andreevae50f552013-09-13 16:17:41 +0300745 if (isset($CI->form_validation) && is_object($CI->form_validation) && $CI->form_validation->has_rule($field))
Barry Mienydd671972010-10-04 16:33:58 +0200746 {
Andrey Andreevae50f552013-09-13 16:17:41 +0300747 return $CI->form_validation->set_checkbox($field, $value, $default);
748 }
749 elseif (($input = $CI->input->post($field, FALSE)) === NULL)
750 {
751 return ($default === TRUE) ? ' checked="checked"' : '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000752 }
Andrey Andreeva587a932013-10-23 19:57:46 +0300753
754 $value = (string) $value;
755 if (is_array($input))
Andrey Andreeve8a23a52013-09-13 18:29:29 +0300756 {
Andrey Andreeva587a932013-10-23 19:57:46 +0300757 // Note: in_array('', array(0)) returns TRUE, do not use it
758 foreach ($input as &$v)
759 {
760 if ($value === $v)
761 {
762 return ' checked="checked"';
763 }
764 }
765
766 return '';
Andrey Andreeve8a23a52013-09-13 18:29:29 +0300767 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000768
Andrey Andreevae50f552013-09-13 16:17:41 +0300769 return ($input === $value) ? ' checked="checked"' : '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000770 }
771}
772
773// ------------------------------------------------------------------------
774
Derek Allard2067d1a2008-11-13 22:59:24 +0000775if ( ! function_exists('set_radio'))
776{
Timothy Warren01b129a2012-04-27 11:36:50 -0400777 /**
778 * Set Radio
779 *
780 * Let's you set the selected value of a radio field via info in the POST array.
781 * If Form Validation is active it retrieves the info from the validation class
782 *
Andrey Andreevae50f552013-09-13 16:17:41 +0300783 * @param string $field
784 * @param string $value
785 * @param bool $default
Timothy Warren01b129a2012-04-27 11:36:50 -0400786 * @return string
787 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000788 function set_radio($field = '', $value = '', $default = FALSE)
789 {
Andrey Andreevae50f552013-09-13 16:17:41 +0300790 $CI =& get_instance();
Derek Allard2067d1a2008-11-13 22:59:24 +0000791
Andrey Andreevae50f552013-09-13 16:17:41 +0300792 if (isset($CI->form_validation) && is_object($CI->form_validation) && $CI->form_validation->has_rule($field))
Derek Allard2067d1a2008-11-13 22:59:24 +0000793 {
Andrey Andreevae50f552013-09-13 16:17:41 +0300794 return $CI->form_validation->set_radio($field, $value, $default);
795 }
796 elseif (($input = $CI->input->post($field, FALSE)) === NULL)
797 {
798 return ($default === TRUE) ? ' checked="checked"' : '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000799 }
800
Andrey Andreeva587a932013-10-23 19:57:46 +0300801 return ($input === (string) $value) ? ' checked="checked"' : '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000802 }
803}
804
805// ------------------------------------------------------------------------
806
Derek Allard2067d1a2008-11-13 22:59:24 +0000807if ( ! function_exists('form_error'))
808{
Timothy Warren01b129a2012-04-27 11:36:50 -0400809 /**
810 * Form Error
811 *
812 * Returns the error for a specific form field. This is a helper for the
813 * form validation class.
814 *
815 * @param string
816 * @param string
817 * @param string
818 * @return string
819 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000820 function form_error($field = '', $prefix = '', $suffix = '')
821 {
822 if (FALSE === ($OBJ =& _get_validation_object()))
823 {
824 return '';
825 }
826
827 return $OBJ->error($field, $prefix, $suffix);
828 }
829}
830
831// ------------------------------------------------------------------------
832
Derek Allard2067d1a2008-11-13 22:59:24 +0000833if ( ! function_exists('validation_errors'))
834{
Timothy Warren01b129a2012-04-27 11:36:50 -0400835 /**
836 * Validation Error String
837 *
838 * Returns all the errors associated with a form submission. This is a helper
839 * function for the form validation class.
840 *
841 * @param string
842 * @param string
843 * @return string
844 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000845 function validation_errors($prefix = '', $suffix = '')
846 {
847 if (FALSE === ($OBJ =& _get_validation_object()))
Greg Akerc83bea62011-04-23 12:12:57 -0500848 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000849 return '';
850 }
851
852 return $OBJ->error_string($prefix, $suffix);
853 }
854}
855
856// ------------------------------------------------------------------------
857
Derek Allard2067d1a2008-11-13 22:59:24 +0000858if ( ! function_exists('_parse_form_attributes'))
859{
Timothy Warren01b129a2012-04-27 11:36:50 -0400860 /**
861 * Parse the form attributes
862 *
863 * Helper function used by some of the form helpers
864 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200865 * @param array $attributes List of attributes
866 * @param array $default Default values
Timothy Warren01b129a2012-04-27 11:36:50 -0400867 * @return string
868 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000869 function _parse_form_attributes($attributes, $default)
870 {
871 if (is_array($attributes))
872 {
873 foreach ($default as $key => $val)
874 {
875 if (isset($attributes[$key]))
876 {
877 $default[$key] = $attributes[$key];
878 unset($attributes[$key]);
879 }
880 }
881
882 if (count($attributes) > 0)
883 {
884 $default = array_merge($default, $attributes);
885 }
886 }
887
888 $att = '';
Barry Mienydd671972010-10-04 16:33:58 +0200889
Derek Allard2067d1a2008-11-13 22:59:24 +0000890 foreach ($default as $key => $val)
891 {
Alex Bilbie773ccc32012-06-02 11:11:08 +0100892 if ($key === 'value')
Derek Allard2067d1a2008-11-13 22:59:24 +0000893 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200894 $val = form_prep($val);
Derek Allard2067d1a2008-11-13 22:59:24 +0000895 }
Andrey Andreev60b97142012-10-25 16:59:17 +0300896 elseif ($key === 'name' && ! strlen($default['name']))
897 {
898 continue;
899 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000900
Andrey Andreev93a83c72012-03-26 21:24:02 +0300901 $att .= $key.'="'.$val.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000902 }
903
904 return $att;
905 }
906}
907
908// ------------------------------------------------------------------------
909
Derek Allard2067d1a2008-11-13 22:59:24 +0000910if ( ! function_exists('_attributes_to_string'))
911{
Timothy Warren01b129a2012-04-27 11:36:50 -0400912 /**
913 * Attributes To String
914 *
915 * Helper function used by some of the form helpers
916 *
917 * @param mixed
Timothy Warren01b129a2012-04-27 11:36:50 -0400918 * @return string
919 */
vlakoffea19bc42013-07-27 10:07:43 +0200920 function _attributes_to_string($attributes)
Derek Allard2067d1a2008-11-13 22:59:24 +0000921 {
vlakoffbb8b0892013-07-28 22:35:04 +0200922 if (empty($attributes))
923 {
924 return '';
925 }
926
vlakoffea19bc42013-07-27 10:07:43 +0200927 if (is_object($attributes))
Derek Allard2067d1a2008-11-13 22:59:24 +0000928 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300929 $attributes = (array) $attributes;
Derek Allard2067d1a2008-11-13 22:59:24 +0000930 }
931
vlakoffea19bc42013-07-27 10:07:43 +0200932 if (is_array($attributes))
Derek Allard2067d1a2008-11-13 22:59:24 +0000933 {
Derek Allard3241d732009-09-17 12:17:45 +0000934 $atts = '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000935
Derek Allard3241d732009-09-17 12:17:45 +0000936 foreach ($attributes as $key => $val)
937 {
938 $atts .= ' '.$key.'="'.$val.'"';
939 }
940
941 return $atts;
Derek Allard2067d1a2008-11-13 22:59:24 +0000942 }
vlakoffea19bc42013-07-27 10:07:43 +0200943
vlakofff7464752013-07-28 22:23:21 +0200944 if (is_string($attributes))
945 {
Brennan Thompson7a772e52014-02-16 19:22:54 -0700946 return ' '.$attributes;
vlakofff7464752013-07-28 22:23:21 +0200947 }
948
vlakoffea19bc42013-07-27 10:07:43 +0200949 return FALSE;
Derek Allard2067d1a2008-11-13 22:59:24 +0000950 }
951}
952
953// ------------------------------------------------------------------------
954
Derek Allard2067d1a2008-11-13 22:59:24 +0000955if ( ! function_exists('_get_validation_object'))
956{
Timothy Warren01b129a2012-04-27 11:36:50 -0400957 /**
958 * Validation Object
959 *
960 * Determines what the form validation class was instantiated as, fetches
961 * the object and returns it.
962 *
963 * @return mixed
964 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000965 function &_get_validation_object()
966 {
967 $CI =& get_instance();
968
Greg Aker0c9ee4a2011-04-20 09:40:17 -0500969 // We set this as a variable since we're returning by reference.
Derek Allard2067d1a2008-11-13 22:59:24 +0000970 $return = FALSE;
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200971
Andrey Andreev519f87a2013-07-23 17:16:10 +0300972 if (FALSE !== ($object = $CI->load->is_loaded('Form_validation')))
Derek Allard2067d1a2008-11-13 22:59:24 +0000973 {
Greg Aker0c9ee4a2011-04-20 09:40:17 -0500974 if ( ! isset($CI->$object) OR ! is_object($CI->$object))
975 {
976 return $return;
977 }
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200978
Greg Aker0c9ee4a2011-04-20 09:40:17 -0500979 return $CI->$object;
Derek Allard2067d1a2008-11-13 22:59:24 +0000980 }
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200981
Greg Aker0c9ee4a2011-04-20 09:40:17 -0500982 return $return;
Derek Allard2067d1a2008-11-13 22:59:24 +0000983 }
984}
985
Derek Allard2067d1a2008-11-13 22:59:24 +0000986/* End of file form_helper.php */
Zachary Cardoza9f27a3e2013-03-23 21:59:20 -0700987/* Location: ./system/helpers/form_helper.php */