From 59c3ad2ded4738594856161f433103034ff122dc Mon Sep 17 00:00:00 2001 From: Brett Tasker Date: Wed, 26 Apr 2017 23:16:32 +1200 Subject: [PATCH] SS 4.0 - Upgrade search variants --- code/search/variants/SearchVariant.php | 6 +++++- .../SearchVariantSiteTreeSubsitesPolyhome.php | 7 ++++++- code/search/variants/SearchVariantSubsites.php | 10 +++++++++- code/search/variants/SearchVariantVersioned.php | 15 +++++++++++---- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/code/search/variants/SearchVariant.php b/code/search/variants/SearchVariant.php index cb03fbb..153ec17 100644 --- a/code/search/variants/SearchVariant.php +++ b/code/search/variants/SearchVariant.php @@ -2,7 +2,11 @@ namespace SilverStripe\FullTextSearch\Search\Variants; +use SilverStripe\ORM\DataObject; use SilverStripe\Core\ClassInfo; +use SilverStripe\FullTextSearch\Utils\CombinationsArrayIterator; +use ReflectionClass; + /** * A Search Variant handles decorators and other situations where the items to reindex or search through are modified * from the default state - for instance, dealing with Versioned or Subsite @@ -79,7 +83,7 @@ abstract class SearchVariant { if (!$class) { if (self::$variants === null) { - $classes = ClassInfo::subclassesFor('SearchVariant'); + $classes = ClassInfo::subclassesFor(static::class); $concrete = array(); foreach ($classes as $variantclass) { diff --git a/code/search/variants/SearchVariantSiteTreeSubsitesPolyhome.php b/code/search/variants/SearchVariantSiteTreeSubsitesPolyhome.php index 58d5c81..54604cc 100644 --- a/code/search/variants/SearchVariantSiteTreeSubsitesPolyhome.php +++ b/code/search/variants/SearchVariantSiteTreeSubsitesPolyhome.php @@ -2,6 +2,11 @@ namespace SilverStripe\FullTextSearch\Search\Variants; use SilverStripe\ORM\Queries\SQLSelect; +use SilverStripe\FullTextSearch\Search\SearchIntrospection; + +if (!class_exists('Subsite') || !class_exists('SubsitePolyhome')) { + return; +} class SearchVariantSiteTreeSubsitesPolyhome extends SearchVariant { @@ -51,7 +56,7 @@ class SearchVariantSiteTreeSubsitesPolyhome extends SearchVariant 'name' => '_subsite', 'field' => '_subsite', 'fullfield' => '_subsite', - 'base' => ClassInfo::baseDataClass($class), + 'base' => DataObject::getSchema()->baseDataClass($class), 'origin' => $class, 'type' => 'Int', 'lookup_chain' => array(array('call' => 'variant', 'variant' => $self, 'method' => 'currentState')) diff --git a/code/search/variants/SearchVariantSubsites.php b/code/search/variants/SearchVariantSubsites.php index f331407..5102584 100644 --- a/code/search/variants/SearchVariantSubsites.php +++ b/code/search/variants/SearchVariantSubsites.php @@ -3,6 +3,14 @@ namespace SilverStripe\FullTextSearch\Search\Variants; use SilverStripe\ORM\Queries\SQLSelect; +use SilverStripe\ORM\DataObject; +use SilverStripe\Security\Permission; +use SilverStripe\FullTextSearch\Search\SearchIntrospection; +use SilverStripe\FullTextSearch\Search\Queries\SearchQuery; + +if (!class_exists('Subsite')) { + return; +} class SearchVariantSubsites extends SearchVariant { @@ -57,7 +65,7 @@ class SearchVariantSubsites extends SearchVariant 'name' => '_subsite', 'field' => '_subsite', 'fullfield' => '_subsite', - 'base' => ClassInfo::baseDataClass($class), + 'base' => DataObject::getSchema()->baseDataClass($class), 'origin' => $class, 'type' => 'Int', 'lookup_chain' => array(array('call' => 'variant', 'variant' => $self, 'method' => 'currentState')) diff --git a/code/search/variants/SearchVariantVersioned.php b/code/search/variants/SearchVariantVersioned.php index e155d96..af0a419 100644 --- a/code/search/variants/SearchVariantVersioned.php +++ b/code/search/variants/SearchVariantVersioned.php @@ -1,6 +1,13 @@ '_versionedstage', 'field' => '_versionedstage', 'fullfield' => '_versionedstage', - 'base' => ClassInfo::baseDataClass($class), + 'base' => DataObject::getSchema()->baseDataClass($class), 'origin' => $class, 'type' => 'String', 'lookup_chain' => array(array('call' => 'variant', 'variant' => $self, 'method' => 'currentState')) @@ -38,7 +45,7 @@ class SearchVariantVersioned extends SearchVariant public function alterQuery($query, $index) { - $stage = Versioned::current_stage(); + $stage = $this->currentState(); $query->filter('_versionedstage', array($stage, SearchQuery::$missing)); }