<?php
namespace core\dzz;
class HookRead
{
public static $tags = array()
public static $tagcachefile = ''
private static $cacheTagFileCtime = 0
public static function _init()
{
self::$tagcachefile = CACHE_DIR . BS . 'tags' . EXT
if (file_exists(self::$tagcachefile)) {
self::$tags = is_array(include self::$tagcachefile) ? include self::$tagcachefile:array();
self::$cacheTagFileCtime = filectime(self::$tagcachefile);
}
self::readTags()
if(file_exists(self::$tagcachefile))
self::$tags = is_array(include self::$tagcachefile) ? include self::$tagcachefile:array()
self::$tags = self::tagsArrayParse(self::$tags)
Hook::import(self::$tags) }
}
private static function readTags($dirname = DZZ_ROOT,$deep = 0)
{
if(!is_dir($dirname)){
return false;
}
$dirname = rtrim($dirname,BS);
$deep++;
$openfile = opendir($dirname);
while (($file = readdir($openfile)) !== false) {
if ($file != '.' && $file != '..' && is_dir($dirname.BS.$file) && strpos($file,'.') !== 0) {
$dir = $dirname .BS. $file;
if($file == CONFIG_NAME){
$tagfile = $dir.BS. 'tags' . EXT;
if (file_exists($tagfile)) {
if ( !file_exists(self::$tagcachefile) || (filemtime($tagfile) > self::$cacheTagFileCtime)) {
$key = str_replace(array(DZZ_ROOT,CONFIG_NAME.BS),'',$dir);
$tagsArr = include $tagfile;
if(is_array($tagsArr)){
self::$tags[$key] = $tagsArr;
$writestr = "<?php \t\n return ";
$writestr .= var_export(self::$tags,true).";";
$fp = fopen(self::$tagcachefile,'w+');
fwrite($fp,$writestr);
fclose($fp);
}
}
}
}else {
if($deep <= 3){
self::readTags($dir,$deep);
}
}
}
}
closedir($openfile);
}
private static function tagsArrayParse($arr = null){
if(!is_array($arr)) return false;
$tagArrReturn = array();
foreach($arr as $v){
foreach($v as $key=>$val){
$keyArr = array_keys($val);
foreach($keyArr as $k=>$value)
$keyArr[$k] = 'p'.$value;
}
$val = array_combine($keyArr,$val)
if(isset($tagArrReturn[$key])){
$tagArrReturn[$key] = array_merge_recursive($tagArrReturn[$key],$val);
}else{
$tagArrReturn[$key] = $val;
}
}
}
foreach($tagArrReturn as $item=>$ival){
$pkey = array_keys($ival);
foreach ($pkey as $n=>$ivalue){
$pkey[$n] = str_replace('p','',$ivalue);
}
$ival = array_combine($pkey,$ival);
krsort($ival,SORT_NUMERIC);
$tagArrReturn[$item] = $ival;
}
return $tagArrReturn;
}
}