Thread: [Pieforms-commit] SF.net SVN: pieforms: [121] pieforms-php5/trunk/src/pieform/elements/select .php
Status: Alpha
Brought to you by:
oracleshinoda
From: <ora...@us...> - 2006-12-23 04:06:35
|
Revision: 121 http://svn.sourceforge.net/pieforms/?rev=121&view=rev Author: oracleshinoda Date: 2006-12-22 20:06:32 -0800 (Fri, 22 Dec 2006) Log Message: ----------- Updated to use the new APIs. Use Pieform::info so that people can acutally use it 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 2006-12-23 04:05:37 UTC (rev 120) +++ pieforms-php5/trunk/src/pieform/elements/select.php 2006-12-23 04:06:32 UTC (rev 121) @@ -27,11 +27,11 @@ /** * Renders a dropdown list, including support for multiple choices. * - * @param array $element The element to render * @param Pieform $form The form to render the element for + * @param array $element The element to render * @return string The HTML for the element */ -function pieform_render_select($element, Pieform $form) { +function pieform_element_select(Pieform $form, $element) { if (!empty($element['multiple'])) { $element['name'] .= '[]'; } @@ -49,7 +49,7 @@ . ">\n"; if (!isset($element['options']) || !is_array($element['options']) || count($element['options']) < 1) { $result .= "\t<option></option>\n"; - log_warn('Select elements should have at least one option'); + Pieform::info('Select elements should have at least one option'); } if (empty($element['multiple'])) { @@ -59,6 +59,7 @@ 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']]; } @@ -69,9 +70,11 @@ $values = array(); } } + $optionselected = false; foreach ($element['options'] as $key => $value) { if (in_array($key, $values)) { $selected = ' selected="selected"'; + $optionselected = true; } else { $selected = ''; @@ -79,24 +82,15 @@ $result .= "\t<option value=\"" . Pieform::hsc($key) . "\"$selected>" . Pieform::hsc($value) . "</option>\n"; } + if (!$optionselected && $values) { + Pieform::info('Invalid value for select "' . $element['name'] .'"'); + } + $result .= '</select>'; return $result; } -function pieform_get_value_js_select($element, Pieform $form) { - $formname = $form->get_name(); - $name = $element['name']; - if ($element['collapseifoneoption']) { - return " data['$name'] = document.forms['$formname'].elements['$name'].value;\n"; - } - return <<<EOF - var select = filter(function(option) { return option.selected; }, document.forms['$formname'].elements['$name'].options); - data['$name'] = map(function(o) { return o.value; }, select); - -EOF; -} - -function pieform_render_select_set_attributes($element) { +function pieform_element_select_set_attributes($element) { $element['collapseifoneoption'] = true; $element['rules']['validateoptions'] = true; return $element; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
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. |
From: <ora...@us...> - 2007-02-19 23:17:52
|
Revision: 189 http://svn.sourceforge.net/pieforms/?rev=189&view=rev Author: oracleshinoda Date: 2007-02-19 15:17:52 -0800 (Mon, 19 Feb 2007) Log Message: ----------- Added support for disabling individual option values in a select box. Also added support for labelling options, which unfortunately isn't supported by any common user agent yet. 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-19 22:30:27 UTC (rev 188) +++ pieforms-php5/trunk/src/pieform/elements/select.php 2007-02-19 23:17:52 UTC (rev 189) @@ -48,6 +48,9 @@ if (!empty($element['collapseifoneoption']) && isset($element['options']) && is_array($element['options']) && count($element['options']) == 1) { foreach ($element['options'] as $key => $value) { + if (is_array($value)) { + $value = $value['value']; + } $result = $value . '<input type="hidden" name="' . $element['name'] . '" value="' . $key . '">'; } return $result; @@ -79,7 +82,36 @@ else { $selected = ''; } - $result .= "\t<option value=\"" . Pieform::hsc($key) . "\"$selected>" . Pieform::hsc($value) . "</option>\n"; + + // Disable the option if necessary + if (is_array($value) && !empty($value['disabled'])) { + $disabled = ' disabled="disabled"'; + } + else { + $disabled = ''; + } + + // Add a label if necessary. None of the common browsers actually render + // this properly at the moment, but that may change in future. + if (is_array($value) && isset($value['label'])) { + $label = ' label="' . Pieform::hsc($value['label']) . '"'; + } + else { + $label = ''; + } + + // Get the value to display/put in the value attribute + if (is_array($value)) { + if (!isset($value['value'])) { + Pieform::info('No value set for option "' . $key . '" of select element "' . $element['name'] . '"'); + $value = ''; + } + else { + $value = $value['value']; + } + } + + $result .= "\t<option value=\"" . Pieform::hsc($key) . "\"{$selected}{$label}{$disabled}>" . Pieform::hsc($value) . "</option>\n"; } if (!$optionselected && !is_array($values) && $values !== null) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ora...@us...> - 2007-12-08 01:21:07
|
Revision: 226 http://pieforms.svn.sourceforge.net/pieforms/?rev=226&view=rev Author: oracleshinoda Date: 2007-12-07 17:20:39 -0800 (Fri, 07 Dec 2007) Log Message: ----------- Make sure that 'collapseifoneoption' is able to be turned off by people using pieforms. Thanks to Richard Mansfield 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-12-04 02:48:29 UTC (rev 225) +++ pieforms-php5/trunk/src/pieform/elements/select.php 2007-12-08 01:20:39 UTC (rev 226) @@ -123,7 +123,9 @@ } function pieform_element_select_set_attributes($element) { - $element['collapseifoneoption'] = true; + if (!isset($element['collapseifoneoption'])) { + $element['collapseifoneoption'] = true; + } $element['rules']['validateoptions'] = true; return $element; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |