1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
27:
28:
29: 30: 31: 32: 33: 34: 35:
36: class PHPExcel_Worksheet_AutoFilter_Column_Rule
37: {
38: const AUTOFILTER_RULETYPE_FILTER = 'filter';
39: const AUTOFILTER_RULETYPE_DATEGROUP = 'dateGroupItem';
40: const AUTOFILTER_RULETYPE_CUSTOMFILTER = 'customFilter';
41: const AUTOFILTER_RULETYPE_DYNAMICFILTER = 'dynamicFilter';
42: const AUTOFILTER_RULETYPE_TOPTENFILTER = 'top10Filter';
43:
44: private static $_ruleTypes = array(
45:
46:
47:
48:
49: self::AUTOFILTER_RULETYPE_FILTER,
50: self::AUTOFILTER_RULETYPE_DATEGROUP,
51: self::AUTOFILTER_RULETYPE_CUSTOMFILTER,
52: self::AUTOFILTER_RULETYPE_DYNAMICFILTER,
53: self::AUTOFILTER_RULETYPE_TOPTENFILTER,
54: );
55:
56: const AUTOFILTER_RULETYPE_DATEGROUP_YEAR = 'year';
57: const AUTOFILTER_RULETYPE_DATEGROUP_MONTH = 'month';
58: const AUTOFILTER_RULETYPE_DATEGROUP_DAY = 'day';
59: const AUTOFILTER_RULETYPE_DATEGROUP_HOUR = 'hour';
60: const AUTOFILTER_RULETYPE_DATEGROUP_MINUTE = 'minute';
61: const AUTOFILTER_RULETYPE_DATEGROUP_SECOND = 'second';
62:
63: private static $_dateTimeGroups = array(
64: self::AUTOFILTER_RULETYPE_DATEGROUP_YEAR,
65: self::AUTOFILTER_RULETYPE_DATEGROUP_MONTH,
66: self::AUTOFILTER_RULETYPE_DATEGROUP_DAY,
67: self::AUTOFILTER_RULETYPE_DATEGROUP_HOUR,
68: self::AUTOFILTER_RULETYPE_DATEGROUP_MINUTE,
69: self::AUTOFILTER_RULETYPE_DATEGROUP_SECOND,
70: );
71:
72: const AUTOFILTER_RULETYPE_DYNAMIC_YESTERDAY = 'yesterday';
73: const AUTOFILTER_RULETYPE_DYNAMIC_TODAY = 'today';
74: const AUTOFILTER_RULETYPE_DYNAMIC_TOMORROW = 'tomorrow';
75: const AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE = 'yearToDate';
76: const AUTOFILTER_RULETYPE_DYNAMIC_THISYEAR = 'thisYear';
77: const AUTOFILTER_RULETYPE_DYNAMIC_THISQUARTER = 'thisQuarter';
78: const AUTOFILTER_RULETYPE_DYNAMIC_THISMONTH = 'thisMonth';
79: const AUTOFILTER_RULETYPE_DYNAMIC_THISWEEK = 'thisWeek';
80: const AUTOFILTER_RULETYPE_DYNAMIC_LASTYEAR = 'lastYear';
81: const AUTOFILTER_RULETYPE_DYNAMIC_LASTQUARTER = 'lastQuarter';
82: const AUTOFILTER_RULETYPE_DYNAMIC_LASTMONTH = 'lastMonth';
83: const AUTOFILTER_RULETYPE_DYNAMIC_LASTWEEK = 'lastWeek';
84: const AUTOFILTER_RULETYPE_DYNAMIC_NEXTYEAR = 'nextYear';
85: const AUTOFILTER_RULETYPE_DYNAMIC_NEXTQUARTER = 'nextQuarter';
86: const AUTOFILTER_RULETYPE_DYNAMIC_NEXTMONTH = 'nextMonth';
87: const AUTOFILTER_RULETYPE_DYNAMIC_NEXTWEEK = 'nextWeek';
88: const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_1 = 'M1';
89: const AUTOFILTER_RULETYPE_DYNAMIC_JANUARY = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_1;
90: const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_2 = 'M2';
91: const AUTOFILTER_RULETYPE_DYNAMIC_FEBRUARY = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_2;
92: const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_3 = 'M3';
93: const AUTOFILTER_RULETYPE_DYNAMIC_MARCH = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_3;
94: const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_4 = 'M4';
95: const AUTOFILTER_RULETYPE_DYNAMIC_APRIL = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_4;
96: const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_5 = 'M5';
97: const AUTOFILTER_RULETYPE_DYNAMIC_MAY = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_5;
98: const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_6 = 'M6';
99: const AUTOFILTER_RULETYPE_DYNAMIC_JUNE = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_6;
100: const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_7 = 'M7';
101: const AUTOFILTER_RULETYPE_DYNAMIC_JULY = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_7;
102: const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_8 = 'M8';
103: const AUTOFILTER_RULETYPE_DYNAMIC_AUGUST = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_8;
104: const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_9 = 'M9';
105: const AUTOFILTER_RULETYPE_DYNAMIC_SEPTEMBER = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_9;
106: const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_10 = 'M10';
107: const AUTOFILTER_RULETYPE_DYNAMIC_OCTOBER = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_10;
108: const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_11 = 'M11';
109: const AUTOFILTER_RULETYPE_DYNAMIC_NOVEMBER = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_11;
110: const AUTOFILTER_RULETYPE_DYNAMIC_MONTH_12 = 'M12';
111: const AUTOFILTER_RULETYPE_DYNAMIC_DECEMBER = self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_12;
112: const AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_1 = 'Q1';
113: const AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_2 = 'Q2';
114: const AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_3 = 'Q3';
115: const AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_4 = 'Q4';
116: const AUTOFILTER_RULETYPE_DYNAMIC_ABOVEAVERAGE = 'aboveAverage';
117: const AUTOFILTER_RULETYPE_DYNAMIC_BELOWAVERAGE = 'belowAverage';
118:
119: private static $_dynamicTypes = array(
120: self::AUTOFILTER_RULETYPE_DYNAMIC_YESTERDAY,
121: self::AUTOFILTER_RULETYPE_DYNAMIC_TODAY,
122: self::AUTOFILTER_RULETYPE_DYNAMIC_TOMORROW,
123: self::AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE,
124: self::AUTOFILTER_RULETYPE_DYNAMIC_THISYEAR,
125: self::AUTOFILTER_RULETYPE_DYNAMIC_THISQUARTER,
126: self::AUTOFILTER_RULETYPE_DYNAMIC_THISMONTH,
127: self::AUTOFILTER_RULETYPE_DYNAMIC_THISWEEK,
128: self::AUTOFILTER_RULETYPE_DYNAMIC_LASTYEAR,
129: self::AUTOFILTER_RULETYPE_DYNAMIC_LASTQUARTER,
130: self::AUTOFILTER_RULETYPE_DYNAMIC_LASTMONTH,
131: self::AUTOFILTER_RULETYPE_DYNAMIC_LASTWEEK,
132: self::AUTOFILTER_RULETYPE_DYNAMIC_NEXTYEAR,
133: self::AUTOFILTER_RULETYPE_DYNAMIC_NEXTQUARTER,
134: self::AUTOFILTER_RULETYPE_DYNAMIC_NEXTMONTH,
135: self::AUTOFILTER_RULETYPE_DYNAMIC_NEXTWEEK,
136: self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_1,
137: self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_2,
138: self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_3,
139: self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_4,
140: self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_5,
141: self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_6,
142: self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_7,
143: self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_8,
144: self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_9,
145: self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_10,
146: self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_11,
147: self::AUTOFILTER_RULETYPE_DYNAMIC_MONTH_12,
148: self::AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_1,
149: self::AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_2,
150: self::AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_3,
151: self::AUTOFILTER_RULETYPE_DYNAMIC_QUARTER_4,
152: self::AUTOFILTER_RULETYPE_DYNAMIC_ABOVEAVERAGE,
153: self::AUTOFILTER_RULETYPE_DYNAMIC_BELOWAVERAGE,
154: );
155:
156: 157: 158: 159: 160: 161: 162: 163: 164:
165: const AUTOFILTER_COLUMN_RULE_EQUAL = 'equal';
166: const AUTOFILTER_COLUMN_RULE_NOTEQUAL = 'notEqual';
167: const AUTOFILTER_COLUMN_RULE_GREATERTHAN = 'greaterThan';
168: const AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL = 'greaterThanOrEqual';
169: const AUTOFILTER_COLUMN_RULE_LESSTHAN = 'lessThan';
170: const AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL = 'lessThanOrEqual';
171:
172: private static $_operators = array(
173: self::AUTOFILTER_COLUMN_RULE_EQUAL,
174: self::AUTOFILTER_COLUMN_RULE_NOTEQUAL,
175: self::AUTOFILTER_COLUMN_RULE_GREATERTHAN,
176: self::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL,
177: self::AUTOFILTER_COLUMN_RULE_LESSTHAN,
178: self::AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL,
179: );
180:
181: const AUTOFILTER_COLUMN_RULE_TOPTEN_BY_VALUE = 'byValue';
182: const AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT = 'byPercent';
183:
184: private static $_topTenValue = array(
185: self::AUTOFILTER_COLUMN_RULE_TOPTEN_BY_VALUE,
186: self::AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT,
187: );
188:
189: const AUTOFILTER_COLUMN_RULE_TOPTEN_TOP = 'top';
190: const AUTOFILTER_COLUMN_RULE_TOPTEN_BOTTOM = 'bottom';
191:
192: private static $_topTenType = array(
193: self::AUTOFILTER_COLUMN_RULE_TOPTEN_TOP,
194: self::AUTOFILTER_COLUMN_RULE_TOPTEN_BOTTOM,
195: );
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232: 233: 234: 235: 236:
237: private $_parent = NULL;
238:
239:
240: 241: 242: 243: 244:
245: private $_ruleType = self::AUTOFILTER_RULETYPE_FILTER;
246:
247:
248: 249: 250: 251: 252:
253: private $_value = '';
254:
255: 256: 257: 258: 259:
260: private $_operator = '';
261:
262: 263: 264: 265: 266:
267: private $_grouping = '';
268:
269:
270: 271: 272: 273: 274:
275: public function __construct(PHPExcel_Worksheet_AutoFilter_Column $pParent = NULL)
276: {
277: $this->_parent = $pParent;
278: }
279:
280: 281: 282: 283: 284:
285: public function getRuleType() {
286: return $this->_ruleType;
287: }
288:
289: 290: 291: 292: 293: 294: 295:
296: public function setRuleType($pRuleType = self::AUTOFILTER_RULETYPE_FILTER) {
297: if (!in_array($pRuleType,self::$_ruleTypes)) {
298: throw new PHPExcel_Exception('Invalid rule type for column AutoFilter Rule.');
299: }
300:
301: $this->_ruleType = $pRuleType;
302:
303: return $this;
304: }
305:
306: 307: 308: 309: 310:
311: public function getValue() {
312: return $this->_value;
313: }
314:
315: 316: 317: 318: 319: 320: 321:
322: public function setValue($pValue = '') {
323: if (is_array($pValue)) {
324: $grouping = -1;
325: foreach($pValue as $key => $value) {
326:
327: if (!in_array($key,self::$_dateTimeGroups)) {
328:
329: unset($pValue[$key]);
330: } else {
331:
332: $grouping = max($grouping,array_search($key,self::$_dateTimeGroups));
333: }
334: }
335: if (count($pValue) == 0) {
336: throw new PHPExcel_Exception('Invalid rule value for column AutoFilter Rule.');
337: }
338:
339: $this->setGrouping(self::$_dateTimeGroups[$grouping]);
340: }
341: $this->_value = $pValue;
342:
343: return $this;
344: }
345:
346: 347: 348: 349: 350:
351: public function getOperator() {
352: return $this->_operator;
353: }
354:
355: 356: 357: 358: 359: 360: 361:
362: public function setOperator($pOperator = self::AUTOFILTER_COLUMN_RULE_EQUAL) {
363: if (empty($pOperator))
364: $pOperator = self::AUTOFILTER_COLUMN_RULE_EQUAL;
365: if ((!in_array($pOperator,self::$_operators)) &&
366: (!in_array($pOperator,self::$_topTenValue))) {
367: throw new PHPExcel_Exception('Invalid operator for column AutoFilter Rule.');
368: }
369: $this->_operator = $pOperator;
370:
371: return $this;
372: }
373:
374: 375: 376: 377: 378:
379: public function getGrouping() {
380: return $this->_grouping;
381: }
382:
383: 384: 385: 386: 387: 388: 389:
390: public function setGrouping($pGrouping = NULL) {
391: if (($pGrouping !== NULL) &&
392: (!in_array($pGrouping,self::$_dateTimeGroups)) &&
393: (!in_array($pGrouping,self::$_dynamicTypes)) &&
394: (!in_array($pGrouping,self::$_topTenType))) {
395: throw new PHPExcel_Exception('Invalid rule type for column AutoFilter Rule.');
396: }
397:
398: $this->_grouping = $pGrouping;
399:
400: return $this;
401: }
402:
403: 404: 405: 406: 407: 408: 409: 410: 411:
412: public function setRule($pOperator = self::AUTOFILTER_COLUMN_RULE_EQUAL, $pValue = '', $pGrouping = NULL) {
413: $this->setOperator($pOperator);
414: $this->setValue($pValue);
415:
416:
417:
418: if ($pGrouping !== NULL)
419: $this->setGrouping($pGrouping);
420:
421: return $this;
422: }
423:
424: 425: 426: 427: 428:
429: public function getParent() {
430: return $this->_parent;
431: }
432:
433: 434: 435: 436: 437: 438:
439: public function setParent(PHPExcel_Worksheet_AutoFilter_Column $pParent = NULL) {
440: $this->_parent = $pParent;
441:
442: return $this;
443: }
444:
445: 446: 447:
448: public function __clone() {
449: $vars = get_object_vars($this);
450: foreach ($vars as $key => $value) {
451: if (is_object($value)) {
452: if ($key == '_parent') {
453:
454: $this->$key = NULL;
455: } else {
456: $this->$key = clone $value;
457: }
458: } else {
459: $this->$key = $value;
460: }
461: }
462: }
463:
464: }
465: