Project

General

Profile

1
<?php
2

    
3
/*
4
 * This file is part of Twig.
5
 *
6
 * (c) 2011 Fabien Potencier
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11

    
12
/**
13
 * Returns the value or the default value when it is undefined or empty.
14
 *
15
 * <pre>
16
 *  {{ var.foo|default('foo item on var is not defined') }}
17
 * </pre>
18
 *
19
 * @package twig
20
 * @author  Fabien Potencier <fabien@symfony.com>
21
 */
22
class Twig_Node_Expression_Filter_Default extends Twig_Node_Expression_Filter
23
{
24
    public function __construct(Twig_NodeInterface $node, Twig_Node_Expression_Constant $filterName, Twig_NodeInterface $arguments, $lineno, $tag = null)
25
    {
26
        $default = new Twig_Node_Expression_Filter($node, new Twig_Node_Expression_Constant('_default', $node->getLine()), $arguments, $node->getLine());
27

    
28
        if ('default' === $filterName->getAttribute('value') && ($node instanceof Twig_Node_Expression_Name || $node instanceof Twig_Node_Expression_GetAttr)) {
29
            $test = new Twig_Node_Expression_Test_Defined(clone $node, 'defined', new Twig_Node(), $node->getLine());
30
            $false = count($arguments) ? $arguments->getNode(0) : new Twig_Node_Expression_Constant('', $node->getLine());
31

    
32
            $node = new Twig_Node_Expression_Conditional($test, $default, $false, $node->getLine());
33
        } else {
34
            $node = $default;
35
        }
36

    
37
        parent::__construct($node, $filterName, $arguments, $lineno, $tag);
38
    }
39

    
40
    public function compile(Twig_Compiler $compiler)
41
    {
42
        $compiler->subcompile($this->getNode('node'));
43
    }
44
}
    (1-1/1)