Code

Save scroll position
[gosa.git] / gosa-core / include / class_session.inc
index 4a98ad2dc6aa31bd2c67c050b05b3558ea58e707..9d298cd9eabdf7b9a2933f39fcafe2aec58a8418 100644 (file)
@@ -32,17 +32,107 @@ class session {
        
        }
 
+       public static function add_channel($name)
+       {
+               /* If there's already such kind of channel, skip... */
+               if (isset($_SESSION[$name])){
+                       return (FALSE);
+               }
+
+               /* Allocate it... */
+               $_SESSION[$name]= array();
+               $_POST["_channel_"]= $name;
+               return (TRUE);
+       }
+
+       public static function remove_channel($name)
+       {
+               /* If there's already such kind of channel, skip... */
+               if (isset($_SESSION[$name])){
+                       unset($_SESSION[$name]);
+                       if (isset($_POST["_channel_"])){
+                               unset($_POST["_channel_"]);
+                       }
+                       return (TRUE);
+               }
+
+               return (FALSE);
+       }
+
        public static function is_set($name)
+       {
+               $channel= "";
+               if (isset($_POST['_channel_'])){
+                       $channel= $_POST['_channel_'];
+               }
+
+               /* Global fallback if not set */
+               if ($channel == ""){
+                       return(isset($_SESSION[$name]));
+               }
+
+               /* Sanity check */
+               if (!session::channel_exists($channel)){
+                       msg_dialog::display(_("Internal error"), _("Requested channel does not exist! Please contact your Administrator."), FATAL_ERROR_DIALOG);
+               }
+
+               $channel= "gch_".$channel;
+               return(isset($_SESSION[$channel][$name]));
+       }
+
+       public static function global_is_set($name)
        {
                return(isset($_SESSION[$name]));
        }
 
        public static function set($name,$value)
+       {
+               $channel= "";
+               if (isset($_POST['_channel_'])){
+                       $channel= $_POST['_channel_'];
+               }
+
+               /* Global fallback if not set */
+               if ($channel == ""){
+                       $_SESSION[$name] = $value;
+               } else {
+                       /* Sanity check */
+                       if (!session::channel_exists($channel)){
+                               msg_dialog::display(_("Internal error"), _("Requested channel does not exist! Please contact your Administrator."), FATAL_ERROR_DIALOG);
+                       }
+                       $_SESSION[$channel][$name] = $value;
+               }
+       }
+
+       public static function global_set($name,$value)
        {
                $_SESSION[$name] = $value;
        }
 
        public static function &get($name)
+       {
+               $channel= "";
+               if (isset($_POST['_channel_'])){
+                       $channel= $_POST['_channel_'];
+               }
+
+               /* Global fallback if not set */
+               if ($channel == ""){
+                       $ret = &$_SESSION[$name];
+                       return($ret);
+               }
+
+               /* Sanity check */
+               if (!session::channel_exists($channel)){
+                       msg_dialog::display(_("Internal error"), _("Requested channel does not exist! Please contact your Administrator."), FATAL_ERROR_DIALOG);
+               }
+
+               $channel= "gch_".$channel;
+               $ret = &$_SESSION[$channel][$name];
+               return($ret);
+       }
+
+       public static function &global_get($name)
        {
                $ret = &$_SESSION[$name];
                return($ret);
@@ -50,7 +140,26 @@ class session {
 
        public static function delete($name)
        {
-               if(session::is_set($name)){
+               $channel= "";
+               if (isset($_POST['_channel_'])){
+                       $channel= $_POST['_channel_'];
+               }
+
+               /* Global fallback if not set */
+               if ($channel == ""){
+                       if(isset($_SESSION[$name])){
+                               unset($_SESSION[$name]);
+                       }
+               } else {
+                       if(isset($_SESSION[$channel][$name])){
+                               unset($_SESSION[$channel][$name]);
+                       }
+               }
+       }
+
+       public static function global_delete($name)
+       {
+               if($_SESSION[$name]){
                        unset($_SESSION[$name]);
                }
        }
@@ -60,6 +169,11 @@ class session {
                return(session::delete($name));
        }
 
+       public static function global_un_set($name)
+       {
+               return(session::global_delete($name));
+       }
+
        public static function start()
        {
                /* Set cookie lifetime to one day (The parameter is in seconds ) */
@@ -72,24 +186,26 @@ class session {
                   !! The garbage collector is a cron job on debian systems, the cronjob will fetch the timeout from
                   the php.ini, so if you use debian, you must hardcode session.gc_maxlifetime in your php.ini */
                ini_set("session.gc_maxlifetime",24*60*60);
+               session_name("GOsa");
                session_start();
 
-    /* Check for changed browsers and bail out */
-    if (isset($_SESSION['HTTP_USER_AGENT']))
-    {
-      if ($_SESSION['HTTP_USER_AGENT'] !=  md5($_SERVER['HTTP_USER_AGENT'])) {
-        session_destroy();
-        session_start();
-      }
-    } else {
-      $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
-    }
+               /* Check for changed browsers and bail out */
+               if (isset($_SESSION['HTTP_USER_AGENT']))
+               {
+                       if ($_SESSION['HTTP_USER_AGENT'] !=  md5($_SERVER['HTTP_USER_AGENT'])) {
+                               session_destroy();
+                               session_name("GOsa");
+                               session_start();
+                       }
+               } else {
+                       $_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
+               }
 
-    /* Regenerate ID to increase security */
-    if (!isset($_SESSION['started'])){
-      session_regenerate_id();
-      $_SESSION['started'] = true;
-    }
+               /* Regenerate ID to increase security */
+               if (!isset($_SESSION['started'])){
+                       session_regenerate_id();
+                       $_SESSION['started'] = true;
+               }
        }
 
        public static function destroy()
@@ -109,4 +225,5 @@ class session {
        }
 }
 
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
 ?>