Happy New Year
[squirrelmail.git] / src / options.php
index f11694ddfb925dce127d24e1c97f271739fef874..0d320b21030de7769925de18718df578f9761c7e 100644 (file)
@@ -6,7 +6,7 @@
  * Displays the options page. Pulls from proper user preference files
  * and config.php. Displays preferences as selected and other options.
  *
- * @copyright © 1999-2007 The SquirrelMail Project Team
+ * @copyright 1999-2020 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  * @version $Id$
  * @package squirrelmail
@@ -39,6 +39,7 @@ define('SMOPT_PAGE_MAIN', 'main');
 define('SMOPT_PAGE_PERSONAL', 'personal');
 define('SMOPT_PAGE_DISPLAY', 'display');
 define('SMOPT_PAGE_COMPOSE', 'compose');
+define('SMOPT_PAGE_ACCESSIBILITY', 'accessibility');
 define('SMOPT_PAGE_HIGHLIGHT', 'highlight');
 define('SMOPT_PAGE_FOLDER', 'folder');
 define('SMOPT_PAGE_ORDER', 'order');
@@ -102,8 +103,9 @@ function process_optionmode_link($optpage) {
 
 /* get the globals that we may need */
 sqgetGlobalVar('optpage',     $optpage);
-sqgetGlobalVar('optmode',     $optmode,      SQ_FORM);
-sqgetGlobalVar('optpage_data',$optpage_data, SQ_POST);
+sqgetGlobalVar('optmode',     $optmode,         SQ_FORM);
+sqgetGlobalVar('optpage_data',$optpage_data,    SQ_POST);
+sqgetGlobalVar('smtoken',     $submitted_token, SQ_FORM, '');
 /* end of getting globals */
 
 /* Make sure we have an Option Page set. Default to main. */
@@ -149,6 +151,12 @@ switch ($optpage) {
         $optpage_loader = 'load_optpage_data_compose';
         $optpage_loadhook = 'optpage_loadhook_compose';
         break;
+    case SMOPT_PAGE_ACCESSIBILITY:
+        $optpage_name   = _("Accessibility Preferences");
+        $optpage_file   = SM_PATH . 'include/options/accessibility.php';
+        $optpage_loader = 'load_optpage_data_accessibility';
+        $optpage_loadhook = 'optpage_loadhook_accessibility';
+        break;
     case SMOPT_PAGE_HIGHLIGHT:
         $optpage_name   = _("Message Highlighting");
         $optpage_file   = SM_PATH . 'include/options/highlight.php';
@@ -192,6 +200,12 @@ if ( !@is_file( $optpage_file ) ) {
 /*** Next, process anything that needs to be processed. ***/
 /***********************************************************/
 
+// security check before saving anything...
+//FIXME: what about SMOPT_MODE_LINK??
+if ($optmode == SMOPT_MODE_SUBMIT) {
+   sm_validate_security_token($submitted_token, -1, TRUE);
+}
+
 $optpage_save_error=array();
 
 if ( isset( $optpage_data ) ) {
@@ -228,6 +242,9 @@ if ($optmode == SMOPT_MODE_SUBMIT) {
         case SMOPT_PAGE_COMPOSE:
             $save_hook_name = 'options_compose_save';
             break;
+        case SMOPT_PAGE_ACCESSIBILITY:
+            $save_hook_name = 'options_accessibility_save';
+            break;
         case SMOPT_PAGE_FOLDER:
             $save_hook_name = 'options_folder_save';
             break;
@@ -281,7 +298,8 @@ if ($optpage == SMOPT_PAGE_MAIN) {
             $notice.= "</ul>\n" . _("Some of your preference changes were not applied.") . "\n";
         } else {
             /* Display a message indicating a successful save. */
-            $notice = _("Successfully Saved Options") . ": $optpage_name</b><br />\n";
+            // i18n: The %s represents the name of the option page saving the options
+            $notice = sprintf(_("Successfully Saved Options: %s"), $optpage_name) . "<br />\n";
         }
 
         /* If $max_refresh != SMOPT_REFRESH_NONE, provide a refresh link. */
@@ -313,52 +331,73 @@ if ($optpage == SMOPT_PAGE_MAIN) {
     /******************************************/
     $optpage_blocks = array();
 
+    // access keys...
+    global $accesskey_options_personal, $accesskey_options_display,
+           $accesskey_options_highlighting, $accesskey_options_folders,
+           $accesskey_options_index_order, $accesskey_options_compose,
+           $accesskey_options_accessibility;
+
     /* Build a section for Personal Options. */
     $optpage_blocks[] = array(
-        'name' => _("Personal Information"),
-        'url'  => 'options.php?optpage=' . SMOPT_PAGE_PERSONAL,
-        'desc' => _("This contains personal information about yourself such as your name, your email address, etc."),
-        'js'   => false
+        'name'      => _("Personal Information"),
+        'url'       => 'options.php?optpage=' . SMOPT_PAGE_PERSONAL,
+        'desc'      => _("This contains personal information about yourself such as your name, your email address, etc."),
+        'js'        => false,
+        'accesskey' => $accesskey_options_personal,
     );
 
     /* Build a section for Display Options. */
     $optpage_blocks[] = array(
-        'name' => _("Display Preferences"),
-        'url'  => 'options.php?optpage=' . SMOPT_PAGE_DISPLAY,
-        'desc' => _("You can change the way that SquirrelMail looks and displays information to you, such as the colors, the language, and other settings."),
-        'js'   => false
+        'name'      => _("Display Preferences"),
+        'url'       => 'options.php?optpage=' . SMOPT_PAGE_DISPLAY,
+        'desc'      => _("You can change the way that SquirrelMail looks and displays information to you, such as the colors, the language, and other settings."),
+        'js'        => false,
+        'accesskey' => $accesskey_options_display,
     );
 
     /* Build a section for Message Highlighting Options. */
     $optpage_blocks[] = array(
-        'name' =>_("Message Highlighting"),
-        'url'  => 'options_highlight.php',
-        'desc' =>_("Based upon given criteria, incoming messages can have different background colors in the message list. This helps to easily distinguish who the messages are from, especially for mailing lists."),
-        'js'   => false
+        'name'      =>_("Message Highlighting"),
+        'url'       => 'options_highlight.php',
+        'desc'      =>_("Based upon given criteria, incoming messages can have different background colors in the message list. This helps to easily distinguish who the messages are from, especially for mailing lists."),
+        'js'        => false,
+        'accesskey' => $accesskey_options_highlighting,
     );
 
     /* Build a section for Folder Options. */
     $optpage_blocks[] = array(
-        'name' => _("Folder Preferences"),
-        'url'  => 'options.php?optpage=' . SMOPT_PAGE_FOLDER,
-        'desc' => _("These settings change the way your folders are displayed and manipulated."),
-        'js'   => false
+        'name'      => _("Folder Preferences"),
+        'url'       => 'options.php?optpage=' . SMOPT_PAGE_FOLDER,
+        'desc'      => _("These settings change the way your folders are displayed and manipulated."),
+        'js'        => false,
+        'accesskey' => $accesskey_options_folders,
     );
 
     /* Build a section for Index Order Options. */
     $optpage_blocks[] = array(
-        'name' => _("Index Order"),
-        'url'  => 'options_order.php',
-        'desc' => _("The order of the message index can be rearranged and changed to contain the headers in any order you want."),
-        'js'   => false
+        'name'      => _("Index Order"),
+        'url'       => 'options_order.php',
+        'desc'      => _("The order of the message index can be rearranged and changed to contain the headers in any order you want."),
+        'js'        => false,
+        'accesskey' => $accesskey_options_index_order,
     );
 
     /* Build a section for Compose Options. */
     $optpage_blocks[] = array(
-        'name' => _("Compose Preferences"),
-        'url'  => 'options.php?optpage=' . SMOPT_PAGE_COMPOSE,
-        'desc' => _("Control the behaviour and layout of writing new mail messages, replying to and forwarding messages."),
-        'js'   => false
+        'name'      => _("Compose Preferences"),
+        'url'       => 'options.php?optpage=' . SMOPT_PAGE_COMPOSE,
+        'desc'      => _("Control the behaviour and layout of writing new mail messages, replying to and forwarding messages."),
+        'js'        => false,
+        'accesskey' => $accesskey_options_compose,
+    );
+
+    /* Build a section for Accessibility Options. */
+    $optpage_blocks[] = array(
+        'name'      => _("Accessibility Preferences"),
+        'url'       => 'options.php?optpage=' . SMOPT_PAGE_ACCESSIBILITY,
+        'desc'      => _("You can configure features that improve interface usability."),
+        'js'        => false,
+        'accesskey' => $accesskey_options_accessibility,
     );
 
     /* Build a section for plugins wanting to register an optionpage. */
@@ -370,6 +409,9 @@ if ($optpage == SMOPT_PAGE_MAIN) {
     $js_optpage_blocks = array();
     $reg_optpage_blocks = array();
     foreach ($optpage_blocks as $cur_optpage) {
+        if (!isset($cur_optpage['accesskey'])) {
+            $cur_optpage['accesskey'] = 'NONE';
+        }
         if (!isset($cur_optpage['js']) || !$cur_optpage['js']) {
             $reg_optpage_blocks[] = $cur_optpage;
         } else if (checkForJavascript()) {
@@ -407,6 +449,10 @@ if ($optpage == SMOPT_PAGE_MAIN) {
             $bottom_hook_name = 'options_compose_bottom';
             $submit_name = 'submit_compose';
             break;
+        case SMOPT_PAGE_ACCESSIBILITY:
+            $bottom_hook_name = 'options_accessibility_bottom';
+            $submit_name = 'submit_accessibility';
+            break;
         case SMOPT_PAGE_HIGHLIGHT:
             $bottom_hook_name = 'options_highlight_bottom';
             $submit_name = 'submit_highlight';
@@ -420,12 +466,12 @@ if ($optpage == SMOPT_PAGE_MAIN) {
             $submit_name = 'submit_order';
             break;
         default:
-            $bottom_hook_name = '';
+            $bottom_hook_name = 'options_generic_bottom';
             $submit_name = 'submit';
     }
 
     // Begin output form
-    echo addForm('options.php', 'post', 'option_form')
+    echo addForm('options.php', 'post', 'option_form', '', '', array(), TRUE)
        . create_optpage_element($optpage)
        . create_optmode_element(SMOPT_MODE_SUBMIT);