PHP Classes
Icontem

File: plugins/tbs_plugin_cache.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet 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;

}

?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products