Ejemplo n.º 1
0
 /**
  * populate Source Object with meta data from Resource
  *
  * @param  Smarty_Template_Source   $source    source object
  * @param  Smarty_Internal_Template $_template template object
  *
  * @return void
  */
 public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
 {
     $uid = '';
     $sources = array();
     $exists = true;
     foreach ($_template->smarty->getTemplateDir() as $key => $directory) {
         try {
             $s = Smarty_Resource::source(null, $source->smarty, '[' . $key . ']' . $source->name);
             if (!$s->exists) {
                 continue;
             }
             $sources[$s->uid] = $s;
             $uid .= $s->filepath;
         } catch (SmartyException $e) {
         }
     }
     if (!$sources) {
         $source->exists = false;
         $source->template = $_template;
         return;
     }
     $sources = array_reverse($sources, true);
     reset($sources);
     $s = current($sources);
     $source->components = $sources;
     $source->filepath = $s->filepath;
     $source->uid = sha1($uid);
     $source->exists = $exists;
     if ($_template && $_template->smarty->compile_check) {
         $source->timestamp = $s->timestamp;
     }
     // need the template at getContent()
     $source->template = $_template;
 }
 /**
  * populate Source Object with meta data from Resource
  *
  * @param Smarty_Template_Source   $source    source object
  * @param Smarty_Internal_Template $_template template object
  */
 public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
 {
     $uid = '';
     $sources = array();
     $components = explode('|', $source->name);
     $exists = true;
     foreach ($components as $component) {
         $s = Smarty_Resource::source(null, $source->smarty, $component);
         if ($s->type == 'php') {
             throw new SmartyException("Resource type {$s->type} cannot be used with the extends resource type");
         }
         $sources[$s->uid] = $s;
         $uid .= $s->filepath;
         if ($_template && $_template->smarty->compile_check) {
             $exists = $exists && $s->exists;
         }
     }
     $source->components = $sources;
     $source->filepath = $s->filepath;
     $source->uid = sha1($uid);
     if ($_template && $_template->smarty->compile_check) {
         $source->timestamp = $s->timestamp;
         $source->exists = $exists;
     }
     // need the template at getContent()
     $source->template = $_template;
 }
 /**
  * populate Source Object with meta data from Resource
  *
  * @param  Smarty_Template_Source   $source    source object
  * @param  Smarty_Internal_Template $_template template object
  *
  * @return void
  */
 public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
 {
     $uid = '';
     $sources = array();
     $timestamp = 0;
     foreach ($_template->smarty->getTemplateDir() as $key => $directory) {
         try {
             $s = Smarty_Resource::source(null, $source->smarty, 'file:' . '[' . $key . ']' . $source->name);
             if (!$s->exists) {
                 continue;
             }
             $sources[$s->uid] = $s;
             $uid .= $s->filepath;
             $timestamp = $s->timestamp > $timestamp ? $s->timestamp : $timestamp;
         } catch (SmartyException $e) {
         }
     }
     if (!$sources) {
         $source->exists = false;
         return;
     }
     $sources = array_reverse($sources, true);
     reset($sources);
     $s = current($sources);
     $source->components = $sources;
     $source->filepath = $s->filepath;
     $source->uid = sha1($uid . $_template->smarty->_joined_template_dir);
     $source->exists = true;
     $source->timestamp = $timestamp;
 }
Ejemplo n.º 4
0
 /**
  * populate Source Object with meta data from Resource
  *
  * @param Smarty_Template_Source   $source    source object
  * @param Smarty_Internal_Template $_template template object
  */
 public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null)
 {
     $filePath = $this->buildFilepath($source, $_template);
     $s = Smarty_Resource::source(null, $source->smarty, $filePath);
     $source->components = $s;
     $source->filepath = $s->filepath;
     $source->uid = $s->uid;
     if ($_template && $_template->smarty->compile_check) {
         $source->timestamp = $s->timestamp;
         $source->exists = $s->exists;
     }
     $source->template = $_template;
 }
 /**
  * get Smarty property in template context
  *
  * @param string $property_name property name
  */
 public function __get($property_name)
 {
     switch ($property_name) {
         case 'source':
             if (empty($this->template_resource)) {
                 throw new SmartyException("Unable to parse resource name \"{$this->template_resource}\"");
             }
             $this->source = Smarty_Resource::source($this);
             // cache template object under a unique ID
             // do not cache eval resources
             if ($this->source->type != 'eval') {
                 if ($this->smarty->allow_ambiguous_resources) {
                     $_templateId = $this->source->unique_resource . $this->cache_id . $this->compile_id;
                 } else {
                     $_templateId = $this->smarty->joined_template_dir . '#' . $this->template_resource . $this->cache_id . $this->compile_id;
                 }
                 if (isset($_templateId[150])) {
                     $_templateId = sha1($_templateId);
                 }
                 $this->smarty->template_objects[$_templateId] = $this;
             }
             return $this->source;
         case 'compiled':
             $this->compiled = $this->source->getCompiled($this);
             return $this->compiled;
         case 'cached':
             if (!class_exists('Smarty_Template_Cached')) {
                 include SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
             }
             $this->cached = new Smarty_Template_Cached($this);
             return $this->cached;
         case 'compiler':
             $this->smarty->loadPlugin($this->source->compiler_class);
             $this->compiler = new $this->source->compiler_class($this->source->template_lexer_class, $this->source->template_parser_class, $this->smarty);
             return $this->compiler;
             // FIXME: routing of template -> smarty attributes
         // FIXME: routing of template -> smarty attributes
         default:
             if (property_exists($this->smarty, $property_name)) {
                 return $this->smarty->{$property_name};
             }
     }
     throw new SmartyException("template property '{$property_name}' does not exist.");
 }
Ejemplo n.º 6
0
 /**
  * This function is executed automatically when a compiled or cached template file is included
  * - Decode saved properties from compiled template and cache files
  * - Check if compiled or cache file is valid
  *
  * @param  array $properties special template properties
  * @param  bool  $cache flag if called from cache file
  *
  * @return bool  flag if compiled or cache file is valid
  */
 public function decodeProperties($properties, $cache = false)
 {
     $properties['version'] = isset($properties['version']) ? $properties['version'] : '';
     $is_valid = true;
     if (Smarty::SMARTY_VERSION != $properties['version']) {
         // new version must rebuild
         $is_valid = false;
     } elseif ((!$cache && $this->smarty->compile_check || $cache && ($this->smarty->compile_check === true || $this->smarty->compile_check === Smarty::COMPILECHECK_ON)) && !empty($properties['file_dependency'])) {
         // check file dependencies at compiled code
         foreach ($properties['file_dependency'] as $_file_to_check) {
             if ($_file_to_check[2] == 'file' || $_file_to_check[2] == 'php') {
                 if ($this->source->filepath == $_file_to_check[0] && isset($this->source->timestamp)) {
                     // do not recheck current template
                     $mtime = $this->source->timestamp;
                 } else {
                     // file and php types can be checked without loading the respective resource handlers
                     $mtime = is_file($_file_to_check[0]) ? @filemtime($_file_to_check[0]) : false;
                 }
             } elseif ($_file_to_check[2] == 'string') {
                 continue;
             } else {
                 $source = Smarty_Resource::source(null, $this->smarty, $_file_to_check[0]);
                 $mtime = $source->timestamp;
             }
             if (!$mtime || $mtime > $_file_to_check[1]) {
                 $is_valid = false;
                 break;
             }
         }
     }
     if ($cache) {
         // CACHING_LIFETIME_SAVED cache expiry has to be validated here since otherwise we'd define the unifunc
         if ($this->caching === Smarty::CACHING_LIFETIME_SAVED && $properties['cache_lifetime'] >= 0 && time() > $this->cached->timestamp + $properties['cache_lifetime']) {
             $is_valid = false;
         }
         $this->cached->valid = $is_valid;
     } else {
         $this->mustCompile = !$is_valid;
     }
     if ($is_valid) {
         $this->has_nocache_code = $properties['has_nocache_code'];
         //            $this->properties['nocache_hash'] = $properties['nocache_hash'];
         if (isset($properties['cache_lifetime'])) {
             $this->properties['cache_lifetime'] = $properties['cache_lifetime'];
         }
         if (isset($properties['file_dependency'])) {
             $this->properties['file_dependency'] = array_merge($this->properties['file_dependency'], $properties['file_dependency']);
         }
         if (isset($properties['tpl_function'])) {
             $this->properties['tpl_function'] = array_merge($this->properties['tpl_function'], $properties['tpl_function']);
         }
         $this->properties['version'] = $properties['version'];
         $this->properties['unifunc'] = $properties['unifunc'];
     }
     return $is_valid;
 }
Ejemplo n.º 7
0
 public function __get($property_name)
 {
     switch ($property_name) {
         case 'source':
             if (strlen($this->template_resource) == 0) {
                 throw new SmartyException('Missing template name');
             }
             $this->source = Smarty_Resource::source($this);
             if ($this->source->type != 'eval') {
                 if ($this->smarty->allow_ambiguous_resources) {
                     $_templateId = $this->source->unique_resource . $this->cache_id . $this->compile_id;
                 } else {
                     $_templateId = $this->smarty->joined_template_dir . '#' . $this->template_resource . $this->cache_id . $this->compile_id;
                 }
                 if (isset($_templateId[150])) {
                     $_templateId = sha1($_templateId);
                 }
                 $this->smarty->template_objects[$_templateId] = $this;
             }
             return $this->source;
         case 'compiled':
             $this->compiled = $this->source->getCompiled($this);
             return $this->compiled;
         case 'cached':
             if (!class_exists('Smarty_Template_Cached')) {
                 include SMARTY_SYSPLUGINS_DIR . 'smarty_cacheresource.php';
             }
             $this->cached = new Smarty_Template_Cached($this);
             return $this->cached;
         case 'compiler':
             $this->smarty->loadPlugin($this->source->compiler_class);
             $this->compiler = new $this->source->compiler_class($this->source->template_lexer_class, $this->source->template_parser_class, $this->smarty);
             return $this->compiler;
         default:
             if (property_exists($this->smarty, $property_name)) {
                 return $this->smarty->{$property_name};
             }
     }
     throw new SmartyException("template property '{$property_name}' does not exist.");
 }
 /**
  * Constructor
  *
  * @param \Smarty_Internal_Template $template
  */
 public function __construct(Smarty_Internal_Template $template)
 {
     $valid = true;
     if (!$template->source->recompiled) {
         if (Smarty::SMARTY_VERSION != $this->version) {
             // new version must rebuild
             $valid = false;
         } elseif ((int) $template->smarty->compile_check == 1 || $this->isCache && $template->smarty->compile_check === Smarty::COMPILECHECK_ON) {
             // check file dependencies at compiled code
             foreach ($this->resourceInfo as $r) {
                 if ($r[2] == 'file' || $r[2] == 'php') {
                     if ($template->source->filepath == $r[0]) {
                         // do not recheck current template
                         $mtime = $template->source->timestamp;
                     } else {
                         // file and php types can be checked without loading the respective resource handlers
                         if (is_file($r[0])) {
                             $mtime = filemtime($r[0]);
                         } else {
                             $valid = false;
                             break;
                         }
                     }
                 } else {
                     $source = Smarty_Resource::source(null, $template->smarty, $r[0]);
                     if ($source->exists) {
                         $mtime = $source->timestamp;
                     } else {
                         $valid = false;
                         break;
                     }
                 }
                 if (!$mtime || $mtime > $r[1]) {
                     $valid = false;
                     break;
                 }
             }
         }
         if ($this->isCache) {
             // CACHING_LIFETIME_SAVED cache expiry has to be validated here since otherwise we'd define the unifunc
             if ($this->cacheLifetime > 0 && ($template->caching === Smarty::CACHING_LIFETIME_SAVED || $this->caching === Smarty::CACHING_LIFETIME_SAVED) && time() > $template->cached->timestamp + $this->cacheLifetime) {
                 $valid = false;
             }
             $template->cached->valid = $valid;
         } else {
             $template->mustCompile = !$valid;
         }
     }
     if ($valid && !empty($this->plugins)) {
         $this->loadPlugins($this->plugins);
     }
 }