move the 'fallback theme colors' to init.php. It makes sense to initialise
[squirrelmail.git] / include / init.php
index d41abd28c943538fae5a226fd5baa6b8781ffa93..2755e08044c805d402b20c23ebb28f6b5bcbc16b 100644 (file)
  * @package squirrelmail
  */
 
-
-
-
-
-/**
- * SquirrelMail internal version number -- DO NOT CHANGE
- * $sm_internal_version = array (release, major, minor)
- */
-
-$SQM_INTERNAL_VERSION = array(1,5,2);
-
 /**
  * This is a development version so in order to track programmer mistakes we
  * set the error reporting to E_ALL
  */
-
 error_reporting(E_ALL);
 
 
 /**
  * If register_globals are on, unregister globals.
  * Code requires PHP 4.1.0 or newer.
+ * Second test covers boolean set as string (php_value register_globals off).
  */
-if ((bool) @ini_get('register_globals')) {
+if ((bool) @ini_get('register_globals') &&
+    strtolower(ini_get('register_globals'))!='off') {
     /**
      * Remove all globals from $_GET, $_POST, and $_COOKIE.
      */
@@ -69,6 +58,17 @@ if ((bool) @ini_get('register_globals')) {
     }
 }
 
+/**
+ * [#1518885] session.use_cookies = off breaks SquirrelMail
+ *
+ * When session cookies are not used, all http redirects, meta refreshes, 
+ * src/download.php and javascript URLs are broken. Setting must be set 
+ * before session is started.
+ */
+if (!(bool)ini_get('session.use_cookies') ||
+    ini_get('session.use_cookies') == 'off') {
+    ini_set('session.use_cookies','1');
+}
 
 /**
  * calculate SM_PATH and calculate the base_uri
@@ -102,6 +102,29 @@ define('SM_BASE_URI', $base_uri);
  */
 $bInit = true;
 
+/**
+ * This theme as a failsafe if no themes were found, or if we error
+ * out before anything could be initialised.
+ */
+$color = array();
+$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[13] = '#800000';  /* (dark red)    Color for quoted text -- > 1 quote */
+$color[14] = '#ff0000';  /* (red)         Color for quoted text -- >> 2 or more */
+$color[15] = '#002266';  /* (dark blue)   Unselectable folders */
+$color[16] = '#ff9933';  /* (orange)      Highlight color */
+
 require(SM_PATH . 'functions/global.php');
 require(SM_PATH . 'config/config.php');
 require(SM_PATH . 'functions/plugin.php');
@@ -143,17 +166,17 @@ if (!isset($session_name) || !$session_name) {
 
 /**
  * if session.auto_start is On then close the session
- */ 
-$session_autostart_name = session_name();
-if ((isset($session_autostart_name) || $session_autostart_name == '') && 
-     $session_autostart_name !== $session_name) {
-    $cookiepath = ini_get('session.cookie_path');
-    $cookiedomain = ini_get('session.cookie_domain');
+ */
+$sSessionAutostartName = session_name();
+if ((isset($sSessionAutostartName) || $sSessionAutostartName == '') &&
+     $sSessionAutostartName !== $session_name) {
+    $sCookiePath = ini_get('session.cookie_path');
+    $sCookieDomain = ini_get('session.cookie_domain');
     // reset the cookie
-    setcookie($session_autostart_name,'',time() - 604800,$cookiepath,$cookiedomain);
+    setcookie($sSessionAutostartName,'',time() - 604800,$sCookiePath,$sCookieDomain);
     @session_destroy();
     session_write_close();
-}    
+}
 
 /**
  * includes from classes stored in the session
@@ -165,21 +188,33 @@ session_set_cookie_params (0, $base_uri);
 sqsession_is_active();
 
 /**
+ * DISABLED.
  * Remove globalized session data in rg=on setups
- */
-if ((bool) @ini_get('register_globals')) {
+ * 
+ * Code can be utilized when session is started, but data is not loaded.
+ * We have already loaded configuration and other important vars. Can't 
+ * clean session globals here.
+if ((bool) @ini_get('register_globals') &&
+    strtolower(ini_get('register_globals'))!='off') {
     foreach ($_SESSION as $key => $value) {
         unset($GLOBALS[$key]);
     }
 }
+*/
 
-sqsession_register($base_uri, SM_BASE_URI);
+sqsession_register(SM_BASE_URI,'base_uri');
 
 /**
  * SquirrelMail version number -- DO NOT CHANGE
  */
 $version = '1.5.2 [CVS]';
 
+/**
+ * SquirrelMail internal version number -- DO NOT CHANGE
+ * $sm_internal_version = array (release, major, minor)
+ */
+$SQM_INTERNAL_VERSION = array(1,5,2);
+
 /**
  * Retrieve the language cookie
  */
@@ -226,13 +261,18 @@ if (isset($plugins) && is_array($plugins)) {
 switch ($sInitLocation) {
     case 'style': session_write_close(); sqsetcookieflush(); break;
     case 'redirect':
+        /**
+         * directory hashing functions are needed for all setups in case
+         * plugins use own pref files.
+         */
+        require(SM_PATH . 'functions/prefs.php');
+        /* hook loads custom prefs backend plugins */
         $prefs_backend = do_hook_function('prefs_backend');
         if (isset($prefs_backend) && !empty($prefs_backend) && file_exists(SM_PATH . $prefs_backend)) {
             require(SM_PATH . $prefs_backend);
         } elseif (isset($prefs_dsn) && !empty($prefs_dsn)) {
             require(SM_PATH . 'functions/db_prefs.php');
         } else {
-            require(SM_PATH . 'functions/prefs.php');
             require(SM_PATH . 'functions/file_prefs.php');
         }
         //nobreak;
@@ -240,6 +280,20 @@ switch ($sInitLocation) {
         require(SM_PATH . 'functions/display_messages.php' );
         require(SM_PATH . 'functions/page_header.php');
         require(SM_PATH . 'functions/html.php');
+        /**
+         * cleanup old cookies with a cookie path the same as the standard php.ini
+         * cookie path. All previous SquirrelMail version used the standard php.ini
+         * cookie path for storing the session name. That behaviour changed.
+         */
+        if ($sCookiePath !== SM_BASE_URI) {
+            /**
+             * do not delete the standard sessions with session.name is i.e. PHPSESSID
+             * because they probably belong to other php apps
+             */
+            if (ini_get('session.name') !== $sSessionAutostartName) {
+                sqsetcookie(ini_get('session.name'),'',0,$sCookiePath);
+            }
+        }
         break;
     default:
         require(SM_PATH . 'functions/display_messages.php' );
@@ -272,6 +326,23 @@ switch ($sInitLocation) {
             return;
             }
 
+            /**
+             * Initialize the template object (logout_error uses it)
+             */
+            require(SM_PATH . 'class/template/template.class.php');
+            /*
+             * $sTplDir is not initialized when a user is not logged in, so we will use
+             * the config file defaults here.  If the neccesary variables are net set,
+             * force a default value.
+             */
+            $aTemplateSet = ( !isset($aTemplateSet) ? array() : $aTemplateSet );
+            $templateset_default = ( !isset($templateset_default) ? 0 : $templateset_default );
+
+            $sTplDir = ( !isset($aTemplateSet[$templateset_default]['PATH']) ?
+                         SM_PATH . 'templates/default/' :
+                         $aTemplateSet[$templateset_default]['PATH'] );
+            $oTemplate = new Template($sTplDir);
+
             set_up_language($squirrelmail_language, true);
             logout_error( _("You must be logged in to access this page.") );
             exit;
@@ -292,13 +363,15 @@ switch ($sInitLocation) {
             $prefs_cache = false; //array();
         }
 
+        /* see 'redirect' switch */
+        require(SM_PATH . 'functions/prefs.php');
+
         $prefs_backend = do_hook_function('prefs_backend');
         if (isset($prefs_backend) && !empty($prefs_backend) && file_exists(SM_PATH . $prefs_backend)) {
             require(SM_PATH . $prefs_backend);
         } elseif (isset($prefs_dsn) && !empty($prefs_dsn)) {
             require(SM_PATH . 'functions/db_prefs.php');
         } else {
-            require(SM_PATH . 'functions/prefs.php');
             require(SM_PATH . 'functions/file_prefs.php');
         }
 
@@ -370,6 +443,20 @@ switch ($sInitLocation) {
                 putenv("TZ=".$realTimeZone);
             }
         }
+
+        /**
+         * php 5.1.0 added time zone functions. Set time zone with them in order
+         * to prevent E_STRICT notices and allow time zone modifications in safe_mode.
+         */
+        if (function_exists('date_default_timezone_set')) {
+            if ($timeZone != SMPREF_NONE && $timeZone != "") {
+                date_default_timezone_set($timeZone);
+            } else {
+                // interface runs on server's time zone. Remove php E_STRICT complains
+                $default_timezone = @date_default_timezone_get();
+                date_default_timezone_set($default_timezone);        
+            }
+        }
         break;
 }
 
@@ -408,10 +495,9 @@ if (version_compare(PHP_VERSION, "4.3.0", ">=")) {
 /**
  * Javascript support detection function
  * @param boolean $reset recheck javascript support if set to true.
- * @return integer SMPREF_JS_ON or SMPREF_JS_OFF ({@see functions/constants.php})
+ * @return integer SMPREF_JS_ON or SMPREF_JS_OFF ({@see include/constants.php})
  * @since 1.5.1
  */
-
 function checkForJavascript($reset = FALSE) {
   global $data_dir, $username, $javascript_on, $javascript_setting;
 
@@ -437,4 +523,4 @@ function checkForJavascript($reset = FALSE) {
 function sqm_baseuri() {
     global $base_uri;
     return $base_uri;
-}
\ No newline at end of file
+}