1: <?php
2: /**
3: * This class provides the data structure for a message flag.
4: *
5: * Copyright 2010-2012 Horde LLC (http://www.horde.org/)
6: *
7: * See the enclosed file COPYING for license information (GPL). If you
8: * did not receive this file, see http://www.horde.org/licenses/gpl.
9: *
10: * @author Michael Slusarz <slusarz@horde.org>
11: * @category Horde
12: * @license http://www.horde.org/licenses/gpl GPL
13: * @package IMP
14: */
15: abstract class IMP_Flag_Base implements Serializable
16: {
17: /* Default background color. */
18: const DEFAULT_BG = '#fff';
19:
20: /**
21: * The abbreviation.
22: *
23: * @var string
24: */
25: protected $_abbreviation = '';
26:
27: /**
28: * The background color.
29: *
30: * @var string
31: */
32: protected $_bgcolor = '';
33:
34: /**
35: * Is this flag settable by the user?
36: *
37: * @var boolean
38: */
39: protected $_canset = false;
40:
41: /**
42: * The CSS class.
43: *
44: * @var string
45: */
46: protected $_css = '';
47:
48: /**
49: * The CSS class for the icon.
50: *
51: * @var string
52: */
53: protected $_cssIcon = '';
54:
55: /**
56: * Unique ID.
57: *
58: * @var string
59: */
60: protected $_id = '';
61:
62: /**
63: * Get object properties.
64: *
65: * @param string $name Available properties:
66: * <pre>
67: * 'abbreviation' - (string) The abbreviation to use in the mimp view.
68: * 'bgcolor' - (string) The background color.
69: * 'bgdefault' - (boolean) Is the backgroud color the default?
70: * 'canset' - (boolean) Can this flag be set by the user?
71: * 'css' - (string) The CSS class for the icon when the flag is set.
72: * 'cssicon' - (string) The CSS class for the icon.
73: * 'span' - (string) Return SPAN HTML to output the icon for use in a
74: * mailbox row.
75: * 'fgcolor' - (string) The foreground (text) color.
76: * 'form_set' - (string) Form value to use when setting flag.
77: * 'form_unset' - (string) Form value to use when unsetting flag.
78: * 'id' - (string) Unique ID.
79: * 'label' - (string) The query label.
80: * </pre>
81: *
82: * @return mixed Property value.
83: */
84: public function __get($name)
85: {
86: switch ($name) {
87: case 'abbreviation':
88: return $this->_abbreviation;
89:
90: case 'bgcolor':
91: return $this->_bgcolor
92: ? $this->_bgcolor
93: : self::DEFAULT_BG;
94:
95: case 'bgdefault':
96: return ($this->bgcolor == self::DEFAULT_BG);
97:
98: case 'canset':
99: return $this->_canset;
100:
101: case 'css':
102: return $this->_css;
103:
104: case 'cssicon':
105: return $this->_cssIcon
106: ? $this->_cssIcon
107: : $this->_css;
108:
109: case 'span':
110: return $this->_css
111: ? '<span class="iconImg msgflags ' . $this->css . '" title="' . htmlspecialchars($this->label) . '"> </span>'
112: : '';
113:
114: case 'fgcolor':
115: return (Horde_Image::brightness($this->bgcolor) < 128)
116: ? '#f6f6f6'
117: : '#000';
118:
119: case 'form_set':
120: return $this->id;
121:
122: case 'form_unset':
123: return '0\\' . $this->id;
124:
125: case 'id':
126: return $this->_id;
127:
128: case 'label':
129: return $this->getLabel();
130: }
131: }
132:
133: /**
134: * Set properties.
135: *
136: * @param string $name Available properties:
137: * <pre>
138: * 'bgcolor' - (string) The background color.
139: * </pre>
140: * @param string $value Property value.
141: */
142: public function __set($name, $value)
143: {
144: switch ($name) {
145: case 'bgcolor':
146: $this->_bgcolor = ($value == self::DEFAULT_BG)
147: ? ''
148: : $value;
149: break;
150: }
151: }
152:
153: /**
154: * Given a list of flag objects, determines if this flag's status has
155: * changed.
156: *
157: * @param array $obs A list of IMP_Flag_Base objects.
158: * @param boolean $add True if these flags were added, false if they were
159: * removed.
160: *
161: * @return mixed Null if no change, true if flag is added, false if flag
162: * is removed.
163: */
164: public function changed($obs, $add)
165: {
166: return null;
167: }
168:
169: /**
170: * Return the flag label.
171: *
172: * @param boolean $set Return label for setting the flag?
173: *
174: * @return string The label.
175: */
176: public function getLabel($set = true)
177: {
178: return $set
179: ? $this->_getLabel()
180: : sprintf(_("Not %s"), $this->_getLabel());
181: }
182:
183: /**
184: * Determines if the flag exists given some input data.
185: *
186: * @param mixed $data The input data to check.
187: *
188: * @return boolean True if flag exists.
189: */
190: public function match($data)
191: {
192: return false;
193: }
194:
195: /**
196: * Return the flag label.
197: * Necessary evil as gettext strings can not be set directly to object
198: * properties.
199: *
200: * @return string The label.
201: */
202: abstract protected function _getLabel();
203:
204: /* Magic methods. */
205:
206: /**
207: * String representation of the object.
208: *
209: * @return string String representation (Flag ID).
210: */
211: public function __toString()
212: {
213: return $this->id;
214: }
215:
216: /* Serializable methods. */
217:
218: /**
219: */
220: public function serialize()
221: {
222: return $this->_bgcolor;
223: }
224:
225: /**
226: */
227: public function unserialize($data)
228: {
229: $this->_bgcolor = $data;
230: }
231:
232: }
233: