attributesToString($attributes); if (stripos($attributes, 'method=') === FALSE) { $attributes .= ' method="post"'; } if (stripos($attributes, 'accept-charset=') === FALSE) { $attributes .= ' accept-charset="' . strtolower(self::CHARSET) . '"'; } $form = '
\n"; if (is_array($hidden)) { foreach ($hidden as $name => $value) { $form .= '' . "\n"; } } // Adding the nonce field if (!empty($action)) { $form .= '' . "\n"; $form .= wp_nonce_field($action, '_wpnonce'); } return $form; } /** * Form Declaration - Multipart type * * Creates the opening portion of the form, but with "multipart/form-data". * * @param string the URI segments of the form destination * @param string a key/value pair of url * @param array a key/value pair hidden data * @return string */ function openMultipart($url = '', $action = '', $attributes = array(), $hidden = array()) { if (is_string($attributes)) { $attributes .= ' enctype="multipart/form-data"'; } else { $attributes['enctype'] = 'multipart/form-data'; } return $this->open($url, $action, $attributes, $hidden); } /** * Hidden Input Field * * Generates hidden fields. You can pass a simple key/value string or * an associative array with multiple values. * * @param mixed $name Field name * @param string $value Field value * @param bool $recursing * @return string */ function hidden($name, $value = '', $recursing = FALSE) { static $form; if ($recursing === FALSE) { $form = "\n"; } if (is_array($name)) { foreach ($name as $key => $val) { $this->hidden($key, $val, TRUE); } return $form; } if (!is_array($value)) { $form .= '\n"; } else { foreach ($value as $k => $v) { $k = is_int($k) ? '' : $k; $this->hidden($name . '[' . $k . ']', $v, TRUE); } } return $form; } /** * Text Input Field * * @param mixed * @param string * @param mixed * @return string */ function input($data = '', $value = '', $extra = '') { $defaults = array( 'type' => 'text', 'name' => is_array($data) ? '' : $data, 'value' => $value ); return 'parseFormAttributes($data, $defaults) . $this->attributesToString($extra) . " />\n"; } /** * Password Field * * Identical to the input function but adds the "password" type * * @param mixed * @param string * @param mixed * @return string */ function password($data = '', $value = '', $extra = '') { is_array($data) OR $data = array('name' => $data); $data['type'] = 'password'; return $this->input($data, $value, $extra); } /** * Upload Field * * Identical to the input function but adds the "file" type * * @param mixed * @param string * @param mixed * @return string */ function upload($data = '', $value = '', $extra = '') { $defaults = array('type' => 'file', 'name' => ''); is_array($data) OR $data = array('name' => $data); $data['type'] = 'file'; return 'parseFormAttributes($data, $defaults) . $this->attributesToString($extra) . " />\n"; } /** * Textarea field * * @param mixed $data * @param string $value * @param mixed $extra * @return string */ function textarea($data = '', $value = '', $extra = '') { $defaults = array( 'name' => is_array($data) ? '' : $data, 'cols' => '40', 'rows' => '20' ); if (!is_array($data) OR !isset($data['value'])) { $val = $value; } else { $val = $data['value']; unset($data['value']); // textareas don't use the value attribute } return '\n"; } /** * editor * @param string $data * @param string $value * @param string $extra * @return string */ function editor($data, $value = '', $extra = '') { $name = is_array($data) ? 'default_editor' : $data; if (!is_array($data) OR !isset($data['value'])) { $val = $value; } else { $val = $data['value']; unset($data['value']); // textareas don't use the value attribute } ob_start(); wp_editor($val, $name); return ob_get_clean(); } /** * Multi-select menu * * @param string * @param array * @param mixed * @param mixed * @return string */ function multiselect($name = '', $options = array(), $selected = array(), $extra = '') { $extra = $this->attributesToString($extra); if (stripos($extra, 'multiple') === FALSE) { $extra .= ' multiple="multiple"'; } return $this->dropdown($name, $options, $selected, $extra); } /** * Drop-down Menu * * @param mixed $data * @param mixed $options * @param mixed $selected * @param mixed $extra * @return string */ function dropdown($data = '', $options = array(), $selected = array(), $extra = '') { $defaults = array(); if (is_array($data)) { if (isset($data['selected'])) { $selected = $data['selected']; unset($data['selected']); // select tags don't have a selected attribute } if (isset($data['options'])) { $options = $data['options']; unset($data['options']); // select tags don't use an options attribute } } else { $defaults = array('name' => $data); } is_array($selected) OR $selected = array($selected); is_array($options) OR $options = array($options); // If no selected state was submitted we will attempt to set it automatically if (empty($selected)) { if (is_array($data)) { if (isset($data['name'], $_POST[$data['name']])) { $selected = array($_POST[$data['name']]); } } elseif (isset($_POST[$data])) { $selected = array($_POST[$data]); } } $extra = $this->attributesToString($extra); $multiple = (count($selected) > 1 && stripos($extra, 'multiple') === FALSE) ? ' multiple="multiple"' : ''; $form = '\n"; } /** * Checkbox Field * * @param mixed * @param string * @param bool * @param mixed * @return string */ function checkbox($data = '', $value = '', $checked = FALSE, $extra = '') { $defaults = array('type' => 'checkbox', 'name' => (!is_array($data) ? $data : ''), 'value' => $value); if (is_array($data) && array_key_exists('checked', $data)) { $checked = $data['checked']; if ($checked == FALSE) { unset($data['checked']); } else { $data['checked'] = 'checked'; } } if ($checked == TRUE) { $defaults['checked'] = 'checked'; } else { unset($defaults['checked']); } return 'parseFormAttributes($data, $defaults) . $this->attributesToString($extra) . " />\n"; } /** * Radio Button * * @param mixed * @param string * @param bool * @param mixed * @return string */ function radio($data = '', $value = '', $checked = FALSE, $extra = '') { is_array($data) OR $data = array('name' => $data); $data['type'] = 'radio'; return $this->checkbox($data, $value, $checked, $extra); } /** * Submit Button * * @param mixed * @param string * @param mixed * @return string */ function submit($data = '', $value = '', $extra = '') { $defaults = array( 'type' => 'submit', 'name' => is_array($data) ? '' : $data, 'value' => $value ); return 'parseFormAttributes($data, $defaults) . $this->attributesToString($extra) . " />\n"; } /** * Reset Button * * @param mixed * @param string * @param mixed * @return string */ function reset($data = '', $value = '', $extra = '') { $defaults = array( 'type' => 'reset', 'name' => is_array($data) ? '' : $data, 'value' => $value ); return 'parseFormAttributes($data, $defaults) . $this->attributesToString($extra) . " />\n"; } /** * Form Button * * @param mixed * @param string * @param mixed * @return string */ function button($data = '', $content = '', $extra = '') { $defaults = array( 'name' => is_array($data) ? '' : $data, 'type' => 'button' ); if (is_array($data) && isset($data['content'])) { $content = $data['content']; unset($data['content']); // content is not an attribute } return '\n"; } /** * Form Label Tag * * @param string The text to appear onscreen * @param string The id the label applies to * @param mixed Additional attributes * @return string */ function label($label_text = '', $id = '', $attributes = array()) { $label = 'attributesToString($attributes); return $label . '>' . $label_text . ''; } /** * Fieldset Tag * * Used to produce
text. To close fieldset * use form_fieldset_close() * * @param string The legend text * @param array Additional attributes * @return string */ function fieldset($legend_text = '', $attributes = array()) { $fieldset = 'attributesToString($attributes) . ">\n"; if ($legend_text !== '') { return $fieldset . '' . $legend_text . "\n"; } return $fieldset; } /** * Fieldset Close Tag * * @param string * @return string */ function fieldsetClose($extra = '') { return '
' . $extra; } /** * Form Close Tag * * @param string * @return string */ function close($extra = '') { return '' . $extra; } /** * Form Prep * * Formats text so that it can be safely placed in a form field in the event it has HTML tags. * * @param string|string[] $str Value to escape * @return string|string[] Escaped values * @deprecated 3.0.0 An alias for strip_tags() */ function prep($str) { return strip_tags($str, TRUE); } /** * Parse the form attributes * * Helper function used by some of the form helpers * * @param array $attributes List of attributes * @param array $default Default values * @return string */ private function parseFormAttributes($attributes, $default) { if (is_array($attributes)) { foreach ($default as $key => $val) { if (isset($attributes[$key])) { $default[$key] = $attributes[$key]; unset($attributes[$key]); } } if (count($attributes) > 0) { $default = array_merge($default, $attributes); } } $att = ''; foreach ($default as $key => $val) { if ($key === 'value') { $val = strip_tags($val); } elseif ($key === 'name' && !strlen($default['name'])) { continue; } $att .= $key . '="' . $val . '" '; } return $att; } /** * Attributes To String * * Helper function used by some of the form helpers * * @param mixed * @return string */ private function attributesToString($attributes) { if (empty($attributes)) { return ''; } if (is_object($attributes)) { $attributes = (array)$attributes; } if (is_array($attributes)) { $atts = ''; foreach ($attributes as $key => $val) { $atts .= ' ' . $key . '="' . $val . '"'; } return $atts; } if (is_string($attributes)) { return ' ' . $attributes; } return FALSE; } }