X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Flibs%2Fcache_functions.php;h=f8ff4882a08ba678ded9c0534aeee39f77d8d53f;hp=392827f683f83953d2ebdf66529ee1023b17bc9b;hb=f3e4c2c048761589836fdbe6bd2e46599a1833a7;hpb=3e67aa21428cb9bc5b8d7552d2dd0770fc46dfb3 diff --git a/inc/libs/cache_functions.php b/inc/libs/cache_functions.php index 392827f683..f8ff4882a0 100644 --- a/inc/libs/cache_functions.php +++ b/inc/libs/cache_functions.php @@ -10,7 +10,12 @@ * -------------------------------------------------------------------- * * Kurzbeschreibung : Funktionen fuer die admins-Erweiterung * * -------------------------------------------------------------------- * - * * + * $Revision:: 856 $ * + * $Date:: 2009-03-06 20:24:32 +0100 (Fr, 06. Mär 2009) $ * + * $Tag:: 0.2.1-FINAL $ * + * $Author:: stelzi $ * + * Needs to be in all Files and every File needs "svn propset * + * svn:keywords Date Revision" (autoprobset!) at least!!!!!! * * -------------------------------------------------------------------- * * Copyright (c) 2003 - 2008 by Roland Haeder * * For more information visit: http://www.mxchange.org * @@ -43,9 +48,10 @@ class CacheSystem { var $ret = "init"; var $path = ""; var $inc = ""; + var $fqfn = ""; var $pointer = false; - var $data = ""; - var $version = ""; + var $data = array(); + var $version = array(); var $name = ""; var $rebuilt = array(); @@ -84,26 +90,30 @@ class CacheSystem { } // Checks validity of cache file and if content is given - function loadCacheFile ($file, $forceContent = false) { + function loadCacheFile ($cacheName, $forceContent = false) { // Remember cache file - $this->name = $file; + $this->name = $cacheName; + + // Construct include filename for LOAD_INC_ONCE() call + $this->inc = $this->path . $cacheName . ".cache"; // Construct FQFN (full qualified file name) - $this->inc = $this->path.$file.".cache"; + $this->fqfn = constant('PATH') . $this->inc; // Check if file exists and if version matches - $status = (FILE_READABLE($this->inc) && (is_writeable($this->inc)) && ($this->extensionVersionMatches("cache"))); + $status = ($this->isCacheReadable() && (is_writeable($this->fqfn)) && ($this->extensionVersionMatches("cache"))); // Return status return $status; } + // Initializes the cache file function init () { // This will destory an existing cache file! if ($this->ret == "done") { // Create file - if (FILE_READABLE($this->inc)) chmod($this->inc, 0666); - $this->pointer = fopen($this->inc, 'w') or mxchange_die("Cannot write to cache ".$this->inc." !"); + if ($this->isCacheReadable()) chmod($this->fqfn, 0666); + $this->pointer = fopen($this->fqfn, 'w') or mxchange_die("Cannot write to cache ".$this->fqfn." !"); // Add open PHP tag fwrite($this->pointer, "storeExtensionVersion("cache"); } else { // Cannot create file - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); + addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".getMessage('CACHE_PROBLEMS_DETECTED')); } } function addRow ($data) { - global $cacheArray; - + // Is the pointe rvalid? if (is_resource($this->pointer)) { // Write every array element to cache file foreach ($data as $k => $v) { // Write global cache array for immediate access if ((substr($k, 0, 4) == "ext_") && (isset($data['ext_name'])) && (isset($data['ext_id']))) { if ($k != "ext_name") { - $cacheArray['extensions'][$k][$data['ext_name']] = $v; + $GLOBALS['cache_array']['extensions'][$k][$data['ext_name']] = $v; } else { - $cacheArray['extensions'][$k][$data['ext_id']] = $v; + $GLOBALS['cache_array']['extensions'][$k][$data['ext_id']] = $v; } if (($k == "ext_keep") && ($v == "Y")) { - $cacheArray['active_extensions'][$data['ext_name']] = $v; + $GLOBALS['cache_array']['active_extensions'][$data['ext_name']] = $v; } // END - if } elseif (is_array($v)) { // Serialize and BASE64-encode the array @@ -142,7 +151,7 @@ class CacheSystem { } } else { // Cannot create file - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); + addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".getMessage('CACHE_PROBLEMS_DETECTED')); } } @@ -156,7 +165,7 @@ class CacheSystem { fclose($this->pointer); // Set rights - if (FILE_READABLE($this->inc)) chmod($this->inc, 0666); + if ($this->isCacheReadable()) chmod($this->fqfn, 0666); // Remove pointer $this->pointer = false; @@ -172,13 +181,13 @@ class CacheSystem { } // END - if // Is the cache file there? - if (FILE_READABLE($this->inc)) { + if ($this->isCacheReadable()) { // Prepare temporary array $data = array(); $cache_version = null; // Load cache file - require_once($this->inc); + require($this->inc); // Is there an array? if (is_array($data)) { @@ -205,40 +214,38 @@ class CacheSystem { } } else { // Cache file not found or not readable - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_CANNOT_LOAD_1.$this->inc.CACHE_CANNOT_LOAD_2); + addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".CACHE_CANNOT_LOAD_1.$this->fqfn.CACHE_CANNOT_LOAD_2); } } // Destroy an existing cache file function destroyCacheFile () { // Is the cache file there? - if ((!isset($this->rebuilt[$this->name])) && (FILE_READABLE($this->inc))) { + if ((!isset($this->rebuilt[$this->name])) && ($this->isCacheReadable())) { // Close cache $this->finalize(); // Remove cache file from system //* DEBUG: */ print __METHOD__."(".__LINE__."): {$this->name} - DESTROYED!
\n"; - unlink($this->inc); + unlink($this->fqfn); + // @TODO remove from $GLOBALS['cache_array']!!! // Is the file there? - if (!FILE_READABLE($this->inc)) { + if (!$this->isCacheReadable()) { // The cache does no longer exist so kill the content unset($this->data[$this->name]); unset($this->version[$this->name]); $this->rebuilt[$this->name] = true; } else { // Not removed! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_CANNOT_UNLINK_1.$this->inc.CACHE_CANNOT_UNLINK_2); + addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".CACHE_CANNOT_UNLINK_1.$this->fqfn.CACHE_CANNOT_UNLINK_2); } - } else { - // Does not exist! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); - } + } // END - if } // Unused method: function removeEntry ($search, $data, $array) { - if ((FILE_READABLE($this->inc)) && (is_writeable($this->inc))) { + if (($this->isCacheReadable()) && (is_writeable($this->fqfn))) { // Load cache into dummy array $dummy = $this->getArrayFromCache(); @@ -262,7 +269,7 @@ class CacheSystem { } } else { // Cannot write to cache! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); + addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".getMessage('CACHE_PROBLEMS_DETECTED')); } } @@ -286,13 +293,13 @@ class CacheSystem { } // END - foreach } else { // Cannot write array! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); + addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".getMessage('CACHE_PROBLEMS_DETECTED')); } } // Unused method function replaceEntry ($search, $replace, $search_key, $array) { - if ((FILE_READABLE($this->inc)) && (is_writeable($this->inc))) { + if (($this->isCacheReadable()) && (is_writeable($this->fqfn))) { // Load cache into dummy array $dummy = $this->getArrayFromCache(); @@ -323,10 +330,11 @@ class CacheSystem { } // END - if } else { // Cannot write to cache! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); + addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".getMessage('CACHE_PROBLEMS_DETECTED')); } } + // Writes the version of given extension to the cache file function storeExtensionVersion ($ext_name) { // Valid cache pointer? if (is_resource($this->pointer)) { @@ -341,10 +349,11 @@ class CacheSystem { //* DEBUG: */ print __METHOD__."(".__LINE__."): {$this->name} - {$ext_name}={$ext_ver}
\n"; } else { // Cannot create file - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); + addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".getMessage('CACHE_PROBLEMS_DETECTED')); } } + // Checks wether versions from cache and extension matches function extensionVersionMatches ($ext_name) { // Load cache (dummy) $this->getArrayFromCache(); @@ -357,13 +366,15 @@ class CacheSystem { //* DEBUG: */ print __METHOD__."(".__LINE__."): cache={$this->name},ext_name={$ext_name} - {$ext_ver}/{$this->version[$this->name][$ext_name]}
\n"; } else { // No cache version found! - DEBUG_LOG(__METHOD__, __LINE__, "Cache {$this->name} has missing entry for extension {$ext_name}!"); + DEBUG_LOG(__METHOD__, __LINE__, "Cache {$this->name} has missing version entry for extension {$ext_name}!"); } // Compare both return ((isset($this->version[$this->name][$ext_name])) && ($this->version[$this->name][$ext_name] == $ext_ver)); } + // Rewrit the entry so it can be stored in cache file + // @TODO Add support for more types which break in last else-block function rewriteEntry ($key, $value) { // Init line $line = ""; @@ -378,8 +389,10 @@ class CacheSystem { } elseif (is_bool($value)) { // Boolean value if ($value === true) { + // True $line = "\$data['".$key."'][] = true;\n"; } else { + // False $line = "\$data['".$key."'][] = false;\n"; } } else { @@ -391,50 +404,51 @@ class CacheSystem { return $line; } + // Getter for cache status function getStatus () { return $this->ret; } -} + + // Checks wether the current cache file is readable + function isCacheReadable () { + return INCLUDE_READABLE($this->inc); + } +} // END - class // Destroy the cache on extension changes function FILTER_CACHE_DESTROY_ON_EXT_CHANGE ($data) { - global $cacheInstance; - // Remove cache if (EXT_IS_ACTIVE("cache")) { - if ($cacheInstance->loadCacheFile("config")) $cacheInstance->destroyCacheFile(); - if ($cacheInstance->loadCacheFile("extensions")) $cacheInstance->destroyCacheFile(); - if ($cacheInstance->loadCacheFile("mod_reg")) $cacheInstance->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("config")) $GLOBALS['cache_instance']->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("extensions")) $GLOBALS['cache_instance']->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("modreg")) $GLOBALS['cache_instance']->destroyCacheFile(); } // END - if // Return it - return $DATA; + return $data; } // Destroy the cache on changing admin function FILTER_CACHE_DESTROY_ON_ADMIN_CHANGE () { - global $cacheInstance; - // Remove cache if (EXT_IS_ACTIVE("cache")) { - if ($cacheInstance->loadCacheFile("admins")) $cacheInstance->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("admins")) $GLOBALS['cache_instance']->destroyCacheFile(); } // END - if } // Destroy all cache files function FILTER_CACHE_DESTROY_ALL () { - global $cacheInstance; - // Remove cache if (EXT_IS_ACTIVE("cache")) { - if ($cacheInstance->loadCacheFile("admins")) $cacheInstance->destroyCacheFile(); - if ($cacheInstance->loadCacheFile("admins_acls")) $cacheInstance->destroyCacheFile(); - if ($cacheInstance->loadCacheFile("config")) $cacheInstance->destroyCacheFile(); - if ($cacheInstance->loadCacheFile("extensions")) $cacheInstance->destroyCacheFile(); - if ($cacheInstance->loadCacheFile("mod_reg")) $cacheInstance->destroyCacheFile(); - if ($cacheInstance->loadCacheFile("refdepths")) $cacheInstance->destroyCacheFile(); - if ($cacheInstance->loadCacheFile("refsystem")) $cacheInstance->destroyCacheFile(); - if ($cacheInstance->loadCacheFile("themes")) $cacheInstance->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("admins")) $GLOBALS['cache_instance']->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("admins_acls")) $GLOBALS['cache_instance']->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("config")) $GLOBALS['cache_instance']->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("extensions")) $GLOBALS['cache_instance']->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("modreg")) $GLOBALS['cache_instance']->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("refdepths")) $GLOBALS['cache_instance']->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("refsystem")) $GLOBALS['cache_instance']->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("themes")) $GLOBALS['cache_instance']->destroyCacheFile(); + if ($GLOBALS['cache_instance']->loadCacheFile("revision")) $GLOBALS['cache_instance']->destroyCacheFile(); } // END - if }