Index: trunk/core/kernel/parser/template.php =================================================================== diff -u -r932 -r1339 --- trunk/core/kernel/parser/template.php (.../template.php) (revision 932) +++ trunk/core/kernel/parser/template.php (.../template.php) (revision 1339) @@ -5,12 +5,12 @@ var $BasePath = ''; var $Filename = ''; - function Template($base_path=null, $filename=null) + function Template($base_path=null, $filename=null, $silent=0) { if ($this->SetBasePath($base_path)) { if (isset($filename)) { $this->Filename = $filename; - $this->LoadTemplate(); + $this->LoadTemplate($silent); } } } @@ -34,14 +34,18 @@ { $filename = $this->GetFullPath(); if(file_exists($filename)) { + if (filesize ($filename) == 0) { + trigger_error("Template file size is 0: $filename", ($silent ? E_USER_NOTICE : E_USER_ERROR) ); + } + $handle = fopen ($filename, "r"); $contents = fread ($handle, filesize ($filename)); $this->SetBody($contents); fclose ($handle); return true; } else { - if (!$silent) echo "File or block not found: $filename ($filename)
"; + trigger_error("File or block not found: $filename", ($silent ? E_USER_NOTICE : E_USER_ERROR) ); return false; } } @@ -60,39 +64,92 @@ class TemplatesCache extends kBase { var $Templates = Array(); var $BasePath; + var $FileNames = Array(); + var $ModulesCache = Array(); + function TemplatesCache() { parent::kBase(); $this->BasePath = DOC_ROOT.BASE_PATH.THEMES_PATH; + + $conn =& $this->Application->GetADODBConnection(); + $this->ModulesCache = $conn->GetCol('SELECT LOWER(Name) FROM '.TABLE_PREFIX.'Modules'); } - function LoadTemplate($filename, $title=NULL) + function LoadTemplate($filename, $title=NULL, $silent=0) { - $template =& new Template($this->BasePath, $filename); + if (preg_match('#^[\/]{0,1}([^\/]*)\/(.*)#', $filename, $regs)) { + $module_filename = $regs[2]; + $first_dir = $regs[1]; + } + else { + $first_dir = ''; + $module_filename = $filename; + } + + if ( defined('ADMIN') && ADMIN && in_array(strtolower($first_dir), $this->ModulesCache)) { + $path = MODULES_PATH.'/'.strtolower($first_dir).'/admin_templates'; + } + else { + $path = $this->BasePath; + $module_filename = $first_dir.'/'.$module_filename; + } + + $template =& new Template($path, $module_filename, $silent); if (!isset($title)) $title = $filename; $this->SetTemplate($title, $template); } - function SetTemplate($title, &$template) + function GetRealFilename($filename) { + if (preg_match('#^[\/]{0,1}([^\/]*)\/(.*)#', $filename, $regs)) { + $module_filename = $regs[2]; + $first_dir = $regs[1]; + } + else { + $first_dir = ''; + $module_filename = $filename; + } + + if ( defined('ADMIN') && ADMIN && in_array(strtolower($first_dir), $this->ModulesCache)) { + $path = MODULES_PATH.'/'.strtolower($first_dir).'/admin_templates'; + } + else { + $path = $this->BasePath; + $module_filename = $first_dir.'/'.$module_filename; + } + return $path.'/'.$module_filename; + } + + function SetTemplate($title, &$template, $filename=null) { + if (!isset($filename)) $filename=$title; $this->Templates[$title] = $template; + $this->FileNames[$title] = $filename; } - function &GetTemplate($title) + function &GetTemplate($title, $silent=0) { if (!isset($this->Templates[$title])) { - $this->LoadTemplate($title); + $this->LoadTemplate($title, null, $silent); } return $this->Templates[$title]; } - function GetTemplateBody($title) + function GetTemplateBody($title, $silent=0) { - $template =& $this->GetTemplate($title); + $template =& $this->GetTemplate($title, $silent); + if ( !is_object($template) ) { + return ''; + } return $template->GetBody(); } + function GetTemplateFileName($title) + { + return $this->FileNames[$title]; + } + function SetTemplateBody($title, $body) { $template =& new Template();