X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Flibs%2Fcache_functions.php;h=902f21dce8e1966ca74beb4fa3e6470c303bb1d1;hp=19cebed629c50390f3bbee96c4aa2f29786fad86;hb=0715fa7aa8e5e70bcf1d957fb09ae655c3896c4e;hpb=4d6226782aa4ba157dca8c3891412ba50159481f diff --git a/inc/libs/cache_functions.php b/inc/libs/cache_functions.php index 19cebed629..902f21dce8 100644 --- a/inc/libs/cache_functions.php +++ b/inc/libs/cache_functions.php @@ -1,7 +1,7 @@ loadCacheFile($cache)) $GLOBALS['cache_instance']->removeCacheFile(); + } // END - foreach + + // Return it + return $data; } -// Caching class -class mxchange_cache -{ - // Define variables - var $update_interval = 0; - var $ret = "init"; - var $cache_path = ""; - var $cache_inc = ""; - var $cache_ctime = 0; - var $cache_pointer = false; - - // Constructor - function mxchange_cache($interval, $path, $tested) { - // Remember interval in class - $this->update_interval=$interval; - - // Remeber path - $this->cache_path=$path; - - // Check if path exists - if ((file_exists($path)) && (is_dir($path)) && (!$tested)) - { - // Check if we can create a file inside the path - @touch($path."dummy.tmp", 'w'); - if (file_exists($path."dummy.tmp")) - { - // Yes, we can do. So let's remove it - unlink($path."dummy.tmp"); - - // Is there a .htaccess file? - if (file_exists($path.".htaccess")) - { - // Update database that we have tested it - $result = SQL_QUERY("UPDATE "._MYSQL_PREFIX."_config SET cache_tested='1' WHERE config='0' LIMIT 1", __FILE__, __LINE__); - $this->ret="done"; - - // All done! - return "done"; - } - else - { - // Stop! Set a .htaccess file first - $this->ret="htaccess"; - return "htaccess"; - } - } - } - elseif ($tested) - { - // System already tested - $this->ret="done"; - return "done"; - } - - // Something goes wrong here! - $this->ret="failed"; - return "failed"; - } - - function cache_file($file, $ignore_ctime=false) - { - global $INC; - // Construct FQFN (full qualified file name) - $inc = $this->cache_path.$file.".cache"; - - // Rember it + filename in class - $this->cache_inc = $inc; - - // Check if file exists - $status = (file_exists($inc) && (is_readable($inc)) && (is_writeable($inc))); - if ($status) - { - // Yes, it does. So let's get it's last changed date/time - $ctime = filectime($inc); - } - else - { - // No, it doesn't. Zero date/time - $ctime = "0"; - } - - // Remember change date/time in class - $this->cache_ctime = $ctime; - - // Is the cache file outdated? - if (((time() - $ctime) >= $this->update_interval) && (!$ignore_ctime)) - { - // Ok, we need an update! - $status = false; - } - return $status; - } - - function cache_init($array) - { - // This will destory an existing cache file! - if ($this->ret == "done") - { - // Create file - if (file_exists($this->cache_inc)) @chmod($this->cache_inc, 0666); - $fp = @fopen($this->cache_inc, 'w') or mxchange_die("Cannot write to cache ".$this->cache_inc." !"); - - // Begin of cache file - fwrite($fp, "\$ARRAY = \"".$array."\";\n\n"); - // Remember file pointer - $this->cache_pointer = $fp; - } - else - { - // Cannot create file - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); - } - } +// Destroy the cache on changing admin +function FILTER_CACHE_DESTROY_ON_ADMIN_CHANGE ($data) { + // Skip this step if the cache instance is not there + if (!isCacheInstanceValid()) return false; - function add_row($data) - { - if ($this->cache_pointer) - { - // Write every array element to cache file - foreach ($data as $k=>$v) - { - @fwrite($this->cache_pointer, "\$CACHE['".$k."'][] = \"".$v."\";\n"); - } - } - else - { - // Cannot create file - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); - } - } + // Remove cache + if ($GLOBALS['cache_instance']->loadCacheFile('admin')) $GLOBALS['cache_instance']->removeCacheFile(); - function cache_close() - { - // Quit function when no pointer is set - if (empty($this->cache_pointer)) return; - if ($this->cache_pointer) - { - // Close file add destroy handler - @fclose($this->cache_pointer); - - // Set rights - if (file_exists($this->cache_inc)) @chmod($this->cache_inc, 0666); - - // Remove pointer - unset($this->cache_pointer); - } - else - { - // Cannot create file - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); - } - } - - function cache_load() - { - if ((file_exists($this->cache_inc)) && (is_readable($this->cache_inc))) - { - // Prepare temporay array - $CACHE = array(); - // Load cache file - $cache = implode("", file($this->cache_inc)); - // Execute cache file - eval($cache); - if (is_array($CACHE)) - { - return $CACHE; - } - else - { - // Cache problem detected! - $this->cache_destroy(); - } - } - else - { - // Cache file not found or not readable - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_CANNOT_LOAD_1.$this->cache_inc.CACHE_CANNOT_LOAD_2); - } - } - - function cache_destroy() - { - if (file_exists($this->cache_inc)) - { - // Remove cache file from system - @unlink($this->cache_inc); - if (!file_exists($this->cache_inc)) - { - // Close cache automatically (we don't need it anymore!) - $this->cache_close(); - } - else - { - // Not removed! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_CANNOT_UNLINK_1.$this->cache_inc.CACHE_CANNOT_UNLINK_2); - } - } - else - { - // Does not exist! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_CANNOT_UNLINK_1.$this->cache_inc.CACHE_CANNOT_UNLINK_2); - } - } - - function cache_remove($search, $data, $array) - { - global $ARRAY; - if ((file_exists($this->cache_inc)) && (is_writeable($this->cache_inc))) - { - // Load cache into dummy array - $DUMMY = $this->cache_load(); - - // Search for key in array - $key = array_search($data, $DUMMY[$search]); - if (!empty($key)) - { - // Key (hopefully) found? - foreach ($array as $a) - { - // So we can remove all elements as requested - unset($DUMMY[$a][$key]); - } - - // Flush array to cache file - $fp = fopen($this->cache_inc, 'w'); - fwrite($fp, "\$ARRAY = \"".$ARRAY."\";\n"); - foreach ($DUMMY as $k=>$v) - { - if (is_array($v)) - { - // Multi line(s) found - $LINE = ""; - foreach($v as $k2=>$v2) - { - // Put every array element in a row... - $LINE .= "\$CACHE['".$k."'][] = \"".$v2."\";\n"; - } - } - else - { - // Single line found - $LINE = "\$CACHE['".$k."'] = \"".$v."\";\n"; - } - - // Write line(s) - fwrite($fp, $LINE); - } - - // Close cache file - fclose($fp); - } - } - else - { - // Cannot write to cache! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); - } - } - - function cache_replace($search, $replace, $search_key, $array) - { - global $ARRAY; - if ((file_exists($this->cache_inc)) && (is_writeable($this->cache_inc))) - { - // Load cache into dummy array - $DUMMY = $this->cache_load(); - - // Check if $DUMMY is valid (prevents some errors) - if ((is_array($DUMMY)) && (is_array($DUMMY[$search]))) - { - // Search for key in array - $key_found = array_key_exists($search_key, $DUMMY[$search]); - if ($key_found == true) - { - $key = $search_key; - // Key (hopefully) found? - foreach ($DUMMY as $a=>$v) - { - // So we can update all entries - if ($a == $search) - { - // Update now... - $DUMMY[$a][$search_key] = $replace; - } - } + // Return the data + return $data; +} - // Flush array to cache file - $fp = fopen($this->cache_inc, 'w'); - fwrite($fp, "\$DUMMY = \"".$ARRAY."\";\n"); - foreach ($DUMMY as $k=>$v) - { - if (is_array($v)) - { - // Multi line(s) found - $LINE = ""; - foreach($v as $k2=>$v2) - { - // Put every array element in a row... - $LINE .= "\$CACHE['".$k."'][] = \"".$v2."\";\n"; - } - } - else - { - // Single line found - $LINE = "\$CACHE['".$k."'] = \"".$v."\";\n"; - } +// Destroy all cache files +function FILTER_CACHE_DESTROY_ALL () { + // Skip this step if the cache instance is not there + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Called!'); + if (!isCacheInstanceValid()) return false; + + // Remove cache files + foreach (array('admin','admin_acls','config','extension','modules','refdepths','refsystem','themes','filter','imprint') as $cache) { + /* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, sprintf("Trying to remove cache %s.", $cache)); + if ($GLOBALS['cache_instance']->loadCacheFile($cache)) $GLOBALS['cache_instance']->removeCacheFile(); + } // END - foreach + //* DEBUG: */ logDebugMessage(__FUNCTION__, __LINE__, 'Done!'); +} - // Write line(s) - fwrite($fp, $LINE); - } +// 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') != 'Y')) return false; - // Close cache file - fclose($fp); - } - } - } - else - { - // Cannot write to cache! - ADD_FATAL(__FILE__."(".__LINE__."): ".CACHE_PROBLEMS_DETECTED); - } - } + // Remove cache files + if ($GLOBALS['cache_instance']->loadCacheFile('filter')) $GLOBALS['cache_instance']->removeCacheFile(); } -// + +// [EOF] ?>