diff --git a/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php b/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php index 6e058878bfae291b07216181098b0dc075f6fb48..9602fe8fc4cfe2e4a7aeef993430077e0d6c319e 100644 --- a/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php +++ b/core/modules/layout_builder/src/Entity/LayoutBuilderEntityViewDisplay.php @@ -6,6 +6,7 @@ use Drupal\Component\Plugin\DerivativeInspectionInterface; use Drupal\Component\Plugin\PluginBase; use Drupal\Core\Cache\CacheableMetadata; +use Drupal\Core\Config\Action\Attribute\ActionMethod; use Drupal\Core\Entity\Entity\EntityViewDisplay as BaseEntityViewDisplay; use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Entity\FieldableEntityInterface; @@ -58,6 +59,7 @@ public function isOverridable() { /** * {@inheritdoc} */ + #[ActionMethod(adminLabel: new TranslatableMarkup('Toggle overridable layouts'), pluralize: FALSE, name: 'allowLayoutOverrides')] public function setOverridable($overridable = TRUE) { $this->setThirdPartySetting('layout_builder', 'allow_custom', $overridable); // Enable Layout Builder if it's not already enabled and overriding. @@ -82,6 +84,7 @@ public function isLayoutBuilderEnabled() { /** * {@inheritdoc} */ + #[ActionMethod(adminLabel: new TranslatableMarkup('Enable Layout Builder'), pluralize: FALSE)] public function enableLayoutBuilder() { $this->setThirdPartySetting('layout_builder', 'enabled', TRUE); return $this; @@ -90,6 +93,7 @@ public function enableLayoutBuilder() { /** * {@inheritdoc} */ + #[ActionMethod(adminLabel: new TranslatableMarkup('Disable Layout Builder'), pluralize: FALSE)] public function disableLayoutBuilder() { $this->setOverridable(FALSE); $this->setThirdPartySetting('layout_builder', 'enabled', FALSE); diff --git a/core/modules/layout_builder/tests/src/Kernel/ConfigActionsTest.php b/core/modules/layout_builder/tests/src/Kernel/ConfigActionsTest.php new file mode 100644 index 0000000000000000000000000000000000000000..0072d261728884592a5396f04a42eb1acc3e79ea --- /dev/null +++ b/core/modules/layout_builder/tests/src/Kernel/ConfigActionsTest.php @@ -0,0 +1,58 @@ +<?php + +declare(strict_types=1); + +namespace Drupal\Tests\layout_builder\Kernel; + +use Drupal\Core\Entity\EntityDisplayRepositoryInterface; +use Drupal\entity_test\Entity\EntityTestBundle; +use Drupal\KernelTests\KernelTestBase; +use Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay; + +/** + * @group Recipe + */ +class ConfigActionsTest extends KernelTestBase { + + /** + * {@inheritdoc} + */ + protected static $modules = [ + 'entity_test', + 'field', + 'layout_builder', + 'layout_discovery', + ]; + + /** + * Tests config actions exposed by Layout Builder. + */ + public function testLayoutBuilderActions(): void { + /** @var \Drupal\Core\Config\Action\ConfigActionManager $manager */ + $manager = $this->container->get('plugin.manager.config_action'); + + EntityTestBundle::create(['id' => 'test'])->save(); + + /** @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface $display_repository */ + $display_repository = $this->container->get(EntityDisplayRepositoryInterface::class); + + /** @var \Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay $display */ + $display = $display_repository->getViewDisplay('entity_test_with_bundle', 'test'); + $this->assertInstanceOf(LayoutBuilderEntityViewDisplay::class, $display); + $display->save(); + + $this->assertFalse($display->isLayoutBuilderEnabled()); + $manager->applyAction('enableLayoutBuilder', $display->getConfigDependencyName(), []); + $this->assertTrue($display_repository->getViewDisplay('entity_test_with_bundle', 'test')->isLayoutBuilderEnabled()); + + $this->assertFalse($display->isOverridable()); + $manager->applyAction('allowLayoutOverrides', $display->getConfigDependencyName(), TRUE); + $this->assertTrue($display_repository->getViewDisplay('entity_test_with_bundle', 'test')->isOverridable()); + $manager->applyAction('allowLayoutOverrides', $display->getConfigDependencyName(), FALSE); + $this->assertFalse($display_repository->getViewDisplay('entity_test_with_bundle', 'test')->isOverridable()); + + $manager->applyAction('disableLayoutBuilder', $display->getConfigDependencyName(), []); + $this->assertFalse($display_repository->getViewDisplay('entity_test_with_bundle', 'test')->isLayoutBuilderEnabled()); + } + +}