plate * * @return string * @throws \SmartyException */ public function _getTemplateId( $template_name, $cache_id = null, $compile_id = null, $caching = null, Smarty_Internal_Template $template = null ) { $template_name = (strpos($template_name, ':') === false) ? "{$this->default_resource_type}:{$template_name}" : $template_name; $cache_id = $cache_id === null ? $this->cache_id : $cache_id; $compile_id = $compile_id === null ? $this->compile_id : $compile_id; $caching = (int)($caching === null ? $this->caching : $caching); if ((isset($template) && strpos($template_name, ':.') !== false) || $this->allow_ambiguous_resources) { $_templateId = Smarty_Resource::getUniqueTemplateName((isset($template) ? $template : $this), $template_name) . "#{$cache_id}#{$compile_id}#{$caching}"; } else { $_templateId = $this->_joined_template_dir . "#{$template_name}#{$cache_id}#{$compile_id}#{$caching}"; } if (isset($_templateId[ 150 ])) { $_templateId = sha1($_templateId); } return $_templateId; } /** * Normalize path * - remove /./ and /../ * - make it absolute if required * * @param string $path file path * @param bool $realpath if true - convert to absolute * false - convert to relative * null - keep as it is but * remove /./ /../ * * @return string */ public function _realpath($path, $realpath = null) { $nds = array('/' => '\\', '\\' => '/'); preg_match( '%^(?(?:[[:alpha:]]:[\\\\/]|/|[\\\\]{2}[[:alpha:]]+|[[:print:]]{2,}:[/]{2}|[\\\\])?)(?(.*))$%u', $path, $parts ); $path = $parts[ 'path' ]; if ($parts[ 'root' ] === '\\') { $parts[ 'root' ] = substr(getcwd(), 0, 2) . $parts[ 'root' ]; } else { if ($realpath !== null && !$parts[ 'root' ]) { $path = getcwd() . DIRECTORY_SEPARATOR . $path; } } // normalize DIRECTORY_SEPARATOR $path = str_replace($nds[ DIRECTORY_SEPARATOR ], DIRECTORY_SEPARATOR, $path); $parts[ 'root' ] = str_replace($nds[ DIRECTORY_SEPARATOR ], DIRECTORY_SEPARATOR, $parts[ 'root' ]); do { $path = preg_replace( array('#[\\\\/]{2}#', '#[\\\\/][.][\\\\/]#', '#[\\\\/]([^\\\\/.]+)[\\\\/][.][.][\\\\/]#'), DIRECTORY_SEPARATOR, $path, -1, $count ); } while ($count > 0); return $realpath !== false ? $parts[ 'root' ] . $path : str_ireplace(getcwd(), '.', $parts[ 'root' ] . $path); } /** * Empty template objects cache */ public function _clearTemplateCache() { Smarty_Internal_Template::$isCacheTplObj = array(); Smarty_Internal_Template::$tplObjCache = array(); } /** * @param boolean $use_sub_dirs */ public function setUseSubDirs($use_sub_dirs) { $this->use_sub_dirs = $use_sub_dirs; } /** * @param int $error_reporting */ public function setErrorReporting($error_reporting) { $this->error_reporting = $error_reporting; } /** * @param boolean $escape_html */ public function setEscapeHtml($escape_html) { $this->escape_html = $escape_html; } /** * Return auto_literal flag * * @return boolean */ public function getAutoLiteral() { return $this->auto_literal; } /** * Set auto_literal flag * * @param boolean $auto_literal */ public function setAutoLiteral($auto_literal = true) { $this->auto_literal = $auto_literal; } /** * @param boolean $force_compile */ public function setForceCompile($force_compile) { $this->force_compile = $force_compile; } /** * @param boolean $merge_compiled_includes */ public function setMergeCompiledIncludes($merge_compiled_includes) { $this->merge_compiled_includes = $merge_compiled_includes; } /** * Get left delimiter * * @return string */ public function getLeftDelimiter() { return $this->left_delimiter; } /** * Set left delimiter * * @param string $left_delimiter */ public function setLeftDelimiter($left_delimiter) { $this->left_delimiter = $left_delimiter; } /** * Get right delimiter * * @return string $right_delimiter */ public function getRightDelimiter() { return $this->right_delimiter; } /** * Set right delimiter * * @param string */ public function setRightDelimiter($right_delimiter) { $this->right_delimiter = $right_delimiter; } /** * @param boolean $debugging */ public function setDebugging($debugging) { $this->debugging = $debugging; } /** * @param boolean $config_overwrite */ public function setConfigOverwrite($config_overwrite) { $this->config_overwrite = $config_overwrite; } /** * @param boolean $config_booleanize */ public function setConfigBooleanize($config_booleanize) { $this->config_booleanize = $config_booleanize; } /** * @param boolean $config_read_hidden */ public function setConfigReadHidden($config_read_hidden) { $this->config_read_hidden = $config_read_hidden; } /** * @param boolean $compile_locking */ public function setCompileLocking($compile_locking) { $this->compile_locking = $compile_locking; } /** * @param string $default_resource_type */ public function setDefaultResourceType($default_resource_type) { $this->default_resource_type = $default_resource_type; } /** * @param string $caching_type */ public function setCachingType($caching_type) { $this->caching_type = $caching_type; } /** * Test install * * @param null $errors */ public function testInstall(&$errors = null) { Smarty_Internal_TestInstall::testInstall($this, $errors); } /** * Get Smarty object * * @return Smarty */ public function _getSmartyObj() { return $this; } /** * <> Generic getter. * Calls the appropriate getter function. * Issues an E_USER_NOTICE if no valid getter is found. * * @param string $name property name * * @return mixed */ public function __get($name) { if (isset($this->accessMap[ $name ])) { $method = 'get' . $this->accessMap[ $name ]; return $this->{$method}(); } elseif (isset($this->_cache[ $name ])) { return $this->_cache[ $name ]; } elseif (in_array($name, $this->obsoleteProperties)) { return null; } else { trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); } return null; } /** * <> Generic setter. * Calls the appropriate setter function. * Issues an E_USER_NOTICE if no valid setter is found. * * @param string $name property name * @param mixed $value parameter passed to setter * */ public function __set($name, $value) { if (isset($this->accessMap[ $name ])) { $method = 'set' . $this->accessMap[ $name ]; $this->{$method}($value); } elseif (in_array($name, $this->obsoleteProperties)) { return; } elseif (is_object($value) && method_exists($value, $name)) { $this->$name = $value; } else { trigger_error('Undefined property: ' . get_class($this) . '::$' . $name, E_USER_NOTICE); } } /** * Normalize and set directory string * * @param string $dirName cache_dir or compile_dir * @param string $dir filepath of folder */ private function _normalizeDir($dirName, $dir) { $this->{$dirName} = $this->_realpath(rtrim($dir, "/\\") . DIRECTORY_SEPARATOR, true); if (class_exists('Smarty_Internal_ErrorHandler', false)) { if (!isset(Smarty_Internal_ErrorHandler::$mutedDirectories[ $this->{$dirName} ])) { Smarty_Internal_ErrorHandler::$mutedDirectories[ $this->{$dirName} ] = null; } } } /** * Normalize template_dir or config_dir * * @param bool $isConfig true for config_dir */ private function _normalizeTemplateConfig($isConfig) { if ($isConfig) { $processed = &$this->_processedConfigDir; $dir = &$this->config_dir; } else { $processed = &$this->_processedTemplateDir; $dir = &$this->template_dir; } if (!is_array($dir)) { $dir = (array)$dir; } foreach ($dir as $k => $v) { if (!isset($processed[ $k ])) { $dir[ $k ] = $v = $this->_realpath(rtrim($v, "/\\") . DIRECTORY_SEPARATOR, true); $processed[ $k ] = true; } } $isConfig ? $this->_configDirNormalized = true : $this->_templateDirNormalized = true; $isConfig ? $this->_joined_config_dir = join('#', $this->config_dir) : $this->_joined_template_dir = join('#', $this->template_dir); } }