<?php 
/** 
 * Cache handlers 
 * 
 * @copyright       (c) 2000-2016 XOOPS Project (www.xoops.org) 
 * @license             GNU GPL 2 (http://www.gnu.org/licenses/gpl-2.0.html) 
 * @author              Taiwen Jiang <[email protected]> 
 * @since               1.00 
 * @package             Frameworks 
 * @subpackage          art 
 */ 
 
if (!defined('FRAMEWORKS_ART_FUNCTIONS_CACHE')): 
    define('FRAMEWORKS_ART_FUNCTIONS_CACHE', true); 
 
    /** 
     * @param null|array $groups 
     * 
     * @return string 
     */ 
    function mod_generateCacheId_byGroup($groups = null) 
    { 
        global $xoopsUser; 
 
        if (!empty($groups) && is_array($groups)) { 
        } elseif (is_object($xoopsUser)) { 
            $groups = $xoopsUser->getGroups(); 
        } 
        if (!empty($groups) && is_array($groups)) { 
            sort($groups); 
            $contentCacheId = substr(md5(implode(',', $groups) . XOOPS_DB_PASS . XOOPS_DB_NAME), 0, strlen(XOOPS_DB_USER) * 2); 
        } else { 
            $contentCacheId = XOOPS_GROUP_ANONYMOUS; 
        } 
 
        return $contentCacheId; 
    } 
 
    /** 
     * @param null $groups 
     * 
     * @return string 
     */ 
    function mod_generateCacheId($groups = null) 
    { 
        return mod_generateCacheId_byGroup($groups); 
    } 
 
    /** 
     * @param        $data 
     * @param null|string   $name 
     * @param null|string   $dirname 
     * @param string $root_path 
     * 
     * @return bool 
     */ 
    function mod_createFile($data, $name = null, $dirname = null, $root_path = XOOPS_CACHE_PATH) 
    { 
        global $xoopsModule; 
 
        $name    = $name ? : (string)time(); 
        $dirname = $dirname ? : (is_object($xoopsModule) ? $xoopsModule->getVar('dirname', 'n') : 'system'); 
 
        xoops_load('XoopsCache'); 
        $key = "{$dirname}_{$name}"; 
 
        return XoopsCache::write($key, $data); 
    } 
 
    /** 
     * @param      $data 
     * @param null $name 
     * @param null $dirname 
     * 
     * @return bool 
     */ 
    function mod_createCacheFile($data, $name = null, $dirname = null) 
    { 
        return mod_createFile($data, $name, $dirname); 
    } 
 
    /** 
     * @param      $data 
     * @param null|string $name 
     * @param null $dirname 
     * @param null $groups 
     * 
     * @return bool 
     */ 
    function mod_createCacheFile_byGroup($data, $name = null, $dirname = null, $groups = null) 
    { 
        $name .= mod_generateCacheId_byGroup(); 
 
        return mod_createCacheFile($data, $name, $dirname); 
    } 
 
    /** 
     * @param        $name 
     * @param null|string   $dirname 
     * @param string $root_path 
     * 
     * @return mixed|null 
     */ 
    function mod_loadFile($name, $dirname = null, $root_path = XOOPS_CACHE_PATH) 
    { 
        global $xoopsModule; 
 
        $data = null; 
 
        if (empty($name)) { 
            return $data; 
        } 
        $dirname = $dirname ? : (is_object($xoopsModule) ? $xoopsModule->getVar('dirname', 'n') : 'system'); 
        xoops_load('XoopsCache'); 
        $key = "{$dirname}_{$name}"; 
 
        return XoopsCache::read($key); 
    } 
 
    /** 
     * @param      $name 
     * @param null $dirname 
     * 
     * @return mixed|null 
     */ 
    function mod_loadCacheFile($name, $dirname = null) 
    { 
        $data = mod_loadFile($name, $dirname); 
 
        return $data; 
    } 
 
    /** 
     * @param      $name 
     * @param null $dirname 
     * @param null $groups 
     * 
     * @return mixed|null 
     */ 
    function mod_loadCacheFile_byGroup($name, $dirname = null, $groups = null) 
    { 
        $name .= mod_generateCacheId_byGroup(); 
        $data = mod_loadFile($name, $dirname); 
 
        return $data; 
    } 
 
    /* Shall we use the function of glob for better performance ? */ 
 
    /** 
     * @param string $name 
     * @param null   $dirname 
     * @param string $root_path 
     * 
     * @return bool 
     */ 
    function mod_clearFile($name = '', $dirname = null, $root_path = XOOPS_CACHE_PATH) 
    { 
        if (empty($dirname)) { 
            $pattern = $dirname ? "{$dirname}_{$name}.*\.php" : "[^_]+_{$name}.*\.php"; 
            if ($handle = opendir($root_path)) { 
                while (false !== ($file = readdir($handle))) { 
                    if (is_file($root_path . '/' . $file) && preg_match("/{$pattern}$/", $file)) { 
                        @unlink($root_path . '/' . $file); 
                    } 
                } 
                closedir($handle); 
            } 
        } else { 
            $files = (array)glob($root_path . "/*{$dirname}_{$name}*.php"); 
            foreach ($files as $file) { 
                @unlink($file); 
            } 
        } 
 
        return true; 
    } 
 
    /** 
     * @param string $name 
     * @param null   $dirname 
     * 
     * @return bool 
     */ 
    function mod_clearCacheFile($name = '', $dirname = null) 
    { 
        return mod_clearFile($name, $dirname); 
    } 
 
    /** 
     * @param string $pattern 
     * 
     * @return bool 
     */ 
    function mod_clearSmartyCache($pattern = '') 
    { 
        global $xoopsModule; 
 
        if (empty($pattern)) { 
            $dirname = (is_object($xoopsModule) ? $xoopsModule->getVar('dirname', 'n') : 'system'); 
            $pattern = "/(^{$dirname}\^.*\.html$|blk_{$dirname}_.*[^\.]*\.html$)/"; 
        } 
        if ($handle = opendir(XOOPS_CACHE_PATH)) { 
            while (false !== ($file = readdir($handle))) { 
                if (is_file(XOOPS_CACHE_PATH . '/' . $file) && preg_match($pattern, $file)) { 
                    @unlink(XOOPS_CACHE_PATH . '/' . $file); 
                } 
            } 
            closedir($handle); 
        } 
 
        return true; 
    } 
 
endif; 
 
 |