1: <?php
2: /**
3: * The Ingo_Script_Sieve_Test_Allof class represents a Allof test structure.
4: *
5: * Equivalent to a logical AND of all the tests it contains.
6: *
7: * See the enclosed file LICENSE for license information (ASL). If you
8: * did not receive this file, see http://www.horde.org/licenses/apache.
9: *
10: * @author Mike Cochrane <mike@graftonhall.co.nz>
11: * @package Ingo
12: */
13: class Ingo_Script_Sieve_Test_Allof extends Ingo_Script_Sieve_Test
14: {
15: /**
16: */
17: protected $_tests = array();
18:
19: /**
20: * Constructor.
21: *
22: * @param mixed $test A Ingo_Script_Sieve_Test object or a list of
23: * Ingo_Script_Sieve_Test objects.
24: */
25: public function __construct($test = null)
26: {
27: if (is_array($test)) {
28: $this->_tests = $test;
29: } elseif (!is_null($test)) {
30: $this->_tests[] = $test;
31: }
32: }
33:
34: /**
35: * Returns a script snippet representing this rule and any sub-rules.
36: *
37: * @return string A Sieve script snippet.
38: */
39: public function toCode()
40: {
41: $code = '';
42: if (count($this->_tests) > 1) {
43: $testlist = '';
44: foreach ($this->_tests as $test) {
45: $testlist .= (empty($testlist)) ? '' : ', ';
46: $testlist .= trim($test->toCode());
47: }
48:
49: $code = "allof ( $testlist )";
50: } elseif (count($this->_tests) == 1) {
51: $code = $this->_tests[0]->toCode();
52: } else {
53: return 'true';
54: }
55: return $code;
56: }
57:
58: /**
59: * Checks if all sub-rules are valid.
60: *
61: * @return boolean|string True if all rules are valid, an error message
62: * otherwise.
63: */
64: public function check()
65: {
66: foreach ($this->_tests as $test) {
67: $res = $test->check();
68: if ($res !== true) {
69: return $res;
70: }
71: }
72:
73: return true;
74: }
75:
76: /**
77: */
78: public function addTest($test)
79: {
80: $this->_tests[] = $test;
81: }
82:
83: /**
84: */
85: public function getTests()
86: {
87: return $this->_tests;
88: }
89:
90: /**
91: * Returns a list of sieve extensions required for this rule and any
92: * sub-rules.
93: *
94: * @return array A Sieve extension list.
95: */
96: public function requires()
97: {
98: $requires = array();
99:
100: foreach ($this->_tests as $test) {
101: $requires = array_merge($requires, $test->requires());
102: }
103:
104: return $requires;
105: }
106:
107: }
108: