display_builder-1.0.x-dev/modules/display_builder_entity_view/src/Event/DisplayBuilderEntityViewEventsSubscriber.php

modules/display_builder_entity_view/src/Event/DisplayBuilderEntityViewEventsSubscriber.php
<?php

declare(strict_types=1);

namespace Drupal\display_builder_entity_view\Event;

use Drupal\Core\Entity\Entity\EntityViewDisplay;
use Drupal\display_builder\Event\DisplayBuilderEvent;
use Drupal\display_builder\Event\DisplayBuilderEvents;
use Drupal\display_builder\StateManager\StateManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * The event subscriber for display builder islands.
 */
class DisplayBuilderEntityViewEventsSubscriber implements EventSubscriberInterface {

  public const CONTEXT_REQUIREMENT = 'display_builder_entity_view';

  /**
   * Constructs a new DisplayBuilderEntityViewEventsSubscriber object.
   *
   * @param \Drupal\display_builder\StateManager\StateManagerInterface $stateManager
   *   The state manager service.
   */
  public function __construct(
    protected StateManagerInterface $stateManager,
  ) {}

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents(): array {
    return [
      DisplayBuilderEvents::ON_SAVE => 'onSave',
    ];
  }

  /**
   * Event handler for when a display builder is saved.
   *
   * @param \Drupal\display_builder\Event\DisplayBuilderEvent $event
   *   The event object.
   */
  public function onSave(DisplayBuilderEvent $event): void {
    $builder_id = $event->getBuilderId();
    $contexts = $this->stateManager->getContexts($builder_id);

    if (!$this->stateManager->hasSaveContextsRequirement($builder_id, self::CONTEXT_REQUIREMENT, $contexts)) {
      return;
    }

    // Entity view display parameters are also in route match.
    /** @var \Drupal\Core\Plugin\Context\EntityContext $entity_context */
    $entity_context = $contexts['entity'];
    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
    $entity = $entity_context->getContextValue();
    $entity_type_id = $entity->getEntityTypeId();
    $bundle = $entity->bundle();
    $view_mode = $contexts['view_mode']->getContextValue();
    // Save to the config entity.
    // @todo Implement this.
    /** @var \Drupal\display_builder_entity_view\Entity\DisplayBuilderEntityViewDisplay $entity_view_display */
    // phpcs:disable DrupalPractice.Objects.GlobalClass.GlobalClass
    // @phpstan-ignore-next-line
    $entity_view_display = EntityViewDisplay::load("{$entity_type_id}.{$bundle}.{$view_mode}");

    if ($entity_view_display) {
      // Set the third_party_settings.
      $builder_data = $this->stateManager->getCurrentState($builder_id);
      $entity_view_display->setThirdPartySetting('display_builder', 'sources', $builder_data);
      $entity_view_display->setThirdPartySetting('display_builder', 'entity_config_id', $this->stateManager->getEntityConfigId($builder_id));
      // Save the configuration entity.
      $entity_view_display->save();
    }
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc