[Pieforms-commit] SF.net SVN: pieforms: [181] pieforms-php5/trunk/src/pieform/elements/select .php
Status: Alpha
Brought to you by:
oracleshinoda
From: <ora...@us...> - 2007-02-11 09:40:52
|
Revision: 181 http://svn.sourceforge.net/pieforms/?rev=181&view=rev Author: oracleshinoda Date: 2007-02-11 01:40:51 -0800 (Sun, 11 Feb 2007) Log Message: ----------- Fixed SF bug #1635520 - select elements no longer require a default value. Also fixed some other minor annoyances around how the select element behaves. Now the only thing that is not done is triggering a notice if a multiselect does not have a correct value Modified Paths: -------------- pieforms-php5/trunk/src/pieform/elements/select.php Modified: pieforms-php5/trunk/src/pieform/elements/select.php =================================================================== --- pieforms-php5/trunk/src/pieform/elements/select.php 2007-02-11 05:39:21 UTC (rev 180) +++ pieforms-php5/trunk/src/pieform/elements/select.php 2007-02-11 09:40:51 UTC (rev 181) @@ -27,6 +27,10 @@ /** * Renders a dropdown list, including support for multiple choices. * + * @todo Currently, putting a junk defaultvalue/value for a multiple select + * does not trigger any kind of error, it should perhaps trigger a + * Pieform::info + * * @param Pieform $form The form to render the element for * @param array $element The element to render * @return string The HTML for the element @@ -36,7 +40,13 @@ $element['name'] .= '[]'; } - if (!empty($element['collapseifoneoption']) && count($element['options']) == 1) { + $optionsavailable = true; + if (!isset($element['options']) || !is_array($element['options']) || count($element['options']) < 1) { + $optionsavailable = false; + Pieform::info('Select elements should have at least one option'); + } + + if (!empty($element['collapseifoneoption']) && isset($element['options']) && is_array($element['options']) && count($element['options']) == 1) { foreach ($element['options'] as $key => $value) { $result = $value . '<input type="hidden" name="' . $element['name'] . '" value="' . $key . '">'; } @@ -47,32 +57,22 @@ . $form->element_attributes($element) . (!empty($element['multiple']) ? ' multiple="multiple"' : '') . ">\n"; - if (!isset($element['options']) || !is_array($element['options']) || count($element['options']) < 1) { - $result .= "\t<option></option>\n"; - Pieform::info('Select elements should have at least one option'); + if (!$optionsavailable) { + $result .= "\t<option></option>\n</select>"; + return $result; } - if (empty($element['multiple'])) { - $values = array($form->get_value($element)); - } - else { - if (isset($element['value'])) { - $values = (array) $element['value']; - } - // @todo use $global instead of $_POST - else if (isset($_POST[$element['name']])) { - $values = (array) $_POST[$element['name']]; - } - else if (isset($element['defaultvalue'])) { - $values = (array) $element['defaultvalue']; - } - else { - $values = array(); - } - } + $values = $form->get_value($element); $optionselected = false; foreach ($element['options'] as $key => $value) { - if (in_array($key, $values)) { + // Select the element if it's in the values or if there are no values + // and this is the first option + if ( + (!is_array($values) && $key == $values) + || + (is_array($values) && + (in_array($key, $values) + || (isset($values[0]) && $values[0] === null && !$optionselected)))) { $selected = ' selected="selected"'; $optionselected = true; } @@ -82,7 +82,7 @@ $result .= "\t<option value=\"" . Pieform::hsc($key) . "\"$selected>" . Pieform::hsc($value) . "</option>\n"; } - if (!$optionselected && $values) { + if (!$optionselected && !is_array($values) && $values !== null) { Pieform::info('Invalid value for select "' . $element['name'] .'"'); } @@ -96,4 +96,45 @@ return $element; } +function pieform_element_select_get_value(Pieform $form, $element) { + if (empty($element['multiple'])) { + $global = ($form->get_property('method') == 'get') ? $_GET : $_POST; + if (isset($element['value'])) { + $values = (array) $element['value']; + } + else if (isset($global[$element['name']])) { + $values = (array) $global[$element['name']]; + } + else if (isset($element['defaultvalue'])) { + $values = (array) $element['defaultvalue']; + } + else { + $values = array(null); + } + + if (count($values) != 1) { + Pieform::info('The select element "' . $element['name'] . '" has ' + . 'more than one value, but has not been declared multiple'); + } + return $values[0]; + } + else { + $global = ($form->get_property('method') == 'get') ? $_GET : $_POST; + if (isset($element['value'])) { + $values = (array) $element['value']; + } + else if (isset($global[$element['name']])) { + $values = (array) $global[$element['name']]; + } + else if (!$form->is_submitted() && isset($element['defaultvalue'])) { + $values = (array) $element['defaultvalue']; + } + else { + $values = array(); + } + } + + return $values; +} + ?> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |