\n";
+ /**
+ *
+ */
+ function save() {
+ $function = $this->save_function;
+ $function($this);
+ }
+
+ /**
+ *
+ */
+ function changed() {
+
+ // edit lists have a lot going on, so we'll always process them
+ //
+ if ($this->type == SMOPT_TYPE_EDIT_LIST) return TRUE;
+
+ return ($this->value != $this->new_value);
+ }
+} /* End of SquirrelOption class*/
+
+/**
+ * Saves the option value (this is the default save function
+ * unless overridden by the user)
+ *
+ * @param object $option object that holds option name and new_value
+ */
+function save_option($option) {
+
+ // Can't save the pref if we don't have the username
+ //
+ if ( !sqgetGlobalVar('username', $username, SQ_SESSION ) ) {
+ return;
+ }
+
+ global $data_dir;
+
+ // edit lists: first add new elements to list, then
+ // remove any selected ones (note that we must add
+ // before deleting because the javascript that populates
+ // the "add" textbox when selecting items in the list
+ // (for deletion))
+ //
+ if ($option->type == SMOPT_TYPE_EDIT_LIST) {
+
+ if (empty($option->possible_values)) $option->possible_values = array();
+ if (!is_array($option->possible_values)) $option->possible_values = array($option->possible_values);
+
+ // add element if given
+ //
+ if ((isset($option->use_add_widget) && $option->use_add_widget)
+ && sqGetGlobalVar('add_' . $option->name, $new_element, SQ_POST)) {
+ $new_element = trim($new_element);
+ if (!empty($new_element)
+ && !in_array($new_element, $option->possible_values))
+ $option->possible_values[] = $new_element;
+ }
+
+ // delete selected elements if needed
+ //
+ if ((isset($option->use_delete_widget) && $option->use_delete_widget)
+ && is_array($option->new_value)
+ && sqGetGlobalVar('delete_' . $option->name, $ignore, SQ_POST))
+ $option->possible_values = array_diff($option->possible_values, $option->new_value);
+
+ // save full list (stored in "possible_values")
+ //
+ setPref($data_dir, $username, $option->name, serialize($option->possible_values));
+
+ // Certain option types need to be serialized because
+ // they are not scalar
+ //
+ } else if ($option->is_multiple_valued())
+ setPref($data_dir, $username, $option->name, serialize($option->new_value));
+
+ // Checkboxes, when unchecked, don't submit anything in
+ // the POST, so set to SMPREF_OFF if not found
+ //
+ else if (($option->type == SMOPT_TYPE_BOOLEAN
+ || $option->type == SMOPT_TYPE_BOOLEAN_CHECKBOX)
+ && empty($option->new_value))
+ setPref($data_dir, $username, $option->name, SMPREF_OFF);
+
+ else
+ setPref($data_dir, $username, $option->name, $option->new_value);
+
+
+ // if a checkbox or multi select is zeroed/cleared out, it
+ // needs to have an empty value pushed into its "new_value" slot
+ //
+ if (($option->type == SMOPT_TYPE_STRLIST_MULTI
+ || $option->type == SMOPT_TYPE_BOOLEAN_CHECKBOX)
+ && is_null($option->new_value))
+ $option->new_value = '';
+
}
-function OptionHidden( $name, $value ) {
- echo "\n";
+/**
+ * save function that does not save
+ * @param object $option
+ */
+function save_option_noop($option) {
+ /* Do nothing here... */
}
-function OptionCheck( $title, $name, $value, $comment ) {
- if ( $value )
- $chk = 'checked';
- echo "
$title:
" .
- " $comment" .
- "
\n";
+/**
+ * Create hidden 'optpage' input field with value set by argument
+ * @param string $optpage identification of option page
+ * @return string html formated hidden input field
+ */
+function create_optpage_element($optpage) {
+ return addHidden('optpage', $optpage);
}
-function OptionTitle( $title ) {
- echo "
$title
\n";
+/**
+ * Create hidden 'optmode' input field with value set by argument
+ * @param string $optmode
+ * @return string html formated hidden input field
+ */
+function create_optmode_element($optmode) {
+ return addHidden('optmode', $optmode);
}
-function OptionSubmit( $name ) {
- echo '
' .
- '
';
+/**
+ * @param array $optgrps
+ * @param array $optvals
+ * @return array
+ */
+function create_option_groups($optgrps, $optvals) {
+ /* Build a simple array with which to start. */
+ $result = array();
+
+ /* Create option group for each option group name. */
+ foreach ($optgrps as $grpkey => $grpname) {
+ $result[$grpkey] = array();
+ $result[$grpkey]['name'] = $grpname;
+ $result[$grpkey]['options'] = array();
+ }
+
+ /* Create a new SquirrelOption for each set of option values. */
+ foreach ($optvals as $grpkey => $grpopts) {
+ foreach ($grpopts as $optset) {
+ /* Create a new option with all values given. */
+ $next_option = new SquirrelOption(
+ $optset,
+ $optset['name'],
+ $optset['caption'],
+ $optset['type'],
+ (isset($optset['refresh']) ? $optset['refresh'] : SMOPT_REFRESH_NONE),
+ (isset($optset['initial_value']) ? $optset['initial_value'] : ''),
+ (isset($optset['posvals']) ? $optset['posvals'] : ''),
+ (isset($optset['htmlencoded']) ? $optset['htmlencoded'] : false)
+ );
+
+ /* If provided, set if the caption is allowed to wrap for this option. */
+ if (isset($optset['caption_wrap'])) {
+ $next_option->setCaptionWrap($optset['caption_wrap']);
+ }
+
+ /* If provided, set the size for this option. */
+ if (isset($optset['size'])) {
+ $next_option->setSize($optset['size']);
+ }
+
+ /* If provided, set the trailing_text for this option. */
+ if (isset($optset['trailing_text'])) {
+ $next_option->setTrailingText($optset['trailing_text']);
+ }
+
+ /* If provided, set the yes_text for this option. */
+ if (isset($optset['yes_text'])) {
+ $next_option->setYesText($optset['yes_text']);
+ }
+
+ /* If provided, set the no_text for this option. */
+ if (isset($optset['no_text'])) {
+ $next_option->setNoText($optset['no_text']);
+ }
+
+ /* If provided, set the layout type for this option. */
+ if (isset($optset['layout_type'])) {
+ $next_option->setLayoutType($optset['layout_type']);
+ }
+
+ /* If provided, set the use_add_widget value for this option. */
+ if (isset($optset['use_add_widget'])) {
+ $next_option->setUseAddWidget($optset['use_add_widget']);
+ }
+
+ /* If provided, set the use_delete_widget value for this option. */
+ if (isset($optset['use_delete_widget'])) {
+ $next_option->setUseDeleteWidget($optset['use_delete_widget']);
+ }
+
+ /* If provided, set the comment for this option. */
+ if (isset($optset['comment'])) {
+ $next_option->setComment($optset['comment']);
+ }
+
+ /* If provided, set the save function for this option. */
+ if (isset($optset['save'])) {
+ $next_option->setSaveFunction($optset['save']);
+ }
+
+ /* If provided, set the extra attributes for this option. */
+ if (isset($optset['extra_attributes'])) {
+ $next_option->setExtraAttributes($optset['extra_attributes']);
+ }
+
+ /* If provided, set the "post script" for this option. */
+ if (isset($optset['post_script'])) {
+ $next_option->setPostScript($optset['post_script']);
+ }
+
+ /* If provided, set the folder_filter for this option. */
+ if (isset($optset['folder_filter'])) {
+ $next_option->setFolderFilter($optset['folder_filter']);
+ }
+
+ /* Add this option to the option array. */
+ $result[$grpkey]['options'][] = $next_option;
+ }
+ }
+
+ /* Return our resulting array. */
+ return ($result);
}
-?>