• Main Page
  • Related Pages
  • Namespaces
  • Data Structures
  • Files
  • File List

E:/E/GEAMP/www/openbiz/openbiz/bin/SessionContext.php

00001 <?PHP
00020 define('OB_STATEFUL_DATA_SESSION_INDEX', 'ob_stateful_data');
00021 define('OB_TRANSIENT_DATA_SESSION_INDEX', 'ob_transient_data');
00022 
00023 
00034 class SessionContext
00035 {
00036     protected $_lastAccessTime;
00037     protected $_timeOut = false;
00038     protected $_sessObjArr = null;
00039     protected $_statefulSessObjArr = null;
00040     protected $_viewHistory = null;
00041     protected $_prevViewObjNames = array();
00042 
00048     function __construct()
00049     {        
00050         // get session save handler MC or DB
00051         if (defined("SESSION_HANDLER") && SESSION_HANDLER != "") {
00052             include_once SESSION_HANDLER.".php";
00053         }
00054         else {
00055               if(!file_exists(SESSION_PATH)){                  
00056                      @mkdir(SESSION_PATH,0777,true);
00057               }
00058             // default is file session
00059             if (defined('SESSION_PATH') && is_writable(SESSION_PATH))
00060                 session_save_path(SESSION_PATH);
00061             // we cannot write in the session save path; aborting
00062             if(!is_writable(session_save_path())) 
00063                 trigger_error("Unable to write in the session save path [".session_save_path()."]", E_USER_ERROR);
00064         }
00065         
00066         ini_set('session.gc_probability', 1);   // force gc 
00067         ini_set('session.gc_divisor', 100);
00068         if (defined('TIMEOUT') && TIMEOUT > 0)
00069             ini_set("session.gc_maxlifetime", TIMEOUT);
00070         else
00071             ini_set("session.gc_maxlifetime", 21600); // 6 hours
00072         
00073                      
00074             
00075         if (!defined('CLI') || CLI == 0) {
00076             if(isset($_REQUEST['cubi_sess_id'])){
00077                 session_id($_REQUEST['cubi_sess_id']);
00078             }
00079             session_start();
00080         }
00081         // record access time
00082         $curTime = time();
00083         if (isset($_SESSION["LastAccessTime"]))
00084             $this->_lastAccessTime = $_SESSION["LastAccessTime"];
00085         else
00086             $this->_lastAccessTime = $curTime;
00087         $_SESSION["LastAccessTime"] =$curTime;
00088 
00089         // see if timeout
00090         $this->_timeOut = false;
00091         if ((TIMEOUT > 0) && (($curTime - $this->_lastAccessTime) > TIMEOUT))
00092             $this->_timeOut = true;
00093     }
00094 
00102     public function setVar($varName, $value)
00103     {
00104         $_SESSION[$varName] = $value;
00105     }
00106     
00107     public function mergeVar($varName, $value)
00108     {
00109         $var = $_SESSION[$varName];
00110         if(is_array($var)){               
00111               foreach($value as $key=>$value){
00112                      $var[$key]=$value;
00113               }
00114               $_SESSION[$varName] = $var;
00115         }else{
00116               $_SESSION[$varName] = $value;
00117         }     
00118     }
00125     public function getVar($varName)
00126     {
00127         if (!isset($_SESSION[$varName]))
00128             return "";
00129         return $_SESSION[$varName];
00130     }
00131 
00139     public function clearVar($varName)
00140     {
00141         unset($_SESSION[$varName]);
00142     }
00143 
00150     public function varExists($varName)
00151     {
00152         $exists =  (array_key_exists($varName, $_SESSION)) ? TRUE : FALSE;
00153         return $exists;
00154     }
00155     
00156     public function getNamespace()
00157     {
00158         $view = BizSystem::instance()->getCurrentViewName();
00159         if ($view)
00160             $namespace = $view;
00161         else
00162             $namespace = 'DEFAULT_NS';
00163         return $namespace;
00164     }
00165 
00175     public function setObjVar($objName, $varName, &$value, $stateful=false )
00176     {
00177        if(preg_match('/\./si',$objName)){
00178               $objName = $this->getNamespace().'#'.$objName;
00179        }
00180         if (!$stateful)
00181             $this->_sessObjArr[$objName][$varName] = $value;
00182         else
00183             $this->_statefulSessObjArr[$objName][$varName] = $value;
00184     }
00185 
00193     public function cleanObj($objName, $stateful=false)
00194     {
00195        if(preg_match('/\./si',$objName)){
00196               $objName = $this->getNamespace().'#'.$objName;
00197        }
00198         if (!$stateful)
00199             unset($this->_sessObjArr[$objName]);
00200         else
00201             unset($this->_statefulSessObjArr[$objName]);
00202     }
00203 
00213     public function getObjVar($objName, $varName, &$value, $stateful=false)
00214     {
00215        if(preg_match('/\./si',$objName)){
00216               $objName = $this->getNamespace().'#'.$objName;
00217        }
00218         if (!$stateful)
00219         {
00220             if (!$this->_sessObjArr)
00221                 return;
00222             if (isset($this->_sessObjArr[$objName][$varName]))
00223                 $value = $this->_sessObjArr[$objName][$varName];
00224         }
00225         else
00226         {
00227             if (!$this->_statefulSessObjArr)
00228                 return;
00229             if (isset($this->_statefulSessObjArr[$objName][$varName]))
00230                 $value = $this->_statefulSessObjArr[$objName][$varName];
00231         }
00232     }
00233 
00239     public function saveSessionObjects()
00240     {
00241         // loop all objects (bizview, bizform, bizdataobj) collect their session vars
00242         $allobjs = BizSystem::objectFactory()->getAllObjects();
00243         foreach ($allobjs as $obj)
00244         {
00245             if (method_exists($obj, "SetSessionVars"))
00246             {
00247                 //after calling $obj->setSessionVars SessObjArr and StatefulSessObjArr are filled
00248                 $obj->setSessionVars($this);
00249             }
00250             // if previous view's object is used in current view, don't discard its session data
00251             if (isset($obj->m_Name) && key_exists($obj->m_Name, $this->_prevViewObjNames)) {
00252                 unset($this->_prevViewObjNames[$obj->m_Name]);
00253                 BizSystem::log(LOG_ERR, "SESSION", "unset ".$obj->m_Name);
00254             }
00255         }
00256 
00257         // discard useless previous view's session objects
00258         //foreach($this->_prevViewObjNames as $objName=>$tmp)
00259         //    unset($this->_sessObjArr[$objName]);
00260 
00261         $this->_sessObjArr["ViewHist"] = $this->_viewHistory;        
00262         
00263         $this->setVar(OB_TRANSIENT_DATA_SESSION_INDEX, $this->_sessObjArr);
00264         $this->setVar(OB_STATEFUL_DATA_SESSION_INDEX, $this->_statefulSessObjArr);
00265     }
00266 
00272     public function retrieveSessionObjects()
00273     {
00274         $this->_sessObjArr = $this->getVar(OB_TRANSIENT_DATA_SESSION_INDEX);
00275         $this->_statefulSessObjArr = $this->getVar(OB_STATEFUL_DATA_SESSION_INDEX);
00276 
00277         if (!is_array($this->_sessObjArr))
00278             $this->_sessObjArr = array();
00279         if (!is_array($this->_statefulSessObjArr))
00280             $this->_statefulSessObjArr = array();
00281 
00282         $this->_viewHistory = array_key_exists('ViewHist', $this->_sessObjArr)
00283             ? $this->_sessObjArr["ViewHist"]
00284             : NULL;
00285         return TRUE;
00286     }
00287 
00294     public function clearSessionObjects($keepObjects = false)
00295     {
00296         if ($keepObjects == false)
00297         {
00298             unset($this->_sessObjArr);
00299             $this->_sessObjArr = array();
00300         }
00301         else // add previous view's session object names in to a map
00302         {
00303             if (isset($this->_sessObjArr))
00304             {
00305                 foreach($this->_sessObjArr as $objName=>$sessobj)
00306                 {
00307                     //echo "save sess $objName <br/>";
00308                     $this->_prevViewObjNames[$objName] = 1;
00309                 }
00310             }
00311         }
00312     }
00313 
00321     public function saveJSONArray($jsonValue, $jsonName = NULL)
00322     {
00323         $jsonArray = json_decode($jsonValue);
00324 
00325         if((bool)$jsonName)
00326         { //If I want save all array in session I send the name of the array in session
00327             $this->setVar($jsonName, $jsonArray);
00328         }
00329         else
00330         {//I save each value in session
00331             foreach($jsonArray as $varName=>$value)
00332             {
00333                 $this->setVar($varName, $value);
00334             }
00335         }
00336     }
00337 
00344     public function getViewHistory($formName)
00345     {
00346         $view = BizSystem::instance()->getCurrentViewName();
00347         $view_form = $formName; //$view."_".$formname;
00348         return $this->_viewHistory[$view_form];
00349     }
00350 
00358     public function setViewHistory($formName, $historyInfo)
00359     {
00360         $view = BizSystem::instance()->getCurrentViewName();
00361         $view_form = $formName; //$view."_".$formname;
00362         if (!$historyInfo)
00363             unset($this->_viewHistory[$view_form]);
00364         else
00365             $this->_viewHistory[$view_form] = $historyInfo;
00366     }
00367 
00373     public function destroy()
00374     {
00375         unset($this->_viewHistory);
00376         unset($this->_sessObjArr);
00377         unset($this->_statefulSessObjArr);
00378 
00379         session_destroy();
00380     }
00381 
00388     public function isUserValid()
00389     {
00390         if (CHECKUSER == "N")
00391             return true;
00392         if ($this->getVar("UserId") != "")
00393             return true;
00394         else
00395             return false;
00396     }
00397 
00403     public function isTimeout()
00404     {
00405         return $this->_timeOut;
00406     }
00407 }
00408 
00409 ?>

Generated on Thu Apr 19 2012 17:09:13 for openbiz by  doxygen 1.7.2