singleton(self::class) ]; } /** * Disable this variant and reset */ public static function disable() { self::$current = null; self::$variants = null; self::$class_variants = []; self::$call_instances = []; } public function activateState($state) { self::set_current($state); } /** * Set the current variant to the given state * * @param int $current 0, 1, 2, or null (disabled) */ public static function set_current($current) { self::$current = $current; } /** * Get the current state * * @return string|null */ public static function get_current() { // Always use string values for states for consistent json_encode value if (isset(self::$current)) { return (string) self::$current; } } /** * @param string $class * @param SearchIndex $index */ public function alterDefinition($class, $index) { $self = get_class($this); $this->addFilterField($index, '_testvariant', [ 'name' => '_testvariant', 'field' => '_testvariant', 'fullfield' => '_testvariant', 'base' => DataObject::getSchema()->baseDataClass($class), 'origin' => $class, 'type' => 'Int', 'lookup_chain' => [ [ 'call' => 'variant', 'variant' => $self, 'method' => 'currentState' ] ] ]); } /** * @param SearchQuery $query * @param SearchIndex $index */ public function alterQuery($query, $index) { // I guess just calling it _testvariant is ok? $query->addFilter('_testvariant', $this->currentState()); } public function appliesTo($class, $includeSubclasses) { return $class === SolrReindexTest_Item::class || ($includeSubclasses && is_subclass_of($class, SolrReindexTest_Item::class, true)); } public function appliesToEnvironment() { // Set to null to disable return self::$current !== null; } public function currentState() { return self::get_current(); } public function reindexStates() { // Always use string values for states for consistent json_encode value return array('0', '1', '2'); } }