Completed
Push — master ( 30592b...7a2823 )
by David
10s
created

lib/Dwoo/Plugins/Blocks/PluginElse.php (1 issue)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 * Copyright (c) 2013-2016
4
 *
5
 * @category  Library
6
 * @package   Dwoo\Plugins\Blocks
7
 * @author    Jordi Boggiano <[email protected]>
8
 * @author    David Sanchez <[email protected]>
9
 * @copyright 2008-2013 Jordi Boggiano
10
 * @copyright 2013-2016 David Sanchez
11
 * @license   http://dwoo.org/LICENSE Modified BSD License
12
 * @version   1.3.0
13
 * @date      2016-09-19
14
 * @link      http://dwoo.org/
15
 */
16
17
namespace Dwoo\Plugins\Blocks;
18
19
use Dwoo\Compiler;
20
use Dwoo\Block\Plugin as BlockPlugin;
21
use Dwoo\ICompilable\Block as ICompilableBlock;
22
use Dwoo\Compilation\Exception as CompilationException;
23
24
/**
25
 * Generic else block, it supports all builtin optional-display blocks which are if/for/foreach/loop/with.
26
 * If any of those block contains an else statement, the content between {else} and {/block} (you do not
27
 * need to close the else block) will be shown if the block's condition has no been met
28
 * Example :
29
 * <code>
30
 * {foreach $array val}
31
 *   $array is not empty so we display it's values : {$val}
32
 * {else}
33
 *   if this shows, it means that $array is empty or doesn't exist.
34
 * {/foreach}
35
 * </code>
36
 * This software is provided 'as-is', without any express or implied warranty.
37
 * In no event will the authors be held liable for any damages arising from the use of this software.
38
 */
39
class PluginElse extends BlockPlugin implements ICompilableBlock
40
{
41
    public function init()
42
    {
43
    }
44
45
    /**
46
     * @param Compiler $compiler
47
     * @param array    $params
48
     * @param string   $prepend
49
     * @param string   $append
50
     * @param string   $type
51
     *
52
     * @return string
53
     * @throws CompilationException
54
     */
55
    public static function preProcessing(Compiler $compiler, array $params, $prepend, $append, $type)
56
    {
57
        $preContent = '';
58
        while (true) {
59
            $preContent .= $compiler->removeTopBlock();
60
            $block = &$compiler->getCurrentBlock();
61
            if (!$block) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $block of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
62
                throw new CompilationException($compiler, 'An else block was found but it was not preceded by an if or other else-able construct');
63
            }
64
            $interfaces = class_implements($block['class']);
65
            if (in_array('Dwoo\IElseable', $interfaces) !== false) {
66
                break;
67
            }
68
        }
69
70
        $params['initialized'] = true;
71
        $compiler->injectBlock($type, $params);
72
73
        return $preContent;
74
    }
75
76
    /**
77
     * @param Compiler $compiler
78
     * @param array    $params
79
     * @param string   $prepend
80
     * @param string   $append
81
     * @param string   $content
82
     *
83
     * @return string
84
     */
85
    public static function postProcessing(Compiler $compiler, array $params, $prepend, $append, $content)
86
    {
87
        if (!isset($params['initialized'])) {
88
            return '';
89
        }
90
91
        $block                      = &$compiler->getCurrentBlock();
92
        $block['params']['hasElse'] = Compiler::PHP_OPEN . "else {\n" . Compiler::PHP_CLOSE . $content . Compiler::PHP_OPEN . "\n}" . Compiler::PHP_CLOSE;
93
94
        return '';
95
    }
96
}
97