From 554afce229da93ad9518ad84b9c7d650b12f2b94 Mon Sep 17 00:00:00 2001 From: Michael Stenta Date: Fri, 4 Aug 2023 10:23:25 -0400 Subject: [PATCH] Add a requiresEntity boolean to quick form plugins to optionally prevent creating default instances. --- modules/core/quick/src/Annotation/QuickForm.php | 7 +++++++ .../src/Plugin/QuickForm/QuickFormBase.php | 7 +++++++ .../src/Plugin/QuickForm/QuickFormInterface.php | 8 ++++++++ .../core/quick/src/QuickFormInstanceManager.php | 17 ++++++++++++----- 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/modules/core/quick/src/Annotation/QuickForm.php b/modules/core/quick/src/Annotation/QuickForm.php index fe5c343a7..e0ed85a1a 100644 --- a/modules/core/quick/src/Annotation/QuickForm.php +++ b/modules/core/quick/src/Annotation/QuickForm.php @@ -52,4 +52,11 @@ class QuickForm extends Plugin { */ public $permissions; + /** + * Require a quick form instance entity to instantiate. + * + * @var bool + */ + public $requiresEntity; + } diff --git a/modules/core/quick/src/Plugin/QuickForm/QuickFormBase.php b/modules/core/quick/src/Plugin/QuickForm/QuickFormBase.php index 2069c9434..79f1ac1e7 100644 --- a/modules/core/quick/src/Plugin/QuickForm/QuickFormBase.php +++ b/modules/core/quick/src/Plugin/QuickForm/QuickFormBase.php @@ -105,6 +105,13 @@ class QuickFormBase extends PluginBase implements QuickFormInterface, ContainerF return $this->pluginDefinition['helpText'] ?? ''; } + /** + * {@inheritdoc} + */ + public function requiresEntity() { + return $this->pluginDefinition['requiresEntity'] ?? FALSE; + } + /** * {@inheritdoc} */ diff --git a/modules/core/quick/src/Plugin/QuickForm/QuickFormInterface.php b/modules/core/quick/src/Plugin/QuickForm/QuickFormInterface.php index 0fc087c7b..8a22c47e8 100644 --- a/modules/core/quick/src/Plugin/QuickForm/QuickFormInterface.php +++ b/modules/core/quick/src/Plugin/QuickForm/QuickFormInterface.php @@ -71,6 +71,14 @@ interface QuickFormInterface extends FormInterface { */ public function getPermissions(); + /** + * Whether the plugin requires a quick form instance configuration entity. + * + * @return bool + * Boolean. + */ + public function requiresEntity(); + /** * Checks access for the quick form. * diff --git a/modules/core/quick/src/QuickFormInstanceManager.php b/modules/core/quick/src/QuickFormInstanceManager.php index 58aaeef8b..6c3cf83d1 100644 --- a/modules/core/quick/src/QuickFormInstanceManager.php +++ b/modules/core/quick/src/QuickFormInstanceManager.php @@ -64,9 +64,10 @@ class QuickFormInstanceManager implements QuickFormInstanceManagerInterface { $instances += $entities; } - // If there are no config entities, create a new (unsaved) config entity - // with default values from the plugin. - else { + // Or, if this plugin does not require a quick form instance configuration + // entity, then add a new (unsaved) config entity with default values from + // the plugin. + elseif (empty($plugin['requiresEntity'])) { $instances[$plugin['id']] = QuickFormInstance::create(['id' => $plugin['id'], 'plugin' => $plugin['id']]); } } @@ -86,9 +87,15 @@ class QuickFormInstanceManager implements QuickFormInstanceManagerInterface { return $entity; } - // Otherwise, create a new (unsaved) config entity with default values from + // Or, if this plugin does not require a quick form instance configuration + // entity, then add a new (unsaved) config entity with default values from // the plugin. - return QuickFormInstance::create(['id' => $id, 'plugin' => $id]); + elseif (empty($plugin['requiresEntity'])) { + return QuickFormInstance::create(['id' => $id, 'plugin' => $id]); + } + + // No quick form could be instantiated. + return NULL; } }