blob: 9fd5d1e618190170d8d74b00ae330c91dbb7471a [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
vlakoffc4f9c622013-07-27 10:08:00 +020057 // If an action is not a full URL then turn it into one
58 if ($action && strpos($action, '://') === FALSE)
59 {
60 $action = $CI->config->site_url($action);
61 }
62 elseif ( ! $action)
63 {
64 // If no action is provided then set to the current url
65 $action = $CI->config->site_url($CI->uri->uri_string());
66 }
67
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 Andreev122ca9b2013-07-26 18:16:26 +030083 if ($CI->config->item('csrf_protection') === TRUE && ! (strpos($action, $CI->config->base_url()) === FALSE OR 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 }
156 return $form;
157 }
158
159 if ( ! is_array($value))
160 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200161 $form .= '<input type="hidden" name="'.$name.'" value="'.form_prep($value)."\" />\n";
Robin Sowell57fe4102009-03-26 18:58:46 +0000162 }
163 else
164 {
165 foreach ($value as $k => $v)
166 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300167 $k = is_int($k) ? '' : $k;
Robin Sowell57fe4102009-03-26 18:58:46 +0000168 form_hidden($name.'['.$k.']', $v, TRUE);
169 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000170 }
171
172 return $form;
173 }
174}
175
176// ------------------------------------------------------------------------
177
Derek Allard2067d1a2008-11-13 22:59:24 +0000178if ( ! function_exists('form_input'))
179{
Timothy Warren01b129a2012-04-27 11:36:50 -0400180 /**
181 * Text Input Field
182 *
183 * @param mixed
184 * @param string
185 * @param string
186 * @return string
187 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000188 function form_input($data = '', $value = '', $extra = '')
189 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300190 $defaults = array('type' => 'text', 'name' => ( ! is_array($data) ? $data : ''), 'value' => $value);
Derek Allard2067d1a2008-11-13 22:59:24 +0000191
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200192 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000193 }
194}
195
196// ------------------------------------------------------------------------
197
Derek Allard2067d1a2008-11-13 22:59:24 +0000198if ( ! function_exists('form_password'))
199{
Timothy Warren01b129a2012-04-27 11:36:50 -0400200 /**
201 * Password Field
202 *
203 * Identical to the input function but adds the "password" type
204 *
205 * @param mixed
206 * @param string
207 * @param string
208 * @return string
209 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000210 function form_password($data = '', $value = '', $extra = '')
211 {
212 if ( ! is_array($data))
213 {
214 $data = array('name' => $data);
215 }
216
217 $data['type'] = 'password';
218 return form_input($data, $value, $extra);
219 }
220}
221
222// ------------------------------------------------------------------------
223
Derek Allard2067d1a2008-11-13 22:59:24 +0000224if ( ! function_exists('form_upload'))
225{
Timothy Warren01b129a2012-04-27 11:36:50 -0400226 /**
227 * Upload Field
228 *
229 * Identical to the input function but adds the "file" type
230 *
231 * @param mixed
232 * @param string
233 * @param string
234 * @return string
235 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000236 function form_upload($data = '', $value = '', $extra = '')
237 {
Bo-Yi Wu06ddcf02013-02-18 08:52:05 +0800238 $defaults = array('type' => 'file', 'name' => '');
Andrey Andreev99ba3a22013-02-15 22:42:22 +0200239 is_array($data) OR $data = array('name' => $data);
Derek Allard2067d1a2008-11-13 22:59:24 +0000240 $data['type'] = 'file';
Andrey Andreev99ba3a22013-02-15 22:42:22 +0200241 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000242 }
243}
244
245// ------------------------------------------------------------------------
246
Derek Allard2067d1a2008-11-13 22:59:24 +0000247if ( ! function_exists('form_textarea'))
248{
Timothy Warren01b129a2012-04-27 11:36:50 -0400249 /**
250 * Textarea field
251 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200252 * @param mixed $data
253 * @param string $value
254 * @param string $extra
Timothy Warren01b129a2012-04-27 11:36:50 -0400255 * @return string
256 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000257 function form_textarea($data = '', $value = '', $extra = '')
258 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300259 $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
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200271 return '<textarea '._parse_form_attributes($data, $defaults).$extra.'>'.form_prep($val, TRUE)."</textarea>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000272 }
273}
274
275// ------------------------------------------------------------------------
276
Derek Jones68788d52010-03-05 10:11:31 -0600277if ( ! function_exists('form_multiselect'))
Derek Jones26399292009-04-08 16:14:17 +0000278{
Timothy Warren01b129a2012-04-27 11:36:50 -0400279 /**
280 * Multi-select menu
281 *
282 * @param string
283 * @param array
284 * @param mixed
285 * @param string
286 * @return string
287 */
Derek Jones26399292009-04-08 16:14:17 +0000288 function form_multiselect($name = '', $options = array(), $selected = array(), $extra = '')
289 {
Brennan Thompson21ef97e2014-02-16 11:01:03 -0700290 $extra = _attributes_to_string($extra);
291
Derek Jones26399292009-04-08 16:14:17 +0000292 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
Derek Allard2067d1a2008-11-13 22:59:24 +0000303if ( ! function_exists('form_dropdown'))
304{
Timothy Warren01b129a2012-04-27 11:36:50 -0400305 /**
306 * Drop-down Menu
307 *
Brennan Thompson40cd6002014-02-14 12:06:38 -0700308 * @param mixed $data
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200309 * @param mixed $options
310 * @param mixed $selected
311 * @param mixed $extra
Timothy Warren01b129a2012-04-27 11:36:50 -0400312 * @return string
313 */
Brennan Thompson40cd6002014-02-14 12:06:38 -0700314 function form_dropdown($data = '', $options = array(), $selected = array(), $extra = '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000315 {
Brennan Thompson40cd6002014-02-14 12:06:38 -0700316 $name = ! is_array($data) ? $data : '';
317 $defaults = array('name' => ( $name));
318
Brennan Thompson06a0d622014-02-14 12:17:48 -0700319 if ( is_array($data) AND isset($data['selected']) AND $data['selected'] !== NULL)
Andrey Andreev93a83c72012-03-26 21:24:02 +0300320 {
Brennan Thompson40cd6002014-02-14 12:06:38 -0700321 $selected = $data['selected'];
322 unset($data['selected']); // selects don't have a selected attribute
Andrey Andreev93a83c72012-03-26 21:24:02 +0300323 }
324
Andrey Andreev582ebcb2012-10-27 00:52:15 +0300325 is_array($selected) OR $selected = array($selected);
Derek Allard2067d1a2008-11-13 22:59:24 +0000326
327 // If no selected state was submitted we will attempt to set it automatically
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200328 if (count($selected) === 0 && isset($_POST[$name]))
Derek Allard2067d1a2008-11-13 22:59:24 +0000329 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200330 $selected = array($_POST[$name]);
Derek Allard2067d1a2008-11-13 22:59:24 +0000331 }
Brennan Thompson40cd6002014-02-14 12:06:38 -0700332
333 if ( is_array($data) && isset($data['options']))
334 {
335 $options = $data['options'];
336 unset($data['options']); // selects don't use an options attribute
337 }
Brennan Thompson21ef97e2014-02-16 11:01:03 -0700338
339 is_array($options) OR $options = array($options);
340
341 $extra = _attributes_to_string($extra);
Brennan Thompson40cd6002014-02-14 12:06:38 -0700342
Derek Allard2067d1a2008-11-13 22:59:24 +0000343 $multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : '';
Brennan Thompson40cd6002014-02-14 12:06:38 -0700344
Brennan Thompson21ef97e2014-02-16 11:01:03 -0700345 $form = '<select '.trim(_parse_form_attributes($data, $defaults)).$extra.$multiple.">\n";
Brennan Thompson40cd6002014-02-14 12:06:38 -0700346
Derek Allard2067d1a2008-11-13 22:59:24 +0000347 foreach ($options as $key => $val)
348 {
349 $key = (string) $key;
Derek Allard2067d1a2008-11-13 22:59:24 +0000350
Andrey Andreev6b114ae2012-07-13 12:05:52 +0300351 if (is_array($val))
Derek Allard78a5fc92009-02-05 16:34:35 +0000352 {
Andrey Andreev6b114ae2012-07-13 12:05:52 +0300353 if (empty($val))
354 {
355 continue;
356 }
357
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 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300362 $sel = in_array($optgroup_key, $selected) ? ' selected="selected"' : '';
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200363 $form .= '<option value="'.form_prep($optgroup_key).'"'.$sel.'>'
Brennan Thompson40cd6002014-02-14 12:06:38 -0700364 .(string) $optgroup_val."</option>\n";
Derek Allard78a5fc92009-02-05 16:34:35 +0000365 }
366
Andrey Andreev93a83c72012-03-26 21:24:02 +0300367 $form .= "</optgroup>\n";
Derek Allard78a5fc92009-02-05 16:34:35 +0000368 }
369 else
370 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200371 $form .= '<option value="'.form_prep($key).'"'
Brennan Thompson40cd6002014-02-14 12:06:38 -0700372 .(in_array($key, $selected) ? ' selected="selected"' : '').'>'
373 .(string) $val."</option>\n";
Derek Allard78a5fc92009-02-05 16:34:35 +0000374 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000375 }
Brennan Thompson40cd6002014-02-14 12:06:38 -0700376
Andrey Andreev93a83c72012-03-26 21:24:02 +0300377 return $form."</select>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000378 }
379}
380
381// ------------------------------------------------------------------------
382
Derek Allard2067d1a2008-11-13 22:59:24 +0000383if ( ! function_exists('form_checkbox'))
384{
Timothy Warren01b129a2012-04-27 11:36:50 -0400385 /**
386 * Checkbox Field
387 *
388 * @param mixed
389 * @param string
390 * @param bool
391 * @param string
392 * @return string
393 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000394 function form_checkbox($data = '', $value = '', $checked = FALSE, $extra = '')
395 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300396 $defaults = array('type' => 'checkbox', 'name' => ( ! is_array($data) ? $data : ''), 'value' => $value);
Derek Allard2067d1a2008-11-13 22:59:24 +0000397
Andrey Andreev93a83c72012-03-26 21:24:02 +0300398 if (is_array($data) && array_key_exists('checked', $data))
Derek Allard2067d1a2008-11-13 22:59:24 +0000399 {
400 $checked = $data['checked'];
401
Michiel Vugteveen910ff7a2012-06-06 20:03:14 +0200402 if ($checked == FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000403 {
404 unset($data['checked']);
405 }
406 else
407 {
408 $data['checked'] = 'checked';
409 }
410 }
411
Michiel Vugteveen910ff7a2012-06-06 20:03:14 +0200412 if ($checked == TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000413 {
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
Derek Allard2067d1a2008-11-13 22:59:24 +0000427if ( ! function_exists('form_radio'))
428{
Timothy Warren01b129a2012-04-27 11:36:50 -0400429 /**
430 * Radio Button
431 *
432 * @param mixed
433 * @param string
434 * @param bool
435 * @param string
436 * @return string
437 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000438 function form_radio($data = '', $value = '', $checked = FALSE, $extra = '')
439 {
440 if ( ! is_array($data))
Barry Mienydd671972010-10-04 16:33:58 +0200441 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000442 $data = array('name' => $data);
443 }
444
445 $data['type'] = 'radio';
446 return form_checkbox($data, $value, $checked, $extra);
447 }
448}
449
450// ------------------------------------------------------------------------
451
Derek Allard2067d1a2008-11-13 22:59:24 +0000452if ( ! function_exists('form_submit'))
Barry Mienydd671972010-10-04 16:33:58 +0200453{
Timothy Warren01b129a2012-04-27 11:36:50 -0400454 /**
455 * Submit Button
456 *
457 * @param mixed
458 * @param string
459 * @param string
460 * @return string
461 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000462 function form_submit($data = '', $value = '', $extra = '')
463 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300464 $defaults = array('type' => 'submit', 'name' => ( ! is_array($data) ? $data : ''), 'value' => $value);
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200465 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000466 }
467}
468
469// ------------------------------------------------------------------------
470
Derek Allard2067d1a2008-11-13 22:59:24 +0000471if ( ! function_exists('form_reset'))
472{
Timothy Warren01b129a2012-04-27 11:36:50 -0400473 /**
474 * Reset Button
475 *
476 * @param mixed
477 * @param string
478 * @param string
479 * @return string
480 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000481 function form_reset($data = '', $value = '', $extra = '')
482 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300483 $defaults = array('type' => 'reset', 'name' => ( ! is_array($data) ? $data : ''), 'value' => $value);
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200484 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000485 }
486}
487
488// ------------------------------------------------------------------------
489
Derek Allard2067d1a2008-11-13 22:59:24 +0000490if ( ! function_exists('form_button'))
491{
Timothy Warren01b129a2012-04-27 11:36:50 -0400492 /**
493 * Form Button
494 *
495 * @param mixed
496 * @param string
497 * @param string
498 * @return string
499 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000500 function form_button($data = '', $content = '', $extra = '')
501 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300502 $defaults = array('name' => ( ! is_array($data) ? $data : ''), 'type' => 'button');
503 if (is_array($data) && isset($data['content']))
Derek Allard2067d1a2008-11-13 22:59:24 +0000504 {
505 $content = $data['content'];
506 unset($data['content']); // content is not an attribute
507 }
508
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200509 return '<button '._parse_form_attributes($data, $defaults).$extra.'>'.$content."</button>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000510 }
511}
512
513// ------------------------------------------------------------------------
514
Derek Allard2067d1a2008-11-13 22:59:24 +0000515if ( ! function_exists('form_label'))
516{
Timothy Warren01b129a2012-04-27 11:36:50 -0400517 /**
518 * Form Label Tag
519 *
520 * @param string The text to appear onscreen
521 * @param string The id the label applies to
522 * @param string Additional attributes
523 * @return string
524 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000525 function form_label($label_text = '', $id = '', $attributes = array())
526 {
527
528 $label = '<label';
529
Alex Bilbie773ccc32012-06-02 11:11:08 +0100530 if ($id !== '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000531 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300532 $label .= ' for="'.$id.'"';
Derek Allard2067d1a2008-11-13 22:59:24 +0000533 }
534
Andrey Andreev93a83c72012-03-26 21:24:02 +0300535 if (is_array($attributes) && count($attributes) > 0)
Derek Allard2067d1a2008-11-13 22:59:24 +0000536 {
537 foreach ($attributes as $key => $val)
538 {
539 $label .= ' '.$key.'="'.$val.'"';
540 }
541 }
542
Andrey Andreev93a83c72012-03-26 21:24:02 +0300543 return $label.'>'.$label_text.'</label>';
Derek Allard2067d1a2008-11-13 22:59:24 +0000544 }
545}
546
547// ------------------------------------------------------------------------
Timothy Warren01b129a2012-04-27 11:36:50 -0400548
Derek Allard2067d1a2008-11-13 22:59:24 +0000549if ( ! function_exists('form_fieldset'))
550{
Timothy Warren01b129a2012-04-27 11:36:50 -0400551 /**
552 * Fieldset Tag
553 *
554 * Used to produce <fieldset><legend>text</legend>. To close fieldset
555 * use form_fieldset_close()
556 *
557 * @param string The legend text
vlakoffea19bc42013-07-27 10:07:43 +0200558 * @param array Additional attributes
Timothy Warren01b129a2012-04-27 11:36:50 -0400559 * @return string
560 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000561 function form_fieldset($legend_text = '', $attributes = array())
562 {
vlakoffea19bc42013-07-27 10:07:43 +0200563 $fieldset = '<fieldset'._attributes_to_string($attributes).">\n";
Alex Bilbie773ccc32012-06-02 11:11:08 +0100564 if ($legend_text !== '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000565 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300566 return $fieldset.'<legend>'.$legend_text."</legend>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000567 }
568
569 return $fieldset;
570 }
571}
572
573// ------------------------------------------------------------------------
574
Derek Allard2067d1a2008-11-13 22:59:24 +0000575if ( ! function_exists('form_fieldset_close'))
576{
Timothy Warren01b129a2012-04-27 11:36:50 -0400577 /**
578 * Fieldset Close Tag
579 *
580 * @param string
581 * @return string
582 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000583 function form_fieldset_close($extra = '')
584 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300585 return '</fieldset>'.$extra;
Derek Allard2067d1a2008-11-13 22:59:24 +0000586 }
587}
588
589// ------------------------------------------------------------------------
590
Derek Allard2067d1a2008-11-13 22:59:24 +0000591if ( ! function_exists('form_close'))
592{
Timothy Warren01b129a2012-04-27 11:36:50 -0400593 /**
594 * Form Close Tag
595 *
596 * @param string
597 * @return string
598 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000599 function form_close($extra = '')
600 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300601 return '</form>'.$extra;
Derek Allard2067d1a2008-11-13 22:59:24 +0000602 }
603}
604
605// ------------------------------------------------------------------------
606
Derek Allard2067d1a2008-11-13 22:59:24 +0000607if ( ! function_exists('form_prep'))
608{
Timothy Warren01b129a2012-04-27 11:36:50 -0400609 /**
610 * Form Prep
611 *
612 * Formats text so that it can be safely placed in a form field in the event it has HTML tags.
613 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200614 * @param string|string[] $str Value to escape
615 * @param bool $is_textarea Whether we're escaping for a textarea element
616 * @return string|string[] Escaped values
Timothy Warren01b129a2012-04-27 11:36:50 -0400617 */
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200618 function form_prep($str = '', $is_textarea = FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000619 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200620 if (is_array($str))
621 {
622 foreach (array_keys($str) as $key)
623 {
624 $str[$key] = form_prep($str[$key], $is_textarea);
625 }
626
627 return $str;
628 }
629
630 if ($is_textarea === TRUE)
631 {
632 return str_replace(array('<', '>'), array('&lt;', '&gt;'), stripslashes($str));
633 }
634
Andrey Andreev075f6fa2012-11-01 15:18:44 +0200635 return str_replace(array("'", '"'), array('&#39;', '&quot;'), stripslashes($str));
Derek Allard2067d1a2008-11-13 22:59:24 +0000636 }
637}
638
639// ------------------------------------------------------------------------
640
Derek Allard2067d1a2008-11-13 22:59:24 +0000641if ( ! function_exists('set_value'))
642{
Timothy Warren01b129a2012-04-27 11:36:50 -0400643 /**
644 * Form Value
645 *
646 * Grabs a value from the POST array for the specified field so you can
647 * re-populate an input field or textarea. If Form Validation
648 * is active it retrieves the info from the validation class
649 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200650 * @param string $field Field name
651 * @param string $default Default value
652 * @param bool $is_textarea Whether the field is a textarea element
653 * @return string
Timothy Warren01b129a2012-04-27 11:36:50 -0400654 */
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200655 function set_value($field = '', $default = '', $is_textarea = FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000656 {
nisheeth-barthwal77236e02013-03-25 23:42:36 +0530657 $CI =& get_instance();
Derek Allard2067d1a2008-11-13 22:59:24 +0000658
nisheeth-barthwal47ea5a82013-03-26 18:57:28 +0530659 $value = (isset($CI->form_validation) && is_object($CI->form_validation) && $CI->form_validation->has_rule($field))
660 ? $CI->form_validation->set_value($field, $default)
661 : $CI->input->post($field, FALSE);
662
663 return form_prep($value === NULL ? $default : $value, $is_textarea);
Derek Allard2067d1a2008-11-13 22:59:24 +0000664 }
665}
666
667// ------------------------------------------------------------------------
668
Derek Allard2067d1a2008-11-13 22:59:24 +0000669if ( ! function_exists('set_select'))
670{
Timothy Warren01b129a2012-04-27 11:36:50 -0400671 /**
672 * Set Select
673 *
674 * Let's you set the selected value of a <select> menu via data in the POST array.
675 * If Form Validation is active it retrieves the info from the validation class
676 *
677 * @param string
678 * @param string
679 * @param bool
680 * @return string
681 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000682 function set_select($field = '', $value = '', $default = FALSE)
683 {
Andrey Andreev67f6a5e2013-09-13 16:21:31 +0300684 $CI =& get_instance();
Derek Allard2067d1a2008-11-13 22:59:24 +0000685
Andrey Andreev67f6a5e2013-09-13 16:21:31 +0300686 if (isset($CI->form_validation) && is_object($CI->form_validation) && $CI->form_validation->has_rule($field))
Derek Allard2067d1a2008-11-13 22:59:24 +0000687 {
Andrey Andreev67f6a5e2013-09-13 16:21:31 +0300688 return $CI->form_validation->set_select($field, $value, $default);
689 }
690 elseif (($input = $CI->input->post($field, FALSE)) === NULL)
691 {
692 return ($default === TRUE) ? ' selected="selected"' : '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000693 }
Andrey Andreeva587a932013-10-23 19:57:46 +0300694
695 $value = (string) $value;
696 if (is_array($input))
Andrey Andreevd3b7e242013-09-13 18:36:29 +0300697 {
Andrey Andreeva587a932013-10-23 19:57:46 +0300698 // Note: in_array('', array(0)) returns TRUE, do not use it
699 foreach ($input as &$v)
700 {
701 if ($value === $v)
702 {
703 return ' selected="selected"';
704 }
705 }
706
707 return '';
Andrey Andreevd3b7e242013-09-13 18:36:29 +0300708 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000709
Andrey Andreevd3b7e242013-09-13 18:36:29 +0300710 return ($input === $value) ? ' selected="selected"' : '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000711 }
712}
713
714// ------------------------------------------------------------------------
715
Derek Allard2067d1a2008-11-13 22:59:24 +0000716if ( ! function_exists('set_checkbox'))
717{
Timothy Warren01b129a2012-04-27 11:36:50 -0400718 /**
719 * Set Checkbox
720 *
721 * Let's you set the selected value of a checkbox via the value in the POST array.
722 * If Form Validation is active it retrieves the info from the validation class
723 *
724 * @param string
725 * @param string
726 * @param bool
727 * @return string
728 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000729 function set_checkbox($field = '', $value = '', $default = FALSE)
730 {
Andrey Andreevae50f552013-09-13 16:17:41 +0300731 $CI =& get_instance();
Derek Allard2067d1a2008-11-13 22:59:24 +0000732
Andrey Andreevae50f552013-09-13 16:17:41 +0300733 if (isset($CI->form_validation) && is_object($CI->form_validation) && $CI->form_validation->has_rule($field))
Barry Mienydd671972010-10-04 16:33:58 +0200734 {
Andrey Andreevae50f552013-09-13 16:17:41 +0300735 return $CI->form_validation->set_checkbox($field, $value, $default);
736 }
737 elseif (($input = $CI->input->post($field, FALSE)) === NULL)
738 {
739 return ($default === TRUE) ? ' checked="checked"' : '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000740 }
Andrey Andreeva587a932013-10-23 19:57:46 +0300741
742 $value = (string) $value;
743 if (is_array($input))
Andrey Andreeve8a23a52013-09-13 18:29:29 +0300744 {
Andrey Andreeva587a932013-10-23 19:57:46 +0300745 // Note: in_array('', array(0)) returns TRUE, do not use it
746 foreach ($input as &$v)
747 {
748 if ($value === $v)
749 {
750 return ' checked="checked"';
751 }
752 }
753
754 return '';
Andrey Andreeve8a23a52013-09-13 18:29:29 +0300755 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000756
Andrey Andreevae50f552013-09-13 16:17:41 +0300757 return ($input === $value) ? ' checked="checked"' : '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000758 }
759}
760
761// ------------------------------------------------------------------------
762
Derek Allard2067d1a2008-11-13 22:59:24 +0000763if ( ! function_exists('set_radio'))
764{
Timothy Warren01b129a2012-04-27 11:36:50 -0400765 /**
766 * Set Radio
767 *
768 * Let's you set the selected value of a radio field via info in the POST array.
769 * If Form Validation is active it retrieves the info from the validation class
770 *
Andrey Andreevae50f552013-09-13 16:17:41 +0300771 * @param string $field
772 * @param string $value
773 * @param bool $default
Timothy Warren01b129a2012-04-27 11:36:50 -0400774 * @return string
775 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000776 function set_radio($field = '', $value = '', $default = FALSE)
777 {
Andrey Andreevae50f552013-09-13 16:17:41 +0300778 $CI =& get_instance();
Derek Allard2067d1a2008-11-13 22:59:24 +0000779
Andrey Andreevae50f552013-09-13 16:17:41 +0300780 if (isset($CI->form_validation) && is_object($CI->form_validation) && $CI->form_validation->has_rule($field))
Derek Allard2067d1a2008-11-13 22:59:24 +0000781 {
Andrey Andreevae50f552013-09-13 16:17:41 +0300782 return $CI->form_validation->set_radio($field, $value, $default);
783 }
784 elseif (($input = $CI->input->post($field, FALSE)) === NULL)
785 {
786 return ($default === TRUE) ? ' checked="checked"' : '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000787 }
788
Andrey Andreeva587a932013-10-23 19:57:46 +0300789 return ($input === (string) $value) ? ' checked="checked"' : '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000790 }
791}
792
793// ------------------------------------------------------------------------
794
Derek Allard2067d1a2008-11-13 22:59:24 +0000795if ( ! function_exists('form_error'))
796{
Timothy Warren01b129a2012-04-27 11:36:50 -0400797 /**
798 * Form Error
799 *
800 * Returns the error for a specific form field. This is a helper for the
801 * form validation class.
802 *
803 * @param string
804 * @param string
805 * @param string
806 * @return string
807 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000808 function form_error($field = '', $prefix = '', $suffix = '')
809 {
810 if (FALSE === ($OBJ =& _get_validation_object()))
811 {
812 return '';
813 }
814
815 return $OBJ->error($field, $prefix, $suffix);
816 }
817}
818
819// ------------------------------------------------------------------------
820
Derek Allard2067d1a2008-11-13 22:59:24 +0000821if ( ! function_exists('validation_errors'))
822{
Timothy Warren01b129a2012-04-27 11:36:50 -0400823 /**
824 * Validation Error String
825 *
826 * Returns all the errors associated with a form submission. This is a helper
827 * function for the form validation class.
828 *
829 * @param string
830 * @param string
831 * @return string
832 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000833 function validation_errors($prefix = '', $suffix = '')
834 {
835 if (FALSE === ($OBJ =& _get_validation_object()))
Greg Akerc83bea62011-04-23 12:12:57 -0500836 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000837 return '';
838 }
839
840 return $OBJ->error_string($prefix, $suffix);
841 }
842}
843
844// ------------------------------------------------------------------------
845
Derek Allard2067d1a2008-11-13 22:59:24 +0000846if ( ! function_exists('_parse_form_attributes'))
847{
Timothy Warren01b129a2012-04-27 11:36:50 -0400848 /**
849 * Parse the form attributes
850 *
851 * Helper function used by some of the form helpers
852 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200853 * @param array $attributes List of attributes
854 * @param array $default Default values
Timothy Warren01b129a2012-04-27 11:36:50 -0400855 * @return string
856 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000857 function _parse_form_attributes($attributes, $default)
858 {
859 if (is_array($attributes))
860 {
861 foreach ($default as $key => $val)
862 {
863 if (isset($attributes[$key]))
864 {
865 $default[$key] = $attributes[$key];
866 unset($attributes[$key]);
867 }
868 }
869
870 if (count($attributes) > 0)
871 {
872 $default = array_merge($default, $attributes);
873 }
874 }
875
876 $att = '';
Barry Mienydd671972010-10-04 16:33:58 +0200877
Derek Allard2067d1a2008-11-13 22:59:24 +0000878 foreach ($default as $key => $val)
879 {
Alex Bilbie773ccc32012-06-02 11:11:08 +0100880 if ($key === 'value')
Derek Allard2067d1a2008-11-13 22:59:24 +0000881 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200882 $val = form_prep($val);
Derek Allard2067d1a2008-11-13 22:59:24 +0000883 }
Andrey Andreev60b97142012-10-25 16:59:17 +0300884 elseif ($key === 'name' && ! strlen($default['name']))
885 {
886 continue;
887 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000888
Andrey Andreev93a83c72012-03-26 21:24:02 +0300889 $att .= $key.'="'.$val.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000890 }
891
892 return $att;
893 }
894}
895
896// ------------------------------------------------------------------------
897
Derek Allard2067d1a2008-11-13 22:59:24 +0000898if ( ! function_exists('_attributes_to_string'))
899{
Timothy Warren01b129a2012-04-27 11:36:50 -0400900 /**
901 * Attributes To String
902 *
903 * Helper function used by some of the form helpers
904 *
905 * @param mixed
Timothy Warren01b129a2012-04-27 11:36:50 -0400906 * @return string
907 */
vlakoffea19bc42013-07-27 10:07:43 +0200908 function _attributes_to_string($attributes)
Derek Allard2067d1a2008-11-13 22:59:24 +0000909 {
vlakoffbb8b0892013-07-28 22:35:04 +0200910 if (empty($attributes))
911 {
912 return '';
913 }
914
vlakoffea19bc42013-07-27 10:07:43 +0200915 if (is_object($attributes))
Derek Allard2067d1a2008-11-13 22:59:24 +0000916 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300917 $attributes = (array) $attributes;
Derek Allard2067d1a2008-11-13 22:59:24 +0000918 }
919
vlakoffea19bc42013-07-27 10:07:43 +0200920 if (is_array($attributes))
Derek Allard2067d1a2008-11-13 22:59:24 +0000921 {
Derek Allard3241d732009-09-17 12:17:45 +0000922 $atts = '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000923
Derek Allard3241d732009-09-17 12:17:45 +0000924 foreach ($attributes as $key => $val)
925 {
926 $atts .= ' '.$key.'="'.$val.'"';
927 }
928
929 return $atts;
Derek Allard2067d1a2008-11-13 22:59:24 +0000930 }
vlakoffea19bc42013-07-27 10:07:43 +0200931
vlakofff7464752013-07-28 22:23:21 +0200932 if (is_string($attributes))
933 {
Brennan Thompson21ef97e2014-02-16 11:01:03 -0700934 return $attributes;
vlakofff7464752013-07-28 22:23:21 +0200935 }
936
vlakoffea19bc42013-07-27 10:07:43 +0200937 return FALSE;
Derek Allard2067d1a2008-11-13 22:59:24 +0000938 }
939}
940
941// ------------------------------------------------------------------------
942
Derek Allard2067d1a2008-11-13 22:59:24 +0000943if ( ! function_exists('_get_validation_object'))
944{
Timothy Warren01b129a2012-04-27 11:36:50 -0400945 /**
946 * Validation Object
947 *
948 * Determines what the form validation class was instantiated as, fetches
949 * the object and returns it.
950 *
951 * @return mixed
952 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000953 function &_get_validation_object()
954 {
955 $CI =& get_instance();
956
Greg Aker0c9ee4a2011-04-20 09:40:17 -0500957 // We set this as a variable since we're returning by reference.
Derek Allard2067d1a2008-11-13 22:59:24 +0000958 $return = FALSE;
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200959
Andrey Andreev519f87a2013-07-23 17:16:10 +0300960 if (FALSE !== ($object = $CI->load->is_loaded('Form_validation')))
Derek Allard2067d1a2008-11-13 22:59:24 +0000961 {
Greg Aker0c9ee4a2011-04-20 09:40:17 -0500962 if ( ! isset($CI->$object) OR ! is_object($CI->$object))
963 {
964 return $return;
965 }
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200966
Greg Aker0c9ee4a2011-04-20 09:40:17 -0500967 return $CI->$object;
Derek Allard2067d1a2008-11-13 22:59:24 +0000968 }
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200969
Greg Aker0c9ee4a2011-04-20 09:40:17 -0500970 return $return;
Derek Allard2067d1a2008-11-13 22:59:24 +0000971 }
972}
973
Derek Allard2067d1a2008-11-13 22:59:24 +0000974/* End of file form_helper.php */
Zachary Cardoza9f27a3e2013-03-23 21:59:20 -0700975/* Location: ./system/helpers/form_helper.php */