You are here

SectionStyles.php in Block Style Plugins 8.2

File

src/EventSubscriber/SectionStyles.php
View source
<?php

namespace Drupal\block_style_plugins\EventSubscriber;

use Drupal\block_style_plugins\Plugin\BlockStyleManager;
use Drupal\layout_builder\Event\SectionBuildRenderArrayEvent;
use Drupal\layout_builder\LayoutBuilderEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Adds Layout Builder section styles.
 *
 * @todo This currently does nothing and is waiting on
 * https://www.drupal.org/project/drupal/issues/3062862.
 */
class SectionStyles implements EventSubscriberInterface {

  /**
   * The Block Styles Manager.
   *
   * @var \Drupal\block_style_plugins\Plugin\BlockStyleManager
   */
  protected $blockStyleManager;

  /**
   * Creates a SectionComponentStyles object.
   *
   * @param \Drupal\block_style_plugins\Plugin\BlockStyleManager $blockStyleManager
   *   The Block Style Manager.
   */
  public function __construct(BlockStyleManager $blockStyleManager) {
    $this->blockStyleManager = $blockStyleManager;
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents() {
    $events = [];

    // Skip this if the Layout Builder is not installed.
    if (class_exists('\\Drupal\\layout_builder\\LayoutBuilderEvents')) {
      $events[LayoutBuilderEvents::SECTION_BUILD_RENDER_ARRAY] = 'onBuildRender';
    }
    return $events;
  }

  /**
   * Add styles to a section component.
   *
   * @param \Drupal\layout_builder\Event\SectionBuildRenderArrayEvent $event
   *   The section build render array event.
   */
  public function onBuildRender(SectionBuildRenderArrayEvent $event) {
    $block_styles = $event
      ->getSection()
      ->getThirdPartySettings('block_style_plugins');
    if ($block_styles) {
      $build = $event
        ->getBuild();

      // Look for all available plugins.
      $available_plugins = $this->blockStyleManager
        ->getSectionDefinitions();
      foreach ($block_styles as $plugin_id => $configuration) {

        // Only instantiate plugins that are available.
        if (array_key_exists($plugin_id, $available_plugins)) {

          /** @var \Drupal\block_style_plugins\Plugin\BlockStyleInterface $plugin */
          $plugin = $this->blockStyleManager
            ->createInstance($plugin_id, $configuration);
          $build = $plugin
            ->build($build);
        }
      }
      $event
        ->setBuild($build);
    }
  }

}

Classes

Namesort descending Description
SectionStyles Adds Layout Builder section styles.