Verified Commit b0cef942 authored by Alex Pott's avatar Alex Pott
Browse files

Issue #3340159 by robert-arias, ooa33, acbramley, smustgrave, Chi, mikelutz,...

Issue #3340159 by robert-arias, ooa33, acbramley, smustgrave, Chi, mikelutz, quietone: Prevent empty block_content info fields from causing php deprecation notices when placing blocks with no label.

(cherry picked from commit 7cf9fb43)
parent faf7f150
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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(),
      ];
+57 −0
Original line number Diff line number Diff line
@@ -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']);
  }

}