diff --git a/core/modules/block_content/src/Plugin/Derivative/BlockContent.php b/core/modules/block_content/src/Plugin/Derivative/BlockContent.php index 5ba836f1a8d0ed09b97d9935c984918692999aeb..472f04183cb338ca7722b5f27f2201f49ced5b5b 100644 --- a/core/modules/block_content/src/Plugin/Derivative/BlockContent.php +++ b/core/modules/block_content/src/Plugin/Derivative/BlockContent.php @@ -49,7 +49,7 @@ public function getDerivativeDefinitions($base_plugin_definition) { /** @var \Drupal\block_content\Entity\BlockContent $block_content */ foreach ($block_contents as $block_content) { $this->derivatives[$block_content->uuid()] = $base_plugin_definition; - $this->derivatives[$block_content->uuid()]['admin_label'] = $block_content->label(); + $this->derivatives[$block_content->uuid()]['admin_label'] = $block_content->label() ?? ($block_content->type->entity->label() . ': ' . $block_content->id()); $this->derivatives[$block_content->uuid()]['config_dependencies']['content'] = [ $block_content->getConfigDependencyName(), ]; diff --git a/core/modules/block_content/tests/src/Kernel/BlockContentDeriverTest.php b/core/modules/block_content/tests/src/Kernel/BlockContentDeriverTest.php index 3695c591b634aac519d4d4d914d21f6d1349542e..86aae63f7a2bfad2a391a73e2898d4836fd1e101 100644 --- a/core/modules/block_content/tests/src/Kernel/BlockContentDeriverTest.php +++ b/core/modules/block_content/tests/src/Kernel/BlockContentDeriverTest.php @@ -4,6 +4,7 @@ use Drupal\block_content\Entity\BlockContent; use Drupal\block_content\Entity\BlockContentType; +use Drupal\block_content\Plugin\Derivative\BlockContent as DerivativeBlockContent; use Drupal\Component\Plugin\PluginBase; use Drupal\KernelTests\KernelTestBase; @@ -19,6 +20,32 @@ class BlockContentDeriverTest extends KernelTestBase { */ protected static $modules = ['block', 'block_content', 'system', 'user']; + /** + * The definition array of the base plugin. + * + * @var array + */ + protected $baseDefinition = [ + 'id' => 'block_content', + 'provider' => 'block_content', + 'class' => '\Drupal\block_content\Plugin\Block\BlockContentBlock', + 'deriver' => '\Drupal\block_content\Plugin\Derivative\BlockContent', + ]; + + /** + * The block content storage. + * + * @var \Drupal\Core\Entity\EntityStorageInterface + */ + protected $blockContentStorage; + + /** + * The tested block content derivative class. + * + * @var \Drupal\block_content\Plugin\Derivative\BlockContent + */ + protected $blockContentDerivative; + /** * {@inheritdoc} */ @@ -26,6 +53,9 @@ protected function setUp(): void { parent::setUp(); $this->installEntitySchema('user'); $this->installEntitySchema('block_content'); + + $this->blockContentStorage = \Drupal::entityTypeManager()->getStorage('block_content'); + $this->blockContentDerivative = new DerivativeBlockContent($this->blockContentStorage); } /** @@ -62,4 +92,31 @@ public function testReusableBlocksOnlyAreDerived() { $this->assertFalse($block_manager->hasDefinition($plugin_id)); } + /** + * Tests the admin labels of derivative definitions. + */ + public function testGetDerivativeDefinitionsAdminLabels(): void { + $blockContentType = BlockContentType::create([ + 'id' => 'basic', + 'label' => 'Basic Block', + ]); + $blockContentType->save(); + $blockContentWithLabel = BlockContent::create([ + 'info' => 'Basic prototype', + 'type' => 'basic', + ]); + $blockContentWithLabel->save(); + $blockContentNoLabel = BlockContent::create([ + 'type' => 'basic', + ]); + $blockContentNoLabel->save(); + + $blockPluginManager = \Drupal::service('plugin.manager.block'); + $plugin = $blockPluginManager->createInstance('block_content:' . $blockContentWithLabel->uuid()); + $this->assertEquals('Basic prototype', $plugin->getPluginDefinition()['admin_label']); + + $plugin = $blockPluginManager->createInstance('block_content:' . $blockContentNoLabel->uuid()); + $this->assertEquals('Basic Block: ' . $blockContentNoLabel->id(), $plugin->getPluginDefinition()['admin_label']); + } + }