From a6cb25020bb5200cc3c00ecc941ddb751644fbcc Mon Sep 17 00:00:00 2001 From: Mario Vavti Date: Sun, 6 Dec 2015 23:12:37 +0100 Subject: add missing smarty files --- ...marty_internal_method_clearcompiledtemplate.php | 132 +++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 library/Smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php (limited to 'library/Smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php') diff --git a/library/Smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php b/library/Smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php new file mode 100644 index 000000000..ae1003238 --- /dev/null +++ b/library/Smarty/libs/sysplugins/smarty_internal_method_clearcompiledtemplate.php @@ -0,0 +1,132 @@ +getCompileDir(); + if ($_compile_dir == '/') { //We should never want to delete this! + return 0; + } + $_compile_id = isset($compile_id) ? preg_replace('![^\w]+!', '_', $compile_id) : null; + $_dir_sep = $smarty->use_sub_dirs ? DS : '^'; + if (isset($resource_name)) { + $_save_stat = $smarty->caching; + $smarty->caching = false; + /* @var Smarty_Internal_Template $tpl */ + $tpl = new $smarty->template_class($resource_name, $smarty); + $smarty->caching = $_save_stat; + if ($tpl->source->exists) { + // remove from compileds cache + $tpl->source->compileds = array(); + $_resource_part_1 = basename(str_replace('^', DS, $tpl->compiled->filepath)); + $_resource_part_1_length = strlen($_resource_part_1); + } else { + return 0; + } + $_resource_part_2 = str_replace('.php', '.cache.php', $_resource_part_1); + $_resource_part_2_length = strlen($_resource_part_2); + } + $_dir = $_compile_dir; + if ($smarty->use_sub_dirs && isset($_compile_id)) { + $_dir .= $_compile_id . $_dir_sep; + } + if (isset($_compile_id)) { + $_compile_id_part = $_compile_dir . $_compile_id . $_dir_sep; + $_compile_id_part_length = strlen($_compile_id_part); + } + $_count = 0; + try { + $_compileDirs = new RecursiveDirectoryIterator($_dir); + // NOTE: UnexpectedValueException thrown for PHP >= 5.3 + } + catch (Exception $e) { + return 0; + } + $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST); + foreach ($_compile as $_file) { + if (substr(basename($_file->getPathname()), 0, 1) == '.' || strpos($_file, '.svn') !== false) { + continue; + } + + $_filepath = (string) $_file; + + if ($_file->isDir()) { + if (!$_compile->isDot()) { + // delete folder if empty + @rmdir($_file->getPathname()); + } + } else { + $unlink = false; + if ((!isset($_compile_id) || (isset($_filepath[$_compile_id_part_length]) && + $a = !strncmp($_filepath, $_compile_id_part, $_compile_id_part_length))) && + (!isset($resource_name) || (isset($_filepath[$_resource_part_1_length]) && + substr_compare($_filepath, $_resource_part_1, - $_resource_part_1_length, + $_resource_part_1_length) == 0) || + (isset($_filepath[$_resource_part_2_length]) && + substr_compare($_filepath, $_resource_part_2, - $_resource_part_2_length, + $_resource_part_2_length) == 0)) + ) { + if (isset($exp_time)) { + if (time() - @filemtime($_filepath) >= $exp_time) { + $unlink = true; + } + } else { + $unlink = true; + } + } + + if ($unlink && @unlink($_filepath)) { + if (isset($smarty->_cache['template_objects'])) { + foreach ($smarty->_cache['template_objects'] as $key => $tpl) { + if (isset($tpl->compiled) && $tpl->compiled->filepath == $_filepath) { + unset($smarty->_cache['template_objects'][$key]); + } + } + } + $_count ++; + if (function_exists('opcache_invalidate')) { + opcache_invalidate($_filepath); + } + } + } + } + // clear compiled cache + if (!isset($resource_name) && isset($smarty->_cache['source_objects'])) { + foreach ($smarty->_cache['source_objects'] as $source) { + $source->compileds = array(); + } + } + return $_count; + } +} \ No newline at end of file -- cgit v1.2.3