inline_media_form-1.0.0-beta1/src/EntitySummarizer/EntitySummarizer.php

src/EntitySummarizer/EntitySummarizer.php
<?php

namespace Drupal\inline_media_form\EntitySummarizer;

use Drupal\Component\Utility\SortArray;
use Drupal\Core\Entity\ContentEntityInterface;
use Drupal\Core\Entity\EntityDisplayRepositoryInterface;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\field\FieldConfigInterface;
use Drupal\inline_media_form\FieldSummarizer\FieldSummarizerFactoryInterface;

/**
 * Default summarizer for entities.
 */
class EntitySummarizer implements EntitySummarizerInterface {

  // ===========================================================================
  // Member Fields
  // ===========================================================================

  /**
   * The repository of entity display information.
   *
   * @var \Drupal\Core\Entity\EntityDisplayRepositoryInterface
   */
  protected $entityDisplayRepository;

  /**
   * Factory for getting summarizers for different types of fields.
   *
   * @var \Drupal\inline_media_form\FieldSummarizer\FieldSummarizerFactoryInterface
   */
  protected $fieldSummarizerFactory;

  // ===========================================================================
  // Static Methods
  // ===========================================================================

  /**
   * {@inheritdoc}
   */
  public static function canHandle(EntityInterface $entity): bool {
    // Accept content entities of all types.
    return ($entity instanceof ContentEntityInterface);
  }

  // ===========================================================================
  // Constructor
  // ===========================================================================

  /**
   * Constructor for EntitySummarizer.
   *
   * @param \Drupal\Core\Entity\EntityDisplayRepositoryInterface $entity_display_repository
   *   The repository of entity display information.
   * @param \Drupal\inline_media_form\FieldSummarizer\FieldSummarizerFactoryInterface $field_summarizer_factory
   *   The factory to consult for summarizers of fields.
   */
  public function __construct(EntityDisplayRepositoryInterface $entity_display_repository,
                              FieldSummarizerFactoryInterface $field_summarizer_factory) {
    $this->entityDisplayRepository = $entity_display_repository;
    $this->fieldSummarizerFactory  = $field_summarizer_factory;
  }

  // ===========================================================================
  // Public Methods
  // ===========================================================================

  /**
   * {@inheritdoc}
   */
  public function summarize(EntityInterface $entity,
                            string $form_mode = EntityDisplayRepositoryInterface::DEFAULT_DISPLAY_MODE): string {
    $field_summaries     = $this->summarizeFields($entity);
    $non_empty_summaries = array_filter($field_summaries);

    return implode(', ', $non_empty_summaries);
  }

  /**
   * {@inheritdoc}
   */
  public function summarizeFields(EntityInterface $entity,
                                  $form_mode = EntityDisplayRepositoryInterface::DEFAULT_DISPLAY_MODE): array {
    $summaries = [];

    assert($entity instanceof ContentEntityInterface);

    $form_display =
      $this->getEntityDisplayRepository()->getFormDisplay(
        $entity->getEntityTypeId(),
        $entity->bundle(),
        $form_mode
      );

    $components = $form_display->getComponents();

    uasort($components, [SortArray::class, 'sortByWeightElement']);

    foreach (array_keys($components) as $field_name) {
      $field_definition = $entity->getFieldDefinition($field_name);

      // Components can be extra fields; field may not really exist.
      if ($field_definition !== NULL) {
        $field_values = $entity->get($field_name);

        // We do not add content to the summary from empty or base fields
        // (except "name").
        $is_name_field = ($field_name == 'name');
        $is_non_base   = ($field_definition instanceof FieldConfigInterface);
        $is_empty      = $field_values->isEmpty();
        $can_view      = $field_values->access('view');

        if (($is_name_field || $is_non_base) && !$is_empty && $can_view) {
          $summarizer    = $this->getSummarizerFor($field_definition);
          $field_summary = $summarizer->summarize($field_values);

          if (!empty($field_summary)) {
            $summaries[$field_name] = $field_summary;
          }
        }
      }
    }

    return $summaries;
  }

  // ===========================================================================
  // Protected API
  // ===========================================================================

  /**
   * Gets the entity display repository.
   *
   * @return \Drupal\Core\Entity\EntityDisplayRepositoryInterface
   *   The entity display repository interface.
   */
  protected function getEntityDisplayRepository(): EntityDisplayRepositoryInterface {
    return $this->entityDisplayRepository;
  }

  /**
   * Gets a summarizer for a particular field.
   *
   * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
   *   The definition of the field to summarize.
   *
   * @return \Drupal\inline_media_form\FieldSummarizer\FieldSummarizerInterface
   *   The summarizer to use for the field.
   */
  protected function getSummarizerFor(FieldDefinitionInterface $field_definition) {
    $factory = $this->fieldSummarizerFactory;

    return $factory->getSummarizerFor($field_definition);
  }

}

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

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