<?php
/**
* Smarty plugin
*
* Fetches templates from a database
*
* You may not change or alter any portion of this comment or credits
* of supporting developers from this source code or any supporting source code
* which is considered copyrighted (c) material of the original comment or credit authors.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* @copyright (c) 2000-2016 XOOPS Project (www.xoops.org)
* @license GNU GPL 2 (http://www.gnu.org/licenses/gpl-2.0.html)
* @param $tpl_name
* @param $tpl_source
* @param $smarty
* @return bool
*/
function smarty_resource_db_source($tpl_name, &$tpl_source, &$smarty)
{
if (!$tpl = smarty_resource_db_tplinfo($tpl_name)) {
return false;
}
if (is_object($tpl)) {
$tpl_source = $tpl->getVar('tpl_source', 'n');
} else {
$fp = fopen($tpl, 'r');
$filesize = filesize($tpl);
$tpl_source = ($filesize > 0) ? fread($fp, $filesize) : '';
fclose($fp);
}
return true;
}
/**
* @param $tpl_name
* @param $tpl_timestamp
* @param $smarty
*
* @return bool
*/
function smarty_resource_db_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
{
if (!$tpl = smarty_resource_db_tplinfo($tpl_name)) {
return false;
}
if (is_object($tpl)) {
$tpl_timestamp = $tpl->getVar('tpl_lastmodified', 'n');
} else {
$tpl_timestamp = filemtime($tpl);
}
return true;
}
/**
* @param $tpl_name
* @param $smarty
*
* @return bool
*/
function smarty_resource_db_secure($tpl_name, &$smarty)
{
// assume all templates are secure
return true;
}
/**
* @param $tpl_name
* @param $smarty
*/
function smarty_resource_db_trusted($tpl_name, &$smarty)
{
// not used for templates
}
/**
* @param $tpl_name
*
* @return bool|string
*/
function smarty_resource_db_tplinfo($tpl_name)
{
static $cache = array();
global $xoopsConfig;
if (isset($cache[$tpl_name])) {
return $cache[$tpl_name];
}
$tplset = $xoopsConfig['template_set'];
$theme = isset($xoopsConfig['theme_set']) ? $xoopsConfig['theme_set'] : 'default';
$tplfile_handler = xoops_getHandler('tplfile');
// If we're not using the "default" template set, then get the templates from the DB
if ($tplset !== 'default') {
$tplobj = $tplfile_handler->find($tplset, null, null, null, $tpl_name, true);
if (count($tplobj)) {
return $cache[$tpl_name] = $tplobj[0];
}
}
// If we'using the default tplset, get the template from the filesystem
$tplobj = $tplfile_handler->find('default', null, null, null, $tpl_name, true);
if (!count($tplobj)) {
return $cache[$tpl_name] = false;
}
$tplobj = $tplobj[0];
$module = $tplobj->getVar('tpl_module', 'n');
$type = $tplobj->getVar('tpl_type', 'n');
// Construct template path
switch ($type) {
case 'block':
$directory = XOOPS_THEME_PATH;
$path = 'blocks/';
break;
case 'admin':
$theme = isset($xoopsConfig['cpanel']) ? $xoopsConfig['cpanel'] : 'default';
$directory = XOOPS_ADMINTHEME_PATH;
$path = 'admin/';
break;
default:
$directory = XOOPS_THEME_PATH;
$path = '';
break;
}
// First, check for an overloaded version within the theme folder
$filepath = $directory . "/{$theme}/modules/{$module}/{$path}{$tpl_name}";
if (!file_exists($filepath)) {
// If no custom version exists, get the tpl from its default location
$filepath = XOOPS_ROOT_PATH . "/modules/{$module}/templates/{$path}{$tpl_name}";
if (!file_exists($filepath)) {
return $cache[$tpl_name] = $tplobj;
}
}
return $cache[$tpl_name] = $filepath;
}
|