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
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
00059 if (defined('SESSION_PATH') && is_writable(SESSION_PATH))
00060 session_save_path(SESSION_PATH);
00061
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);
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);
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
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
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
00242 $allobjs = BizSystem::objectFactory()->getAllObjects();
00243 foreach ($allobjs as $obj)
00244 {
00245 if (method_exists($obj, "SetSessionVars"))
00246 {
00247
00248 $obj->setSessionVars($this);
00249 }
00250
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
00258
00259
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
00302 {
00303 if (isset($this->_sessObjArr))
00304 {
00305 foreach($this->_sessObjArr as $objName=>$sessobj)
00306 {
00307
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 {
00327 $this->setVar($jsonName, $jsonArray);
00328 }
00329 else
00330 {
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;
00348 return $this->_viewHistory[$view_form];
00349 }
00350
00358 public function setViewHistory($formName, $historyInfo)
00359 {
00360 $view = BizSystem::instance()->getCurrentViewName();
00361 $view_form = $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 ?>