1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
12: class Ingo_Script_Sieve_Test_Address extends Ingo_Script_Sieve_Test
13: {
14: 15: 16: 17: 18:
19: public function __construct($vars)
20: {
21: $this->_vars['headers'] = isset($vars['headers'])
22: ? $vars['headers']
23: : '';
24: $this->_vars['comparator'] = isset($vars['comparator'])
25: ? $vars['comparator']
26: : 'i;ascii-casemap';
27: $this->_vars['match-type'] = isset($vars['match-type'])
28: ? $vars['match-type']
29: : ':is';
30: $this->_vars['address-part'] = isset($vars['address-part'])
31: ? $vars['address-part']
32: : ':all';
33: $this->_vars['addresses'] = isset($vars['addresses'])
34: ? $vars['addresses']
35: : '';
36: }
37:
38: 39: 40: 41: 42: 43:
44: public function check()
45: {
46: return preg_split('(\r\n|\n|\r)', $this->_vars['headers']) &&
47: preg_split('(\r\n|\n|\r)', $this->_vars['addresses']);
48: }
49:
50: 51: 52: 53: 54:
55: public function toCode()
56: {
57: $code = 'address ' .
58: $this->_vars['address-part'] . ' ' .
59: ':comparator "' . $this->_vars['comparator'] . '" ' .
60: $this->_vars['match-type'] . ' ';
61:
62: $headers = preg_split('(\r\n|\n|\r|,)', $this->_vars['headers']);
63: $headers = array_filter($headers);
64: if (count($headers) > 1) {
65: $code .= "[";
66: $headerstr = '';
67: foreach ($headers as $header) {
68: $header = trim($header);
69: if (!empty($header)) {
70: $headerstr .= empty($headerstr) ? '"' : ', "';
71: $headerstr .= Ingo_Script_Sieve::escapeString($header, $this->_vars['match-type'] == ':regex') . '"';
72: }
73: }
74: $code .= $headerstr . "] ";
75: } elseif (count($headers) == 1) {
76: $code .= '"' . Ingo_Script_Sieve::escapeString($headers[0], $this->_vars['match-type'] == ':regex') . '" ';
77: } else {
78: return "No Headers Specified";
79: }
80:
81: $addresses = preg_split('(\r\n|\n|\r)', $this->_vars['addresses']);
82: $addresses = array_filter($addresses);
83: if (count($addresses) > 1) {
84: $code .= "[";
85: $addressstr = '';
86: foreach ($addresses as $addr) {
87: $addr = trim($addr);
88: if (!empty($addr)) {
89: $addressstr .= empty($addressstr) ? '"' : ', "';
90: $addressstr .= Ingo_Script_Sieve::escapeString($addr, $this->_vars['match-type'] == ':regex') . '"';
91: }
92: }
93: $code .= $addressstr . "] ";
94: } elseif (count($addresses) == 1) {
95: $code .= '"' . Ingo_Script_Sieve::escapeString($addresses[0], $this->_vars['match-type'] == ':regex') . '" ';
96: } else {
97: return "No Addresses Specified";
98: }
99:
100: return $code;
101: }
102:
103: 104: 105: 106: 107: 108:
109: public function requires()
110: {
111: return ($this->_vars['match-type'] == ':regex')
112: ? array('regex')
113: : array();
114: }
115:
116: }
117: