+
+/**
+ * options.php
+ *
+ * Copyright (c) 1999-2004 The SquirrelMail Project Team
+ * Licensed under the GNU GPL. For full terms see the file COPYING.
+ *
+ * Functions needed to display the options pages.
+ *
+ * @version $Id$
+ * @package squirrelmail
+ */
+
+/**********************************************/
+/* Define constants used in the options code. */
+/**********************************************/
+
+/* Define constants for the various option types. */
+define('SMOPT_TYPE_STRING', 0);
+define('SMOPT_TYPE_STRLIST', 1);
+define('SMOPT_TYPE_TEXTAREA', 2);
+define('SMOPT_TYPE_INTEGER', 3);
+define('SMOPT_TYPE_FLOAT', 4);
+define('SMOPT_TYPE_BOOLEAN', 5);
+define('SMOPT_TYPE_HIDDEN', 6);
+define('SMOPT_TYPE_COMMENT', 7);
+define('SMOPT_TYPE_FLDRLIST', 8);
+
+/* Define constants for the options refresh levels. */
+define('SMOPT_REFRESH_NONE', 0);
+define('SMOPT_REFRESH_FOLDERLIST', 1);
+define('SMOPT_REFRESH_ALL', 2);
+
+/* Define constants for the options size. */
+define('SMOPT_SIZE_TINY', 0);
+define('SMOPT_SIZE_SMALL', 1);
+define('SMOPT_SIZE_MEDIUM', 2);
+define('SMOPT_SIZE_LARGE', 3);
+define('SMOPT_SIZE_HUGE', 4);
+define('SMOPT_SIZE_NORMAL', 5);
+
+define('SMOPT_SAVE_DEFAULT', 'save_option');
+define('SMOPT_SAVE_NOOP', 'save_option_noop');
+
+/**
+ * SquirrelOption: An option for Squirrelmail.
+ *
+ * This class is a work in progress. When complete, it will handle
+ * presentation and saving of Squirrelmail user options in a simple,
+ * streamline manner. Stay tuned for more stuff.
+ *
+ * Also, I'd like to ask that people leave this alone (mostly :) until
+ * I get it a little further along. That should only be a day or two or
+ * three. I will remove this message when it is ready for primetime usage.
+ * @package squirrelmail
+ */
+class SquirrelOption {
+ /* The basic stuff. */
+ var $name;
+ var $caption;
+ var $type;
+ var $refresh_level;
+ var $size;
+ var $comment;
+ var $script;
+ var $post_script;
+
+ /* The name of the Save Function for this option. */
+ var $save_function;
+
+ /* The various 'values' for this options. */
+ var $value;
+ var $new_value;
+ var $possible_values;
+
+ function SquirrelOption
+ ($name, $caption, $type, $refresh_level, $initial_value = '', $possible_values = '') {
+ /* Set the basic stuff. */
+ $this->name = $name;
+ $this->caption = $caption;
+ $this->type = $type;
+ $this->refresh_level = $refresh_level;
+ $this->possible_values = $possible_values;
+ $this->size = SMOPT_SIZE_MEDIUM;
+ $this->comment = '';
+ $this->script = '';
+ $this->post_script = '';
+
+ /* Check for a current value. */
+ if (!empty($initial_value)) {
+ $this->value = $initial_value;
+ } else if (isset($GLOBALS[$name])) {
+ $this->value = $GLOBALS[$name];
+ } else {
+ $this->value = '';
+ }
+
+ /* Check for a new value. */
+ if ( !sqgetGlobalVar("new_$name", $this->new_value, SQ_POST ) ) {
+ $this->new_value = '';
+ }
+
+ /* Set the default save function. */
+ if (($type != SMOPT_TYPE_HIDDEN) && ($type != SMOPT_TYPE_COMMENT)) {
+ $this->save_function = SMOPT_SAVE_DEFAULT;
+ } else {
+ $this->save_function = SMOPT_SAVE_NOOP;
+ }
+ }
+
+ /* Set the value for this option. */
+ function setValue($value) {
+ $this->value = $value;
+ }
+
+ /* Set the new value for this option. */
+ function setNewValue($new_value) {
+ $this->new_value = $new_value;
+ }
+
+ /* Set the size for this option. */
+ function setSize($size) {
+ $this->size = $size;
+ }
+
+ /* Set the comment for this option. */
+ function setComment($comment) {
+ $this->comment = $comment;
+ }
+
+ /* Set the script for this option. */
+ function setScript($script) {
+ $this->script = $script;
+ }
+
+ /* Set the "post script" for this option. */
+ function setPostScript($post_script) {
+ $this->post_script = $post_script;
+ }
+
+ /* Set the save function for this option. */
+ function setSaveFunction($save_function) {
+ $this->save_function = $save_function;
+ }
+
+ function createHTMLWidget() {
+ global $javascript_on;
+
+ /* 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_HIDDEN:
+ $result = $this->createWidget_Hidden();
+ break;
+ case SMOPT_TYPE_COMMENT:
+ $result = $this->createWidget_Comment();
+ break;
+ case SMOPT_TYPE_FLDRLIST:
+ $result = $this->createWidget_FolderList();
+ break;
+ default:
+ $result = '<font color="' . $color[2] . '">'
+ . sprintf(_("Option Type '%s' Not Found"), $this->type)
+ . '</font>';
+ }
+
+ /* Add the "post script" for this option. */
+ $result .= $this->post_script;
+
+ /* Now, return the created widget. */
+ return ($result);
+ }
+
+ 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;
+ }
+
+ $result = "<input name=\"new_$this->name\" value=\"$this->value\" size=\"$width\" $this->script>";
+ return ($result);
+ }
+
+ function createWidget_StrList() {
+ /* Begin the select tag. */
+ $result = "<select name=\"new_$this->name\" $this->script>";
+
+ /* Add each possible value to the select list. */
+ foreach ($this->possible_values as $real_value => $disp_value) {
+ /* Start the next new option string. */
+ $new_option = "<option value=\"$real_value\"";
+
+ /* If this value is the current value, select it. */
+ if ($real_value == $this->value) {
+ $new_option .= ' selected=""';