PluginElse   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 58
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Importance

Changes 0
Metric Value
dl 0
loc 58
rs 10
c 0
b 0
f 0
wmc 7
lcom 0
cbo 3

3 Methods

Rating   Name   Duplication   Size   Complexity  
A init() 0 3 1
A preProcessing() 0 20 4
A postProcessing() 0 11 2
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