Example #1
1
 public function load(TemplateReferenceInterface $template)
 {
     if (method_exists($this, $method = 'get' . ucfirst($template->get('name')) . 'Template')) {
         return new StringStorage($this->{$method}());
     }
     return false;
 }
Example #2
0
 /**
  * Loads a template.
  *
  * @param TemplateReferenceInterface $template A template
  *
  * @return Storage|bool false if the template cannot be loaded, a Storage instance otherwise
  */
 public function load(TemplateReferenceInterface $template)
 {
     $key = hash('sha256', $template->getLogicalName());
     $dir = $this->dir . DIRECTORY_SEPARATOR . substr($key, 0, 2);
     $file = substr($key, 2) . '.tpl';
     $path = $dir . DIRECTORY_SEPARATOR . $file;
     if (is_file($path)) {
         if (null !== $this->logger) {
             $this->logger->debug('Fetching template from cache.', array('name' => $template->get('name')));
         } elseif (null !== $this->debugger) {
             // just for BC, to be removed in 3.0
             $this->debugger->log(sprintf('Fetching template "%s" from cache.', $template->get('name')));
         }
         return new FileStorage($path);
     }
     if (false === ($storage = $this->loader->load($template))) {
         return false;
     }
     $content = $storage->getContent();
     if (!is_dir($dir)) {
         mkdir($dir, 0777, true);
     }
     file_put_contents($path, $content);
     if (null !== $this->logger) {
         $this->logger->debug('Storing template in cache.', array('name' => $template->get('name')));
     } elseif (null !== $this->debugger) {
         // just for BC, to be removed in 3.0
         $this->debugger->log(sprintf('Storing template "%s" in cache.', $template->get('name')));
     }
     return new FileStorage($path);
 }
Example #3
0
 /**
  * @param TemplateReferenceInterface                    $template
  * @param string                                        $bundle
  * @param \Claroline\CoreBundle\Entity\Theme\Theme|null $theme
  * @param string                                        $currentPath
  *
  * @return TemplateReferenceInterface
  */
 private function locateTemplate(TemplateReferenceInterface $template, $bundle, $theme, $currentPath)
 {
     $newTemplate = clone $template;
     $controller = $template->get('controller');
     if (null !== $theme) {
         $controller = sprintf('theme/%s/%s', $template->get('bundle'), $template->get('controller'));
     }
     $newTemplate->set('bundle', $bundle)->set('controller', $controller);
     try {
         $this->locator->locate($newTemplate->getPath(), $currentPath);
     } catch (\Exception $e) {
         $newTemplate = $template;
     }
     return $newTemplate;
 }
 /**
  * Loads a template.
  *
  * @param TemplateReferenceInterface $template A template
  *
  * @return Storage|Boolean false if the template cannot be loaded, a Storage instance otherwise
  *
  * @api
  */
 public function load(TemplateReferenceInterface $template)
 {
     $file = $template->get('name');
     if (self::isAbsolutePath($file) && file_exists($file)) {
         return new FileStorage($file);
     }
     $replacements = array();
     foreach ($template->all() as $key => $value) {
         $replacements['%' . $key . '%'] = $value;
     }
     $logs = array();
     foreach ($this->templatePathPatterns as $templatePathPattern) {
         if (is_file($file = strtr($templatePathPattern, $replacements)) && is_readable($file)) {
             if (null !== $this->debugger) {
                 $this->debugger->log(sprintf('Loaded template file "%s"', $file));
             }
             return new FileStorage($file);
         }
         if (null !== $this->debugger) {
             $logs[] = sprintf('Failed loading template file "%s"', $file);
         }
     }
     if (null !== $this->debugger) {
         foreach ($logs as $log) {
             $this->debugger->log($log);
         }
     }
     return false;
 }
Example #5
0
 /**
  * Loads a template.
  *
  * @param TemplateReferenceInterface $template A template
  *
  * @return Storage|Boolean false if the template cannot be loaded, a Storage instance otherwise
  */
 public function load(TemplateReferenceInterface $template)
 {
     $key = md5($template->getLogicalName());
     $dir = $this->dir . DIRECTORY_SEPARATOR . substr($key, 0, 2);
     $file = substr($key, 2) . '.tpl';
     $path = $dir . DIRECTORY_SEPARATOR . $file;
     if (file_exists($path)) {
         if (null !== $this->debugger) {
             $this->debugger->log(sprintf('Fetching template "%s" from cache', $template->get('name')));
         }
         return new FileStorage($path);
     }
     if (false === ($storage = $this->loader->load($template))) {
         return false;
     }
     $content = $storage->getContent();
     if (!file_exists($dir)) {
         mkdir($dir, 0777, true);
     }
     file_put_contents($path, $content);
     if (null !== $this->debugger) {
         $this->debugger->log(sprintf('Storing template "%s" in cache', $template->get('name')));
     }
     return new FileStorage($path);
 }
Example #6
0
 /**
  * Loads a template.
  *
  * @param TemplateReferenceInterface $template A template
  *
  * @return Storage|bool false if the template cannot be loaded, a Storage instance otherwise
  */
 public function load(TemplateReferenceInterface $template)
 {
     $file = $template->get('name');
     if (self::isAbsolutePath($file) && is_file($file)) {
         return new FileStorage($file);
     }
     $replacements = array();
     foreach ($template->all() as $key => $value) {
         $replacements['%' . $key . '%'] = $value;
     }
     $fileFailures = array();
     foreach ($this->templatePathPatterns as $templatePathPattern) {
         if (is_file($file = strtr($templatePathPattern, $replacements)) && is_readable($file)) {
             if (null !== $this->logger) {
                 $this->logger->debug('Loaded template file.', array('file' => $file));
             }
             return new FileStorage($file);
         }
         if (null !== $this->logger) {
             $fileFailures[] = $file;
         }
     }
     // only log failures if no template could be loaded at all
     foreach ($fileFailures as $file) {
         if (null !== $this->logger) {
             $this->logger->debug('Failed loading template file.', array('file' => $file));
         }
     }
     return false;
 }
Example #7
0
 /**
  * Loads a template.
  *
  * @param TemplateReferenceInterface $template A template
  *
  * @return Storage|bool false if the template cannot be loaded, a Storage instance otherwise
  */
 public function load(TemplateReferenceInterface $template)
 {
     $key = md5($template->getLogicalName());
     $dir = $this->dir . DIRECTORY_SEPARATOR . substr($key, 0, 2);
     $file = substr($key, 2) . '.tpl';
     $path = $dir . DIRECTORY_SEPARATOR . $file;
     if (is_file($path)) {
         if (null !== $this->debugger) {
             $this->debugger->log(sprintf('Fetching template "%s" from cache', $template->get('name')));
         }
         return new FileStorage($path);
     }
     if (false === ($storage = $this->loader->load($template))) {
         return false;
     }
     $content = $storage->getContent();
     if (!is_dir($dir) && !@mkdir($dir, 0777, true) && !is_dir($dir)) {
         throw new \RuntimeException(sprintf('Cache Loader was not able to create directory "%s"', $dir));
     }
     file_put_contents($path, $content);
     if (null !== $this->debugger) {
         $this->debugger->log(sprintf('Storing template "%s" in cache', $template->get('name')));
     }
     return new FileStorage($path);
 }
 /**
  * Loads a template.
  *
  * @param TemplateReferenceInterface $template A template
  *
  * @return Storage|bool false if the template cannot be loaded, a Storage instance otherwise
  *
  * @api
  */
 public function load(TemplateReferenceInterface $template)
 {
     $method = $template->get('name');
     if (!method_exists($this->templates, $method)) {
         return false;
     }
     return new ClassStorage([$this->templates, $method]);
 }
Example #9
0
 /**
  * Returns a full path for a given file.
  *
  * @param TemplateReferenceInterface $template     A template
  * @param string                     $currentPath  Unused
  * @param Boolean                    $first        Unused
  *
  * @return string The full path for the file
  *
  * @throws \InvalidArgumentException When the template is not an instance of TemplateReferenceInterface
  * @throws \InvalidArgumentException When the template file can not be found
  */
 public function locate($template, $currentPath = null, $first = true)
 {
     if (!$template instanceof TemplateReferenceInterface) {
         throw new \InvalidArgumentException("The template must be an instance of TemplateReferenceInterface.");
     }
     $curTheme = $this->themeManager->getActiveTheme();
     if ($template instanceof ThemeTemplateReference && $template->get('theme')) {
         $this->themeManager->setActiveTheme($template->get('theme'));
     }
     $key = $this->getCacheKey($template);
     if (!isset($this->cache[$key])) {
         try {
             $this->cache[$key] = $this->locator->locate($template->getPath(), $currentPath);
         } catch (\InvalidArgumentException $e) {
             throw new \InvalidArgumentException(sprintf('Unable to find template "%s" in "%s".', $template, $e->getMessage()), 0, $e);
         }
     }
     $this->themeManager->setActiveTheme($curTheme);
     return $this->cache[$key];
 }
Example #10
0
 public function load(TemplateReferenceInterface $template)
 {
     $file = $template->get('name');
     foreach ($this->paths as $path) {
         $template->set('name', $path . '/' . $file);
         $result = parent::load($template);
         if ($result) {
             return $result;
         }
     }
     return false;
 }
Example #11
0
 /**
  * Adds twig templates to the tracker.
  *
  * @param  TemplateReferenceInterface $reference
  * @return Tracker
  */
 private function addTemplate(TemplateReferenceInterface $reference)
 {
     if ($reference->get('engine') !== 'twig') {
         return $this;
     }
     if (false !== ($path = $this->resolvePath($reference->getPath()))) {
         $this->templates[] = $path;
         return $this->addPath($path);
     }
     // Can't resolve the template. This shouldn't happen, unless somebody placed a template in a very weird place.
     $this->untracked_templates[] = $reference->getPath();
     return $this;
 }
Example #12
0
 /**
  * Adds twig templates to the tracker.
  *
  * @param TemplateReferenceInterface $reference the reference to the twig template to be added.
  * @return Tracker this instance
  */
 private function addTemplate(TemplateReferenceInterface $reference)
 {
     if ($reference->get('engine') !== 'twig') {
         return $this;
     }
     if (false !== ($path = $this->resolvePath($reference->getPath()))) {
         $this->templates[] = $path;
         return $this->addPath($path);
     }
     return $this;
 }