1: <?php
2: /**
3: * The Ingo_Script_Sieve_Action_Flag class is the base class for flag actions.
4: *
5: * See the enclosed file LICENSE for license information (ASL). If you
6: * did not receive this file, see http://www.horde.org/licenses/apache.
7: *
8: * @author Michael Slusarz <slusarz@horde.org>
9: * @package Ingo
10: */
11: class Ingo_Script_Sieve_Action_Flag extends Ingo_Script_Sieve_Action
12: {
13: /**
14: * Constructor.
15: *
16: * @params array $vars Any required parameters.
17: */
18: public function __construct($vars = array())
19: {
20: if (isset($vars['flags'])) {
21: if ($vars['flags'] & Ingo_Storage::FLAG_ANSWERED) {
22: $this->_vars['flags'][] = '\Answered';
23: }
24: if ($vars['flags'] & Ingo_Storage::FLAG_DELETED) {
25: $this->_vars['flags'][] = '\Deleted';
26: }
27: if ($vars['flags'] & Ingo_Storage::FLAG_FLAGGED) {
28: $this->_vars['flags'][] = '\Flagged';
29: }
30: if ($vars['flags'] & Ingo_Storage::FLAG_SEEN) {
31: $this->_vars['flags'][] = '\Seen';
32: }
33: } else {
34: $this->_vars['flags'] = '';
35: }
36: }
37:
38: /**
39: * Returns a script snippet representing this rule and any sub-rules.
40: *
41: * @param string $mode The sieve flag command to use. Either 'removeflag'
42: * or 'addflag'.
43: *
44: * @return string A Sieve script snippet.
45: */
46: public function _toCode($mode)
47: {
48: $code = '';
49:
50: if (is_array($this->_vars['flags']) && !empty($this->_vars['flags'])) {
51: $code .= $mode . ' ';
52: if (count($this->_vars['flags']) > 1) {
53: $stringlist = '';
54: foreach ($this->_vars['flags'] as $flag) {
55: $flag = trim($flag);
56: if (!empty($flag)) {
57: $stringlist .= empty($stringlist) ? '"' : ', "';
58: $stringlist .= Ingo_Script_Sieve::escapeString($flag) . '"';
59: }
60: }
61: $stringlist = '[' . $stringlist . ']';
62: $code .= $stringlist . ';';
63: } else {
64: $code .= '"' . Ingo_Script_Sieve::escapeString($this->_vars['flags'][0]) . '";';
65: }
66: }
67: return $code;
68: }
69:
70: /**
71: * Checks if the rule parameters are valid.
72: *
73: * @return boolean|string True if this rule is valid, an error message
74: * otherwise.
75: */
76: public function check()
77: {
78: return true;
79: }
80:
81: /**
82: * Returns a list of sieve extensions required for this rule and any
83: * sub-rules.
84: *
85: * @return array A Sieve extension list.
86: */
87: public function requires()
88: {
89: return array('imapflags');
90: }
91:
92: }
93: