From 963a10bf8198ff21a26e6dd3d29a198587916858 Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Mon, 16 Apr 2012 08:46:31 -0400
Subject: [PATCH] - Moved session init/config functionality into rcube class

---
 program/include/rcube.php  |  107 ++++++++++++++++++++++++++
 program/include/rcmail.php |   94 -----------------------
 2 files changed, 107 insertions(+), 94 deletions(-)

diff --git a/program/include/rcmail.php b/program/include/rcmail.php
index a352cfc..5394055 100644
--- a/program/include/rcmail.php
+++ b/program/include/rcmail.php
@@ -350,38 +350,7 @@
    */
   public function session_init()
   {
-    // session started (Installer?)
-    if (session_id())
-      return;
-
-    $sess_name   = $this->config->get('session_name');
-    $sess_domain = $this->config->get('session_domain');
-    $lifetime    = $this->config->get('session_lifetime', 0) * 60;
-
-    // set session domain
-    if ($sess_domain) {
-      ini_set('session.cookie_domain', $sess_domain);
-    }
-    // set session garbage collecting time according to session_lifetime
-    if ($lifetime) {
-      ini_set('session.gc_maxlifetime', $lifetime * 2);
-    }
-
-    ini_set('session.cookie_secure', rcube_utils::https_check());
-    ini_set('session.name', $sess_name ? $sess_name : 'roundcube_sessid');
-    ini_set('session.use_cookies', 1);
-    ini_set('session.use_only_cookies', 1);
-    ini_set('session.serialize_handler', 'php');
-
-    // use database for storing session data
-    $this->session = new rcube_session($this->get_dbh(), $this->config);
-
-    $this->session->register_gc_handler(array($this, 'temp_gc'));
-    $this->session->register_gc_handler(array($this, 'cache_gc'));
-
-    // start PHP session (if not in CLI mode)
-    if ($_SERVER['REMOTE_ADDR'])
-      session_start();
+    parent::session_init();
 
     // set initial session vars
     if (!$_SESSION['user_id'])
@@ -390,30 +359,6 @@
     // restore skin selection after logout
     if ($_SESSION['temp'] && !empty($_SESSION['skin']))
       $this->config->set('skin', $_SESSION['skin']);
-  }
-
-
-  /**
-   * Configure session object internals
-   */
-  public function session_configure()
-  {
-    if (!$this->session)
-      return;
-
-    $lifetime = $this->config->get('session_lifetime', 0) * 60;
-
-    // set keep-alive/check-recent interval
-    if ($keep_alive = $this->config->get('keep_alive')) {
-      // be sure that it's less than session lifetime
-      if ($lifetime)
-        $keep_alive = min($keep_alive, $lifetime - 30);
-      $keep_alive = max(60, $keep_alive);
-      $this->session->set_keep_alive($keep_alive);
-    }
-
-    $this->session->set_secret($this->config->get('des_key') . $_SERVER['HTTP_USER_AGENT']);
-    $this->session->set_ip_check($this->config->get('ip_check'));
   }
 
 
@@ -674,18 +619,6 @@
     if (!empty($_SESSION['preferences'])) {
       $this->user->save_prefs(unserialize($_SESSION['preferences']));
     }
-  }
-
-
-  /**
-   * Garbage collector for cache entries.
-   * Set flag to expunge caches on shutdown
-   */
-  function cache_gc()
-  {
-    // because this gc function is called before storage is initialized,
-    // we just set a flag to expunge storage cache on shutdown.
-    $this->expunge_cache = true;
   }
 
 
@@ -1155,31 +1088,6 @@
         self::write_log('userlogins',
             sprintf('Successful login for %s (ID: %d) from %s in session %s',
                 $user_name, $user_id, rcube_utils::remote_ip(), session_id()));
-    }
-
-
-    /**
-     * Garbage collector function for temp files.
-     * Remove temp files older than two days
-     */
-    public function temp_gc()
-    {
-        $tmp = unslashify($this->config->get('temp_dir'));
-        $expire = mktime() - 172800;  // expire in 48 hours
-
-        if ($tmp && ($dir = opendir($tmp))) {
-            while (($fname = readdir($dir)) !== false) {
-                if ($fname{0} == '.') {
-                    continue;
-                }
-
-                if (filemtime($tmp.'/'.$fname) < $expire) {
-                    @unlink($tmp.'/'.$fname);
-                }
-            }
-
-            closedir($dir);
-        }
     }
 
 
diff --git a/program/include/rcube.php b/program/include/rcube.php
index 97596e7..6064a72 100644
--- a/program/include/rcube.php
+++ b/program/include/rcube.php
@@ -410,6 +410,112 @@
   }
 
 
+    /**
+     * Create session object and start the session.
+     */
+    public function session_init()
+    {
+        // session started (Installer?)
+        if (session_id()) {
+            return;
+        }
+
+        $sess_name   = $this->config->get('session_name');
+        $sess_domain = $this->config->get('session_domain');
+        $lifetime    = $this->config->get('session_lifetime', 0) * 60;
+
+        // set session domain
+        if ($sess_domain) {
+            ini_set('session.cookie_domain', $sess_domain);
+        }
+        // set session garbage collecting time according to session_lifetime
+        if ($lifetime) {
+            ini_set('session.gc_maxlifetime', $lifetime * 2);
+        }
+
+        ini_set('session.cookie_secure', rcube_utils::https_check());
+        ini_set('session.name', $sess_name ? $sess_name : 'roundcube_sessid');
+        ini_set('session.use_cookies', 1);
+        ini_set('session.use_only_cookies', 1);
+        ini_set('session.serialize_handler', 'php');
+
+        // use database for storing session data
+        $this->session = new rcube_session($this->get_dbh(), $this->config);
+
+        $this->session->register_gc_handler(array($this, 'temp_gc'));
+        $this->session->register_gc_handler(array($this, 'cache_gc'));
+
+        // start PHP session (if not in CLI mode)
+        if ($_SERVER['REMOTE_ADDR']) {
+            session_start();
+        }
+    }
+
+
+    /**
+     * Configure session object internals
+     */
+    public function session_configure()
+    {
+        if (!$this->session) {
+            return;
+        }
+
+        $lifetime   = $this->config->get('session_lifetime', 0) * 60;
+        $keep_alive = $this->config->get('keep_alive');
+
+        // set keep-alive/check-recent interval
+        if ($keep_alive) {
+            // be sure that it's less than session lifetime
+            if ($lifetime) {
+                $keep_alive = min($keep_alive, $lifetime - 30);
+            }
+            $keep_alive = max(60, $keep_alive);
+            $this->session->set_keep_alive($keep_alive);
+        }
+
+        $this->session->set_secret($this->config->get('des_key') . $_SERVER['HTTP_USER_AGENT']);
+        $this->session->set_ip_check($this->config->get('ip_check'));
+    }
+
+
+    /**
+     * Garbage collector function for temp files.
+     * Remove temp files older than two days
+     */
+    public function temp_gc()
+    {
+        $tmp = unslashify($this->config->get('temp_dir'));
+        $expire = mktime() - 172800;  // expire in 48 hours
+
+        if ($tmp && ($dir = opendir($tmp))) {
+            while (($fname = readdir($dir)) !== false) {
+                if ($fname{0} == '.') {
+                    continue;
+                }
+
+                if (filemtime($tmp.'/'.$fname) < $expire) {
+                    @unlink($tmp.'/'.$fname);
+                }
+            }
+
+            closedir($dir);
+        }
+    }
+
+
+    /**
+     * Garbage collector for cache entries.
+     * Set flag to expunge caches on shutdown
+     */
+    public function cache_gc()
+    {
+        // because this gc function is called before storage is initialized,
+        // we just set a flag to expunge storage cache on shutdown.
+        $this->expunge_cache = true;
+    }
+
+
   /**
    * Get localized text in the desired language
    *
@@ -1102,4 +1208,3 @@
         return $args;
     }
 }
-

--
Gitblit v1.9.1