More misc fixes and rewrites (sorry, lame description)
[mailer.git] / inc / libs / cache_functions.php
index 64fa865595b343c4b5205e72d04d45b08407a108..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';
 
@@ -74,14 +74,14 @@ class CacheSystem {
                        touch($fqfn, 'w');
 
                        // Is the file there?
-                       if (FILE_READABLE($fqfn)) {
+                       if (isFileReadable($fqfn)) {
                                // Yes, we can do. So let's remove it
-                               unlink($fqfn);
+                               removeFile($fqfn);
 
                                // Is there a .htaccess file?
-                               if (FILE_READABLE($path . '.htaccess')) {
+                               if (isFileReadable($path . '.htaccess')) {
                                        // Update database that we have tested it
-                                       UPDATE_CONFIG('cache_tested', 1);
+                                       updateConfiguration('cache_tested', 1);
 
                                        // All done!
                                        $this->ret = $this->statusDone;
@@ -101,7 +101,7 @@ class CacheSystem {
                // Remember cache file
                $this->name = $cacheName;
 
-               // Construct include filename for LOAD_INC_ONCE() call
+               // Construct include filename for loadIncludeOnce() call
                $this->inc = $this->path . $cacheName . $this->extension;
 
                // Construct FQFN (full qualified file name)
@@ -119,7 +119,7 @@ class CacheSystem {
                // This will destory an existing cache file!
                if ($this->ret == $this->statusDone) {
                        // Create file
-                       if ($this->isCacheReadable()) chmod($this->fqfn, 0666);
+                       if ($this->isCacheReadable()) changeMode($this->fqfn, 0666);
                        $this->pointer = fopen($this->fqfn, 'w') or app_die(__METHOD__, __LINE__, "Cannot write to cache ".$this->fqfn." !");
 
                        // Add open PHP tag
@@ -172,7 +172,7 @@ class CacheSystem {
                        fclose($this->pointer);
 
                        // Set rights
-                       if ($this->isCacheReadable()) chmod($this->fqfn, 0666);
+                       if ($this->isCacheReadable()) changeMode($this->fqfn, 0666);
 
                        // Remove pointer
                        $this->pointer = false;
@@ -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()) {
@@ -418,7 +446,7 @@ class CacheSystem {
 
        // Checks wether the current cache file is readable
        function isCacheReadable () {
-               return INCLUDE_READABLE($this->inc);
+               return isIncludeReadable($this->inc);
        }
 
 } // END - class
@@ -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,30 +471,42 @@ 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
 function FILTER_CACHE_PURGE_ADMIN_MENU () {
        // Just call the function
-       CACHE_PURGE_ADMIN_MENU();
+       cachePurgeAdminMenu();
 }
 
 //