More misc fixes and rewrites (sorry, lame description)
[mailer.git] / inc / libs / cache_functions.php
index 1e38e1faf6763a3ba996c0b5ca1a358c0647789e..a34313d1eb37053b5b06f6e32856b185d86909ad 100644 (file)
@@ -66,7 +66,7 @@ class CacheSystem {
                $this->path = $path;
 
                // Check if path exists
-               if ((isDirectory($path)) && (!$tested)) {
+               if ((isDirectory($path)) && ($tested === false)) {
                        // Make FQFN for dummy file
                        $fqfn = $path . 'dummy.tmp';
 
@@ -76,7 +76,7 @@ class CacheSystem {
                        // Is the file there?
                        if (isFileReadable($fqfn)) {
                                // Yes, we can do. So let's remove it
-                               unlink($fqfn);
+                               removeFile($fqfn);
 
                                // Is there a .htaccess file?
                                if (isFileReadable($path . '.htaccess')) {
@@ -226,16 +226,44 @@ class CacheSystem {
        }
 
        // Destroy an existing cache file
-       function destroyCacheFile () {
+       function destroyCacheFile ($removeArray = false, $force = false) {
+               // Only run in regular output mode
+               if ((getOutputMode() != 0) && ($force === false)) {
+                       // Debug message if allowed
+                       if (isDebugModeEnabled()) {
+                               // Debug message
+                               debug_report_bug('Not removing cache ' . $this->name . ' in output_mode=' . getOutputMode());
+                       } // END - if
+
+                       // Abort here
+                       return;
+               } // END - if
+
                // Is the cache file there?
                if ((!isset($this->rebuilt[$this->name])) && ($this->isCacheReadable())) {
                        // Close cache
                        $this->finalize();
 
+                       // Debug-mode enabled?
+                       if (isDebugModeEnabled()) {
+                               // Log removal of cache
+                               DEBUG_LOG(__METHOD__, __LINE__, 'removing cache: ' . $this->name);
+                       } // END - if
+
                        // Remove cache file from system
-                       //* DEBUG: */ print __METHOD__."(<font color=\"#0000aa\">".__LINE__."</font>): {$this->name} - DESTROYED!<br />\n";
-                       unlink($this->fqfn);
-                       // @TODO remove from $GLOBALS['cache_array']!!!
+                       removeFile($this->fqfn);
+
+                       // Shall we remove the array from memory?
+                       if ($removeArray === true) {
+                               // Debug message if allowed
+                               if (isDebugModeEnabled()) {
+                                       // Debug message
+                                       DEBUG_LOG(__METHOD__, __LINE__, 'removing array!');
+                               } // END - if
+
+                               // Remove it from memory
+                               unset($GLOBALS['cache_array'][$this->name]);
+                       } // END - if
 
                        // Is the file there?
                        if (!$this->isCacheReadable()) {
@@ -429,9 +457,9 @@ function FILTER_CACHE_DESTROY_ON_EXT_CHANGE ($data) {
        if (!isCacheInstanceValid()) return $data;
 
        // Remove cache
-       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('config'))      $GLOBALS['cache_instance']->destroyCacheFile(false);
+       if ($GLOBALS['cache_instance']->loadCacheFile('extensions'))  $GLOBALS['cache_instance']->destroyCacheFile(false);
+       if ($GLOBALS['cache_instance']->loadCacheFile('modreg'))      $GLOBALS['cache_instance']->destroyCacheFile(false);
 
        // Return it
        return $data;
@@ -443,24 +471,36 @@ function FILTER_CACHE_DESTROY_ON_ADMIN_CHANGE () {
        if (!isCacheInstanceValid()) return false;
 
        // Remove cache
-       if ($GLOBALS['cache_instance']->loadCacheFile('admins')) $GLOBALS['cache_instance']->destroyCacheFile();
+       if ($GLOBALS['cache_instance']->loadCacheFile('admins'))      $GLOBALS['cache_instance']->destroyCacheFile(false);
 }
 
 // Destroy all cache files
 function FILTER_CACHE_DESTROY_ALL () {
        // Skip this step if the cache instance is not there
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, 'Called!');
        if (!isCacheInstanceValid()) return false;
 
        // Remove cache files
-       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();
+       if ($GLOBALS['cache_instance']->loadCacheFile('admins'))      $GLOBALS['cache_instance']->destroyCacheFile(false);
+       if ($GLOBALS['cache_instance']->loadCacheFile('admins_acls')) $GLOBALS['cache_instance']->destroyCacheFile(false);
+       if ($GLOBALS['cache_instance']->loadCacheFile('config'))      $GLOBALS['cache_instance']->destroyCacheFile(false);
+       if ($GLOBALS['cache_instance']->loadCacheFile('extensions'))  $GLOBALS['cache_instance']->destroyCacheFile(false);
+       if ($GLOBALS['cache_instance']->loadCacheFile('modreg'))      $GLOBALS['cache_instance']->destroyCacheFile(false);
+       if ($GLOBALS['cache_instance']->loadCacheFile('refdepths'))   $GLOBALS['cache_instance']->destroyCacheFile(false);
+       if ($GLOBALS['cache_instance']->loadCacheFile('refsystem'))   $GLOBALS['cache_instance']->destroyCacheFile(false);
+       if ($GLOBALS['cache_instance']->loadCacheFile('themes'))      $GLOBALS['cache_instance']->destroyCacheFile(false);
+       if ($GLOBALS['cache_instance']->loadCacheFile('revision'))    $GLOBALS['cache_instance']->destroyCacheFile(false);
+       if ($GLOBALS['cache_instance']->loadCacheFile('filter'))      $GLOBALS['cache_instance']->destroyCacheFile(false);
+       //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, 'Done!');
+}
+
+// Filter for purging 'filter' cache
+function FILTER_CACHE_DESTROY_FILTER () {
+       // Skip this step if the cache instance is not there
+       if ((!isCacheInstanceValid()) || (getConfig('update_filter_usage') == 'N')) return false;
+
+       // Remove cache files
+       if ($GLOBALS['cache_instance']->loadCacheFile('filter'))      $GLOBALS['cache_instance']->destroyCacheFile(false);
 }
 
 // Filter for purging entire admin menu cache