* @license http://github.com/basdenooijer/solarium/raw/master/COPYING * @link http://www.solarium-project.org/ * * @package Solarium * @subpackage Query */ /** * Facet base class * * @link http://wiki.apache.org/solr/SimpleFacetParameters * * @package Solarium * @subpackage Query */ abstract class Solarium_Query_Select_Component_Facet extends Solarium_Configurable { /** * Exclude tags for this facet * * @var array */ protected $_excludes = array(); /** * Must be implemented by the facet types and return one of the constants * * @abstract * @return string */ abstract public function getType(); /** * Initialize options * * @return void */ protected function _init() { foreach ($this->_options AS $name => $value) { switch ($name) { case 'key': $this->setKey($value); break; case 'exclude': if(!is_array($value)) $value = array($value); $this->setExcludes($value); unset($this->_options['exclude']); break; } } } /** * Get key value * * @return string */ public function getKey() { return $this->getOption('key'); } /** * Set key value * * @param string $value * @return Solarium_Query_Select_Component_Facet Provides fluent interface */ public function setKey($value) { return $this->_setOption('key', $value); } /** * Add an exclude tag * * @param string $tag * @return Solarium_Query_Select_Component_Facet Provides fluent interface */ public function addExclude($tag) { $this->_excludes[$tag] = true; return $this; } /** * Add multiple exclude tags * * @param array $excludes * @return Solarium_Query_Select_Component_Facet Provides fluent interface */ public function addExcludes(array $excludes) { foreach ($excludes AS $exclude) { $this->addExclude($exclude); } return $this; } /** * Get all excludes * * @return array */ public function getExcludes() { return array_keys($this->_excludes); } /** * Remove a single exclude tag * * @param string $exclude * @return Solarium_Query_Select_Component_Facet Provides fluent interface */ public function removeExclude($exclude) { if (isset($this->_excludes[$exclude])) { unset($this->_excludes[$exclude]); } return $this; } /** * Remove all excludes * * @return Solarium_Query_Select_Facet Provides fluent interface */ public function clearExcludes() { $this->_excludes = array(); return $this; } /** * Set multiple excludes * * This overwrites any existing excludes * * @param array $excludes */ public function setExcludes($excludes) { $this->clearExcludes(); $this->addExcludes($excludes); } }