diff --git a/src/includes/class/class.LSsearch.php b/src/includes/class/class.LSsearch.php index 9b306608..b1a3df87 100644 --- a/src/includes/class/class.LSsearch.php +++ b/src/includes/class/class.LSsearch.php @@ -156,7 +156,7 @@ class LSsearch extends LSlog_staticLoggerClass { } } else { - $this -> purgeParams($LSobject); + $this -> purgeParams($LSobject, $context); $this -> loadDefaultParameters(); } @@ -214,7 +214,14 @@ class LSsearch extends LSlog_staticLoggerClass { * @return boolean True if params has been loaded from session or False */ private function loadParamsFromSession() { - if (isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'][$this -> context]) && is_array($_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'][$this -> context])) { + if ( + isset($_SESSION['LSsession']) + && isset($_SESSION['LSsession']['LSsearch']) + && isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject]) + && isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params']) + && isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'][$this -> context]) + && is_array($_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'][$this -> context]) + ) { self :: log_debug('Load params from session for context '.$this -> context); $params = $_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'][$this -> context]; @@ -236,15 +243,28 @@ class LSsearch extends LSlog_staticLoggerClass { * @return void */ private function saveParamsInSession() { - self :: log_debug('Save context params session '.$this -> context); + self :: log_debug( + 'saveParamsInSession(".$this -> LSobject."): Save context params session '.$this -> context); $params = $this -> params; if ($params['filter'] instanceof Net_LDAP2_Filter) { $params['filter'] = $params['filter'] -> asString(); } - + if (!isset($_SESSION['LSsession'])) + $_SESSION['LSsession'] = array(); + if (!isset($_SESSION['LSsession']['LSsearch'])) + $_SESSION['LSsession']['LSsearch'] = array(); + if (!isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject])) + $_SESSION['LSsession']['LSsearch'][$this -> LSobject] = array(); + if (!isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'])) + $_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'] = array(); + if (!isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'][$this -> context])) + $_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'][$this -> context] = array(); foreach ($params as $param => $value) { - if ( !isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'][$this -> context][$param]) || $_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'][$this -> context][$param]!=$value) { - self :: log_trace("$param => ".varDump($value)); + if ( + !isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'][$this -> context][$param]) + || $_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'][$this -> context][$param] != $value + ) { + self :: log_trace("saveParamsInSession(".$this -> LSobject."): $param => ".varDump($value)); $_SESSION['LSsession']['LSsearch'][$this -> LSobject]['params'][$this -> context][$param]=$value; } } @@ -253,30 +273,61 @@ class LSsearch extends LSlog_staticLoggerClass { /** * Purge parameters in session * - * @param string $LSobject The LSobject type + * @param string $LSobject The LdapObject type + * @param string|null $context The context of the search (optional, default: null) * * @return void */ - public static function purgeParams($LSobject) { - unset($_SESSION['LSsession']['LSsearch'][$LSobject]['params']); + public static function purgeParams($LSobject, $context=null) { + if (!isset($_SESSION['LSsession'])) return; + if (!isset($_SESSION['LSsession']['LSsearch'])) return; + if (!isset($_SESSION['LSsession']['LSsearch'][$LSobject])) return; + if (!isset($_SESSION['LSsession']['LSsearch'][$LSobject]['params'])) return; + if ($context) { + if (isset($_SESSION['LSsession']['LSsearch'][$LSobject]['params'][$context])) + unset($_SESSION['LSsession']['LSsearch'][$LSobject]['params'][$context]); + } + else + unset($_SESSION['LSsession']['LSsearch'][$LSobject]['params']); } /** * Purge cache * + * @param string $LSobject The LdapObject type + * @param string|null $hash The hash of the search (optional, default: null) + * * @return void */ - public static function purgeCache($LSobject) { - unset($_SESSION['LSsession']['LSsearch'][$LSobject]); + public static function purgeCache($LSobject, $hash=null) { + if (!isset($_SESSION['LSsession'])) return; + if (!isset($_SESSION['LSsession']['LSsearch'])) return; + if (!isset($_SESSION['LSsession']['LSsearch'][$LSobject])) return; + if (!isset($_SESSION['LSsession']['LSsearch'][$LSobject]['cache'])) return; + if ($hash) { + if (isset($_SESSION['LSsession']['LSsearch'][$LSobject]['cache'][$hash])) + unset($_SESSION['LSsession']['LSsearch'][$LSobject]['cache'][$hash]); + } + else + unset($_SESSION['LSsession']['LSsearch'][$LSobject]['cache']); } /** * Purge session * + * @param string $LSobject The LdapObject type + * * @return void */ - private function purgeSession() { - unset($_SESSION['LSsession']['LSsearch']); + private function purgeSession($LSobject=null) { + if (!isset($_SESSION['LSsession'])) return; + if (!isset($_SESSION['LSsession']['LSsearch'])) return; + if ($LSobject) { + if (isset($_SESSION['LSsession']['LSsearch'][$LSobject])) + unset($_SESSION['LSsession']['LSsearch'][$LSobject]); + } + else + unset($_SESSION['LSsession']['LSsearch']); } /** @@ -1121,7 +1172,15 @@ class LSsearch extends LSlog_staticLoggerClass { if ($this -> cacheIsEnabled()) { $hash = $this->getHash(); self :: log_trace("addResultToCache(): Save result in cache with hash '$hash'."); - $_SESSION['LSsession']['LSsearch'][$this -> LSobject][$hash]=$this->result; + if (!isset($_SESSION['LSsession'])) + $_SESSION['LSsession'] = array(); + if (!isset($_SESSION['LSsession']['LSsearch'])) + $_SESSION['LSsession']['LSsearch'] = array(); + if (!isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject])) + $_SESSION['LSsession']['LSsearch'][$this -> LSobject] = array(); + if (!isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject]['cache'])) + $_SESSION['LSsession']['LSsearch'][$this -> LSobject]['cache'] = array(); + $_SESSION['LSsession']['LSsearch'][$this -> LSobject]['cache'][$hash] = $this->result; } else self :: log_trace('addResultToCache(): cache is disabled.'); @@ -1134,10 +1193,16 @@ class LSsearch extends LSlog_staticLoggerClass { **/ private function getResultFromCache() { if ($this -> cacheIsEnabled()) { - $hash=$this->getHash(); - if (isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject][$hash])) { + $hash = $this->getHash(); + if ( + isset($_SESSION['LSsession']) + && isset($_SESSION['LSsession']['LSsearch']) + && isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject]) + && isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject]['cache']) + && isset($_SESSION['LSsession']['LSsearch'][$this -> LSobject]['cache'][$hash]) + ) { self :: log_trace('getResultFromCache(): result found in cache.'); - return $_SESSION['LSsession']['LSsearch'][$this -> LSobject][$hash]; + return $_SESSION['LSsession']['LSsearch'][$this -> LSobject]['cache'][$hash]; } self :: log_trace('getResultFromCache(): result not found in cache.'); }