* * * * * */ const AUTOFILTER_COLUMN_RULE_EQUAL = 'equal'; const AUTOFILTER_COLUMN_RULE_NOTEQUAL = 'notEqual'; const AUTOFILTER_COLUMN_RULE_GREATERTHAN = 'greaterThan'; const AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL = 'greaterThanOrEqual'; const AUTOFILTER_COLUMN_RULE_LESSTHAN = 'lessThan'; const AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL = 'lessThanOrEqual'; private static $_operators = array( self::AUTOFILTER_COLUMN_RULE_EQUAL, self::AUTOFILTER_COLUMN_RULE_NOTEQUAL, self::AUTOFILTER_COLUMN_RULE_GREATERTHAN, self::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL, self::AUTOFILTER_COLUMN_RULE_LESSTHAN, self::AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL, ); const AUTOFILTER_COLUMN_RULE_TOPTEN_BY_VALUE = 'byValue'; const AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT = 'byPercent'; private static $_topTenValue = array( self::AUTOFILTER_COLUMN_RULE_TOPTEN_BY_VALUE, self::AUTOFILTER_COLUMN_RULE_TOPTEN_PERCENT, ); const AUTOFILTER_COLUMN_RULE_TOPTEN_TOP = 'top'; const AUTOFILTER_COLUMN_RULE_TOPTEN_BOTTOM = 'bottom'; private static $_topTenType = array( self::AUTOFILTER_COLUMN_RULE_TOPTEN_TOP, self::AUTOFILTER_COLUMN_RULE_TOPTEN_BOTTOM, ); /* Rule Operators (Numeric, Boolean etc) */ // const AUTOFILTER_COLUMN_RULE_BETWEEN = 'between'; // greaterThanOrEqual 1 && lessThanOrEqual 2 /* Rule Operators (Numeric Special) which are translated to standard numeric operators with calculated values */ // const AUTOFILTER_COLUMN_RULE_TOPTEN = 'topTen'; // greaterThan calculated value // const AUTOFILTER_COLUMN_RULE_TOPTENPERCENT = 'topTenPercent'; // greaterThan calculated value // const AUTOFILTER_COLUMN_RULE_ABOVEAVERAGE = 'aboveAverage'; // Value is calculated as the average // const AUTOFILTER_COLUMN_RULE_BELOWAVERAGE = 'belowAverage'; // Value is calculated as the average /* Rule Operators (String) which are set as wild-carded values */ // const AUTOFILTER_COLUMN_RULE_BEGINSWITH = 'beginsWith'; // A* // const AUTOFILTER_COLUMN_RULE_ENDSWITH = 'endsWith'; // *Z // const AUTOFILTER_COLUMN_RULE_CONTAINS = 'contains'; // *B* // const AUTOFILTER_COLUMN_RULE_DOESNTCONTAIN = 'notEqual'; // notEqual *B* /* Rule Operators (Date Special) which are translated to standard numeric operators with calculated values */ // const AUTOFILTER_COLUMN_RULE_BEFORE = 'lessThan'; // const AUTOFILTER_COLUMN_RULE_AFTER = 'greaterThan'; // const AUTOFILTER_COLUMN_RULE_YESTERDAY = 'yesterday'; // const AUTOFILTER_COLUMN_RULE_TODAY = 'today'; // const AUTOFILTER_COLUMN_RULE_TOMORROW = 'tomorrow'; // const AUTOFILTER_COLUMN_RULE_LASTWEEK = 'lastWeek'; // const AUTOFILTER_COLUMN_RULE_THISWEEK = 'thisWeek'; // const AUTOFILTER_COLUMN_RULE_NEXTWEEK = 'nextWeek'; // const AUTOFILTER_COLUMN_RULE_LASTMONTH = 'lastMonth'; // const AUTOFILTER_COLUMN_RULE_THISMONTH = 'thisMonth'; // const AUTOFILTER_COLUMN_RULE_NEXTMONTH = 'nextMonth'; // const AUTOFILTER_COLUMN_RULE_LASTQUARTER = 'lastQuarter'; // const AUTOFILTER_COLUMN_RULE_THISQUARTER = 'thisQuarter'; // const AUTOFILTER_COLUMN_RULE_NEXTQUARTER = 'nextQuarter'; // const AUTOFILTER_COLUMN_RULE_LASTYEAR = 'lastYear'; // const AUTOFILTER_COLUMN_RULE_THISYEAR = 'thisYear'; // const AUTOFILTER_COLUMN_RULE_NEXTYEAR = 'nextYear'; // const AUTOFILTER_COLUMN_RULE_YEARTODATE = 'yearToDate'; // // const AUTOFILTER_COLUMN_RULE_ALLDATESINMONTH = 'allDatesInMonth'; // for Month/February // const AUTOFILTER_COLUMN_RULE_ALLDATESINQUARTER = 'allDatesInQuarter'; // for Quarter 2 /** * Autofilter Column * * @var PHPExcel_Worksheet_AutoFilter_Column */ private $_parent = NULL; /** * Autofilter Rule Type * * @var string */ private $_ruleType = self::AUTOFILTER_RULETYPE_FILTER; /** * Autofilter Rule Value * * @var string */ private $_value = ''; /** * Autofilter Rule Operator * * @var string */ private $_operator = self::AUTOFILTER_COLUMN_RULE_EQUAL; /** * DateTimeGrouping Group Value * * @var string */ private $_grouping = ''; /** * Create a new PHPExcel_Worksheet_AutoFilter_Column_Rule * * @param PHPExcel_Worksheet_AutoFilter_Column $pParent */ public function __construct(PHPExcel_Worksheet_AutoFilter_Column $pParent = NULL) { $this->_parent = $pParent; } /** * Get AutoFilter Rule Type * * @return string */ public function getRuleType() { return $this->_ruleType; } /** * Set AutoFilter Rule Type * * @param string $pRuleType * @throws PHPExcel_Exception * @return PHPExcel_Worksheet_AutoFilter_Column */ public function setRuleType($pRuleType = self::AUTOFILTER_RULETYPE_FILTER) { if (!in_array($pRuleType,self::$_ruleTypes)) { throw new PHPExcel_Exception('Invalid rule type for column AutoFilter Rule.'); } $this->_ruleType = $pRuleType; return $this; } /** * Get AutoFilter Rule Value * * @return string */ public function getValue() { return $this->_value; } /** * Set AutoFilter Rule Value * * @param string|string[] $pValue * @throws PHPExcel_Exception * @return PHPExcel_Worksheet_AutoFilter_Column_Rule */ public function setValue($pValue = '') { if (is_array($pValue)) { $grouping = -1; foreach($pValue as $key => $value) { // Validate array entries if (!in_array($key,self::$_dateTimeGroups)) { // Remove any invalid entries from the value array unset($pValue[$key]); } else { // Work out what the dateTime grouping will be $grouping = max($grouping,array_search($key,self::$_dateTimeGroups)); } } if (count($pValue) == 0) { throw new PHPExcel_Exception('Invalid rule value for column AutoFilter Rule.'); } // Set the dateTime grouping that we've anticipated $this->setGrouping(self::$_dateTimeGroups[$grouping]); } $this->_value = $pValue; return $this; } /** * Get AutoFilter Rule Operator * * @return string */ public function getOperator() { return $this->_operator; } /** * Set AutoFilter Rule Operator * * @param string $pOperator * @throws PHPExcel_Exception * @return PHPExcel_Worksheet_AutoFilter_Column_Rule */ public function setOperator($pOperator = self::AUTOFILTER_COLUMN_RULE_EQUAL) { if (empty($pOperator)) $pOperator = self::AUTOFILTER_COLUMN_RULE_EQUAL; if ((!in_array($pOperator,self::$_operators)) && (!in_array($pOperator,self::$_topTenValue))) { throw new PHPExcel_Exception('Invalid operator for column AutoFilter Rule.'); } $this->_operator = $pOperator; return $this; } /** * Get AutoFilter Rule Grouping * * @return string */ public function getGrouping() { return $this->_grouping; } /** * Set AutoFilter Rule Grouping * * @param string $pGrouping * @throws PHPExcel_Exception * @return PHPExcel_Worksheet_AutoFilter_Column_Rule */ public function setGrouping($pGrouping = NULL) { if (($pGrouping !== NULL) && (!in_array($pGrouping,self::$_dateTimeGroups)) && (!in_array($pGrouping,self::$_dynamicTypes)) && (!in_array($pGrouping,self::$_topTenType))) { throw new PHPExcel_Exception('Invalid rule type for column AutoFilter Rule.'); } $this->_grouping = $pGrouping; return $this; } /** * Set AutoFilter Rule * * @param string $pOperator * @param string|string[] $pValue * @param string $pGrouping * @throws PHPExcel_Exception * @return PHPExcel_Worksheet_AutoFilter_Column_Rule */ public function setRule($pOperator = self::AUTOFILTER_COLUMN_RULE_EQUAL, $pValue = '', $pGrouping = NULL) { $this->setOperator($pOperator); $this->setValue($pValue); // Only set grouping if it's been passed in as a user-supplied argument, // otherwise we're calculating it when we setValue() and don't want to overwrite that // If the user supplies an argumnet for grouping, then on their own head be it if ($pGrouping !== NULL) $this->setGrouping($pGrouping); return $this; } /** * Get this Rule's AutoFilter Column Parent * * @return PHPExcel_Worksheet_AutoFilter_Column */ public function getParent() { return $this->_parent; } /** * Set this Rule's AutoFilter Column Parent * * @param PHPExcel_Worksheet_AutoFilter_Column * @return PHPExcel_Worksheet_AutoFilter_Column_Rule */ public function setParent(PHPExcel_Worksheet_AutoFilter_Column $pParent = NULL) { $this->_parent = $pParent; return $this; } /** * Implement PHP __clone to create a deep clone, not just a shallow copy. */ public function __clone() { $vars = get_object_vars($this); foreach ($vars as $key => $value) { if (is_object($value)) { if ($key == '_parent') { // Detach from autofilter column parent $this->$key = NULL; } else { $this->$key = clone $value; } } else { $this->$key = $value; } } } }