Issue #3486981 by phenaproxima, thejimbirch: Allow recipes to enable Layout Builder via config actions

(cherry picked from commit 524cf737ec)
merge-requests/10228/head
Alex Pott 2024-11-14 22:49:06 +00:00
parent 88b2e375af
commit 6d5a320db6
No known key found for this signature in database
GPG Key ID: BDA67E7EE836E5CE
2 changed files with 62 additions and 0 deletions

View File

@ -6,6 +6,7 @@ use Drupal\Component\Plugin\ConfigurableInterface;
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 @@ class LayoutBuilderEntityViewDisplay extends BaseEntityViewDisplay implements La
/**
* {@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 @@ class LayoutBuilderEntityViewDisplay extends BaseEntityViewDisplay implements La
/**
* {@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 @@ class LayoutBuilderEntityViewDisplay extends BaseEntityViewDisplay implements La
/**
* {@inheritdoc}
*/
#[ActionMethod(adminLabel: new TranslatableMarkup('Disable Layout Builder'), pluralize: FALSE)]
public function disableLayoutBuilder() {
$this->setOverridable(FALSE);
$this->setThirdPartySetting('layout_builder', 'enabled', FALSE);

View File

@ -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());
}
}