1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10:
11: class Ingo_Script_Sieve_Test_Relational extends Ingo_Script_Sieve_Test
12: {
13: 14: 15: 16: 17:
18: public function __construct($vars = array())
19: {
20: $this->_vars['comparison'] = isset($vars['comparison'])
21: ? $vars['comparison']
22: : '';
23: $this->_vars['headers'] = isset($vars['headers'])
24: ? $vars['headers']
25: : '';
26: $this->_vars['value'] = isset($vars['value'])
27: ? $vars['value']
28: : 0;
29: }
30:
31: 32: 33: 34: 35:
36: public function toCode()
37: {
38: $code = 'header :value "' .
39: $this->_vars['comparison'] . '" ' .
40: ':comparator "i;ascii-numeric" ';
41:
42: $headers = preg_split('(\r\n|\n|\r)', $this->_vars['headers']);
43: $header_count = count($headers);
44:
45: if ($header_count > 1) {
46: $code .= "[";
47: $headerstr = '';
48:
49: foreach ($headers as $val) {
50: $headerstr .= (empty($headerstr) ? '"' : ', "') .
51: Ingo_Script_Sieve::escapeString($val) . '"';
52: }
53:
54: $code .= $headerstr . '] ';
55: $headerstr = '[' . $headerstr . ']';
56: } elseif ($header_count == 1) {
57: $code .= '"' . Ingo_Script_Sieve::escapeString($headers[0]) . '" ';
58: $headerstr = Ingo_Script_Sieve::escapeString($headers[0]);
59: }
60:
61: $code .= '["' . $this->_vars['value'] . '"]';
62:
63:
64:
65:
66: switch ($this->_vars['comparison']) {
67: case 'gt':
68: case 'ge':
69: case 'eq':
70:
71:
72: return 'allof ( not header :comparator "i;ascii-casemap" :contains "'
73: . $headerstr . '" "-", ' . $code . ' )';
74:
75: case 'lt':
76: case 'le':
77: case 'ne':
78:
79: return 'anyof ( header :comparator "i;ascii-casemap" :contains "'
80: . $headerstr . '" "-", ' . $code . ' )';
81: }
82: }
83:
84: 85: 86: 87: 88: 89:
90: public function check()
91: {
92: $headers = preg_split('(\r\n|\n|\r)', $this->_vars['headers']);
93: return $headers ? true : _("No headers specified");
94: }
95:
96: 97: 98: 99: 100: 101:
102: public function requires()
103: {
104: return array('relational', 'comparator-i;ascii-numeric');
105: }
106:
107: }
108: