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) { |
|
|
|
|
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
|
|
|
|
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.