95 lines
2.3 KiB
PHP
95 lines
2.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file classes/template/PKPTemplateResource.php
|
|
*
|
|
* Copyright (c) 2016-2021 Simon Fraser University
|
|
* Copyright (c) 2000-2021 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class PKPTemplateResource
|
|
*
|
|
* @ingroup template
|
|
*
|
|
* @brief Representation for a PKP template resource (template directory).
|
|
*/
|
|
|
|
namespace PKP\template;
|
|
|
|
use PKP\plugins\Hook;
|
|
|
|
class PKPTemplateResource extends \Smarty_Resource_Custom
|
|
{
|
|
/** @var array|string Template path or list of paths */
|
|
protected $_templateDir;
|
|
|
|
/**
|
|
* Constructor
|
|
*
|
|
* @param string|array $templateDir Template directory
|
|
*/
|
|
public function __construct($templateDir)
|
|
{
|
|
if (is_string($templateDir)) {
|
|
$this->_templateDir = [$templateDir];
|
|
} else {
|
|
$this->_templateDir = $templateDir;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Resource function to get a template.
|
|
*
|
|
* @param string $name Template name
|
|
* @param string $source Reference to variable receiving fetched Smarty source
|
|
* @param int|bool $mtime Modification time
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function fetch($name, &$source, &$mtime)
|
|
{
|
|
$filename = $this->_getFilename($name);
|
|
$mtime = filemtime($filename);
|
|
if ($mtime === false) {
|
|
return false;
|
|
}
|
|
|
|
$source = file_get_contents($filename);
|
|
return ($source !== false);
|
|
}
|
|
|
|
/**
|
|
* Get the timestamp for the specified template.
|
|
*
|
|
* @param string $name Template name
|
|
*
|
|
* @return int|boolean
|
|
*/
|
|
protected function fetchTimestamp($name)
|
|
{
|
|
return filemtime($this->_getFilename($name));
|
|
}
|
|
|
|
/**
|
|
* Get the complete template path and filename.
|
|
*
|
|
* @return string|null
|
|
*/
|
|
protected function _getFilename($template)
|
|
{
|
|
$filePath = null;
|
|
foreach ($this->_templateDir as $path) {
|
|
$filePath = "{$path}/{$template}";
|
|
if (file_exists($filePath)) {
|
|
break;
|
|
}
|
|
}
|
|
Hook::call('TemplateResource::getFilename', [&$filePath, $template]);
|
|
return $filePath;
|
|
}
|
|
}
|
|
|
|
if (!PKP_STRICT_MODE) {
|
|
class_alias('\PKP\template\PKPTemplateResource', '\PKPTemplateResource');
|
|
}
|