Source of file SolrReindexTest_Variant.php
Size: 3,338 Bytes - Last Modified: 2021-12-23T10:31:32+00:00
/var/www/docs.ssmods.com/process/src/tests/SolrReindexTest/SolrReindexTest_Variant.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 | <?php namespace SilverStripe\FullTextSearch\Tests\SolrReindexTest; use SilverStripe\Dev\TestOnly; use SilverStripe\FullTextSearch\Search\Indexes\SearchIndex; use SilverStripe\FullTextSearch\Search\Queries\SearchQuery; use SilverStripe\FullTextSearch\Search\Variants\SearchVariant; use SilverStripe\ORM\DataObject; /** * Dummy variant that selects items with field Variant matching the current value * * Variant states are 0 and 1, or null if disabled */ class SolrReindexTest_Variant extends SearchVariant implements TestOnly { /** * Value of this variant (either null, 0, or 1) * * @var int|null */ protected static $current = null; /** * Activate this variant */ public static function enable() { self::disable(); self::$current = 0; self::$variants = [ self::class => 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'); } } |