1 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
\r
5 * An open source application development framework for PHP 4.3.2 or newer
\r
7 * @package CodeIgniter
\r
8 * @author ExpressionEngine Dev Team
\r
9 * @copyright Copyright (c) 2008, EllisLab, Inc.
\r
10 * @license http://codeigniter.com/user_guide/license.html
\r
11 * @link http://codeigniter.com
\r
12 * @since Version 1.0
\r
16 // ------------------------------------------------------------------------
\r
19 * CodeIgniter Form Helpers
\r
21 * @package CodeIgniter
\r
22 * @subpackage Helpers
\r
24 * @author ExpressionEngine Dev Team
\r
25 * @link http://codeigniter.com/user_guide/helpers/form_helper.html
\r
28 // ------------------------------------------------------------------------
\r
33 * Creates the opening portion of the form.
\r
36 * @param string the URI segments of the form destination
\r
37 * @param array a key/value pair of attributes
\r
38 * @param array a key/value pair hidden data
\r
41 if ( ! function_exists('form_open'))
\r
43 function form_open($action = '', $attributes = '', $hidden = array())
\r
45 $CI =& get_instance();
\r
47 if ($attributes == '')
\r
49 $attributes = 'method="post"';
\r
52 $action = ( strpos($action, '://') === FALSE) ? $CI->config->site_url($action) : $action;
\r
54 $form = '<form action="'.$action.'"';
\r
56 $form .= _attributes_to_string($attributes, TRUE);
\r
60 if (is_array($hidden) AND count($hidden) > 0)
\r
62 $form .= form_hidden($hidden);
\r
69 // ------------------------------------------------------------------------
\r
72 * Form Declaration - Multipart type
\r
74 * Creates the opening portion of the form, but with "multipart/form-data".
\r
77 * @param string the URI segments of the form destination
\r
78 * @param array a key/value pair of attributes
\r
79 * @param array a key/value pair hidden data
\r
82 if ( ! function_exists('form_open_multipart'))
\r
84 function form_open_multipart($action, $attributes = array(), $hidden = array())
\r
86 $attributes['enctype'] = 'multipart/form-data';
\r
87 return form_open($action, $attributes, $hidden);
\r
91 // ------------------------------------------------------------------------
\r
94 * Hidden Input Field
\r
96 * Generates hidden fields. You can pass a simple key/value string or an associative
\r
97 * array with multiple values.
\r
104 if ( ! function_exists('form_hidden'))
\r
106 function form_hidden($name, $value = '')
\r
108 if ( ! is_array($name))
\r
110 return '<input type="hidden" name="'.$name.'" value="'.form_prep($value).'" />';
\r
115 foreach ($name as $name => $value)
\r
118 $form .= '<input type="hidden" name="'.$name.'" value="'.form_prep($value).'" />';
\r
125 // ------------------------------------------------------------------------
\r
136 if ( ! function_exists('form_input'))
\r
138 function form_input($data = '', $value = '', $extra = '')
\r
140 $defaults = array('type' => 'text', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
\r
142 return "<input "._parse_form_attributes($data, $defaults).$extra." />";
\r
146 // ------------------------------------------------------------------------
\r
151 * Identical to the input function but adds the "password" type
\r
159 if ( ! function_exists('form_password'))
\r
161 function form_password($data = '', $value = '', $extra = '')
\r
163 if ( ! is_array($data))
\r
165 $data = array('name' => $data);
\r
168 $data['type'] = 'password';
\r
169 return form_input($data, $value, $extra);
\r
173 // ------------------------------------------------------------------------
\r
178 * Identical to the input function but adds the "file" type
\r
186 if ( ! function_exists('form_upload'))
\r
188 function form_upload($data = '', $value = '', $extra = '')
\r
190 if ( ! is_array($data))
\r
192 $data = array('name' => $data);
\r
195 $data['type'] = 'file';
\r
196 return form_input($data, $value, $extra);
\r
200 // ------------------------------------------------------------------------
\r
211 if ( ! function_exists('form_textarea'))
\r
213 function form_textarea($data = '', $value = '', $extra = '')
\r
215 $defaults = array('name' => (( ! is_array($data)) ? $data : ''), 'cols' => '90', 'rows' => '12');
\r
217 if ( ! is_array($data) OR ! isset($data['value']))
\r
223 $val = $data['value'];
\r
224 unset($data['value']); // textareas don't use the value attribute
\r
227 return "<textarea "._parse_form_attributes($data, $defaults).$extra.">".$val."</textarea>";
\r
231 // ------------------------------------------------------------------------
\r
243 if ( ! function_exists('form_dropdown'))
\r
245 function form_dropdown($name = '', $options = array(), $selected = array(), $extra = '')
\r
247 if ( ! is_array($selected))
\r
249 $selected = array($selected);
\r
252 // If no selected state was submitted we will attempt to set it automatically
\r
253 if (count($selected) === 0)
\r
255 // If the form name appears in the $_POST array we have a winner!
\r
256 if (isset($_POST[$name]))
\r
258 $selected = array($_POST[$name]);
\r
262 if ($extra != '') $extra = ' '.$extra;
\r
264 $multiple = (count($selected) > 1 && strpos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : '';
\r
266 $form = '<select name="'.$name.'"'.$extra.$multiple.">\n";
\r
268 foreach ($options as $key => $val)
\r
270 $key = (string) $key;
\r
271 $val = (string) $val;
\r
273 $sel = (in_array($key, $selected))?' selected="selected"':'';
\r
275 $form .= '<option value="'.$key.'"'.$sel.'>'.$val."</option>\n";
\r
278 $form .= '</select>';
\r
284 // ------------------------------------------------------------------------
\r
296 if ( ! function_exists('form_checkbox'))
\r
298 function form_checkbox($data = '', $value = '', $checked = FALSE, $extra = '')
\r
300 $defaults = array('type' => 'checkbox', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
\r
302 if (is_array($data) AND array_key_exists('checked', $data))
\r
304 $checked = $data['checked'];
\r
306 if ($checked == FALSE)
\r
308 unset($data['checked']);
\r
312 $data['checked'] = 'checked';
\r
316 if ($checked == TRUE)
\r
318 $defaults['checked'] = 'checked';
\r
322 unset($defaults['checked']);
\r
325 return "<input "._parse_form_attributes($data, $defaults).$extra." />";
\r
329 // ------------------------------------------------------------------------
\r
341 if ( ! function_exists('form_radio'))
\r
343 function form_radio($data = '', $value = '', $checked = FALSE, $extra = '')
\r
345 if ( ! is_array($data))
\r
347 $data = array('name' => $data);
\r
350 $data['type'] = 'radio';
\r
351 return form_checkbox($data, $value, $checked, $extra);
\r
355 // ------------------------------------------------------------------------
\r
366 if ( ! function_exists('form_submit'))
\r
368 function form_submit($data = '', $value = '', $extra = '')
\r
370 $defaults = array('type' => 'submit', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
\r
372 return "<input "._parse_form_attributes($data, $defaults).$extra." />";
\r
376 // ------------------------------------------------------------------------
\r
387 if ( ! function_exists('form_reset'))
\r
389 function form_reset($data = '', $value = '', $extra = '')
\r
391 $defaults = array('type' => 'reset', 'name' => (( ! is_array($data)) ? $data : ''), 'value' => $value);
\r
393 return "<input "._parse_form_attributes($data, $defaults).$extra." />";
\r
397 // ------------------------------------------------------------------------
\r
408 if ( ! function_exists('form_button'))
\r
410 function form_button($data = '', $content = '', $extra = '')
\r
412 $defaults = array('name' => (( ! is_array($data)) ? $data : ''), 'type' => 'submit');
\r
414 if ( is_array($data) AND isset($data['content']))
\r
416 $content = $data['content'];
\r
417 unset($data['content']); // content is not an attribute
\r
420 return "<button "._parse_form_attributes($data, $defaults).$extra.">".$content."</button>";
\r
424 // ------------------------------------------------------------------------
\r
430 * @param string The text to appear onscreen
\r
431 * @param string The id the label applies to
\r
432 * @param string Additional attributes
\r
435 if ( ! function_exists('form_label'))
\r
437 function form_label($label_text = '', $id = '', $attributes = array())
\r
444 $label .= " for=\"$id\"";
\r
447 if (is_array($attributes) AND count($attributes) > 0)
\r
449 foreach ($attributes as $key => $val)
\r
451 $label .= ' '.$key.'="'.$val.'"';
\r
455 $label .= ">$label_text</label>";
\r
461 // ------------------------------------------------------------------------
\r
465 * Used to produce <fieldset><legend>text</legend>. To close fieldset
\r
466 * use form_fieldset_close()
\r
469 * @param string The legend text
\r
470 * @param string Additional attributes
\r
473 if ( ! function_exists('form_fieldset'))
\r
475 function form_fieldset($legend_text = '', $attributes = array())
\r
477 $fieldset = "<fieldset";
\r
479 $fieldset .= _attributes_to_string($attributes, FALSE);
\r
481 $fieldset .= ">\n";
\r
483 if ($legend_text != '')
\r
485 $fieldset .= "<legend>$legend_text</legend>\n";
\r
492 // ------------------------------------------------------------------------
\r
495 * Fieldset Close Tag
\r
501 if ( ! function_exists('form_fieldset_close'))
\r
503 function form_fieldset_close($extra = '')
\r
505 return "</fieldset>".$extra;
\r
509 // ------------------------------------------------------------------------
\r
518 if ( ! function_exists('form_close'))
\r
520 function form_close($extra = '')
\r
522 return "</form>".$extra;
\r
526 // ------------------------------------------------------------------------
\r
531 * Formats text so that it can be safely placed in a form field in the event it has HTML tags.
\r
537 if ( ! function_exists('form_prep'))
\r
539 function form_prep($str = '')
\r
541 // if the field name is an array we do this recursively
\r
542 if (is_array($str))
\r
544 foreach ($str as $key => $val)
\r
546 $str[$key] = form_prep($val);
\r
557 $temp = '__TEMP_AMPERSANDS__';
\r
559 // Replace entities to temporary markers so that
\r
560 // htmlspecialchars won't mess them up
\r
561 $str = preg_replace("/&#(\d+);/", "$temp\\1;", $str);
\r
562 $str = preg_replace("/&(\w+);/", "$temp\\1;", $str);
\r
564 $str = htmlspecialchars($str);
\r
566 // In case htmlspecialchars misses these.
\r
567 $str = str_replace(array("'", '"'), array("'", """), $str);
\r
569 // Decode the temp markers back to entities
\r
570 $str = preg_replace("/$temp(\d+);/","&#\\1;",$str);
\r
571 $str = preg_replace("/$temp(\w+);/","&\\1;",$str);
\r
577 // ------------------------------------------------------------------------
\r
582 * Grabs a value from the POST array for the specified field so you can
\r
583 * re-populate an input field or textarea. If Form Validation
\r
584 * is active it retrieves the info from the validation class
\r
590 if ( ! function_exists('set_value'))
\r
592 function set_value($field = '', $default = '')
\r
594 if (FALSE === ($OBJ =& _get_validation_object()))
\r
596 if ( ! isset($_POST[$field]))
\r
601 return form_prep($_POST[$field]);
\r
604 return form_prep($OBJ->set_value($field, $default));
\r
608 // ------------------------------------------------------------------------
\r
613 * Let's you set the selected value of a <select> menu via data in the POST array.
\r
614 * If Form Validation is active it retrieves the info from the validation class
\r
622 if ( ! function_exists('set_select'))
\r
624 function set_select($field = '', $value = '', $default = FALSE)
\r
626 $OBJ =& _get_validation_object();
\r
628 if ($OBJ === FALSE)
\r
630 if ( ! isset($_POST[$field]))
\r
632 if (count($_POST) === 0)
\r
634 return ' selected="selected"';
\r
639 $field = $_POST[$field];
\r
641 if (is_array($field))
\r
643 if ( ! in_array($value, $field))
\r
650 if (($field == '' OR $value == '') OR ($field != $value))
\r
656 return ' selected="selected"';
\r
659 return $OBJ->set_select($field, $value, $default);
\r
663 // ------------------------------------------------------------------------
\r
668 * Let's you set the selected value of a checkbox via the value in the POST array.
\r
669 * If Form Validation is active it retrieves the info from the validation class
\r
677 if ( ! function_exists('set_checkbox'))
\r
679 function set_checkbox($field = '', $value = '', $default = FALSE)
\r
681 $OBJ =& _get_validation_object();
\r
683 if ($OBJ === FALSE)
\r
685 if ( ! isset($_POST[$field]))
\r
687 if (count($_POST) === 0)
\r
689 return ' checked="checked"';
\r
694 $field = $_POST[$field];
\r
696 if (is_array($field))
\r
698 if ( ! in_array($value, $field))
\r
705 if (($field == '' OR $value == '') OR ($field != $value))
\r
711 return ' checked="checked"';
\r
714 return $OBJ->set_checkbox($field, $value, $default);
\r
718 // ------------------------------------------------------------------------
\r
723 * Let's you set the selected value of a radio field via info in the POST array.
\r
724 * If Form Validation is active it retrieves the info from the validation class
\r
732 if ( ! function_exists('set_radio'))
\r
734 function set_radio($field = '', $value = '', $default = FALSE)
\r
736 $OBJ =& _get_validation_object();
\r
738 if ($OBJ === FALSE)
\r
740 if ( ! isset($_POST[$field]))
\r
742 if (count($_POST) === 0)
\r
744 return ' checked="checked"';
\r
749 $field = $_POST[$field];
\r
751 if (is_array($field))
\r
753 if ( ! in_array($value, $field))
\r
760 if (($field == '' OR $value == '') OR ($field != $value))
\r
766 return ' checked="checked"';
\r
769 return $OBJ->set_radio($field, $value, $default);
\r
773 // ------------------------------------------------------------------------
\r
778 * Returns the error for a specific form field. This is a helper for the
\r
779 * form validation class.
\r
787 if ( ! function_exists('form_error'))
\r
789 function form_error($field = '', $prefix = '', $suffix = '')
\r
791 if (FALSE === ($OBJ =& _get_validation_object()))
\r
796 return $OBJ->error($field, $prefix, $suffix);
\r
800 // ------------------------------------------------------------------------
\r
803 * Validation Error String
\r
805 * Returns all the errors associated with a form submission. This is a helper
\r
806 * function for the form validation class.
\r
813 if ( ! function_exists('validation_errors'))
\r
815 function validation_errors($prefix = '', $suffix = '')
\r
817 if (FALSE === ($OBJ =& _get_validation_object()))
\r
822 return $OBJ->error_string($prefix, $suffix);
\r
826 // ------------------------------------------------------------------------
\r
829 * Parse the form attributes
\r
831 * Helper function used by some of the form helpers
\r
838 if ( ! function_exists('_parse_form_attributes'))
\r
840 function _parse_form_attributes($attributes, $default)
\r
842 if (is_array($attributes))
\r
844 foreach ($default as $key => $val)
\r
846 if (isset($attributes[$key]))
\r
848 $default[$key] = $attributes[$key];
\r
849 unset($attributes[$key]);
\r
853 if (count($attributes) > 0)
\r
855 $default = array_merge($default, $attributes);
\r
861 foreach ($default as $key => $val)
\r
863 if ($key == 'value')
\r
865 $val = form_prep($val);
\r
868 $att .= $key . '="' . $val . '" ';
\r
875 // ------------------------------------------------------------------------
\r
878 * Attributes To String
\r
880 * Helper function used by some of the form helpers
\r
887 if ( ! function_exists('_attributes_to_string'))
\r
889 function _attributes_to_string($attributes, $formtag = FALSE)
\r
891 if (is_string($attributes) AND strlen($attributes) > 0)
\r
893 if ($formtag == TRUE AND strpos($attributes, 'method=') === FALSE)
\r
895 $attributes .= ' method="post"';
\r
898 return ' '.$attributes;
\r
901 if (is_object($attributes) AND count($attributes) > 0)
\r
903 $attributes = (array)$attributes;
\r
906 if (is_array($attributes) AND count($attributes) > 0)
\r
910 if ( ! isset($attributes['method']) AND $formtag === TRUE)
\r
912 $atts .= ' method="post"';
\r
915 foreach ($attributes as $key => $val)
\r
917 $atts .= ' '.$key.'="'.$val.'"';
\r
925 // ------------------------------------------------------------------------
\r
928 * Validation Object
\r
930 * Determines what the form validation class was instantiated as, fetches
\r
931 * the object and returns it.
\r
936 if ( ! function_exists('_get_validation_object'))
\r
938 function &_get_validation_object()
\r
940 $CI =& get_instance();
\r
942 // We set this as a variable since we're returning by reference
\r
945 if ( ! isset($CI->load->_ci_classes) OR ! isset($CI->load->_ci_classes['form_validation']))
\r
950 $object = $CI->load->_ci_classes['form_validation'];
\r
952 if ( ! isset($CI->$object) OR ! is_object($CI->$object))
\r
957 return $CI->$object;
\r
962 /* End of file form_helper.php */
\r
963 /* Location: ./system/helpers/form_helper.php */