1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
20:
21: defined('XOOPS_ROOT_PATH') || exit('Restricted access');
22: 23: 24:
25: define('SMARTY_DIR', XOOPS_ROOT_PATH . '/class/smarty/');
26: require_once SMARTY_DIR . 'Smarty.class.php';
27:
28: 29: 30: 31: 32: 33: 34: 35:
36: class XoopsTpl extends Smarty
37: {
38: 39: 40:
41: public function __construct()
42: {
43: global $xoopsConfig;
44:
45: $this->left_delimiter = '<{';
46: $this->right_delimiter = '}>';
47: $this->template_dir = XOOPS_THEME_PATH;
48: $this->cache_dir = XOOPS_VAR_PATH . '/caches/smarty_cache';
49: $this->compile_dir = XOOPS_VAR_PATH . '/caches/smarty_compile';
50: $this->compile_check = ($xoopsConfig['theme_fromfile'] == 1);
51: $this->plugins_dir = array(
52: XOOPS_ROOT_PATH . '/class/smarty/xoops_plugins',
53: XOOPS_ROOT_PATH . '/class/smarty/plugins');
54: if ($xoopsConfig['debug_mode']) {
55: $this->debugging_ctrl = 'URL';
56: if ($xoopsConfig['debug_mode'] == 3) {
57: $this->debugging = true;
58: }
59: }
60: parent::__construct();
61: $this->setCompileId();
62: $this->assign(array(
63: 'xoops_url' => XOOPS_URL,
64: 'xoops_rootpath' => XOOPS_ROOT_PATH,
65: 'xoops_langcode' => _LANGCODE,
66: 'xoops_charset' => _CHARSET,
67: 'xoops_version' => XOOPS_VERSION,
68: 'xoops_upload_url' => XOOPS_UPLOAD_URL));
69: }
70:
71: 72: 73: 74: 75: 76: 77: 78: 79:
80: public function fetchFromData($tplSource, $display = false, $vars = null)
81: {
82: if (!function_exists('smarty_function_eval')) {
83: require_once SMARTY_DIR . '/plugins/function.eval.php';
84: }
85: if (isset($vars)) {
86: $oldVars = $this->_tpl_vars;
87: $this->assign($vars);
88: $out = smarty_function_eval(array(
89: 'var' => $tplSource), $this);
90: $this->_tpl_vars = $oldVars;
91:
92: return $out;
93: }
94:
95: return smarty_function_eval(array(
96: 'var' => $tplSource), $this);
97: }
98:
99: 100: 101: 102: 103: 104:
105: public function touch($resourceName)
106: {
107: $isForced = $this->force_compile;
108: $this->force_compile = true;
109: $this->clear_cache($resourceName);
110: $result = $this->_compile_resource($resourceName, $this->_get_compile_path($resourceName));
111: $this->force_compile = $isForced;
112:
113: return $result;
114: }
115:
116: 117: 118: 119: 120: 121: 122:
123: public function _get_auto_id($cache_id = null, $compile_id = null)
124: {
125: if (isset($cache_id)) {
126: return isset($compile_id) ? $compile_id . '-' . $cache_id : $cache_id;
127: } elseif (isset($compile_id)) {
128: return $compile_id;
129: } else {
130: return null;
131: }
132: }
133:
134: 135: 136: 137: 138: 139: 140: 141:
142: public function setCompileId($module_dirname = null, $theme_set = null, $template_set = null)
143: {
144: global $xoopsConfig;
145:
146: $template_set = empty($template_set) ? $xoopsConfig['template_set'] : $template_set;
147: $theme_set = empty($theme_set) ? $xoopsConfig['theme_set'] : $theme_set;
148: $module_dirname = empty($module_dirname) ? (empty($GLOBALS['xoopsModule']) ? 'system' : $GLOBALS['xoopsModule']->getVar('dirname', 'n')) : $module_dirname;
149: $this->compile_id = substr(md5(XOOPS_URL), 0, 8) . '-' . $module_dirname . '-' . $theme_set . '-' . $template_set;
150: $this->_compile_id = $this->compile_id;
151: }
152:
153: 154: 155: 156: 157: 158: 159: 160:
161: public function clearCache($module_dirname = null, $theme_set = null, $template_set = null)
162: {
163: $compile_id = $this->compile_id;
164: $this->setCompileId($module_dirname, $template_set, $theme_set);
165: $_params = array(
166: 'auto_base' => $this->cache_dir,
167: 'auto_source' => null,
168: 'auto_id' => $this->compile_id,
169: 'exp_time' => null);
170: $this->_compile_id = $this->compile_id = $compile_id;
171: require_once SMARTY_CORE_DIR . 'core.rm_auto.php';
172:
173: return smarty_core_rm_auto($_params, $this);
174: }
175:
176: 177: 178: 179: 180:
181: public function xoops_setTemplateDir($dirname)
182: {
183: $GLOBALS['xoopsLogger']->addDeprecated('\'$xoopsTpl->xoops_setTemplateDir($value)\' is deprecated since XOOPS 2.5.4, please use \'$xoopsTpl->template_dir=$value;\' instead.');
184:
185: $this->template_dir = $dirname;
186: }
187:
188: 189: 190:
191: public function xoops_getTemplateDir()
192: {
193: $GLOBALS['xoopsLogger']->addDeprecated('\'$xoopsTpl->xoops_getTemplateDir()\' is deprecated since XOOPS 2.5.4, please use \'$xoopsTpl->template_dir;\' instead.');
194:
195: return $this->template_dir;
196: }
197:
198: 199: 200:
201: public function xoops_setDebugging($flag = false)
202: {
203: $GLOBALS['xoopsLogger']->addDeprecated('\'$xoopsTpl->xoops_setDebugging($value)\' is deprecated since XOOPS 2.5.4, please use \'$xoopsTpl->debugging=$value;\' instead.');
204:
205: $this->debugging = is_bool($flag) ? $flag : false;
206: }
207:
208: 209: 210:
211: public function xoops_setCaching($num = 0)
212: {
213: $GLOBALS['xoopsLogger']->addDeprecated('\'$xoopsTpl->xoops_setCaching($value)\' is deprecated since XOOPS 2.5.4, please use \'$xoopsTpl->caching=$value;\' instead.');
214:
215: $this->caching = (int)$num;
216: }
217:
218: 219: 220:
221: public function xoops_setCompileDir($dirname)
222: {
223: $GLOBALS['xoopsLogger']->addDeprecated('\'$xoopsTpl->xoops_setCompileDir($value)\' is deprecated since XOOPS 2.5.4, please use \'$xoopsTpl->compile_dir=$value;\' instead.');
224:
225: $this->compile_dir = $dirname;
226: }
227:
228: 229: 230:
231: public function xoops_setCacheDir($dirname)
232: {
233: $GLOBALS['xoopsLogger']->addDeprecated('\'$xoopsTpl->xoops_setCacheDir($value)\' is deprecated since XOOPS 2.5.4, please use \'$xoopsTpl->cache_dir=$value;\' instead.');
234:
235: $this->cache_dir = $dirname;
236: }
237:
238: 239: 240:
241: public function xoops_canUpdateFromFile()
242: {
243: $GLOBALS['xoopsLogger']->addDeprecated('\'$xoopsTpl->xoops_canUpdateFromFile()\' is deprecated since XOOPS 2.5.4, please use \'$xoopsTpl->compile_check;\' instead.');
244:
245: return $this->compile_check;
246: }
247:
248: 249: 250: 251: 252:
253: public function xoops_fetchFromData($data)
254: {
255: $GLOBALS['xoopsLogger']->addDeprecated('\'$xoopsTpl->xoops_fetchFromData($value)\' is deprecated since XOOPS 2.5.4, please use \'$xoopsTpl->fetchFromData($value);\' instead.');
256:
257: return $this->fetchFromData($data);
258: }
259:
260: 261: 262:
263: public function xoops_setCacheTime($num = 0)
264: {
265: $GLOBALS['xoopsLogger']->addDeprecated('\'$xoopsTpl->xoops_setCacheTime($value)\' is deprecated since XOOPS 2.5.4, please use \'$xoopsTpl->cache_lifetime=$value;\' instead.');
266:
267: if (($num = (int)$num) <= 0) {
268: $this->caching = 0;
269: } else {
270: $this->cache_lifetime = $num;
271: }
272: }
273: }
274:
275: 276: 277: 278: 279: 280: 281:
282: function xoops_template_touch($tpl_id, $clear_old = true)
283: {
284: $tplfile_handler = xoops_getHandler('tplfile');
285: $tplfile = $tplfile_handler->get($tpl_id);
286:
287: if (is_object($tplfile)) {
288: $file = $tplfile->getVar('tpl_file', 'n');
289: $tpl = new XoopsTpl();
290:
291: return $tpl->touch('db:' . $file);
292: }
293:
294: return false;
295: }
296:
297: 298: 299: 300: 301: 302:
303: function xoops_template_clear_module_cache($mid)
304: {
305: $block_arr = XoopsBlock::getByModule($mid);
306: $count = count($block_arr);
307: if ($count > 0) {
308: $xoopsTpl = new XoopsTpl();
309: $xoopsTpl->caching = 2;
310: for ($i = 0; $i < $count; ++$i) {
311: if ($block_arr[$i]->getVar('template') != '') {
312: $xoopsTpl->clear_cache('db:' . $block_arr[$i]->getVar('template'), 'blk_' . $block_arr[$i]->getVar('bid'));
313: }
314: }
315: }
316: }
317: