From e415d41856d4b201fa9f9651dac8fc225447afef Mon Sep 17 00:00:00 2001 From: Aaron Carlino Date: Tue, 8 Dec 2020 11:16:52 +1300 Subject: [PATCH 1/2] BUGFIX: Restore, refactor getByLink plugin --- _config/graphql.yml | 4 ++++ code/GraphQL/LinkablePlugin.php | 40 +++++---------------------------- 2 files changed, 9 insertions(+), 35 deletions(-) diff --git a/_config/graphql.yml b/_config/graphql.yml index 2364fdc0..f3067cff 100644 --- a/_config/graphql.yml +++ b/_config/graphql.yml @@ -15,3 +15,7 @@ SilverStripe\GraphQL\Schema\Schema: admin: src: - 'silverstripe/cms: _graphql' +SilverStripe\Core\Injector\Injector: + SilverStripe\GraphQL\Schema\Registry\PluginRegistry: + constructor: + getByLink: '%$SilverStripe\CMS\GraphQL\LinkablePlugin' diff --git a/code/GraphQL/LinkablePlugin.php b/code/GraphQL/LinkablePlugin.php index bbabaabd..1694d764 100644 --- a/code/GraphQL/LinkablePlugin.php +++ b/code/GraphQL/LinkablePlugin.php @@ -53,45 +53,15 @@ class LinkablePlugin implements ModelQueryPlugin return; } Schema::invariant( - $query->isList(), - 'Plugin %s only applies to queries that return lists. Query "%s" does not', + !$query->isList(), + 'Plugin %s cannot be applied to queries that return lists. Query "%s" is a list', static::getIdentifier(), $query->getName() ); - - $filterPluginID = QueryFilter::singleton()->getIdentifier(); $fieldName = $this->config()->get('field_name'); - - if ($query->hasPlugin($filterPluginID)) { - $args = $query->getArgs(); - $filterArg = null; - foreach ($args as $arg) { - if ($arg->getName() === QueryFilter::config()->get('field_name')) { - $filterArg = $arg; - break; - } - } - Schema::invariant( - $filterArg, - 'Plugin "%s" was applied but the "%s" plugin has not run yet. Make sure it is set to after: %s', - $this->getIdentifier(), - $filterPluginID, - $filterPluginID - ); - $inputTypeName = $filterArg->getType(); - $inputType = $schema->getType($inputTypeName); - Schema::invariant( - $inputType, - 'Input type "%s" is not in the schema but the %s plugin is applied', - $inputTypeName, - $filterPluginID - ); - $inputType->addField($fieldName, 'String'); - $query->addResolverAfterware([static::class, 'applyLinkFilter']); - } else { - $query->addArg($fieldName, 'String'); - $query->addResolverAfterware([static::class, 'applyLinkFilter']); - } + + $query->addArg($fieldName, 'String'); + $query->addResolverAfterware([static::class, 'applyLinkFilter']); } /** From e22fda3fed9ff677607bb477a4e5c3edd301cfc1 Mon Sep 17 00:00:00 2001 From: Aaron Carlino Date: Tue, 8 Dec 2020 13:52:35 +1300 Subject: [PATCH 2/2] Remove duplicate injector entry --- _config/graphql.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/_config/graphql.yml b/_config/graphql.yml index f3067cff..2364fdc0 100644 --- a/_config/graphql.yml +++ b/_config/graphql.yml @@ -15,7 +15,3 @@ SilverStripe\GraphQL\Schema\Schema: admin: src: - 'silverstripe/cms: _graphql' -SilverStripe\Core\Injector\Injector: - SilverStripe\GraphQL\Schema\Registry\PluginRegistry: - constructor: - getByLink: '%$SilverStripe\CMS\GraphQL\LinkablePlugin'