aboutsummaryrefslogtreecommitdiffstats
path: root/library/Smarty/libs/sysplugins/smarty_resource.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/Smarty/libs/sysplugins/smarty_resource.php')
-rw-r--r--library/Smarty/libs/sysplugins/smarty_resource.php108
1 files changed, 42 insertions, 66 deletions
diff --git a/library/Smarty/libs/sysplugins/smarty_resource.php b/library/Smarty/libs/sysplugins/smarty_resource.php
index 5d5e368d9..72611255e 100644
--- a/library/Smarty/libs/sysplugins/smarty_resource.php
+++ b/library/Smarty/libs/sysplugins/smarty_resource.php
@@ -29,37 +29,25 @@ abstract class Smarty_Resource
* @var boolean
*/
public $recompiled = false;
+
/**
- * resource handler object
- *
- * @var Smarty_Resource
- */
- public $handler = null;
- /**
- * cache for Smarty_Template_Source instances
- *
- * @var array
- */
- public static $sources = array();
- /**
- * cache for Smarty_Template_Compiled instances
+ * resource types provided by the core
*
* @var array
*/
- public static $compileds = array();
+ public static $sysplugins = array('file' => 'smarty_internal_resource_file.php',
+ 'string' => 'smarty_internal_resource_string.php',
+ 'extends' => 'smarty_internal_resource_extends.php',
+ 'stream' => 'smarty_internal_resource_stream.php',
+ 'eval' => 'smarty_internal_resource_eval.php',
+ 'php' => 'smarty_internal_resource_php.php');
+
/**
- * resource types provided by the core
+ * Flag if resource does implement populateCompiledFilepath() method
*
- * @var array
+ * @var bool
*/
- protected static $sysplugins = array(
- 'file' => 'smarty_internal_resource_file.php',
- 'string' => 'smarty_internal_resource_string.php',
- 'extends' => 'smarty_internal_resource_extends.php',
- 'stream' => 'smarty_internal_resource_stream.php',
- 'eval' => 'smarty_internal_resource_eval.php',
- 'php' => 'smarty_internal_resource_php.php'
- );
+ public $hasCompiledHandler = false;
/**
* Name of the Class to compile this resource's contents with
@@ -84,7 +72,6 @@ abstract class Smarty_Resource
/**
* Load template's source into current template object
- * {@internal The loaded source is assigned to $_template->source->content directly.}}
*
* @param Smarty_Template_Source $source source object
*
@@ -123,9 +110,15 @@ abstract class Smarty_Resource
public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false)
{
if ($isConfig) {
- return get_class($this) . '#' . $smarty->joined_config_dir . '#' . $resource_name;
+ if (!isset($smarty->_joined_config_dir)) {
+ $smarty->getTemplateDir(null, true);
+ }
+ return get_class($this) . '#' . $smarty->_joined_config_dir . '#' . $resource_name;
} else {
- return get_class($this) . '#' . $smarty->joined_template_dir . '#' . $resource_name;
+ if (!isset($smarty->_joined_template_dir)) {
+ $smarty->getTemplateDir();
+ }
+ return get_class($this) . '#' . $smarty->_joined_template_dir . '#' . $resource_name;
}
}
@@ -153,42 +146,32 @@ abstract class Smarty_Resource
public static function load(Smarty $smarty, $type)
{
// try smarty's cache
- if (isset($smarty->_resource_handlers[$type])) {
- return $smarty->_resource_handlers[$type];
+ if (isset($smarty->_cache['resource_handlers'][$type])) {
+ return $smarty->_cache['resource_handlers'][$type];
}
// try registered resource
if (isset($smarty->registered_resources[$type])) {
- if ($smarty->registered_resources[$type] instanceof Smarty_Resource) {
- $smarty->_resource_handlers[$type] = $smarty->registered_resources[$type];
- } else {
- $smarty->_resource_handlers[$type] = new Smarty_Internal_Resource_Registered();
- }
-
- return $smarty->_resource_handlers[$type];
+ return $smarty->_cache['resource_handlers'][$type] =
+ $smarty->registered_resources[$type] instanceof Smarty_Resource ? $smarty->registered_resources[$type] :
+ new Smarty_Internal_Resource_Registered();
}
// try sysplugins dir
if (isset(self::$sysplugins[$type])) {
$_resource_class = 'Smarty_Internal_Resource_' . ucfirst($type);
- if (!class_exists($_resource_class, false)) {
- require SMARTY_SYSPLUGINS_DIR . self::$sysplugins[$type];
- }
- return $smarty->_resource_handlers[$type] = new $_resource_class();
+ return $smarty->_cache['resource_handlers'][$type] = new $_resource_class();
}
// try plugins dir
$_resource_class = 'Smarty_Resource_' . ucfirst($type);
if ($smarty->loadPlugin($_resource_class)) {
if (class_exists($_resource_class, false)) {
- return $smarty->_resource_handlers[$type] = new $_resource_class();
+ return $smarty->_cache['resource_handlers'][$type] = new $_resource_class();
} else {
- $smarty->registerResource($type, array(
- "smarty_resource_{$type}_source",
- "smarty_resource_{$type}_timestamp",
- "smarty_resource_{$type}_secure",
- "smarty_resource_{$type}_trusted"
- ));
+ $smarty->registerResource($type,
+ array("smarty_resource_{$type}_source", "smarty_resource_{$type}_timestamp",
+ "smarty_resource_{$type}_secure", "smarty_resource_{$type}_trusted"));
// give it another try, now that the resource is registered properly
return self::load($smarty, $type);
}
@@ -201,7 +184,7 @@ abstract class Smarty_Resource
if (is_object($smarty->security_policy)) {
$smarty->security_policy->isTrustedStream($type);
}
- return $smarty->_resource_handlers[$type] = new Smarty_Internal_Resource_Stream();;
+ return $smarty->_cache['resource_handlers'][$type] = new Smarty_Internal_Resource_Stream();
}
// TODO: try default_(template|config)_handler
@@ -221,7 +204,7 @@ abstract class Smarty_Resource
*/
public static function parseResourceName($resource_name, $default_resource)
{
- if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]/', $resource_name, $match)) {
+ if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]/', $resource_name, $match)) {
$type = $match[1];
$name = substr($resource_name, strlen($match[0]));
} else {
@@ -229,38 +212,30 @@ abstract class Smarty_Resource
// or single character before the colon is not a resource type, but part of the filepath
$type = $default_resource;
$name = $resource_name;
-
}
return array($name, $type);
}
/**
- * modify resource_name according to resource handlers specifications
- *
- * @param Smarty $smarty Smarty instance
- * @param string $resource_name resource_name to make unique
- *
- * @return string unique resource name
- */
-
- /**
* modify template_resource according to resource handlers specifications
*
- * @param Smarty_Internal_template $template Smarty instance
- * @param string $template_resource template_resource to extract resource handler and name of
+ * @param \Smarty_Internal_Template|\Smarty $obj Smarty instance
+ * @param string $template_resource template_resource to extract resource handler and name of
*
* @return string unique resource name
*/
- public static function getUniqueTemplateName($template, $template_resource)
+ public static function getUniqueTemplateName($obj, $template_resource)
{
- $smarty = isset($template->smarty) ? $template->smarty : $template;
+ $smarty = $obj->_objType == 2 ? $obj->smarty : $obj;
list($name, $type) = self::parseResourceName($template_resource, $smarty->default_resource_type);
// TODO: optimize for Smarty's internal resource types
$resource = Smarty_Resource::load($smarty, $type);
// go relative to a given template?
$_file_is_dotted = $name[0] == '.' && ($name[1] == '.' || $name[1] == '/');
- if ($template instanceof Smarty_Internal_Template && $_file_is_dotted && ($template->source->type == 'file' || $template->parent->source->type == 'extends')) {
- $name = dirname($template->source->filepath) . DS . $name;
+ if ($obj->_objType == 2 && $_file_is_dotted &&
+ ($obj->source->type == 'file' || $obj->parent->source->type == 'extends')
+ ) {
+ $name = dirname($obj->source->filepath) . DS . $name;
}
return $resource->buildUniqueResourceName($smarty, $name);
}
@@ -276,7 +251,8 @@ abstract class Smarty_Resource
*
* @return Smarty_Template_Source Source Object
*/
- public static function source(Smarty_Internal_Template $_template = null, Smarty $smarty = null, $template_resource = null)
+ public static function source(Smarty_Internal_Template $_template = null, Smarty $smarty = null,
+ $template_resource = null)
{
return Smarty_Template_Source::load($_template, $smarty, $template_resource);
}