Give back the message object to those who want it
[squirrelmail.git] / include / load_prefs.php
index 337efc1dda8a18cd6ee8274ce25af3697385bebd..f6753a10ddc73ff0020823b7658cd9f08f4118d3 100644 (file)
  * Loads preferences from the $username.pref file used by almost
  * every other script in the source directory and alswhere.
  *
- * @copyright © 1999-2006 The SquirrelMail Project Team
+ * @copyright 1999-2018 The SquirrelMail Project Team
  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  * @version $Id$
  * @package squirrelmail
  */
 
-/** SquirrelMail required files. */
-include_once(SM_PATH . 'functions/constants.php');
-include_once(SM_PATH . 'include/validate.php');
-include_once(SM_PATH . 'functions/plugin.php');
-
+/**
+ * do not allow to call this file directly
+ * FIXME: PHP CGI (at least on IIS 5.1) does not set 'SCRIPT_FILENAME' and
+ * code does not handle magic_quotes_gpc=on.
+ */
+if (isset($_SERVER['SCRIPT_FILENAME']) && $_SERVER['SCRIPT_FILENAME'] == __FILE__) {
+    header("Location: ../src/login.php");
+    die();
+}
 
 if( ! sqgetGlobalVar('username', $username, SQ_SESSION) ) {
     $username = '';
 }
-
+// TODO Get rid of "none" strings when NULL or false should be used, i hate them i hate them i hate them!!!.
 $custom_css = getPref($data_dir, $username, 'custom_css', 'none' );
 
-$theme = ( !isset($theme) ? array() : $theme );
-$color = ( !isset($color) ? array() : $color );
-$aTemplateSet = ( !isset($aTemplateSet) ? array() : $aTemplateSet );
-$templateset_default = ( !isset($templateset_default) ? 0 : $templateset_default );
 
-$chosen_theme = getPref($data_dir, $username, 'chosen_theme');
-$sTplDir = getPref($data_dir, $username, 'sTplDir', SM_PATH . 'templates/default/');
-$found_templateset = false;
-
-/* need to adjust $chosen_template path with SM_PATH */
-$sTplDir = preg_replace("/(\.\.\/){1,}/", SM_PATH, $sTplDir);
-
-for ($i = 0; $i < count($aTemplateSet); ++$i){
-    if ($aTemplateSet[$i]['PATH'] == $sTplDir) {
-        $found_templateset = true;
-        break;
-    }
-}
-$sTplDir = ($found_templateset ? $sTplDir : '');
-if (!$found_templateset) {
-    if (isset($aTemplateSet) && isset($aTemplateSet[$templateset_default]) && file_exists($aTemplateSet[$templateset_default]['PATH'])) {
-       $sTplDir = $aTemplateSet[$templateset_default]['PATH'];
-    } else {
-       $sTplDir = SM_PATH.'templates/default/';
-    }
-} else if (!file_exists($sTplDir)) {
-    $sTplDir = SM_PATH.'templates/default/';
+// template set setup
+//
+$sDefaultTemplateID = Template::get_default_template_set();
+if (PAGE_NAME == 'squirrelmail_rpc') {
+    $sTemplateID = Template::get_rpc_template_set();
+} else {
+    $sTemplateID = getPref($data_dir, $username, 'sTemplateID', $sDefaultTemplateID);
 }
 
-$found_theme = false;
 
-/* need to adjust $chosen_theme path with SM_PATH */
-$chosen_theme = preg_replace("/(\.\.\/){1,}/", SM_PATH, $chosen_theme);
+// load user theme
+//
+$chosen_theme = getPref($data_dir, $username, 'chosen_theme');
+$chosen_theme_path = empty($chosen_theme) ?
+                     $chosen_theme_path = $user_themes[$user_theme_default]['PATH'] :
+                     $chosen_theme;
 
-for ($i = 0; $i < count($theme); ++$i){
-    if ($theme[$i]['PATH'] == $chosen_theme) {
-        $found_theme = true;
-        break;
-    }
-}
-$chosen_theme = (!$found_theme ? '' : $chosen_theme);
 
+// user's icon theme, if using icons
+$icon_theme = getPref($data_dir, $username, 'icon_theme');
+$default_icon_theme = $icon_themes[$icon_theme_def]['PATH'];
+$fallback_icon_theme = $icon_themes[$icon_theme_fallback]['PATH'];
+$found_theme = false;
 
-/**
-* This theme as a failsafe if no themes were found. It makes
-* no sense to cause the whole thing to exit just because themes
-* were not found. This is the absolute last resort.
-* Moved here to provide 'sane' defaults for incomplete themes.
-*/
-$color[0]  = '#DCDCDC';  /* light gray    TitleBar               */
-$color[1]  = '#800000';  /* red                                  */
-$color[2]  = '#CC0000';  /* light red     Warning/Error Messages */
-$color[3]  = '#A0B8C8';  /* green-blue    Left Bar Background    */
-$color[4]  = '#FFFFFF';  /* white         Normal Background      */
-$color[5]  = '#FFFFCC';  /* light yellow  Table Headers          */
-$color[6]  = '#000000';  /* black         Text on left bar       */
-$color[7]  = '#0000CC';  /* blue          Links                  */
-$color[8]  = '#000000';  /* black         Normal text            */
-$color[9]  = '#ABABAB';  /* mid-gray      Darker version of #0   */
-$color[10] = '#666666';  /* dark gray     Darker version of #9   */
-$color[11] = '#770000';  /* dark red      Special Folders color  */
-$color[12] = '#EDEDED';
-$color[15] = '#002266';  /* (dark blue)      Unselectable folders */
-
-if (isset($chosen_theme) && $found_theme && (file_exists($chosen_theme))) {
-    @include_once($chosen_theme);
-} else {
-    if (isset($theme) && isset($theme[$theme_default]) && file_exists($theme[$theme_default]['PATH'])) {
-        @include_once($theme[$theme_default]['PATH']);
-        $chosen_theme = $theme[$theme_default]['PATH'];
-    }
+// Make sure the chosen icon theme is a legitimate one.
+// need to adjust $icon_theme path with SM_PATH 
+$icon_theme = preg_replace("/(\.\.\/){1,}/", SM_PATH, $icon_theme);
+$k = 0;
+while (!$found_theme && $k < count($icon_themes)) {
+    if ($icon_themes[$k]['PATH'] == $icon_theme)
+        $found_theme = true;
+    $k++;
 }
-
-
-if (!defined('download_php')) {
-    sqsession_register($theme_css, 'theme_css');
+if (!$found_theme) {
+    $icon_theme = $default_icon_theme;
 }
 
-// user's icon theme, if using icons
-$icon_theme = getPref($data_dir, $username, 'icon_theme', 'images/themes/xp/' );
-
-/*
- * NOTE: The $icon_theme_path var should contain the path to the icon 
- *       theme to use.  If the admin has disabled icons, or the user has
- *       set the icon theme to "None," no icons will be used.
- */
-$icon_theme_path = (!$use_icons || $icon_theme=='none') ? NULL : $icon_theme;
 
 // show (or not) flag and unflag buttons on mailbox list screen
 $show_flag_buttons = getPref($data_dir, $username, 'show_flag_buttons', SMPREF_ON );
@@ -206,9 +161,6 @@ $reply_focus = getPref($data_dir, $username, 'reply_focus', '');
 $left_refresh = getPref($data_dir, $username, 'left_refresh', 600 );
 $left_refresh = strtolower($left_refresh);
 
-/* Load up the Signature file */
-$signature_abs = $signature = getSig($data_dir, $username, 'g');
-
 /* Message Highlighting Rules */
 $message_highlight_list = array();
 
@@ -225,6 +177,7 @@ if( $ser = getPref($data_dir, $username, 'hililist') ) {
         $message_highlight_list[$i]['match_type'] = $highlight_array[3];
         removePref($data_dir, $username, "highlight$i");
     }
+// NB: The fact that this preference is always set here means that some plugins rely on testing it to know if a user has logged in before - the "old way" above is probably long since obsolete and unneeded, but the setPref() below should not be removed
     /* store in new format for the next time */
     setPref($data_dir, $username, 'hililist', serialize($message_highlight_list));
 }
@@ -269,8 +222,6 @@ if (!$index_order) {
     setPref($data_dir, $username, 'index_order', serialize($index_order));
 }
 
-
-
 if (!isset($default_mailbox_pref)) {
     $show_num = (isset($show_num)) ? $show_num : 15;
 
@@ -310,6 +261,9 @@ $collapse_folders =
 $show_html_default =
    getPref($data_dir, $username, 'show_html_default', SMPREF_ON);
 
+$addrsrch_fullname =
+   getPref($data_dir, $username, 'addrsrch_fullname', 'fullname');
+
 $enable_forward_as_attachment =
    getPref($data_dir, $username, 'enable_forward_as_attachment', SMPREF_ON);
 
@@ -321,14 +275,26 @@ $attachment_common_show_images = getPref($data_dir, $username, 'attachment_commo
 /* message disposition notification support setting */
 $mdn_user_support = getPref($data_dir, $username, 'mdn_user_support', SMPREF_ON);
 
+$do_not_reply_to_self =
+    getPref($data_dir, $username, 'do_not_reply_to_self', SMPREF_OFF);
+
 $include_self_reply_all =
     getPref($data_dir, $username, 'include_self_reply_all', SMPREF_ON);
 
+$return_to_message_after_reply =
+    getPref($data_dir, $username, 'return_to_message_after_reply', SMPREF_OFF);
+
 /* Page selector options */
 $page_selector = getPref($data_dir, $username, 'page_selector', SMPREF_ON);
 $compact_paginator = getPref($data_dir, $username, 'compact_paginator', SMPREF_OFF);
 $page_selector_max = getPref($data_dir, $username, 'page_selector_max', 10);
 
+/* Abook page selector options */
+$abook_show_num = getPref($data_dir, $username, 'abook_show_num', 15 );
+$abook_page_selector = getPref($data_dir, $username, 'abook_page_selector', SMPREF_ON);
+$abook_compact_paginator = getPref($data_dir, $username, 'abook_compact_paginator', SMPREF_OFF);
+$abook_page_selector_max = getPref($data_dir, $username, 'abook_page_selector_max', 5);
+
 /* SqClock now in the core */
 $date_format = getPref($data_dir, $username, 'date_format', 3);
 $hour_format = getPref($data_dir, $username, 'hour_format', SMPREF_TIME_12HR);
@@ -368,16 +334,18 @@ $show_only_subscribed_folders =
     getPref($data_dir, $username, 'show_only_subscribed_folders', SMPREF_ON);
 
 
-$forward_cc = getPref($data_dir, $username, 'forward_cc', SMPREF_OFF);
-
 /* How are mailbox select lists displayed: 0. full names, 1. indented (default),
  * 3. delimited) */
-$mailbox_select_style = getPref($data_dir, $username, 'mailbox_select_style', SMPREF_ON);
+$mailbox_select_style = getPref($data_dir, $username, 'mailbox_select_style', SMPREF_MAILBOX_SELECT_INDENTED);
 
 /* Allow user to customize, and display the full date, instead of day, or time based
    on time distance from date of message */
+$custom_date_format = getPref($data_dir, $username, 'custom_date_format', '');
 $show_full_date = getPref($data_dir, $username, 'show_full_date', SMPREF_OFF);
 
+// Allow user to determine if personal name or email address is shown in mailbox listings
+$show_personal_names = getPref($data_dir, $username, 'show_personal_names', SMPREF_ON);
+
 /* Allow user to customize length of from field */
 $truncate_sender = getPref($data_dir, $username, 'truncate_sender', 50);
 /* Allow user to customize length of subject field */
@@ -387,6 +355,81 @@ $show_recipient_instead = getPref($data_dir, $username, 'show_recipient_instead'
 
 $delete_prev_next_display = getPref($data_dir, $username, 'delete_prev_next_display', SMPREF_ON);
 
+/**
+ * Access keys
+ * @since 1.5.2
+ */
+$accesskey_menubar_compose = getPref($data_dir, $username, 'accesskey_menubar_compose', 'c');
+$accesskey_menubar_addresses = getPref($data_dir, $username, 'accesskey_menubar_addresses', 'NONE');
+$accesskey_menubar_folders = getPref($data_dir, $username, 'accesskey_menubar_folders', 'NONE');
+$accesskey_menubar_options = getPref($data_dir, $username, 'accesskey_menubar_options', 'o');
+$accesskey_menubar_search = getPref($data_dir, $username, 'accesskey_menubar_search', 'NONE');
+$accesskey_menubar_help = getPref($data_dir, $username, 'accesskey_menubar_help', 'NONE');
+$accesskey_menubar_signout = getPref($data_dir, $username, 'accesskey_menubar_signout', 'z');
+
+
+$accesskey_read_msg_reply = getPref($data_dir, $username, 'accesskey_read_msg_reply', 'r');
+$accesskey_read_msg_reply_all = getPref($data_dir, $username, 'accesskey_read_msg_reply_all', 'a');
+$accesskey_read_msg_forward = getPref($data_dir, $username, 'accesskey_read_msg_forward', 'f');
+$accesskey_read_msg_as_attach = getPref($data_dir, $username, 'accesskey_read_msg_as_attach', 'h');
+$accesskey_read_msg_delete = getPref($data_dir, $username, 'accesskey_read_msg_delete', 'd');
+$accesskey_read_msg_bypass_trash = getPref($data_dir, $username, 'accesskey_read_msg_bypass_trash', 'b');
+$accesskey_read_msg_move_to = getPref($data_dir, $username, 'accesskey_read_msg_move_to', 't');
+$accesskey_read_msg_move = getPref($data_dir, $username, 'accesskey_read_msg_move', 'm');
+$accesskey_read_msg_copy = getPref($data_dir, $username, 'accesskey_read_msg_copy', 'y');
+
+
+$accesskey_compose_identity = getPref($data_dir, $username, 'accesskey_compose_identity', 'f');
+$accesskey_compose_to = getPref($data_dir, $username, 'accesskey_compose_to', 't');
+$accesskey_compose_cc = getPref($data_dir, $username, 'accesskey_compose_cc', 'x');
+$accesskey_compose_bcc = getPref($data_dir, $username, 'accesskey_compose_bcc', 'y');
+$accesskey_compose_subject = getPref($data_dir, $username, 'accesskey_compose_subject', 'j');
+$accesskey_compose_priority = getPref($data_dir, $username, 'accesskey_compose_priority', 'p');
+$accesskey_compose_on_read = getPref($data_dir, $username, 'accesskey_compose_on_read', 'r');
+$accesskey_compose_on_delivery = getPref($data_dir, $username, 'accesskey_compose_on_delivery', 'v');
+$accesskey_compose_signature = getPref($data_dir, $username, 'accesskey_compose_signature', 'g');
+$accesskey_compose_addresses = getPref($data_dir, $username, 'accesskey_compose_addresses', 'a');
+$accesskey_compose_save_draft = getPref($data_dir, $username, 'accesskey_compose_save_draft', 'd');
+$accesskey_compose_send = getPref($data_dir, $username, 'accesskey_compose_send', 's');
+$accesskey_compose_body = getPref($data_dir, $username, 'accesskey_compose_body', 'b');
+$accesskey_compose_attach_browse = getPref($data_dir, $username, 'accesskey_compose_attach_browse', 'w');
+$accesskey_compose_attach = getPref($data_dir, $username, 'accesskey_compose_attach', 'h');
+$accesskey_compose_delete_attach = getPref($data_dir, $username, 'accesskey_compose_delete_attach', 'l');
+
+
+$accesskey_folders_refresh = getPref($data_dir, $username, 'accesskey_folders_refresh', 'NONE');
+$accesskey_folders_purge_trash = getPref($data_dir, $username, 'accesskey_folders_purge_trash', 'NONE');
+$accesskey_folders_inbox = getPref($data_dir, $username, 'accesskey_folders_inbox', 'i');
+
+
+$accesskey_options_personal = getPref($data_dir, $username, 'accesskey_options_personal', 'p');
+$accesskey_options_display = getPref($data_dir, $username, 'accesskey_options_display', 'd');
+$accesskey_options_highlighting = getPref($data_dir, $username, 'accesskey_options_highlighting', 'h');
+$accesskey_options_folders = getPref($data_dir, $username, 'accesskey_options_folders', 'f');
+$accesskey_options_index_order = getPref($data_dir, $username, 'accesskey_options_index_order', 'x');
+$accesskey_options_compose = getPref($data_dir, $username, 'accesskey_options_compose', 'e');
+$accesskey_options_accessibility = getPref($data_dir, $username, 'accesskey_options_accessibility', 'a');
+
+
+$accesskey_mailbox_previous = getPref($data_dir, $username, 'accesskey_mailbox_previous', 'p');
+$accesskey_mailbox_next = getPref($data_dir, $username, 'accesskey_mailbox_next', 'n');
+$accesskey_mailbox_all_paginate = getPref($data_dir, $username, 'accesskey_mailbox_all_paginate', 'a');
+$accesskey_mailbox_thread = getPref($data_dir, $username, 'accesskey_mailbox_thread', 'h');
+$accesskey_mailbox_flag = getPref($data_dir, $username, 'accesskey_mailbox_flag', 'l');
+$accesskey_mailbox_unflag = getPref($data_dir, $username, 'accesskey_mailbox_unflag', 'g');
+$accesskey_mailbox_read = getPref($data_dir, $username, 'accesskey_mailbox_read', 'r');
+$accesskey_mailbox_unread = getPref($data_dir, $username, 'accesskey_mailbox_unread', 'u');
+$accesskey_mailbox_forward = getPref($data_dir, $username, 'accesskey_mailbox_forward', 'f');
+$accesskey_mailbox_delete = getPref($data_dir, $username, 'accesskey_mailbox_delete', 'd');
+$accesskey_mailbox_expunge = getPref($data_dir, $username, 'accesskey_mailbox_expunge', 'x');
+$accesskey_mailbox_undelete = getPref($data_dir, $username, 'accesskey_mailbox_undelete', 'e');
+$accesskey_mailbox_bypass_trash = getPref($data_dir, $username, 'accesskey_mailbox_bypass_trash', 'b');
+$accesskey_mailbox_move_to = getPref($data_dir, $username, 'accesskey_mailbox_move_to', 't');
+$accesskey_mailbox_move = getPref($data_dir, $username, 'accesskey_mailbox_move', 'm');
+$accesskey_mailbox_copy = getPref($data_dir, $username, 'accesskey_mailbox_copy', 'y');
+$accesskey_mailbox_toggle_selected = getPref($data_dir, $username, 'accesskey_mailbox_toggle_selected', 's');
+
+
 /**
  * Height of iframe that displays html formated emails
  * @since 1.5.1
@@ -398,6 +441,102 @@ $chosen_fontset = getPref($data_dir, $username, 'chosen_fontset', $default_fonts
 if (! isset($default_fontsize)) $default_fontsize=SMPREF_NONE;
 $chosen_fontsize = getPref($data_dir, $username, 'chosen_fontsize', $default_fontsize);
 
-do_hook('loading_prefs');
+/**
+ * Controls translation of special folders
+ * @since 1.5.2
+ */
+$translate_special_folders = getPref($data_dir, $username, 'translate_special_folders', SMPREF_OFF);
+/**
+ * Controls display of message copy options
+ * @since 1.5.2
+ */
+$show_copy_buttons = getPref($data_dir, $username, 'show_copy_buttons', SMPREF_OFF);
+
+/** Put in a safety net for authentication here, in case a naughty admin didn't run conf.pl when they upgraded */
+
+// TODO Get rid of "none" strings when NULL should be used, i hate them i hate them i hate them!!!.
+if (! isset($smtp_auth_mech)) {
+    $smtp_auth_mech = 'none';
+}
+
+if (! isset($imap_auth_mech)) {
+    $imap_auth_mech = 'login';
+}
+
+if (! isset($use_imap_tls)) {
+    $use_imap_tls = false;
+}
+
+if (! isset($use_smtp_tls)) {
+    $use_smtp_tls = false;
+}
+
+
+// allow plugins to override user prefs
+//
+do_hook('loading_prefs', $null);
+
+
+// check user prefs template selection against templates actually available
+//
+$found_templateset = false;
+if (PAGE_NAME == 'squirrelmail_rpc') {
+    // RPC skins have no in-memory list
+    if (is_dir(SM_PATH . Template::calculate_template_file_directory($sTemplateID))) {
+        $found_templateset = true;
+    }
+} else {
+    for ($i = 0; $i < count($aTemplateSet); ++$i){
+        if ($aTemplateSet[$i]['ID'] == $sTemplateID) {
+            $found_templateset = true;
+            break;
+        }
+    }
+}
+
+// FIXME: do we need/want to check here for actual presence of template sets?
+// selected template not available, fall back to default template
+//
+if (!$found_templateset) $sTemplateID = $sDefaultTemplateID;
+
+// need to build this object now because it is used below to validate
+// user css theme choice
+//
+$oTemplate = Template::construct_template($sTemplateID);
+
+
+// Make sure the chosen theme is a legitimate one.
+//
+// need to adjust $chosen_theme path with SM_PATH 
+$chosen_theme_path = preg_replace("/(\.\.\/){1,}/", SM_PATH, $chosen_theme_path);
+$found_theme = false;
+while (!$found_theme && (list($index, $data) = each($user_themes))) {
+    if ($data['PATH'] == $chosen_theme_path)
+        $found_theme = true;
+}
+
+if (!$found_theme) {
+    $template_themes = $oTemplate->get_alternative_stylesheets(true);
+    while (!$found_theme && (list($path, $name) = each($template_themes))) {
+        if ($path == $chosen_theme_path)
+            $found_theme = true;
+    }
+}
+
+if (!$found_theme || $chosen_theme == 'none') {
+    $chosen_theme_path = NULL;
+}
+
+
+/*
+ * NOTE: The $icon_theme_path var should contain the path to the icon
+ *       theme to use.  If the admin has disabled icons, or the user has
+ *       set the icon theme to "None," no icons will be used.
+ */
+$icon_theme_path = (!$use_icons || $icon_theme=='none') ? NULL : ($icon_theme == 'template' ? SM_PATH . Template::calculate_template_images_directory($sTemplateID) : $icon_theme);
+$default_icon_theme_path = (!$use_icons || $default_icon_theme=='none') ? NULL : ($default_icon_theme == 'template' ? SM_PATH . Template::calculate_template_images_directory($sTemplateID) : $default_icon_theme);
+$fallback_icon_theme_path = (!$use_icons || $fallback_icon_theme=='none') ? NULL : ($fallback_icon_theme == 'template' ? SM_PATH . Template::calculate_template_images_directory($sTemplateID) : $fallback_icon_theme);
+
+/* Load up the Signature file */
+$signature_abs = $signature = getSig($data_dir, $username, 'g');
 
-?>