1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
12: class extends Ingo_Script_Sieve_Test
13: {
14: 15: 16: 17: 18:
19: public function __construct($vars = array())
20: {
21: $this->_vars['headers'] = isset($vars['headers'])
22: ? $vars['headers']
23: : 'Subject';
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['strings'] = isset($vars['strings'])
31: ? $vars['strings']
32: : '';
33: }
34:
35: 36: 37: 38: 39: 40:
41: public function check()
42: {
43: return preg_split('((?<!\\\)\,|\r\n|\n|\r)', $this->_vars['headers']) &&
44: preg_split('((?<!\\\)\,|\r\n|\n|\r)', $this->_vars['strings']);
45: }
46:
47: 48: 49: 50: 51:
52: public function toCode()
53: {
54: $code = 'header ' .
55: ':comparator "' . $this->_vars['comparator'] . '" ' .
56: $this->_vars['match-type'] . ' ';
57:
58: $headers = preg_split('(\r\n|\n|\r)', $this->_vars['headers']);
59: $headers = array_filter($headers);
60: if (count($headers) > 1) {
61: $code .= "[";
62: $headerstr = '';
63: foreach ($headers as $header) {
64: $headerstr .= empty($headerstr) ? '"' : ', "';
65: $headerstr .= Ingo_Script_Sieve::escapeString($header, $this->_vars['match-type'] == ':regex') . '"';
66: }
67: $code .= $headerstr . "] ";
68: } elseif (count($headers) == 1) {
69: $code .= '"' . $headers[0] . '" ';
70: } else {
71: return _("No headers specified");
72: }
73:
74: $strings = preg_split('(\r\n|\n|\r)', $this->_vars['strings']);
75: $strings = array_filter($strings);
76: if (count($strings) > 1) {
77: $code .= "[";
78: $stringlist = '';
79: foreach ($strings as $str) {
80: $stringlist .= empty($stringlist) ? '"' : ', "';
81: $stringlist .= Ingo_Script_Sieve::escapeString($str, $this->_vars['match-type'] == ':regex') . '"';
82: }
83: $code .= $stringlist . "] ";
84: } elseif (count($strings) == 1) {
85: $code .= '"' . Ingo_Script_Sieve::escapeString(reset($strings), $this->_vars['match-type'] == ':regex') . '" ';
86: } else {
87: return _("No strings specified");
88: }
89:
90: return $code;
91: }
92:
93: 94: 95: 96: 97: 98:
99: public function requires()
100: {
101: return ($this->_vars['match-type'] == ':regex')
102: ? array('regex')
103: : array();
104: }
105:
106: }
107: