X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;ds=sidebyside;f=inc%2Fclasses%2Fcachesystem.class.php;h=4c23235ac20812d568c89b9d06066dcd36354f5e;hb=70a70cc2bbf8942f89ef092e076289164bae7b4c;hp=6a1992dd9d371e5145304a1a3ad7473df0a69a54;hpb=ab82613b0100336c0966a742c986874ec1692672;p=mailer.git diff --git a/inc/classes/cachesystem.class.php b/inc/classes/cachesystem.class.php index 6a1992dd9d..4c23235ac2 100644 --- a/inc/classes/cachesystem.class.php +++ b/inc/classes/cachesystem.class.php @@ -1,7 +1,7 @@ ret = $this->statusDone; - } else { - // Stop! Set a .htaccess file first - $this->ret = 'htaccess'; - } - } // END - if + // Is there a .htaccess file? + if (isFileReadable(getConfig('CACHE_PATH') . '.htaccess')) { + // All done! + $this->ret = $this->statusDone; + } else { + // Stop! Set a .htaccess file first + $this->ret = 'htaccess'; + } } // END - if } @@ -101,7 +89,7 @@ class CacheSystem { // Pre-fetch cache here if found if ($this->isCacheReadable()) $this->getArrayFromCache(); - //* DEBUG: */ print($cacheName.'='.intval($this->isCacheReadable()).'/'.(is_writeable($this->fqfn)).'/'.($this->extensionVersionMatches('cache')).'
'); + //* DEBUG: */ print($cacheName.'='.intval($this->isCacheReadable()).'/'.intval(is_writeable($this->fqfn)).'/'.intval($this->extensionVersionMatches('cache')).'
'); $this->status[$cacheName] = ($this->isCacheReadable() && (is_writeable($this->fqfn)) && ($this->extensionVersionMatches('cache'))); } // END - if //* DEBUG: */ print($cacheName.'='.intval($this->status[$cacheName]).'
'); @@ -114,8 +102,8 @@ class CacheSystem { function init () { // This will destory an existing cache file! if ($this->ret == $this->statusDone) { - // Mark it as no longer readable - $this->markCacheAsUnreadable(); + // Reset read status + $this->resetCacheReadStatus(); // Create file if ($this->isCacheReadable()) changeMode($this->fqfn, 0666); @@ -129,10 +117,11 @@ class CacheSystem { } } - // Mark the cache as unreadable - function markCacheAsUnreadable () { + // Reset the read status + function resetCacheReadStatus () { unset($this->readable[$this->name]); unset($GLOBALS['file_readable'][$this->fqfn]); + unset($this->status[$this->name]); } function addRow ($data) { @@ -148,16 +137,62 @@ class CacheSystem { $GLOBALS['cache_array']['extension'][$k][$data['ext_name']] = $v; } if (($k == 'ext_keep') && ($v == 'Y')) { - $GLOBALS['cache_array']['active_extensions'][$data['ext_name']] = $v; + $GLOBALS['cache_array']['always_active'][$data['ext_name']] = $v; } // END - if } elseif (is_array($v)) { // Serialize and BASE64-encode the array $v = base64_encode(serialize($v)); + } elseif ($this->name == 'config') { + // Configuration + $GLOBALS['cache_array']['config'][$data['config']][$k] = $v; + } elseif ($this->name == 'filter') { + // Filter + $GLOBALS['cache_array']['filter']['chains'][$data['filter_name']][$data['filter_function']] = $data['filter_active']; + $GLOBALS['cache_array']['filter']['counter'][$data['filter_name']][$data['filter_function']] = $data['filter_counter']; + $GLOBALS['cache_array']['filter']['loaded'][$data['filter_name']][$data['filter_function']] = true; + } elseif ($this->name == 'modules') { + // Modules + $GLOBALS['cache_array']['modules'][$k][$data['module']] = $v; + } elseif ($this->name == 'admin') { + // Modules + if ($k == 'login') { + $GLOBALS['cache_array']['admin'][$k][$data['admin_id']] = $v; + } else { + $GLOBALS['cache_array']['admin'][$k][$data['login']] = $v; + } + } elseif ($this->name == 'refdepths') { + // Referal levels + $GLOBALS['cache_array']['refdepths'][$k][$data['id']] = $v; + } elseif ($this->name == 'refsystem') { + // Referal system + $GLOBALS['cache_array']['refsystem'][$k][$data['id']] = $v; + } elseif ($this->name == 'revision') { + // Revision data + $GLOBALS['cache_array']['revision'][$k] = $v; + } elseif ($this->name == 'themes') { + // Themes + if ($k == 'theme_path') { + $GLOBALS['cache_array']['themes'][$k][$data['id']] = $v; + } else { + $GLOBALS['cache_array']['themes'][$k][$data['theme_path']] = $v; + } + } elseif ($this->name == 'imprint') { + // Imprint + $GLOBALS['cache_array']['imprint'][$k][$data['imprint_id']] = $v; + } else { + // Finialize the cache and close it + $this->finalize(); + + // Remove cache + $this->removeCacheFile(true); + + // Unsupported cache found! + debug_report_bug('Unsupported cache ' . $this->name . ' detected.'); } // Write cache line to file fwrite($this->pointer, $this->rewriteEntry($k, $v)); - } + } // END - foreach } else { // Cannot create file addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".getMessage('CACHE_PROBLEMS_DETECTED')); @@ -176,6 +211,9 @@ class CacheSystem { // Close file add destroy handler fclose($this->pointer); + // Reset readable status + $this->resetCacheReadStatus(); + // Set rights if ($this->isCacheReadable()) changeMode($this->fqfn, 0666); @@ -196,7 +234,7 @@ class CacheSystem { // Is the cache file there? if ($this->isCacheReadable()) { // Load cache file - require($this->fqfn); + include($this->fqfn); // Is there an array? if (isset($this->data[$this->name])) { @@ -221,17 +259,21 @@ class CacheSystem { } // END - if } else { // Cache file not found or not readable - addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".sprintf(getMessage('CACHE_CANNOT_LOAD'), $this->fqfn)); + debug_report_bug($this->name); + addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".getMaskedMessage('CACHE_CANNOT_LOAD', $this->fqfn)); // Try to remove it $this->removeCacheFile(); } + + // Always return an empty array if we have trouble or no data + return array(); } // Destroy an existing cache file - function removeCacheFile ($removeArray = false, $force = false) { - // Remove cached value of readable cache - $this->markCacheAsUnreadable(); + function removeCacheFile ($force = false) { + // Reset read status + $this->resetCacheReadStatus(); // Debug message /* DEBUG: */ logDebugMessage(__METHOD__, __LINE__, sprintf("%s should be removed.", $this->name)); @@ -243,7 +285,7 @@ class CacheSystem { // Debug message if allowed if (isDebugModeEnabled()) { // Debug message - debug_report_bug('Not removing cache ' . $this->name . ' in output_mode=' . getOutputMode()); + logDebugMessage(__METHOD__, __LINE__, 'Not removing cache ' . $this->name . ' in output_mode=' . getOutputMode()); } // END - if // Abort here @@ -262,17 +304,8 @@ class CacheSystem { // Remove cache file from system removeFile($this->fqfn); - // Shall we remove the array from memory? - if ($removeArray === true) { - // Debug message if allowed - if (isDebugModeEnabled()) { - // Debug message - logDebugMessage(__METHOD__, __LINE__, 'removing array!'); - } // END - if - - // Remove it from memory - unset($GLOBALS['cache_array'][$this->name]); - } // END - if + // Reset read status + $this->resetCacheReadStatus(); // Is the file there? if (!$this->isCacheReadable()) { @@ -282,7 +315,7 @@ class CacheSystem { $this->rebuilt[$this->name] = true; } else { // Not removed! - addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".sprintf(getMessage('CACHE_CANNOT_UNLINK'), $this->fqfn)); + addFatalMessage(__METHOD__, __LINE__, "(".__LINE__."): ".getMaskedMessage('CACHE_CANNOT_UNLINK', $this->fqfn)); } } // END - if } @@ -387,11 +420,11 @@ class CacheSystem { // Get extension version $ext_ver = getExtensionVersion($ext_name); - // Write cache line to file - fwrite($this->pointer, $this->rewriteEntry($ext_name, $ext_ver, 'version', true)); - // Add the extension version to object (DO NOT REMOVE IT! Endless loop...) $this->version[$this->name][$ext_name] = $ext_ver; + + // Write cache line to file + fwrite($this->pointer, $this->rewriteEntry($ext_name, $ext_ver, 'version', true)); } // END - if //* DEBUG: */ outputHtml(__METHOD__."(".__LINE__."): {$this->name} - {$ext_name}={$ext_ver}
"); } else { @@ -419,7 +452,7 @@ class CacheSystem { logDebugMessage(__METHOD__, __LINE__, "Cache {$this->name} has missing version entry for extension {$ext_name}! Purging cache..."); // Remove the cache file - $this->removeCacheFile(false, true); + $this->removeCacheFile(true); } } else { // Not installed, does always match @@ -445,7 +478,7 @@ class CacheSystem { // String or non-string? ;-) if (is_string($value)) { // String... - $line = '$this->' . $prefix . "['".$this->name."']['" . $key . "']" . $extender . " = '" . smartAddSlashes($value) . "';\n"; + $line = '$this->' . $prefix . "['".$this->name."']['" . $key . "']" . $extender . " = '" . escapeQuotes($value) . "';\n"; } elseif (is_null($value)) { // Null $line = '$this->' . $prefix . "['".$this->name."']['" . $key . "']" . $extender . " = null;\n";