Login   Register  
PHP Classes
elePHPant
Icontem

File: plugins/tbs_plugin_cache.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Skrol29  >  TinyButStrong template engine  >  plugins/tbs_plugin_cache.php  
File: plugins/tbs_plugin_cache.php
Role: Auxiliary script
Content type: text/plain
Description: Plugin Cache System
Class: TinyButStrong template engine
Template Engine for Pro and Beginners
 

Contents

Class file image Download
<?php

/*
********************************************************
TinyButStrong Plug-in: CacheSystem for TBS => 3.0.2
Version 1.0.6, on 2008-02-29, by Skrol29
********************************************************
*/

define('TBS_CACHE','clsTbsCacheSytem');

define('TBS_DELETE', -1); // For compatibility
define('TBS_CANCEL', -2); // For compatibility
define('TBS_CACHEDELETE', -1);
define('TBS_CACHECANCEL', -2);
define('TBS_CACHENOW', -3);
define('TBS_CACHEONSHOW', -4);
define('TBS_CACHELOAD', -5);
define('TBS_CACHEGETAGE', -6);
define('TBS_CACHEGETNAME', -7);
define('TBS_CACHEISONSHOW', -8);
define('TBS_CACHEDELETEMASK', -9);

class 
clsTbsCacheSytem {

    function 
OnInstall($CacheDir=false,$CacheMask=false) {
        
$this->Version '1.0.6';
        
$this->ShowFromCache false;
        
$this->CacheFile = array();
        
$TBS =& $this->TBS;
        if (!isset(
$TBS->CacheMask))  $TBS->CacheMask 'cache_tbs_*.php'// for compatibility
        
if (!isset($TBS->CacheDir))   $TBS->CacheDir '';
        if (
$CacheMask!==false$TBS->CacheMask $CacheMask;
        if (
$CacheDir!==false $TBS->CacheDir  $CacheDir;
        return array(
'OnCommand','BeforeShow','AfterShow');
    }

    function 
OnCommand($CacheId,$Action=3600,$Dir=false) {

        
$TBS =& $this->TBS;

        
$CacheId trim($CacheId);
        
$Res false;
        if (
$Dir===false$Dir $TBS->CacheDir;
        if (!isset(
$this->CacheFile[$TBS->_Mode])) $this->CacheFile[$TBS->_Mode] = false;
        
        if (
$Action===TBS_CACHECANCEL) { // Cancel cache save if any
            
$this->CacheFile[$TBS->_Mode] = false;
        } elseif ((
$CacheId === '*') and ($Action===TBS_CACHEDELETE)) {
            
$Res tbs_Cache_DeleteAll($Dir,$TBS->CacheMask);
        } elseif (
$Action===TBS_CACHEDELETEMASK) {
            
$Res tbs_Cache_DeleteAll($Dir,$CacheId);
        } else {
            
$CacheFile tbs_Cache_File($Dir,$CacheId,$TBS->CacheMask);
            if (
$Action===TBS_CACHENOW) {
                
$this->meth_Cache_Save($CacheFile,$TBS->Source);
            } elseif (
$Action===TBS_CACHEGETAGE) {
                if (
file_exists($CacheFile)) $Res time()-filemtime($CacheFile);
            } elseif (
$Action===TBS_CACHEGETNAME) {
                
$Res $CacheFile;
            } elseif (
$Action===TBS_CACHEISONSHOW) {
                
$Res = ($this->CacheFile[$TBS->_Mode]!==false);
            } elseif (
$Action===TBS_CACHELOAD) {
                if (
file_exists($CacheFile)) {
                    if (
$TBS->f_Misc_GetFile($TBS->Source,$CacheFile)) {
                        
$this->CacheFile[$TBS->_Mode] = $CacheFile;
                        
$Res true;
                    }
                }
                if (
$Res===false)    $TBS->Source '';
            } elseif (
$Action===TBS_CACHEDELETE) {
                if (
file_exists($CacheFile)) $Res = @unlink($CacheFile);
            } elseif (
$Action===TBS_CACHEONSHOW) {
                
$this->CacheFile[$TBS->_Mode] = $CacheFile;
                @
touch($CacheFile);
            } elseif(
$Action>=0) {
                
$Res tbs_Cache_IsValide($CacheFile,$Action);
                if (
$Res) { // Load the cache
                    
if ($TBS->f_Misc_GetFile($TBS->Source,$CacheFile)) {
                        
// Display cache contents
                        
$this->ShowFromCache true;
                        
$TBS->Show();
                        
$this->ShowFromCache false;
                    } else {
                        
$TBS->meth_Misc_Alert('CacheSystem plug-in','Unable to read the file \''.$CacheFile.'\'.');
                        
$Res==false;
                    }
                    
$this->CacheFile[$TBS->_Mode] = false;
                } else {
                    
// The result will be saved in the cache when the Show() method is called
                    
$this->CacheFile[$TBS->_Mode] = $CacheFile;
                    @
touch($CacheFile);
                }
            }
        }
    
        return 
$Res;
            
    }

    function 
BeforeShow(&$Render) {
        if (
$this->ShowFromCache) return false// Cancel automatic merges
    
}

    function 
AfterShow(&$Render) {
        
// Save cache file if planned to
        
if (isset($this->CacheFile[$this->TBS->_Mode]) and is_string($this->CacheFile[$this->TBS->_Mode])) {
            
$this->meth_Cache_Save($this->CacheFile[$this->TBS->_Mode],$this->TBS->Source);
        }
    }

    function 
meth_Cache_Save($CacheFile,&$Txt) {
        
$fid = @fopen($CacheFile'w');
        if (
$fid===false) {
            
$this->TBS->meth_Misc_Alert('CacheSystem plug-in','The cache file \''.$CacheFile.'\' can not be saved.');
            return 
false;
        } else {
            
flock($fid,2); // acquire an exlusive lock
            
fwrite($fid,$Txt);
            
flock($fid,3); // release the lock
            
fclose($fid);
            return 
true;
        }
    }

}

function 
tbs_Cache_IsValide($CacheFile,$TimeOut) {
// Return True if there is a existing valid cache for the given file id.
    
if (file_exists($CacheFile)) {
        if (
time()-filemtime($CacheFile)>$TimeOut) {
            return 
false;
        } else {
            return 
true;
        }
    } else {
        return 
false;
    }
}

function 
tbs_Cache_File($Dir,$CacheId,$Mask) {
// Return the cache file path for a given Id.
    
if (strlen($Dir)>0) {
        if (
$Dir[strlen($Dir)-1]<>'/') {
            
$Dir .= '/';
        }
    }
    return 
$Dir.str_replace('*',$CacheId,$Mask);
}

function 
tbs_Cache_DeleteAll($Dir,$Mask) {

    if (
strlen($Dir)==0) {
        
$Dir '.';
    }
    if (
$Dir[strlen($Dir)-1]<>'/') {
        
$Dir .= '/';
    }
    
$DirObj dir($Dir);
    
$Nbr 0;

    
// Get the list of cache files
    
$FileLst = array();
    while (
$FileName $DirObj->read()) {
        
$FullPath $Dir.$FileName;
        if (
strtolower(filetype($FullPath))==='file') {
            if (@
preg_match('/^' strtr(addcslashes($Mask'\\.+^$(){}=!<>|'), array('*' => '.*''?' => '.?')) . '$/i'$FileName)) {
                
$FileLst[] = $FullPath;
            }
        }
    }
    
// Delete all listed files
    
foreach ($FileLst as $FullPath) {
        if (@
unlink($FullPath)) $Nbr++;
    }

    return 
$Nbr;

}

?>