X-Git-Url: http://wagnertech.de/gitweb/gitweb.cgi/timetracker.git/blobdiff_plain/098a79f0819ebb89b7d48df4a6b154af4560f68e..9a23a8c0a51b7ec38a96f525484134f3cb85dc7e:/WEB-INF/lib/smarty/sysplugins/smarty_internal_utility.php diff --git a/WEB-INF/lib/smarty/sysplugins/smarty_internal_utility.php b/WEB-INF/lib/smarty/sysplugins/smarty_internal_utility.php new file mode 100644 index 00000000..b532e4a1 --- /dev/null +++ b/WEB-INF/lib/smarty/sysplugins/smarty_internal_utility.php @@ -0,0 +1,300 @@ + + * @author Uwe Tews + * @package Smarty + * @subpackage PluginsInternal + * @version 3-SVN$Rev: 3286 $ + */ + +class Smarty_Internal_Utility { + protected $smarty; + + function __construct($smarty) + { + $this->smarty = $smarty; + } + + /** + * Compile all template files + * + * @param string $extension file extension + * @param bool $force_compile force all to recompile + * @param int $time_limit + * @param int $max_errors + * @return integer number of template files recompiled + */ + function compileAllTemplates($extention = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) + { + // switch off time limit + if (function_exists('set_time_limit')) { + @set_time_limit($time_limit); + } + $this->smarty->force_compile = $force_compile; + $_count = 0; + $_error_count = 0; + // loop over array of template directories + foreach((array)$this->smarty->template_dir as $_dir) { + if (strpos('/\\', substr($_dir, -1)) === false) { + $_dir .= DS; + } + $_compileDirs = new RecursiveDirectoryIterator($_dir); + $_compile = new RecursiveIteratorIterator($_compileDirs); + foreach ($_compile as $_fileinfo) { + if (strpos($_fileinfo, '.svn') !== false) continue; + $_file = $_fileinfo->getFilename(); + if (!substr_compare($_file, $extention, - strlen($extention)) == 0) continue; + if ($_fileinfo->getPath() == substr($_dir, 0, -1)) { + $_template_file = $_file; + } else { + $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; + } + echo '
', $_dir, '---', $_template_file; + flush(); + $_start_time = microtime(true); + try { + $_tpl = $this->smarty->createTemplate($_template_file,null,null,null,false); + if ($_tpl->mustCompile()) { + $_tpl->compileTemplateSource(); + echo ' compiled in ', microtime(true) - $_start_time, ' seconds'; + flush(); + } else { + echo ' is up to date'; + flush(); + } + } + catch (Exception $e) { + echo 'Error: ', $e->getMessage(), "

"; + $_error_count++; + } + // free memory + $this->smarty->template_objects = array(); + $_tpl->smarty->template_objects = array(); + $_tpl = null; + if ($max_errors !== null && $_error_count == $max_errors) { + echo '

too many errors'; + exit(); + } + } + } + return $_count; + } + + /** + * Compile all config files + * + * @param string $extension file extension + * @param bool $force_compile force all to recompile + * @param int $time_limit + * @param int $max_errors + * @return integer number of template files recompiled + */ + function compileAllConfig($extention = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null) + { + // switch off time limit + if (function_exists('set_time_limit')) { + @set_time_limit($time_limit); + } + $this->smarty->force_compile = $force_compile; + $_count = 0; + $_error_count = 0; + // loop over array of template directories + foreach((array)$this->smarty->config_dir as $_dir) { + if (strpos('/\\', substr($_dir, -1)) === false) { + $_dir .= DS; + } + $_compileDirs = new RecursiveDirectoryIterator($_dir); + $_compile = new RecursiveIteratorIterator($_compileDirs); + foreach ($_compile as $_fileinfo) { + if (strpos($_fileinfo, '.svn') !== false) continue; + $_file = $_fileinfo->getFilename(); + if (!substr_compare($_file, $extention, - strlen($extention)) == 0) continue; + if ($_fileinfo->getPath() == substr($_dir, 0, -1)) { + $_config_file = $_file; + } else { + $_config_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file; + } + echo '
', $_dir, '---', $_config_file; + flush(); + $_start_time = microtime(true); + try { + $_config = new Smarty_Internal_Config($_config_file, $this->smarty); + if ($_config->mustCompile()) { + $_config->compileConfigSource(); + echo ' compiled in ', microtime(true) - $_start_time, ' seconds'; + flush(); + } else { + echo ' is up to date'; + flush(); + } + } + catch (Exception $e) { + echo 'Error: ', $e->getMessage(), "

"; + $_error_count++; + } + if ($max_errors !== null && $_error_count == $max_errors) { + echo '

too many errors'; + exit(); + } + } + } + return $_count; + } + + /** + * Delete compiled template file + * + * @param string $resource_name template name + * @param string $compile_id compile id + * @param integer $exp_time expiration time + * @return integer number of template files deleted + */ + function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null) + { + $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null; + $_dir_sep = $this->smarty->use_sub_dirs ? DS : '^'; + if (isset($resource_name)) { + $_resource_part_1 = $resource_name . '.php'; + $_resource_part_2 = $resource_name . '.cache' . '.php'; + } else { + $_resource_part = ''; + } + $_dir = $this->smarty->compile_dir; + if ($this->smarty->use_sub_dirs && isset($_compile_id)) { + $_dir .= $_compile_id . $_dir_sep; + } + if (isset($_compile_id)) { + $_compile_id_part = $this->smarty->compile_dir . $_compile_id . $_dir_sep; + } + $_count = 0; + $_compileDirs = new RecursiveDirectoryIterator($_dir); + $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST); + foreach ($_compile as $_file) { + if (strpos($_file, '.svn') !== false) continue; + if ($_file->isDir()) { + if (!$_compile->isDot()) { + // delete folder if empty + @rmdir($_file->getPathname()); + } + } else { + if ((!isset($_compile_id) || (strlen((string)$_file) > strlen($_compile_id_part) && substr_compare((string)$_file, $_compile_id_part, 0, strlen($_compile_id_part)) == 0)) && + (!isset($resource_name) || (strlen((string)$_file) > strlen($_resource_part_1) && substr_compare((string)$_file, $_resource_part_1, - strlen($_resource_part_1), strlen($_resource_part_1)) == 0) || + (strlen((string)$_file) > strlen($_resource_part_2) && substr_compare((string)$_file, $_resource_part_2, - strlen($_resource_part_2), strlen($_resource_part_2)) == 0))) { + if (isset($exp_time)) { + if (time() - @filemtime($_file) >= $exp_time) { + $_count += @unlink((string) $_file) ? 1 : 0; + } + } else { + $_count += @unlink((string) $_file) ? 1 : 0; + } + } + } + } + return $_count; + } + + /** + * Return array of tag/attributes of all tags used by an template + * + * @param object $templae template object + * @return array of tag/attributes + */ + function getTags(Smarty_Internal_Template $template) + { + $template->smarty->get_used_tags = true; + $template->compileTemplateSource(); + return $template->compiler_object->used_tags; + } + + function testInstall() + { + echo "
\n";
+
+        echo "Smarty Installation test...\n";
+
+        echo "Testing template directory...\n";
+
+        foreach((array)$this->smarty->template_dir as $template_dir) {
+            if (!is_dir($template_dir))
+                echo "FAILED: $template_dir is not a directory.\n";
+            elseif (!is_readable($template_dir))
+                echo "FAILED: $template_dir is not readable.\n";
+            else
+                echo "$template_dir is OK.\n";
+        } 
+
+        echo "Testing compile directory...\n";
+
+        if (!is_dir($this->smarty->compile_dir))
+            echo "FAILED: {$this->smarty->compile_dir} is not a directory.\n";
+        elseif (!is_readable($this->smarty->compile_dir))
+            echo "FAILED: {$this->smarty->compile_dir} is not readable.\n";
+        elseif (!is_writable($this->smarty->compile_dir))
+            echo "FAILED: {$this->smarty->compile_dir} is not writable.\n";
+        else
+            echo "{$this->smarty->compile_dir} is OK.\n";
+
+        echo "Testing plugins directory...\n";
+
+        foreach((array)$this->smarty->plugins_dir as $plugin_dir) {
+            if (!is_dir($plugin_dir))
+                echo "FAILED: $plugin_dir is not a directory.\n";
+            elseif (!is_readable($plugin_dir))
+                echo "FAILED: $plugin_dir is not readable.\n";
+            else
+                echo "$plugin_dir is OK.\n";
+        } 
+
+        echo "Testing cache directory...\n";
+
+        if (!is_dir($this->smarty->cache_dir))
+            echo "FAILED: {$this->smarty->cache_dir} is not a directory.\n";
+        elseif (!is_readable($this->smarty->cache_dir))
+            echo "FAILED: {$this->smarty->cache_dir} is not readable.\n";
+        elseif (!is_writable($this->smarty->cache_dir))
+            echo "FAILED: {$this->smarty->cache_dir} is not writable.\n";
+        else
+            echo "{$this->smarty->cache_dir} is OK.\n";
+
+        echo "Testing configs directory...\n";
+
+        if (!is_dir($this->smarty->config_dir))
+            echo "FAILED: {$this->smarty->config_dir} is not a directory.\n";
+        elseif (!is_readable($this->smarty->config_dir))
+            echo "FAILED: {$this->smarty->config_dir} is not readable.\n";
+        else
+            echo "{$this->smarty->config_dir} is OK.\n";
+
+        echo "Tests complete.\n";
+
+        echo "
\n"; + + return true; + } +} +?> \ No newline at end of file