diff options
| author | Michael Save <savetheinternet@tinyboard.org> | 2012-04-09 20:52:26 +1000 |
|---|---|---|
| committer | Michael Save <savetheinternet@tinyboard.org> | 2012-04-09 20:52:26 +1000 |
| commit | 874b8cbf002e9d8bf0ff39671e1501165016320a (patch) | |
| tree | 1428acec23fef6c607e10fd355d88af31c2029ed /inc/contrib/Twig/Template.php | |
| parent | 69c9a9dd452299e0e8f7335966a1d0b4036df583 (diff) | |
inc/contrib -> inc/lib
Diffstat (limited to 'inc/contrib/Twig/Template.php')
| -rw-r--r-- | inc/contrib/Twig/Template.php | 374 |
1 files changed, 0 insertions, 374 deletions
diff --git a/inc/contrib/Twig/Template.php b/inc/contrib/Twig/Template.php deleted file mode 100644 index a129fd73..00000000 --- a/inc/contrib/Twig/Template.php +++ /dev/null @@ -1,374 +0,0 @@ -<?php - -/* - * This file is part of Twig. - * - * (c) 2009 Fabien Potencier - * (c) 2009 Armin Ronacher - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/** - * Default base class for compiled templates. - * - * @package twig - * @author Fabien Potencier <fabien@symfony.com> - */ -abstract class Twig_Template implements Twig_TemplateInterface -{ - static protected $cache = array(); - - protected $parents; - protected $env; - protected $blocks; - - /** - * Constructor. - * - * @param Twig_Environment $env A Twig_Environment instance - */ - public function __construct(Twig_Environment $env) - { - $this->env = $env; - $this->blocks = array(); - } - - /** - * Returns the template name. - * - * @return string The template name - */ - abstract public function getTemplateName(); - - /** - * Returns the Twig environment. - * - * @return Twig_Environment The Twig environment - */ - public function getEnvironment() - { - return $this->env; - } - - /** - * Returns the parent template. - * - * @return Twig_TemplateInterface|false The parent template or false if there is no parent - */ - public function getParent(array $context) - { - $parent = $this->doGetParent($context); - if (false === $parent) { - return false; - } elseif ($parent instanceof Twig_Template) { - $name = $parent->getTemplateName(); - $this->parents[$name] = $parent; - $parent = $name; - } elseif (!isset($this->parents[$parent])) { - $this->parents[$parent] = $this->env->loadTemplate($parent); - } - - return $this->parents[$parent]; - } - - abstract protected function doGetParent(array $context); - - /** - * Displays a parent block. - * - * @param string $name The block name to display from the parent - * @param array $context The context - * @param array $blocks The current set of blocks - */ - public function displayParentBlock($name, array $context, array $blocks = array()) - { - if (false !== $parent = $this->getParent($context)) { - $parent->displayBlock($name, $context, $blocks); - } else { - throw new Twig_Error_Runtime('This template has no parent', -1, $this->getTemplateName()); - } - } - - /** - * Displays a block. - * - * @param string $name The block name to display - * @param array $context The context - * @param array $blocks The current set of blocks - */ - public function displayBlock($name, array $context, array $blocks = array()) - { - if (isset($blocks[$name])) { - $b = $blocks; - unset($b[$name]); - call_user_func($blocks[$name], $context, $b); - } elseif (isset($this->blocks[$name])) { - call_user_func($this->blocks[$name], $context, $blocks); - } elseif (false !== $parent = $this->getParent($context)) { - $parent->displayBlock($name, $context, array_merge($this->blocks, $blocks)); - } - } - - /** - * Renders a parent block. - * - * @param string $name The block name to render from the parent - * @param array $context The context - * @param array $blocks The current set of blocks - * - * @return string The rendered block - */ - public function renderParentBlock($name, array $context, array $blocks = array()) - { - ob_start(); - $this->displayParentBlock($name, $context, $blocks); - - return ob_get_clean(); - } - - /** - * Renders a block. - * - * @param string $name The block name to render - * @param array $context The context - * @param array $blocks The current set of blocks - * - * @return string The rendered block - */ - public function renderBlock($name, array $context, array $blocks = array()) - { - ob_start(); - $this->displayBlock($name, $context, $blocks); - - return ob_get_clean(); - } - - /** - * Returns whether a block exists or not. - * - * @param string $name The block name - * - * @return Boolean true if the block exists, false otherwise - */ - public function hasBlock($name) - { - return isset($this->blocks[$name]); - } - - /** - * Returns all block names. - * - * @return array An array of block names - */ - public function getBlockNames() - { - return array_keys($this->blocks); - } - - /** - * Returns all blocks. - * - * @return array An array of blocks - */ - public function getBlocks() - { - return $this->blocks; - } - - /** - * Displays the template with the given context. - * - * @param array $context An array of parameters to pass to the template - * @param array $blocks An array of blocks to pass to the template - */ - public function display(array $context, array $blocks = array()) - { - try { - $this->doDisplay($context, $blocks); - } catch (Twig_Error $e) { - throw $e; - } catch (Exception $e) { - throw new Twig_Error_Runtime(sprintf('An exception has been thrown during the rendering of a template ("%s").', $e->getMessage()), -1, null, $e); - } - } - - /** - * Renders the template with the given context and returns it as string. - * - * @param array $context An array of parameters to pass to the template - * - * @return string The rendered template - */ - public function render(array $context) - { - $level = ob_get_level(); - ob_start(); - try { - $this->display($context); - } catch (Exception $e) { - while (ob_get_level() > $level) { - ob_end_clean(); - } - - throw $e; - } - - return ob_get_clean(); - } - - /** - * Auto-generated method to display the template with the given context. - * - * @param array $context An array of parameters to pass to the template - * @param array $blocks An array of blocks to pass to the template - */ - abstract protected function doDisplay(array $context, array $blocks = array()); - - /** - * Returns a variable from the context. - * - * @param array $context The context - * @param string $item The variable to return from the context - * - * @return The content of the context variable - * - * @throws Twig_Error_Runtime if the variable does not exist and Twig is running in strict mode - */ - protected function getContext($context, $item) - { - if (!array_key_exists($item, $context)) { - if (!$this->env->isStrictVariables()) { - return null; - } - - throw new Twig_Error_Runtime(sprintf('Variable "%s" does not exist', $item)); - } - - return $context[$item]; - } - - /** - * Returns the attribute value for a given array/object. - * - * @param mixed $object The object or array from where to get the item - * @param mixed $item The item to get from the array or object - * @param array $arguments An array of arguments to pass if the item is an object method - * @param string $type The type of attribute (@see Twig_TemplateInterface) - * @param Boolean $isDefinedTest Whether this is only a defined check - */ - protected function getAttribute($object, $item, array $arguments = array(), $type = Twig_TemplateInterface::ANY_CALL, $isDefinedTest = false) - { - // array - if (Twig_TemplateInterface::METHOD_CALL !== $type) { - if ((is_array($object) && array_key_exists($item, $object)) - || ($object instanceof ArrayAccess && isset($object[$item])) - ) { - if ($isDefinedTest) { - return true; - } - - return $object[$item]; - } - - if (Twig_TemplateInterface::ARRAY_CALL === $type) { - if ($isDefinedTest) { - return false; - } - - if (!$this->env->isStrictVariables()) { - return null; - } - - if (is_object($object)) { - throw new Twig_Error_Runtime(sprintf('Key "%s" in object (with ArrayAccess) of type "%s" does not exist', $item, get_class($object))); - // array - } else { - throw new Twig_Error_Runtime(sprintf('Key "%s" for array with keys "%s" does not exist', $item, implode(', ', array_keys($object)))); - } - } - } - - if (!is_object($object)) { - if ($isDefinedTest) { - return false; - } - - if (!$this->env->isStrictVariables()) { - return null; - } - - throw new Twig_Error_Runtime(sprintf('Item "%s" for "%s" does not exist', $item, $object)); - } - - // get some information about the object - $class = get_class($object); - if (!isset(self::$cache[$class])) { - $r = new ReflectionClass($class); - self::$cache[$class] = array('methods' => array(), 'properties' => array()); - foreach ($r->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { - self::$cache[$class]['methods'][strtolower($method->getName())] = true; - } - - foreach ($r->getProperties(ReflectionProperty::IS_PUBLIC) as $property) { - self::$cache[$class]['properties'][$property->getName()] = true; - } - } - - // object property - if (Twig_TemplateInterface::METHOD_CALL !== $type) { - if (isset(self::$cache[$class]['properties'][$item]) - || isset($object->$item) || array_key_exists($item, $object) - ) { - if ($isDefinedTest) { - return true; - } - - if ($this->env->hasExtension('sandbox')) { - $this->env->getExtension('sandbox')->checkPropertyAllowed($object, $item); - } - - return $object->$item; - } - } - - // object method - $lcItem = strtolower($item); - if (isset(self::$cache[$class]['methods'][$lcItem])) { - $method = $item; - } elseif (isset(self::$cache[$class]['methods']['get'.$lcItem])) { - $method = 'get'.$item; - } elseif (isset(self::$cache[$class]['methods']['is'.$lcItem])) { - $method = 'is'.$item; - } elseif (isset(self::$cache[$class]['methods']['__call'])) { - $method = $item; - } else { - if ($isDefinedTest) { - return false; - } - - if (!$this->env->isStrictVariables()) { - return null; - } - - throw new Twig_Error_Runtime(sprintf('Method "%s" for object "%s" does not exist', $item, get_class($object))); - } - - if ($isDefinedTest) { - return true; - } - - if ($this->env->hasExtension('sandbox')) { - $this->env->getExtension('sandbox')->checkMethodAllowed($object, $method); - } - - $ret = call_user_func_array(array($object, $method), $arguments); - - if ($object instanceof Twig_TemplateInterface) { - return new Twig_Markup($ret); - } - - return $ret; - } -} |
