Fix path handling in TemplateHandler

This commit is contained in:
Kijin Sung 2018-01-29 15:07:00 +09:00
parent 802ca2cf1b
commit afc0f26d6c

View file

@ -72,35 +72,34 @@ class TemplateHandler
protected function init($tpl_path, $tpl_filename, $tpl_file = '') protected function init($tpl_path, $tpl_filename, $tpl_file = '')
{ {
// verify arguments // verify arguments
if(!$tpl_path || substr($tpl_path, -1) != '/') $tpl_path = trim(preg_replace('@^' . preg_quote(\RX_BASEDIR, '@') . '|\./@', '', str_replace('\\', '/', $tpl_path)), '/') . '/';
{
$tpl_path .= '/';
}
if($tpl_path === '/' || !is_dir($tpl_path)) if($tpl_path === '/' || !is_dir($tpl_path))
{ {
return; return;
} }
if(!file_exists($tpl_path . $tpl_filename) && file_exists($tpl_path . $tpl_filename . '.html')) if(!file_exists(\RX_BASEDIR . $tpl_path . $tpl_filename) && file_exists(\RX_BASEDIR . $tpl_path . $tpl_filename . '.html'))
{ {
$tpl_filename .= '.html'; $tpl_filename .= '.html';
} }
// create tpl_file variable // create tpl_file variable
if(!$tpl_file) if($tpl_file)
{
$tpl_file = trim(preg_replace('@^' . preg_quote(\RX_BASEDIR, '@') . '|\./@', '', str_replace('\\', '/', $tpl_file)), '/');
}
else
{ {
$tpl_file = $tpl_path . $tpl_filename; $tpl_file = $tpl_path . $tpl_filename;
} }
// set template file infos. // set template file infos.
$this->path = $tpl_path; $this->path = \RX_BASEDIR . $tpl_path;
$this->web_path = \RX_BASEURL . $tpl_path;
$this->filename = $tpl_filename; $this->filename = $tpl_filename;
$this->file = $tpl_file; $this->file = \RX_BASEDIR . $tpl_file;
// set absolute URL of template path
$this->web_path = \RX_BASEURL . ltrim(preg_replace('@^' . preg_quote(\RX_BASEDIR, '@') . '|\./@', '', $this->path), '/');
// set compiled file name // set compiled file name
$converted_path = str_replace(array('\\', '..'), array('/', 'dotdot'), ltrim($this->file, './')); $converted_path = ltrim(str_replace(array('\\', '..'), array('/', 'dotdot'), $tpl_file), '/');
$this->compiled_file = \RX_BASEDIR . 'files/cache/template/' . $converted_path . '.php'; $this->compiled_file = \RX_BASEDIR . 'files/cache/template/' . $converted_path . '.php';
} }
@ -122,6 +121,7 @@ class TemplateHandler
// if target file does not exist exit // if target file does not exist exit
if(!$this->file || !file_exists($this->file)) if(!$this->file || !file_exists($this->file))
{ {
$tpl_path = str_replace('\\', '/', $tpl_path);
$error_message = "Template not found: ${tpl_path}${tpl_filename}" . ($tpl_file ? " (${tpl_file})" : ''); $error_message = "Template not found: ${tpl_path}${tpl_filename}" . ($tpl_file ? " (${tpl_file})" : '');
trigger_error($error_message, \E_USER_WARNING); trigger_error($error_message, \E_USER_WARNING);
return escape($error_message); return escape($error_message);
@ -184,6 +184,7 @@ class TemplateHandler
// if target file does not exist exit // if target file does not exist exit
if(!$this->file || !file_exists($this->file)) if(!$this->file || !file_exists($this->file))
{ {
$tpl_path = str_replace('\\', '/', $tpl_path);
$error_message = "Template not found: ${tpl_path}${tpl_filename}"; $error_message = "Template not found: ${tpl_path}${tpl_filename}";
trigger_error($error_message, \E_USER_WARNING); trigger_error($error_message, \E_USER_WARNING);
return escape($error_message); return escape($error_message);