PHP Classes

File: plugins/tbs_plugin_cache.php

Recommend this page to a friend!
  Classes of Skrol29   TinyButStrong template engine   plugins/tbs_plugin_cache.php   Download  
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
Author: By
Last change:
Date: 16 years ago
Size: 5,374 bytes
 

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;

}

?>