From daf777102978219856d97b6b4e93f8b5815db234 Mon Sep 17 00:00:00 2001 From: pdontthink Date: Thu, 6 Mar 2008 01:39:52 +0000 Subject: [PATCH] Add radio button group widget type SMOPT_TYPE_STRLIST_RADIO git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@13012 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- ChangeLog | 3 +-- functions/options.php | 46 +++++++++++++++++++++++++++++++++++++------ 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 31b7024e..4a0ead58 100644 --- a/ChangeLog +++ b/ChangeLog @@ -241,9 +241,8 @@ Version 1.5.2 - SVN - Let configtest.php use optional PEAR dynamic extension loading, patch by Walter Huijbers (#1833123). - Fix for IMAP servers that were having problems saving sent messages - - Added multiple select folder list option widgets (SMOPT_TYPE_FLDRLIST_MULTI). - Added "Secured Configuration" mode. - - Added edit list, checkbox, multiple-select folder list + - Added edit list, checkbox, radio group, multiple-select folder list and multiple-select string list option widget types. diff --git a/functions/options.php b/functions/options.php index 6de0efff..0bca18e6 100644 --- a/functions/options.php +++ b/functions/options.php @@ -31,6 +31,7 @@ define('SMOPT_TYPE_EDIT_LIST', 10); define('SMOPT_TYPE_STRLIST_MULTI', 11); define('SMOPT_TYPE_BOOLEAN_CHECKBOX', 12); define('SMOPT_TYPE_BOOLEAN_RADIO', 13); +define('SMOPT_TYPE_STRLIST_RADIO', 14); /* Define constants for the options refresh levels. */ define('SMOPT_REFRESH_NONE', 0); @@ -378,6 +379,9 @@ class SquirrelOption { case SMOPT_TYPE_STRLIST_MULTI: $result = $this->createWidget_StrList(TRUE); break; + case SMOPT_TYPE_STRLIST_RADIO: + $result = $this->createWidget_StrList(FALSE, TRUE); + break; default: error_box ( sprintf(_("Option Type '%s' Not Found"), $this->type) @@ -419,27 +423,57 @@ class SquirrelOption { $width = 25; } - return addInput('new_' . $this->name, $this->value, $width, 0, $this->aExtraAttribs) . htmlspecialchars($this->trailing_text); + return addInput('new_' . $this->name, $this->value, $width, 0, $this->aExtraAttribs) . htmlspecialchars($this->trailing_text); } /** - * Create selection box + * Create selection box or radio button group * * When $this->htmlencoded is TRUE, the keys and values in * $this->possible_values are assumed to be display-safe. * Use with care! * - * @param boolean $multiple_select When TRUE, the select widget + * Note that when building radio buttons instead of a select + * widget, if the "size" attribute is SMOPT_SIZE_TINY, the + * radio buttons will be output one after another without + * linebreaks between them. Otherwise, each radio button + * goes on a line of its own. + * + * @param boolean $multiple_select When TRUE, the select widget * will allow multiple selections - * (OPTIONAL; default is FALSE + * (OPTIONAL; default is FALSE * (single select list)) + * @param boolean $radio_buttons When TRUE, the widget will + * instead be built as a group + * of radio buttons (and + * $multiple_select will be + * forced to FALSE) (OPTIONAL; + * default is FALSE (select widget)) * - * @return string html formated selection box + * @return string html formated selection box or radio buttons * */ - function createWidget_StrList($multiple_select=FALSE) { + function createWidget_StrList($multiple_select=FALSE, $radio_buttons=FALSE) { //FIXME: Currently, $this->htmlencoded is ignored here -- was removed when changing to template-based output; a fix is available as part of proposed centralized sanitizing patch + // radio buttons instead of select widget? + // + if ($radio_buttons) { + + global $br, $nbsp; + $result = ''; + foreach ($this->possible_values as $real_value => $disp_value) { + $result .= addRadioBox('new_' . $this->name, ($this->value == $real_value), $real_value, array_merge(array('id' => 'new_' . $this->name . '_' . $real_value), $this->aExtraAttribs)) . $nbsp . create_label($disp_value, 'new_' . $this->name . '_' . $real_value); + if ($this->size != SMOPT_SIZE_TINY) + $result .= $br; + } + + return $result; + } + + + // everything below applies to select widgets + // switch ($this->size) { //FIXME: not sure about these sizes... seems like we could add another on the "large" side... case SMOPT_SIZE_TINY: -- 2.25.1