diff --git a/libs/sysplugins/method.compile_directory.php b/libs/sysplugins/method.compile_directory.php index 624808f3..103d30d2 100644 --- a/libs/sysplugins/method.compile_directory.php +++ b/libs/sysplugins/method.compile_directory.php @@ -16,46 +16,55 @@ * @param string $dir_name name of directories * @return integer number of template files deleted */ -function compile_directory($smarty, $dir_name = null, $extention = '.tpl') -{ +function compile_directory($smarty, $extention = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null) +{ function _get_time() { $_mtime = microtime(); $_mtime = explode(" ", $_mtime); return (double)($_mtime[1]) + (double)($_mtime[0]); } - // set default directory - if ($dir_name == null) { + if ($dir_name === null) { $dir_name = $smarty->template_dir; } // switch off time limit if (function_exists('set_time_limit')) { - @set_time_limit(0); + @set_time_limit($time_limit); } - - $smarty->force_compile = true; - $_count = 0; + $smarty->force_compile = $force_compile; + $_count = 0; + $_error_count = 0; // loop over array of template directories - foreach ($dir_name as $_dir) { + foreach((array)$smarty->template_dir as $_dir) { $_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; - echo '
' . $_fileinfo->getPath().'\\'.$_file; - flush(); - $_start_time = _get_time(); - try { - $_tpl = $smarty->createTemplate($_file); - $_tpl->getCompiledTemplate(); - } - catch (Exception $e) { - echo 'Error: ', $e->getMessage(), "

"; - } - echo ' done in ',_get_time() - $_start_time,' seconds'; + $_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)) . '\\' . $_file; } + echo '
', $_dir, '---', $_template_file; + flush(); + $_start_time = _get_time(); + try { + $_tpl = $smarty->createTemplate($_template_file); + $_tpl->getCompiledTemplate(); + } + catch (Exception $e) { + echo 'Error: ', $e->getMessage(), "

"; + $_error_count++; + } + echo ' done in ', _get_time() - $_start_time, ' seconds'; + if ($max_errors !== null && $_error_count == $max_errors) { + echo '

too many errors'; + exit(); + } + } } return $_count; }