1: <?php
2: /**
3: * The Ingo_Script_Sieve_Elsif:: class represents a Sieve Elsif Statement.
4: *
5: * See the enclosed file LICENSE for license information (ASL). If you
6: * did not receive this file, see http://www.horde.org/licenses/apache.
7: *
8: * @author Mike Cochrane <mike@graftonhall.co.nz>
9: * @package Ingo
10: */
11: class Ingo_Script_Sieve_Elsif
12: {
13: /**
14: * The Ingo_Script_Sieve_Test object for the if test.
15: *
16: * @var Ingo_Script_Sieve_Test
17: */
18: protected $_test;
19:
20: /**
21: * A list of Ingo_Script_Sieve_Action objects that go into the if clause.
22: *
23: * @var array
24: */
25: protected $_actions = array();
26:
27: /**
28: * Constructor.
29: *
30: * @param Ingo_Script_Sieve_Test $test A Ingo_Script_Sieve_Test object.
31: */
32: public function __construct($test = null)
33: {
34: $this->_test = is_null($test)
35: ? new Ingo_Script_Sieve_Test_False()
36: : $test;
37: $this->_actions[] = new Ingo_Script_Sieve_Action_Keep();
38: }
39:
40: /**
41: */
42: public function getTest()
43: {
44: return $this->_test;
45: }
46:
47: /**
48: */
49: public function setTest($test)
50: {
51: $this->_test = $test;
52: }
53:
54: /**
55: */
56: public function getActions()
57: {
58: return $this->_actions;
59: }
60:
61: /**
62: */
63: public function setActions($actions)
64: {
65: $this->_actions = $actions;
66: }
67:
68: /**
69: * Returns a script snippet representing this rule and any sub-rules.
70: *
71: * @return string A Sieve script snippet.
72: */
73: public function toCode()
74: {
75: $code = 'elsif ' . $this->_test->toCode() . " { \n";
76: foreach ($this->_actions as $action) {
77: $code .= ' ' . $action->toCode() . "\n";
78: }
79: $code .= "} ";
80:
81: return $code;
82: }
83:
84: /**
85: * Checks if all sub-rules are valid.
86: *
87: * @return boolean|string True if all rules are valid, an error message
88: * otherwise.
89: */
90: public function check()
91: {
92: $res = $this->_test->check();
93: if ($res !== true) {
94: return $res;
95: }
96:
97: foreach ($this->_actions as $action) {
98: $res = $action->check();
99: if ($res !== true) {
100: return $res;
101: }
102: }
103:
104: return true;
105: }
106:
107: /**
108: * Returns a list of sieve extensions required for this rule and any
109: * sub-rules.
110: *
111: * @return array A Sieve extension list.
112: */
113: public function requires()
114: {
115: $requires = array();
116:
117: foreach ($this->_actions as $action) {
118: $requires = array_merge($requires, $action->requires());
119: }
120:
121: return array_merge($requires, $this->_test->requires());
122: }
123:
124: }
125: