blob: 9c4c4dae684810124aaab40fc3a0e5ed652d2f37 [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
Derek Allard2067d1a2008-11-13 22:59:24 +000027/**
28 * CodeIgniter Form Helpers
29 *
30 * @package CodeIgniter
31 * @subpackage Helpers
32 * @category Helpers
Derek Jonesf4a4bd82011-10-20 12:18:42 -050033 * @author EllisLab Dev Team
Derek Allard2067d1a2008-11-13 22:59:24 +000034 * @link http://codeigniter.com/user_guide/helpers/form_helper.html
35 */
36
37// ------------------------------------------------------------------------
38
Derek Allard2067d1a2008-11-13 22:59:24 +000039if ( ! function_exists('form_open'))
40{
Timothy Warren01b129a2012-04-27 11:36:50 -040041 /**
42 * Form Declaration
43 *
44 * Creates the opening portion of the form.
45 *
46 * @param string the URI segments of the form destination
47 * @param array a key/value pair of attributes
48 * @param array a key/value pair hidden data
49 * @return string
50 */
Derek Allard2067d1a2008-11-13 22:59:24 +000051 function form_open($action = '', $attributes = '', $hidden = array())
52 {
53 $CI =& get_instance();
54
Alex Bilbie773ccc32012-06-02 11:11:08 +010055 if ($attributes === '')
Derek Allard2067d1a2008-11-13 22:59:24 +000056 {
Derek Allard3241d732009-09-17 12:17:45 +000057 $attributes = 'method="post"';
Derek Allard2067d1a2008-11-13 22:59:24 +000058 }
59
Phil Sturgeon9d0e6172011-04-02 12:43:55 +010060 // If an action is not a full URL then turn it into one
Phil Sturgeon133beaf2011-03-10 16:38:32 +000061 if ($action && strpos($action, '://') === FALSE)
62 {
Phil Sturgeon52e73182011-03-11 10:17:01 +000063 $action = $CI->config->site_url($action);
Phil Sturgeon133beaf2011-03-10 16:38:32 +000064 }
Andrey Andreev3c32a112012-06-16 18:05:34 +030065 elseif ( ! $action)
66 {
67 // If no action is provided then set to the current url
68 $action = $CI->config->site_url($CI->uri->uri_string());
69 }
Phil Sturgeon9d0e6172011-04-02 12:43:55 +010070
Andrey Andreev8bf6bb62012-01-06 16:11:04 +020071 $form = '<form action="'.$action.'"'._attributes_to_string($attributes, TRUE).">\n";
Barry Mienydd671972010-10-04 16:33:58 +020072
Andrey Andreev93a83c72012-03-26 21:24:02 +030073 // Add CSRF field if enabled, but leave it out for GET requests and requests to external websites
74 if ($CI->config->item('csrf_protection') === TRUE && ! (strpos($action, $CI->config->base_url()) === FALSE OR strpos($form, 'method="get"')))
Derek Allard958543a2010-07-22 14:10:26 -040075 {
Greg Aker1f6f0ab2011-04-07 18:24:53 -050076 $hidden[$CI->security->get_csrf_token_name()] = $CI->security->get_csrf_hash();
Greg Aker28b425a2010-09-15 11:43:23 -050077 }
78
Andrey Andreev93a83c72012-03-26 21:24:02 +030079 if (is_array($hidden) && count($hidden) > 0)
Greg Aker28b425a2010-09-15 11:43:23 -050080 {
Andrey Andreev3c32a112012-06-16 18:05:34 +030081 $form .= '<div style="display:none;">'.form_hidden($hidden).'</div>';
Derek Allard958543a2010-07-22 14:10:26 -040082 }
83
Derek Allard2067d1a2008-11-13 22:59:24 +000084 return $form;
85 }
86}
87
88// ------------------------------------------------------------------------
89
Derek Allard2067d1a2008-11-13 22:59:24 +000090if ( ! function_exists('form_open_multipart'))
91{
Timothy Warren01b129a2012-04-27 11:36:50 -040092 /**
93 * Form Declaration - Multipart type
94 *
95 * Creates the opening portion of the form, but with "multipart/form-data".
96 *
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 */
Ben Edmunds98963b32011-08-20 14:17:16 -0500102 function form_open_multipart($action = '', $attributes = array(), $hidden = array())
Derek Allard2067d1a2008-11-13 22:59:24 +0000103 {
Derek Allard33d4b6a2010-01-17 07:23:00 +0000104 if (is_string($attributes))
105 {
106 $attributes .= ' enctype="multipart/form-data"';
107 }
108 else
109 {
110 $attributes['enctype'] = 'multipart/form-data';
111 }
112
Derek Allard2067d1a2008-11-13 22:59:24 +0000113 return form_open($action, $attributes, $hidden);
114 }
115}
116
117// ------------------------------------------------------------------------
118
Derek Allard2067d1a2008-11-13 22:59:24 +0000119if ( ! function_exists('form_hidden'))
120{
Timothy Warren01b129a2012-04-27 11:36:50 -0400121 /**
122 * Hidden Input Field
123 *
124 * Generates hidden fields. You can pass a simple key/value string or
125 * an associative array with multiple values.
126 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200127 * @param mixed $name Field name
128 * @param string $value Field value
129 * @param bool $recursing
Timothy Warren01b129a2012-04-27 11:36:50 -0400130 * @return string
131 */
Robin Sowell57fe4102009-03-26 18:58:46 +0000132 function form_hidden($name, $value = '', $recursing = FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000133 {
Robin Sowell57fe4102009-03-26 18:58:46 +0000134 static $form;
135
136 if ($recursing === FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000137 {
Robin Sowell57fe4102009-03-26 18:58:46 +0000138 $form = "\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000139 }
140
Robin Sowell57fe4102009-03-26 18:58:46 +0000141 if (is_array($name))
Derek Allard2067d1a2008-11-13 22:59:24 +0000142 {
Robin Sowell57fe4102009-03-26 18:58:46 +0000143 foreach ($name as $key => $val)
144 {
145 form_hidden($key, $val, TRUE);
146 }
147 return $form;
148 }
149
150 if ( ! is_array($value))
151 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200152 $form .= '<input type="hidden" name="'.$name.'" value="'.form_prep($value)."\" />\n";
Robin Sowell57fe4102009-03-26 18:58:46 +0000153 }
154 else
155 {
156 foreach ($value as $k => $v)
157 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300158 $k = is_int($k) ? '' : $k;
Robin Sowell57fe4102009-03-26 18:58:46 +0000159 form_hidden($name.'['.$k.']', $v, TRUE);
160 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000161 }
162
163 return $form;
164 }
165}
166
167// ------------------------------------------------------------------------
168
Derek Allard2067d1a2008-11-13 22:59:24 +0000169if ( ! function_exists('form_input'))
170{
Timothy Warren01b129a2012-04-27 11:36:50 -0400171 /**
172 * Text Input Field
173 *
174 * @param mixed
175 * @param string
176 * @param string
177 * @return string
178 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000179 function form_input($data = '', $value = '', $extra = '')
180 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300181 $defaults = array('type' => 'text', 'name' => ( ! is_array($data) ? $data : ''), 'value' => $value);
Derek Allard2067d1a2008-11-13 22:59:24 +0000182
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200183 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000184 }
185}
186
187// ------------------------------------------------------------------------
188
Derek Allard2067d1a2008-11-13 22:59:24 +0000189if ( ! function_exists('form_password'))
190{
Timothy Warren01b129a2012-04-27 11:36:50 -0400191 /**
192 * Password Field
193 *
194 * Identical to the input function but adds the "password" type
195 *
196 * @param mixed
197 * @param string
198 * @param string
199 * @return string
200 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000201 function form_password($data = '', $value = '', $extra = '')
202 {
203 if ( ! is_array($data))
204 {
205 $data = array('name' => $data);
206 }
207
208 $data['type'] = 'password';
209 return form_input($data, $value, $extra);
210 }
211}
212
213// ------------------------------------------------------------------------
214
Derek Allard2067d1a2008-11-13 22:59:24 +0000215if ( ! function_exists('form_upload'))
216{
Timothy Warren01b129a2012-04-27 11:36:50 -0400217 /**
218 * Upload Field
219 *
220 * Identical to the input function but adds the "file" type
221 *
222 * @param mixed
223 * @param string
224 * @param string
225 * @return string
226 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000227 function form_upload($data = '', $value = '', $extra = '')
228 {
229 if ( ! is_array($data))
230 {
231 $data = array('name' => $data);
232 }
233
234 $data['type'] = 'file';
235 return form_input($data, $value, $extra);
236 }
237}
238
239// ------------------------------------------------------------------------
240
Derek Allard2067d1a2008-11-13 22:59:24 +0000241if ( ! function_exists('form_textarea'))
242{
Timothy Warren01b129a2012-04-27 11:36:50 -0400243 /**
244 * Textarea field
245 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200246 * @param mixed $data
247 * @param string $value
248 * @param string $extra
Timothy Warren01b129a2012-04-27 11:36:50 -0400249 * @return string
250 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000251 function form_textarea($data = '', $value = '', $extra = '')
252 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300253 $defaults = array('name' => ( ! is_array($data) ? $data : ''), 'cols' => '40', 'rows' => '10');
Derek Allard2067d1a2008-11-13 22:59:24 +0000254
255 if ( ! is_array($data) OR ! isset($data['value']))
256 {
257 $val = $value;
258 }
259 else
260 {
Barry Mienydd671972010-10-04 16:33:58 +0200261 $val = $data['value'];
Derek Allard2067d1a2008-11-13 22:59:24 +0000262 unset($data['value']); // textareas don't use the value attribute
263 }
Barry Mienydd671972010-10-04 16:33:58 +0200264
Andrey Andreev93a83c72012-03-26 21:24:02 +0300265 $name = is_array($data) ? $data['name'] : $data;
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200266 return '<textarea '._parse_form_attributes($data, $defaults).$extra.'>'.form_prep($val, TRUE)."</textarea>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000267 }
268}
269
270// ------------------------------------------------------------------------
271
Derek Jones68788d52010-03-05 10:11:31 -0600272if ( ! function_exists('form_multiselect'))
Derek Jones26399292009-04-08 16:14:17 +0000273{
Timothy Warren01b129a2012-04-27 11:36:50 -0400274 /**
275 * Multi-select menu
276 *
277 * @param string
278 * @param array
279 * @param mixed
280 * @param string
281 * @return string
282 */
Derek Jones26399292009-04-08 16:14:17 +0000283 function form_multiselect($name = '', $options = array(), $selected = array(), $extra = '')
284 {
285 if ( ! strpos($extra, 'multiple'))
286 {
287 $extra .= ' multiple="multiple"';
288 }
Barry Mienydd671972010-10-04 16:33:58 +0200289
Derek Jones26399292009-04-08 16:14:17 +0000290 return form_dropdown($name, $options, $selected, $extra);
291 }
292}
293
294// --------------------------------------------------------------------
295
Derek Allard2067d1a2008-11-13 22:59:24 +0000296if ( ! function_exists('form_dropdown'))
297{
Timothy Warren01b129a2012-04-27 11:36:50 -0400298 /**
299 * Drop-down Menu
300 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200301 * @param mixed $name
302 * @param mixed $options
303 * @param mixed $selected
304 * @param mixed $extra
Timothy Warren01b129a2012-04-27 11:36:50 -0400305 * @return string
306 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000307 function form_dropdown($name = '', $options = array(), $selected = array(), $extra = '')
308 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300309 // If name is really an array then we'll call the function again using the array
310 if (is_array($name) && isset($name['name']))
311 {
312 isset($name['options']) OR $name['options'] = array();
313 isset($name['selected']) OR $name['selected'] = array();
314 isset($name['extra']) OR $name['extra'] = array();
315
316 return form_dropdown($name['name'], $name['options'], $name['selected'], $name['extra']);
317 }
318
Andrey Andreev582ebcb2012-10-27 00:52:15 +0300319 is_array($selected) OR $selected = array($selected);
Derek Allard2067d1a2008-11-13 22:59:24 +0000320
321 // If no selected state was submitted we will attempt to set it automatically
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200322 if (count($selected) === 0 && isset($_POST[$name]))
Derek Allard2067d1a2008-11-13 22:59:24 +0000323 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200324 $selected = array($_POST[$name]);
Derek Allard2067d1a2008-11-13 22:59:24 +0000325 }
326
Michiel Vugteveen9640a032012-06-06 20:20:27 +0200327 if ($extra != '')
328 {
329 $extra = ' '.$extra;
330 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000331
332 $multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : '';
333
334 $form = '<select name="'.$name.'"'.$extra.$multiple.">\n";
Robin Sowell57fe4102009-03-26 18:58:46 +0000335
Derek Allard2067d1a2008-11-13 22:59:24 +0000336 foreach ($options as $key => $val)
337 {
338 $key = (string) $key;
Derek Allard2067d1a2008-11-13 22:59:24 +0000339
Andrey Andreev6b114ae2012-07-13 12:05:52 +0300340 if (is_array($val))
Derek Allard78a5fc92009-02-05 16:34:35 +0000341 {
Andrey Andreev6b114ae2012-07-13 12:05:52 +0300342 if (empty($val))
343 {
344 continue;
345 }
346
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200347 $form .= '<optgroup label="'.$key."\">\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000348
Derek Allard78a5fc92009-02-05 16:34:35 +0000349 foreach ($val as $optgroup_key => $optgroup_val)
350 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300351 $sel = in_array($optgroup_key, $selected) ? ' selected="selected"' : '';
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200352 $form .= '<option value="'.form_prep($optgroup_key).'"'.$sel.'>'
Andrey Andreev582ebcb2012-10-27 00:52:15 +0300353 .(string) $optgroup_val."</option>\n";
Derek Allard78a5fc92009-02-05 16:34:35 +0000354 }
355
Andrey Andreev93a83c72012-03-26 21:24:02 +0300356 $form .= "</optgroup>\n";
Derek Allard78a5fc92009-02-05 16:34:35 +0000357 }
358 else
359 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200360 $form .= '<option value="'.form_prep($key).'"'
Andrey Andreev582ebcb2012-10-27 00:52:15 +0300361 .(in_array($key, $selected) ? ' selected="selected"' : '').'>'
362 .(string) $val."</option>\n";
Derek Allard78a5fc92009-02-05 16:34:35 +0000363 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000364 }
365
Andrey Andreev93a83c72012-03-26 21:24:02 +0300366 return $form."</select>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000367 }
368}
369
370// ------------------------------------------------------------------------
371
Derek Allard2067d1a2008-11-13 22:59:24 +0000372if ( ! function_exists('form_checkbox'))
373{
Timothy Warren01b129a2012-04-27 11:36:50 -0400374 /**
375 * Checkbox Field
376 *
377 * @param mixed
378 * @param string
379 * @param bool
380 * @param string
381 * @return string
382 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000383 function form_checkbox($data = '', $value = '', $checked = FALSE, $extra = '')
384 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300385 $defaults = array('type' => 'checkbox', 'name' => ( ! is_array($data) ? $data : ''), 'value' => $value);
Derek Allard2067d1a2008-11-13 22:59:24 +0000386
Andrey Andreev93a83c72012-03-26 21:24:02 +0300387 if (is_array($data) && array_key_exists('checked', $data))
Derek Allard2067d1a2008-11-13 22:59:24 +0000388 {
389 $checked = $data['checked'];
390
Michiel Vugteveen910ff7a2012-06-06 20:03:14 +0200391 if ($checked == FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000392 {
393 unset($data['checked']);
394 }
395 else
396 {
397 $data['checked'] = 'checked';
398 }
399 }
400
Michiel Vugteveen910ff7a2012-06-06 20:03:14 +0200401 if ($checked == TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000402 {
403 $defaults['checked'] = 'checked';
404 }
405 else
406 {
407 unset($defaults['checked']);
408 }
409
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200410 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000411 }
412}
413
414// ------------------------------------------------------------------------
415
Derek Allard2067d1a2008-11-13 22:59:24 +0000416if ( ! function_exists('form_radio'))
417{
Timothy Warren01b129a2012-04-27 11:36:50 -0400418 /**
419 * Radio Button
420 *
421 * @param mixed
422 * @param string
423 * @param bool
424 * @param string
425 * @return string
426 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000427 function form_radio($data = '', $value = '', $checked = FALSE, $extra = '')
428 {
429 if ( ! is_array($data))
Barry Mienydd671972010-10-04 16:33:58 +0200430 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000431 $data = array('name' => $data);
432 }
433
434 $data['type'] = 'radio';
435 return form_checkbox($data, $value, $checked, $extra);
436 }
437}
438
439// ------------------------------------------------------------------------
440
Derek Allard2067d1a2008-11-13 22:59:24 +0000441if ( ! function_exists('form_submit'))
Barry Mienydd671972010-10-04 16:33:58 +0200442{
Timothy Warren01b129a2012-04-27 11:36:50 -0400443 /**
444 * Submit Button
445 *
446 * @param mixed
447 * @param string
448 * @param string
449 * @return string
450 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000451 function form_submit($data = '', $value = '', $extra = '')
452 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300453 $defaults = array('type' => 'submit', 'name' => ( ! is_array($data) ? $data : ''), 'value' => $value);
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200454 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000455 }
456}
457
458// ------------------------------------------------------------------------
459
Derek Allard2067d1a2008-11-13 22:59:24 +0000460if ( ! function_exists('form_reset'))
461{
Timothy Warren01b129a2012-04-27 11:36:50 -0400462 /**
463 * Reset Button
464 *
465 * @param mixed
466 * @param string
467 * @param string
468 * @return string
469 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000470 function form_reset($data = '', $value = '', $extra = '')
471 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300472 $defaults = array('type' => 'reset', 'name' => ( ! is_array($data) ? $data : ''), 'value' => $value);
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200473 return '<input '._parse_form_attributes($data, $defaults).$extra." />\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000474 }
475}
476
477// ------------------------------------------------------------------------
478
Derek Allard2067d1a2008-11-13 22:59:24 +0000479if ( ! function_exists('form_button'))
480{
Timothy Warren01b129a2012-04-27 11:36:50 -0400481 /**
482 * Form Button
483 *
484 * @param mixed
485 * @param string
486 * @param string
487 * @return string
488 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000489 function form_button($data = '', $content = '', $extra = '')
490 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300491 $defaults = array('name' => ( ! is_array($data) ? $data : ''), 'type' => 'button');
492 if (is_array($data) && isset($data['content']))
Derek Allard2067d1a2008-11-13 22:59:24 +0000493 {
494 $content = $data['content'];
495 unset($data['content']); // content is not an attribute
496 }
497
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200498 return '<button '._parse_form_attributes($data, $defaults).$extra.'>'.$content."</button>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000499 }
500}
501
502// ------------------------------------------------------------------------
503
Derek Allard2067d1a2008-11-13 22:59:24 +0000504if ( ! function_exists('form_label'))
505{
Timothy Warren01b129a2012-04-27 11:36:50 -0400506 /**
507 * Form Label Tag
508 *
509 * @param string The text to appear onscreen
510 * @param string The id the label applies to
511 * @param string Additional attributes
512 * @return string
513 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000514 function form_label($label_text = '', $id = '', $attributes = array())
515 {
516
517 $label = '<label';
518
Alex Bilbie773ccc32012-06-02 11:11:08 +0100519 if ($id !== '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000520 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300521 $label .= ' for="'.$id.'"';
Derek Allard2067d1a2008-11-13 22:59:24 +0000522 }
523
Andrey Andreev93a83c72012-03-26 21:24:02 +0300524 if (is_array($attributes) && count($attributes) > 0)
Derek Allard2067d1a2008-11-13 22:59:24 +0000525 {
526 foreach ($attributes as $key => $val)
527 {
528 $label .= ' '.$key.'="'.$val.'"';
529 }
530 }
531
Andrey Andreev93a83c72012-03-26 21:24:02 +0300532 return $label.'>'.$label_text.'</label>';
Derek Allard2067d1a2008-11-13 22:59:24 +0000533 }
534}
535
536// ------------------------------------------------------------------------
Timothy Warren01b129a2012-04-27 11:36:50 -0400537
Derek Allard2067d1a2008-11-13 22:59:24 +0000538if ( ! function_exists('form_fieldset'))
539{
Timothy Warren01b129a2012-04-27 11:36:50 -0400540 /**
541 * Fieldset Tag
542 *
543 * Used to produce <fieldset><legend>text</legend>. To close fieldset
544 * use form_fieldset_close()
545 *
546 * @param string The legend text
547 * @param string Additional attributes
548 * @return string
549 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000550 function form_fieldset($legend_text = '', $attributes = array())
551 {
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200552 $fieldset = '<fieldset'._attributes_to_string($attributes, FALSE).">\n";
Alex Bilbie773ccc32012-06-02 11:11:08 +0100553 if ($legend_text !== '')
Derek Allard2067d1a2008-11-13 22:59:24 +0000554 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300555 return $fieldset.'<legend>'.$legend_text."</legend>\n";
Derek Allard2067d1a2008-11-13 22:59:24 +0000556 }
557
558 return $fieldset;
559 }
560}
561
562// ------------------------------------------------------------------------
563
Derek Allard2067d1a2008-11-13 22:59:24 +0000564if ( ! function_exists('form_fieldset_close'))
565{
Timothy Warren01b129a2012-04-27 11:36:50 -0400566 /**
567 * Fieldset Close Tag
568 *
569 * @param string
570 * @return string
571 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000572 function form_fieldset_close($extra = '')
573 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300574 return '</fieldset>'.$extra;
Derek Allard2067d1a2008-11-13 22:59:24 +0000575 }
576}
577
578// ------------------------------------------------------------------------
579
Derek Allard2067d1a2008-11-13 22:59:24 +0000580if ( ! function_exists('form_close'))
581{
Timothy Warren01b129a2012-04-27 11:36:50 -0400582 /**
583 * Form Close Tag
584 *
585 * @param string
586 * @return string
587 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000588 function form_close($extra = '')
589 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300590 return '</form>'.$extra;
Derek Allard2067d1a2008-11-13 22:59:24 +0000591 }
592}
593
594// ------------------------------------------------------------------------
595
Derek Allard2067d1a2008-11-13 22:59:24 +0000596if ( ! function_exists('form_prep'))
597{
Timothy Warren01b129a2012-04-27 11:36:50 -0400598 /**
599 * Form Prep
600 *
601 * Formats text so that it can be safely placed in a form field in the event it has HTML tags.
602 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200603 * @param string|string[] $str Value to escape
604 * @param bool $is_textarea Whether we're escaping for a textarea element
605 * @return string|string[] Escaped values
Timothy Warren01b129a2012-04-27 11:36:50 -0400606 */
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200607 function form_prep($str = '', $is_textarea = FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000608 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200609 if (is_array($str))
610 {
611 foreach (array_keys($str) as $key)
612 {
613 $str[$key] = form_prep($str[$key], $is_textarea);
614 }
615
616 return $str;
617 }
618
619 if ($is_textarea === TRUE)
620 {
621 return str_replace(array('<', '>'), array('&lt;', '&gt;'), stripslashes($str));
622 }
623
624 return str_replace(array("'", '"'), array('&#39;', '&quot;'), stripslashes($data));
Derek Allard2067d1a2008-11-13 22:59:24 +0000625 }
626}
627
628// ------------------------------------------------------------------------
629
Derek Allard2067d1a2008-11-13 22:59:24 +0000630if ( ! function_exists('set_value'))
631{
Timothy Warren01b129a2012-04-27 11:36:50 -0400632 /**
633 * Form Value
634 *
635 * Grabs a value from the POST array for the specified field so you can
636 * re-populate an input field or textarea. If Form Validation
637 * is active it retrieves the info from the validation class
638 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200639 * @param string $field Field name
640 * @param string $default Default value
641 * @param bool $is_textarea Whether the field is a textarea element
642 * @return string
Timothy Warren01b129a2012-04-27 11:36:50 -0400643 */
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200644 function set_value($field = '', $default = '', $is_textarea = FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000645 {
646 if (FALSE === ($OBJ =& _get_validation_object()))
647 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200648 return isset($_POST[$field])
649 ? form_prep($_POST[$field], $is_textarea)
650 : form_prep($default, $is_textarea);
Derek Allard2067d1a2008-11-13 22:59:24 +0000651 }
652
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200653 return form_prep($OBJ->set_value($field, $default), $is_textarea);
Derek Allard2067d1a2008-11-13 22:59:24 +0000654 }
655}
656
657// ------------------------------------------------------------------------
658
Derek Allard2067d1a2008-11-13 22:59:24 +0000659if ( ! function_exists('set_select'))
660{
Timothy Warren01b129a2012-04-27 11:36:50 -0400661 /**
662 * Set Select
663 *
664 * Let's you set the selected value of a <select> menu via data in the POST array.
665 * If Form Validation is active it retrieves the info from the validation class
666 *
667 * @param string
668 * @param string
669 * @param bool
670 * @return string
671 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000672 function set_select($field = '', $value = '', $default = FALSE)
673 {
674 $OBJ =& _get_validation_object();
675
676 if ($OBJ === FALSE)
677 {
678 if ( ! isset($_POST[$field]))
679 {
Alex Bilbie773ccc32012-06-02 11:11:08 +0100680 if (count($_POST) === 0 && $default === TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000681 {
682 return ' selected="selected"';
683 }
684 return '';
685 }
686
687 $field = $_POST[$field];
688
689 if (is_array($field))
690 {
691 if ( ! in_array($value, $field))
692 {
693 return '';
694 }
695 }
Michiel Vugteveena6f34232012-06-07 10:14:29 +0200696 elseif (($field == '' OR $value == '') OR $field !== $value)
Derek Allard2067d1a2008-11-13 22:59:24 +0000697 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300698 return '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000699 }
700
701 return ' selected="selected"';
702 }
703
704 return $OBJ->set_select($field, $value, $default);
705 }
706}
707
708// ------------------------------------------------------------------------
709
Derek Allard2067d1a2008-11-13 22:59:24 +0000710if ( ! function_exists('set_checkbox'))
711{
Timothy Warren01b129a2012-04-27 11:36:50 -0400712 /**
713 * Set Checkbox
714 *
715 * Let's you set the selected value of a checkbox via the value in the POST array.
716 * If Form Validation is active it retrieves the info from the validation class
717 *
718 * @param string
719 * @param string
720 * @param bool
721 * @return string
722 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000723 function set_checkbox($field = '', $value = '', $default = FALSE)
724 {
725 $OBJ =& _get_validation_object();
726
727 if ($OBJ === FALSE)
Barry Mienydd671972010-10-04 16:33:58 +0200728 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000729 if ( ! isset($_POST[$field]))
730 {
Alex Bilbie773ccc32012-06-02 11:11:08 +0100731 if (count($_POST) === 0 && $default === TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000732 {
733 return ' checked="checked"';
734 }
735 return '';
736 }
737
738 $field = $_POST[$field];
Barry Mienydd671972010-10-04 16:33:58 +0200739
Derek Allard2067d1a2008-11-13 22:59:24 +0000740 if (is_array($field))
741 {
742 if ( ! in_array($value, $field))
743 {
744 return '';
745 }
746 }
Michiel Vugteveena6f34232012-06-07 10:14:29 +0200747 elseif (($field == '' OR $value == '') OR $field !== $value)
Derek Allard2067d1a2008-11-13 22:59:24 +0000748 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300749 return '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000750 }
751
752 return ' checked="checked"';
753 }
754
755 return $OBJ->set_checkbox($field, $value, $default);
756 }
757}
758
759// ------------------------------------------------------------------------
760
Derek Allard2067d1a2008-11-13 22:59:24 +0000761if ( ! function_exists('set_radio'))
762{
Timothy Warren01b129a2012-04-27 11:36:50 -0400763 /**
764 * Set Radio
765 *
766 * Let's you set the selected value of a radio field via info in the POST array.
767 * If Form Validation is active it retrieves the info from the validation class
768 *
769 * @param string
770 * @param string
771 * @param bool
772 * @return string
773 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000774 function set_radio($field = '', $value = '', $default = FALSE)
775 {
776 $OBJ =& _get_validation_object();
777
778 if ($OBJ === FALSE)
779 {
780 if ( ! isset($_POST[$field]))
781 {
Alex Bilbie773ccc32012-06-02 11:11:08 +0100782 if (count($_POST) === 0 && $default === TRUE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000783 {
784 return ' checked="checked"';
785 }
786 return '';
787 }
788
789 $field = $_POST[$field];
Barry Mienydd671972010-10-04 16:33:58 +0200790
Derek Allard2067d1a2008-11-13 22:59:24 +0000791 if (is_array($field))
792 {
793 if ( ! in_array($value, $field))
794 {
795 return '';
796 }
797 }
798 else
799 {
Michiel Vugteveena6f34232012-06-07 10:14:29 +0200800 if (($field == '' OR $value == '') OR $field !== $value)
Derek Allard2067d1a2008-11-13 22:59:24 +0000801 {
802 return '';
803 }
804 }
805
806 return ' checked="checked"';
807 }
808
809 return $OBJ->set_radio($field, $value, $default);
810 }
811}
812
813// ------------------------------------------------------------------------
814
Timothy Warren01b129a2012-04-27 11:36:50 -0400815
Derek Allard2067d1a2008-11-13 22:59:24 +0000816if ( ! function_exists('form_error'))
817{
Timothy Warren01b129a2012-04-27 11:36:50 -0400818 /**
819 * Form Error
820 *
821 * Returns the error for a specific form field. This is a helper for the
822 * form validation class.
823 *
824 * @param string
825 * @param string
826 * @param string
827 * @return string
828 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000829 function form_error($field = '', $prefix = '', $suffix = '')
830 {
831 if (FALSE === ($OBJ =& _get_validation_object()))
832 {
833 return '';
834 }
835
836 return $OBJ->error($field, $prefix, $suffix);
837 }
838}
839
840// ------------------------------------------------------------------------
841
Derek Allard2067d1a2008-11-13 22:59:24 +0000842if ( ! function_exists('validation_errors'))
843{
Timothy Warren01b129a2012-04-27 11:36:50 -0400844 /**
845 * Validation Error String
846 *
847 * Returns all the errors associated with a form submission. This is a helper
848 * function for the form validation class.
849 *
850 * @param string
851 * @param string
852 * @return string
853 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000854 function validation_errors($prefix = '', $suffix = '')
855 {
856 if (FALSE === ($OBJ =& _get_validation_object()))
Greg Akerc83bea62011-04-23 12:12:57 -0500857 {
Derek Allard2067d1a2008-11-13 22:59:24 +0000858 return '';
859 }
860
861 return $OBJ->error_string($prefix, $suffix);
862 }
863}
864
865// ------------------------------------------------------------------------
866
Derek Allard2067d1a2008-11-13 22:59:24 +0000867if ( ! function_exists('_parse_form_attributes'))
868{
Timothy Warren01b129a2012-04-27 11:36:50 -0400869 /**
870 * Parse the form attributes
871 *
872 * Helper function used by some of the form helpers
873 *
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200874 * @param array $attributes List of attributes
875 * @param array $default Default values
Timothy Warren01b129a2012-04-27 11:36:50 -0400876 * @return string
877 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000878 function _parse_form_attributes($attributes, $default)
879 {
880 if (is_array($attributes))
881 {
882 foreach ($default as $key => $val)
883 {
884 if (isset($attributes[$key]))
885 {
886 $default[$key] = $attributes[$key];
887 unset($attributes[$key]);
888 }
889 }
890
891 if (count($attributes) > 0)
892 {
893 $default = array_merge($default, $attributes);
894 }
895 }
896
897 $att = '';
Barry Mienydd671972010-10-04 16:33:58 +0200898
Derek Allard2067d1a2008-11-13 22:59:24 +0000899 foreach ($default as $key => $val)
900 {
Alex Bilbie773ccc32012-06-02 11:11:08 +0100901 if ($key === 'value')
Derek Allard2067d1a2008-11-13 22:59:24 +0000902 {
Andrey Andreev7c4d1062012-11-01 15:14:34 +0200903 $val = form_prep($val);
Derek Allard2067d1a2008-11-13 22:59:24 +0000904 }
Andrey Andreev60b97142012-10-25 16:59:17 +0300905 elseif ($key === 'name' && ! strlen($default['name']))
906 {
907 continue;
908 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000909
Andrey Andreev93a83c72012-03-26 21:24:02 +0300910 $att .= $key.'="'.$val.'" ';
Derek Allard2067d1a2008-11-13 22:59:24 +0000911 }
912
913 return $att;
914 }
915}
916
917// ------------------------------------------------------------------------
918
Derek Allard2067d1a2008-11-13 22:59:24 +0000919if ( ! function_exists('_attributes_to_string'))
920{
Timothy Warren01b129a2012-04-27 11:36:50 -0400921 /**
922 * Attributes To String
923 *
924 * Helper function used by some of the form helpers
925 *
926 * @param mixed
927 * @param bool
928 * @return string
929 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000930 function _attributes_to_string($attributes, $formtag = FALSE)
931 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300932 if (is_string($attributes) && strlen($attributes) > 0)
Derek Allard2067d1a2008-11-13 22:59:24 +0000933 {
Alex Bilbie773ccc32012-06-02 11:11:08 +0100934 if ($formtag === TRUE && strpos($attributes, 'method=') === FALSE)
Derek Allard2067d1a2008-11-13 22:59:24 +0000935 {
936 $attributes .= ' method="post"';
937 }
938
Alex Bilbie773ccc32012-06-02 11:11:08 +0100939 if ($formtag === TRUE && strpos($attributes, 'accept-charset=') === FALSE)
Derek Allard3241d732009-09-17 12:17:45 +0000940 {
941 $attributes .= ' accept-charset="'.strtolower(config_item('charset')).'"';
942 }
943
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200944 return ' '.$attributes;
Derek Allard2067d1a2008-11-13 22:59:24 +0000945 }
Barry Mienydd671972010-10-04 16:33:58 +0200946
Andrey Andreev93a83c72012-03-26 21:24:02 +0300947 if (is_object($attributes) && count($attributes) > 0)
Derek Allard2067d1a2008-11-13 22:59:24 +0000948 {
Andrey Andreev93a83c72012-03-26 21:24:02 +0300949 $attributes = (array) $attributes;
Derek Allard2067d1a2008-11-13 22:59:24 +0000950 }
951
Andrey Andreev93a83c72012-03-26 21:24:02 +0300952 if (is_array($attributes) && ($formtag === TRUE OR count($attributes) > 0))
Derek Allard2067d1a2008-11-13 22:59:24 +0000953 {
Derek Allard3241d732009-09-17 12:17:45 +0000954 $atts = '';
Derek Allard2067d1a2008-11-13 22:59:24 +0000955
Andrey Andreev93a83c72012-03-26 21:24:02 +0300956 if ( ! isset($attributes['method']) && $formtag === TRUE)
Derek Allard3241d732009-09-17 12:17:45 +0000957 {
958 $atts .= ' method="post"';
959 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000960
Andrey Andreev93a83c72012-03-26 21:24:02 +0300961 if ( ! isset($attributes['accept-charset']) && $formtag === TRUE)
Derek Allard3241d732009-09-17 12:17:45 +0000962 {
963 $atts .= ' accept-charset="'.strtolower(config_item('charset')).'"';
964 }
Derek Allard2067d1a2008-11-13 22:59:24 +0000965
Derek Allard3241d732009-09-17 12:17:45 +0000966 foreach ($attributes as $key => $val)
967 {
968 $atts .= ' '.$key.'="'.$val.'"';
969 }
970
971 return $atts;
Derek Allard2067d1a2008-11-13 22:59:24 +0000972 }
973 }
974}
975
976// ------------------------------------------------------------------------
977
Derek Allard2067d1a2008-11-13 22:59:24 +0000978if ( ! function_exists('_get_validation_object'))
979{
Timothy Warren01b129a2012-04-27 11:36:50 -0400980 /**
981 * Validation Object
982 *
983 * Determines what the form validation class was instantiated as, fetches
984 * the object and returns it.
985 *
986 * @return mixed
987 */
Derek Allard2067d1a2008-11-13 22:59:24 +0000988 function &_get_validation_object()
989 {
990 $CI =& get_instance();
991
Greg Aker0c9ee4a2011-04-20 09:40:17 -0500992 // We set this as a variable since we're returning by reference.
Derek Allard2067d1a2008-11-13 22:59:24 +0000993 $return = FALSE;
Andrey Andreev8bf6bb62012-01-06 16:11:04 +0200994
Greg Akerc6d918a2011-04-22 10:17:32 -0500995 if (FALSE !== ($object = $CI->load->is_loaded('form_validation')))
Derek Allard2067d1a2008-11-13 22:59:24 +0000996 {
Greg Aker0c9ee4a2011-04-20 09:40:17 -0500997 if ( ! isset($CI->$object) OR ! is_object($CI->$object))
998 {
999 return $return;
1000 }
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02001001
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001002 return $CI->$object;
Derek Allard2067d1a2008-11-13 22:59:24 +00001003 }
Andrey Andreev8bf6bb62012-01-06 16:11:04 +02001004
Greg Aker0c9ee4a2011-04-20 09:40:17 -05001005 return $return;
Derek Allard2067d1a2008-11-13 22:59:24 +00001006 }
1007}
1008
Derek Allard2067d1a2008-11-13 22:59:24 +00001009/* End of file form_helper.php */
Andrey Andreev93a83c72012-03-26 21:24:02 +03001010/* Location: ./system/helpers/form_helper.php */