civicrm_entity-8.x-3.0-beta1/src/Hook/EntityAlterHooks.php

src/Hook/EntityAlterHooks.php
<?php

namespace Drupal\civicrm_entity\Hook;

use Drupal\Core\Entity\Display\EntityDisplayInterface;
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
use Drupal\Core\Entity\EntityDisplayRepositoryInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Extension\ModuleHandlerInterface;
use Drupal\Core\Hook\Attribute\Hook;
use Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay;

/**
 * Hook implementations for entity alters.
 */
class EntityAlterHooks {

  /**
   * Constructor for EntityHooks.
   */
  public function __construct(
    protected EntityTypeManagerInterface $entityTypeManager,
    protected EntityDisplayRepositoryInterface $entityDisplayRepository,
    protected ModuleHandlerInterface $moduleHandler,
  ) {
  }

  /**
   * Implements hook_entity_view_display_alter().
   *
   * There is no way to handle this in the entity type's view build.
   */
  #[Hook('entity_view_display_alter')]
  public function entityViewDisplayAlter(EntityViewDisplayInterface $display, array $context): void {
    $entity_type = $this->entityTypeManager->getDefinition($context['entity_type']);
    assert($entity_type !== NULL);
    if ($entity_type->get('civicrm_entity') && $entity_type->hasKey('bundle')) {
      $entity_display_repository = $this->entityDisplayRepository;
      assert($entity_display_repository instanceof EntityDisplayRepositoryInterface);
      $entity_view_mode_ids = array_keys($entity_display_repository->getViewModeOptions($entity_type->id()));
      $view_mode = !empty($context['view_mode']) && in_array($context['view_mode'], $entity_view_mode_ids) ? $context['view_mode'] : $entity_display_repository::DEFAULT_DISPLAY_MODE;
      $root_display = $entity_display_repository->getViewDisplay(
        $entity_type->id(),
        $entity_type->id(),
        $view_mode
      );
      $display->set('content', $root_display->get('content'));
      $display->set('hidden', $root_display->get('hidden'));

      if ($root_display instanceof LayoutBuilderEntityViewDisplay) {
        $layout_builder_settings = $root_display->getThirdPartySettings('layout_builder');
        foreach ($layout_builder_settings as $setting_key => $setting) {
          $display->setThirdPartySetting('layout_builder', $setting_key, $setting);
        }
      }
      $ds_settings = $root_display->getThirdPartySettings('ds');
      if (!empty($ds_settings) && is_array($ds_settings)) {
        foreach ($ds_settings as $setting_key => $setting) {
          $display->setThirdPartySetting('ds', $setting_key, $setting);
        }
      }
    }
  }

  /**
   * Implements hook_entity_view_alter().
   */
  #[Hook('entity_view_alter')]
  public function entityViewAlter(array &$build, EntityInterface $entity, EntityDisplayInterface $display): void {
    $entity_type = $entity->getEntityType();
    if ($entity_type->get('civicrm_entity') && $entity_type->hasKey('bundle') && $this->moduleHandler->moduleExists('field_group')) {
      $entity_display_repository = $this->entityDisplayRepository;
      $entity_view_mode_ids = array_keys($entity_display_repository->getViewModeOptions($entity_type->id()));

      $context = [
        'entity_type' => $display->getTargetEntityTypeId(),
        'bundle' => $entity_type->id(),
        'entity' => $entity,
        'display_context' => 'view',
        'mode' => in_array($display->getMode(), $entity_view_mode_ids) ? $display->getMode() : $entity_display_repository::DEFAULT_DISPLAY_MODE,
      ];

      field_group_attach_groups($build, $context);
    }
  }

}

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

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