/** * get hiweb_tpl property in template context * * @param string $property_name property name * * @throws SmurtyException */ public function __get($property_name) { switch ($property_name) { case 'source': if (strlen($this->template_resource) == 0) { throw new SmurtyException('Missing template name'); } $this->source = Smurty_Resource::source($this); // cache template object under a unique ID // do not cache eval resources if ($this->source->type != 'eval') { if ($this->smurty->allow_ambiguous_resources) { $_templateId = $this->source->unique_resource . $this->cache_id . $this->compile_id; } else { $_templateId = $this->smurty->joined_template_dir . '#' . $this->template_resource . $this->cache_id . $this->compile_id; } if (isset($_templateId[150])) { $_templateId = sha1($_templateId); } $this->smurty->template_objects[$_templateId] = $this; } return $this->source; case 'compiled': $this->compiled = $this->source->getCompiled($this); return $this->compiled; case 'cached': if (!class_exists('Smurty_Template_Cached')) { include HIWEB_CORE_HTML_ASSETS . 'smurty_cacheresource.php'; } $this->cached = new Smurty_Template_Cached($this); return $this->cached; case 'compiler': $this->smurty->loadPlugin($this->source->compiler_class); $this->compiler = new $this->source->compiler_class($this->source->template_lexer_class, $this->source->template_parser_class, $this->smurty); return $this->compiler; // FIXME: routing of template -> smurty attributes // FIXME: routing of template -> smurty attributes default: if (property_exists($this->smurty, $property_name)) { return $this->smurty->{$property_name}; } } throw new SmurtyException("template property '{$property_name}' does not exist."); }
/** * Load Cache Resource Handler * * @param hiweb_tpl $smurty hiweb_tpl object * @param string $type name of the cache resource * * @throws SmurtyException * @return Smurty_CacheResource Cache Resource Handler */ public static function load(hiweb_tpl $smurty, $type = null) { if (!isset($type)) { $type = $smurty->caching_type; } // try smurty's cache if (isset($smurty->_cacheresource_handlers[$type])) { return $smurty->_cacheresource_handlers[$type]; } // try registered resource if (isset($smurty->registered_cache_resources[$type])) { // do not cache these instances as they may vary from instance to instance return $smurty->_cacheresource_handlers[$type] = $smurty->registered_cache_resources[$type]; } // try hiweb-core-tpl dir if (isset(self::$sysplugins[$type])) { if (!isset(self::$resources[$type])) { $cache_resource_class = 'Smurty_Internal_CacheResource_' . ucfirst($type); self::$resources[$type] = new $cache_resource_class(); } return $smurty->_cacheresource_handlers[$type] = self::$resources[$type]; } // try plugins dir $cache_resource_class = 'Smurty_CacheResource_' . ucfirst($type); if ($smurty->loadPlugin($cache_resource_class)) { if (!isset(self::$resources[$type])) { self::$resources[$type] = new $cache_resource_class(); } return $smurty->_cacheresource_handlers[$type] = self::$resources[$type]; } // give up throw new SmurtyException("Unable to load cache resource '{$type}'"); }
/** * Load Resource Handler * * @param hiweb_tpl $smurty smurty object * @param string $type name of the resource * * @throws SmurtyException * @return Smurty_Resource Resource Handler */ public static function load(hiweb_tpl $smurty, $type) { // try smurty's cache if (isset($smurty->_resource_handlers[$type])) { return $smurty->_resource_handlers[$type]; } // try registered resource if (isset($smurty->registered_resources[$type])) { if ($smurty->registered_resources[$type] instanceof Smurty_Resource) { $smurty->_resource_handlers[$type] = $smurty->registered_resources[$type]; // note registered to smurty is not kept unique! return $smurty->_resource_handlers[$type]; } if (!isset(self::$resources['registered'])) { self::$resources['registered'] = new Smurty_Internal_Resource_Registered(); } if (!isset($smurty->_resource_handlers[$type])) { $smurty->_resource_handlers[$type] = self::$resources['registered']; } return $smurty->_resource_handlers[$type]; } // try hiweb-core-tpl dir if (isset(self::$sysplugins[$type])) { if (!isset(self::$resources[$type])) { $_resource_class = 'Smurty_Internal_Resource_' . ucfirst($type); self::$resources[$type] = new $_resource_class(); } return $smurty->_resource_handlers[$type] = self::$resources[$type]; } // try plugins dir $_resource_class = 'Smurty_Resource_' . ucfirst($type); if ($smurty->loadPlugin($_resource_class)) { if (isset(self::$resources[$type])) { return $smurty->_resource_handlers[$type] = self::$resources[$type]; } if (class_exists($_resource_class, false)) { self::$resources[$type] = new $_resource_class(); return $smurty->_resource_handlers[$type] = self::$resources[$type]; } else { $smurty->registerResource($type, array("smurty_resource_{$type}_source", "smurty_resource_{$type}_timestamp", "smurty_resource_{$type}_secure", "smurty_resource_{$type}_trusted")); // give it another try, now that the resource is registered properly return self::load($smurty, $type); } } // try streams $_known_stream = stream_get_wrappers(); if (in_array($type, $_known_stream)) { // is known stream if (is_object($smurty->security_policy)) { $smurty->security_policy->isTrustedStream($type); } if (!isset(self::$resources['stream'])) { self::$resources['stream'] = new Smurty_Internal_Resource_Stream(); } return $smurty->_resource_handlers[$type] = self::$resources['stream']; } // TODO: try default_(template|config)_handler // give up throw new SmurtyException("Unknown resource type '{$type}'"); }