reviewer-1.2.x-dev/src/Reviewer/BundleEvaluator.php

src/Reviewer/BundleEvaluator.php
<?php

declare(strict_types=1);

namespace Drupal\reviewer\Reviewer;

use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\reviewer\Plugin\reviewer\Review\ReviewPluginInterface;
use Drupal\reviewer\Reviewer\Review\ReviewInterface;

/**
 * Evaluates bundles.
 */
final readonly class BundleEvaluator implements BundleEvaluatorInterface {

  // phpcs:ignore Drupal.Commenting.FunctionComment.Missing
  public function __construct(
    private EntityTypeBundleInfoInterface $entityTypeBundleInfo,
    private EntityTypeManagerInterface $entityTypeManager,
  ) {}

  /**
   * {@inheritdoc}
   */
  public function allBundlesOfReview(ReviewPluginInterface $review): array {
    $bundles_in_code = $review->getBundles();
    if ($bundles_in_code) {
      return $bundles_in_code;
    }

    $discovered_entity_type = NULL;
    if ($review->getConfigEntityId()) {
      $entity_type = $this
        ->entityTypeManager
        ->getStorage($review->getConfigEntityId())
        ->getEntityType();
      $discovered_entity_type = $entity_type->getBundleOf();
    }

    if (!$discovered_entity_type) {
      return [];
    }

    $discovered_bundles = $this->entityTypeBundleInfo->getBundleInfo($discovered_entity_type);
    return array_keys($discovered_bundles);
  }

  /**
   * {@inheritdoc}
   */
  public function reviewHasBundle(
    ReviewInterface $review,
    array $bundles,
  ): bool {
    $id_has_separator = str_contains($review->getId(), '.');
    $bundle_in_set = fn(ReviewInterface $review) => \in_array(explode('.', $review->getId())[1], $bundles, TRUE);
    return $id_has_separator && $bundle_in_set($review);
  }

  /**
   * {@inheritdoc}
   */
  public function reviewsOfBundles(array $reviews, array $bundles): array {
    if ($bundles) {
      return array_filter(
        $reviews,
        fn(ReviewInterface $review) => $this->reviewHasBundle($review, $bundles),
      );
    }
    return $reviews;
  }

}

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

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