_columnIndex = $pColumn; $this->_parent = $pParent; } /** * Get AutoFilter Column Index * * @return string */ public function getColumnIndex() { return $this->_columnIndex; } /** * Set AutoFilter Column Index * * @param string $pColumn Column (e.g. A) * @throws PHPExcel_Exception * @return PHPExcel_Worksheet_AutoFilter_Column */ public function setColumnIndex($pColumn) { // Uppercase coordinate $pColumn = strtoupper($pColumn); if ($this->_parent !== NULL) { $this->_parent->testColumnInRange($pColumn); } $this->_columnIndex = $pColumn; return $this; } /** * Get this Column's AutoFilter Parent * * @return PHPExcel_Worksheet_AutoFilter */ public function getParent() { return $this->_parent; } /** * Set this Column's AutoFilter Parent * * @param PHPExcel_Worksheet_AutoFilter * @return PHPExcel_Worksheet_AutoFilter_Column */ public function setParent(PHPExcel_Worksheet_AutoFilter $pParent = NULL) { $this->_parent = $pParent; return $this; } /** * Get AutoFilter Type * * @return string */ public function getFilterType() { return $this->_filterType; } /** * Set AutoFilter Type * * @param string $pFilterType * @throws PHPExcel_Exception * @return PHPExcel_Worksheet_AutoFilter_Column */ public function setFilterType($pFilterType = self::AUTOFILTER_FILTERTYPE_FILTER) { if (!in_array($pFilterType,self::$_filterTypes)) { throw new PHPExcel_Exception('Invalid filter type for column AutoFilter.'); } $this->_filterType = $pFilterType; return $this; } /** * Get AutoFilter Multiple Rules And/Or Join * * @return string */ public function getJoin() { return $this->_join; } /** * Set AutoFilter Multiple Rules And/Or * * @param string $pJoin And/Or * @throws PHPExcel_Exception * @return PHPExcel_Worksheet_AutoFilter_Column */ public function setJoin($pJoin = self::AUTOFILTER_COLUMN_JOIN_OR) { // Lowercase And/Or $pJoin = strtolower($pJoin); if (!in_array($pJoin,self::$_ruleJoins)) { throw new PHPExcel_Exception('Invalid rule connection for column AutoFilter.'); } $this->_join = $pJoin; return $this; } /** * Set AutoFilter Attributes * * @param string[] $pAttributes * @throws PHPExcel_Exception * @return PHPExcel_Worksheet_AutoFilter_Column */ public function setAttributes($pAttributes = array()) { $this->_attributes = $pAttributes; return $this; } /** * Set An AutoFilter Attribute * * @param string $pName Attribute Name * @param string $pValue Attribute Value * @throws PHPExcel_Exception * @return PHPExcel_Worksheet_AutoFilter_Column */ public function setAttribute($pName, $pValue) { $this->_attributes[$pName] = $pValue; return $this; } /** * Get AutoFilter Column Attributes * * @return string */ public function getAttributes() { return $this->_attributes; } /** * Get specific AutoFilter Column Attribute * * @param string $pName Attribute Name * @return string */ public function getAttribute($pName) { if (isset($this->_attributes[$pName])) return $this->_attributes[$pName]; return NULL; } /** * Get all AutoFilter Column Rules * * @throws PHPExcel_Exception * @return array of PHPExcel_Worksheet_AutoFilter_Column_Rule */ public function getRules() { return $this->_ruleset; } /** * Get a specified AutoFilter Column Rule * * @param integer $pIndex Rule index in the ruleset array * @return PHPExcel_Worksheet_AutoFilter_Column_Rule */ public function getRule($pIndex) { if (!isset($this->_ruleset[$pIndex])) { $this->_ruleset[$pIndex] = new PHPExcel_Worksheet_AutoFilter_Column_Rule($this); } return $this->_ruleset[$pIndex]; } /** * Create a new AutoFilter Column Rule in the ruleset * * @return PHPExcel_Worksheet_AutoFilter_Column_Rule */ public function createRule() { $this->_ruleset[] = new PHPExcel_Worksheet_AutoFilter_Column_Rule($this); return end($this->_ruleset); } /** * Add a new AutoFilter Column Rule to the ruleset * * @param PHPExcel_Worksheet_AutoFilter_Column_Rule $pRule * @param boolean $returnRule Flag indicating whether the rule object or the column object should be returned * @return PHPExcel_Worksheet_AutoFilter_Column|PHPExcel_Worksheet_AutoFilter_Column_Rule */ public function addRule(PHPExcel_Worksheet_AutoFilter_Column_Rule $pRule, $returnRule=TRUE) { $pRule->setParent($this); $this->_ruleset[] = $pRule; return ($returnRule) ? $pRule : $this; } /** * Delete a specified AutoFilter Column Rule * If the number of rules is reduced to 1, then we reset And/Or logic to Or * * @param integer $pIndex Rule index in the ruleset array * @return PHPExcel_Worksheet_AutoFilter_Column */ public function deleteRule($pIndex) { if (isset($this->_ruleset[$pIndex])) { unset($this->_ruleset[$pIndex]); // If we've just deleted down to a single rule, then reset And/Or joining to Or if (count($this->_ruleset) <= 1) { $this->setJoin(self::AUTOFILTER_COLUMN_JOIN_OR); } } return $this; } /** * Delete all AutoFilter Column Rules * * @return PHPExcel_Worksheet_AutoFilter_Column */ public function clearRules() { $this->_ruleset = array(); $this->setJoin(self::AUTOFILTER_COLUMN_JOIN_OR); 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 parent $this->$key = NULL; } else { $this->$key = clone $value; } } elseif ((is_array($value)) && ($key == '_ruleset')) { // The columns array of PHPExcel_Worksheet_AutoFilter objects $this->$key = array(); foreach ($value as $k => $v) { $this->$key[$k] = clone $v; // attach the new cloned Rule to this new cloned Autofilter Cloned object $this->$key[$k]->setParent($this); } } else { $this->$key = $value; } } } }