+ /**
+ * Set the new value for this option.
+ * @param mixed $new_value
+ */
+ function setNewValue($new_value) {
+ $this->new_value = $new_value;
+ }
+
+ /**
+ * Set the size for this option.
+ * @param integer $size
+ */
+ function setSize($size) {
+ $this->size = $size;
+ }
+
+ /**
+ * Set the trailing_text for this option.
+ * @param string $trailing_text
+ */
+ function setTrailingText($trailing_text) {
+ $this->trailing_text = $trailing_text;
+ }
+
+ /**
+ * Set the yes_text for this option.
+ * @param string $yes_text
+ */
+ function setYesText($yes_text) {
+ $this->yes_text = $yes_text;
+ }
+
+ /**
+ * Set the no_text for this option.
+ * @param string $no_text
+ */
+ function setNoText($no_text) {
+ $this->no_text = $no_text;
+ }
+
+ /**
+ * Set the comment for this option.
+ * @param string $comment
+ */
+ function setComment($comment) {
+ $this->comment = $comment;
+ }
+
+ /**
+ * Set the extra attributes for this option.
+ * @param array $aExtraAttribs
+ */
+ function setExtraAttributes($aExtraAttribs) {
+ $this->aExtraAttribs = $aExtraAttribs;
+ }
+
+ /**
+ * Set the "post script" for this option.
+ * @param string $post_script
+ */
+ function setPostScript($post_script) {
+ $this->post_script = $post_script;
+ }
+
+ /**
+ * Set the save function for this option.
+ * @param string $save_function
+ */
+ function setSaveFunction($save_function) {
+ $this->save_function = $save_function;
+ }
+
+ /**
+ * Set the folder_filter for this option.
+ * @param string $folder_filter
+ * @since 1.5.1
+ */
+ function setFolderFilter($folder_filter) {
+ $this->folder_filter = $folder_filter;
+ }
+
+ /**
+ * Creates fields on option pages according to option type
+ *
+ * This is the function that calls all other createWidget* functions.
+ *
+ * @return string The formated option field
+ *
+ */
+ function createWidget() {
+ global $color;
+
+ // Use new value if available
+ if (!empty($this->new_value)) {
+ $tempValue = $this->value;
+ $this->value = $this->new_value;
+ }
+
+ /* Get the widget for this option type. */
+ switch ($this->type) {
+ case SMOPT_TYPE_STRING:
+ $result = $this->createWidget_String();
+ break;
+ case SMOPT_TYPE_STRLIST:
+ $result = $this->createWidget_StrList();
+ break;
+ case SMOPT_TYPE_TEXTAREA:
+ $result = $this->createWidget_TextArea();
+ break;
+ case SMOPT_TYPE_INTEGER:
+ $result = $this->createWidget_Integer();
+ break;
+ case SMOPT_TYPE_FLOAT:
+ $result = $this->createWidget_Float();
+ break;
+ case SMOPT_TYPE_BOOLEAN:
+ $result = $this->createWidget_Boolean();
+ break;
+ case SMOPT_TYPE_BOOLEAN_CHECKBOX:
+ $result = $this->createWidget_Boolean(TRUE);
+ break;
+ case SMOPT_TYPE_BOOLEAN_RADIO:
+ $result = $this->createWidget_Boolean(FALSE);
+ break;
+ case SMOPT_TYPE_HIDDEN:
+ $result = $this->createWidget_Hidden();
+ break;
+ case SMOPT_TYPE_COMMENT:
+ $result = $this->createWidget_Comment();
+ break;
+ case SMOPT_TYPE_FLDRLIST:
+ $result = $this->createWidget_FolderList();
+ break;
+ case SMOPT_TYPE_FLDRLIST_MULTI:
+ $result = $this->createWidget_FolderList(TRUE);
+ break;
+ case SMOPT_TYPE_EDIT_LIST:
+ $result = $this->createWidget_EditList();
+ break;
+ 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)
+ );
+ }
+
+ /* Add the "post script" for this option. */
+ $result .= $this->post_script;
+
+ // put correct value back if need be
+ if (!empty($this->new_value)) {
+ $this->value = $tempValue;
+ }
+
+ /* Now, return the created widget. */
+ return $result;
+ }
+
+ /**
+ * Create string field
+ * @return string html formated option field
+ */
+ function createWidget_String() {
+ switch ($this->size) {
+ case SMOPT_SIZE_TINY:
+ $width = 5;
+ break;
+ case SMOPT_SIZE_SMALL:
+ $width = 12;
+ break;
+ case SMOPT_SIZE_LARGE:
+ $width = 38;
+ break;
+ case SMOPT_SIZE_HUGE:
+ $width = 50;
+ break;
+ case SMOPT_SIZE_NORMAL:
+ default:
+ $width = 25;
+ }
+
+ return addInput('new_' . $this->name, $this->value, $width, 0, $this->aExtraAttribs) . htmlspecialchars($this->trailing_text);
+ }
+
+ /**
+ * 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!
+ *
+ * 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
+ * (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 or radio buttons
+ *
+ */
+ 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;