1: <?php
2: /**
3: * The Ingo_Script_Sieve_Test_Exists class represents a test for the
4: * existence of one or more headers in a message.
5: *
6: * See the enclosed file LICENSE for license information (ASL). If you
7: * did not receive this file, see http://www.horde.org/licenses/apache.
8: *
9: * @author Mike Cochrane <mike@graftonhall.co.nz>
10: * @package Ingo
11: */
12: class Ingo_Script_Sieve_Test_Exists extends Ingo_Script_Sieve_Test
13: {
14: /**
15: * Constructor.
16: *
17: * @param array $vars Any required parameters.
18: */
19: public function __construct($vars = array())
20: {
21: $this->_vars['headers'] = isset($vars['headers'])
22: ? $vars['headers']
23: : '';
24: }
25:
26: /**
27: * Checks if the rule parameters are valid.
28: *
29: * @return boolean|string True if this rule is valid, an error message
30: * otherwise.
31: */
32: public function check()
33: {
34: return preg_split('(\r\n|\n|\r)', $this->_vars['headers'])
35: ? true
36: : _("No headers specified");
37: }
38:
39: /**
40: * Returns a script snippet representing this rule and any sub-rules.
41: *
42: * @return string A Sieve script snippet.
43: */
44: public function toCode()
45: {
46: $code = 'exists ';
47: $headers = preg_split('(\r\n|\n|\r)', $this->_vars['headers']);
48: if (count($headers) > 1) {
49: $code .= "[";
50: $headerstr = '';
51: foreach ($headers as $header) {
52: $headerstr .= (empty($headerstr) ? '"' : ', "') .
53: Ingo_Script_Sieve::escapeString($header) . '"';
54: }
55: $code .= $headerstr . "] ";
56: } elseif (count($headers) == 1) {
57: $code .= '"' . Ingo_Script_Sieve::escapeString($headers[0]) . '" ';
58: } else {
59: return "**error** No Headers Specified";
60: }
61:
62: return $code;
63: }
64:
65: }
66: