1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
|
<?php
/**
* Copyright 2012-2017 Horde LLC (http://www.horde.org/)
*
* See the enclosed file LICENSE for license information (ASL). If you
* did not receive this file, see http://www.horde.org/licenses/apache.
*
* @author Mike Cochrane <mike@graftonhall.co.nz>
* @author Jan Schneider <jan@horde.org>
* @category Horde
* @license http://www.horde.org/licenses/apache ASL
* @package Ingo
*/
/**
* The Ingo_Script_Sieve_If class represents a Sieve If Statement.
*
* @author Mike Cochrane <mike@graftonhall.co.nz>
* @author Jan Schneider <jan@horde.org>
* @category Horde
* @license http://www.horde.org/licenses/apache ASL
* @package Ingo
*/
class Ingo_Script_Sieve_If implements Ingo_Script_Item
{
/**
* The Ingo_Script_Sieve_Test object for the if test.
*
* @var Ingo_Script_Sieve_Test
*/
protected $_test;
/**
* A list of Ingo_Script_Sieve_Action objects that go into the if clause.
*
* @var array
*/
protected $_actions = array();
/**
* A list of Ingo_Script_Sieve_Elseif objects that create optional elsif
* clauses.
*
* @var array
*/
protected $_elsifs = array();
/**
* A Ingo_Script_Sieve_Else object that creates an optional else clause.
*
* @var Ingo_Script_Sieve_Else
*/
protected $_else;
/**
* Constructor.
*
* @param Ingo_Script_Sieve_Test $test A Ingo_Script_Sieve_Test object.
*/
public function __construct($test = null)
{
$this->_test = is_null($test)
? new Ingo_Script_Sieve_Test_False()
: $test;
$this->_actions[] = new Ingo_Script_Sieve_Action_Keep();
$this->_else = new Ingo_Script_Sieve_Else();
}
/**
*/
public function getTest()
{
return $this->_test;
}
/**
*/
public function setTest($test)
{
$this->_test = $test;
}
/**
*/
public function getActions()
{
return $this->_actions;
}
/**
*/
public function setActions($actions)
{
$this->_actions = $actions;
}
/**
*/
public function getElsifs()
{
return $this->_elsifs;
}
/**
*/
public function setElsifs($elsifs)
{
$this->_elsifs = $elsifs;
}
/**
*/
public function addElsif($elsif)
{
$this->_elsifs[] = $elsif;
}
/**
*/
public function getElse()
{
return $this->_else;
}
/**
*/
public function setElse($else)
{
$this->_else = $else;
}
/**
* Returns a script snippet representing this rule and any sub-rules.
*
* @return string A Sieve script snippet.
*/
public function generate()
{
$code = 'if ' . $this->_test->generate() . " {\n";
foreach ($this->_actions as $action) {
$code .= ' ' . $action->generate() . "\n";
}
$code .= '}';
foreach ($this->_elsifs as $elsif) {
$code .= $elsif->generate();
}
$code .= $this->_else->generate();
return $code;
}
/**
* Checks if all sub-rules are valid.
*
* @return boolean|string True if all rules are valid, an error message
* otherwise.
*/
public function check()
{
$res = $this->_test->check();
if ($res !== true) {
return $res;
}
foreach ($this->_elsifs as $elsif) {
$res = $elsif->check();
if ($res !== true) {
return $res;
}
}
$res = $this->_else->check();
if ($res !== true) {
return $res;
}
foreach ($this->_actions as $action) {
$res = $action->check();
if ($res !== true) {
return $res;
}
}
return true;
}
/**
* Returns a list of sieve extensions required for this rule and any
* sub-rules.
*
* @return array A Sieve extension list.
*/
public function requires()
{
$requires = array();
foreach ($this->_actions as $action) {
$requires = array_merge($requires, $action->requires());
}
foreach ($this->_elsifs as $elsif) {
$requires = array_merge($requires, $elsif->requires());
}
return array_merge($requires, $this->_test->requires(), $this->_else->requires());
}
}
|