reviewer-1.2.x-dev/src/Reviewer/Review/ReviewRunner.php

src/Reviewer/Review/ReviewRunner.php
<?php

declare(strict_types=1);

namespace Drupal\reviewer\Reviewer\Review;

use Drupal\reviewer\Plugin\ReviewManagerInterface;
use Drupal\reviewer\Reviewer\Action;
use Drupal\reviewer\Reviewer\BundleEvaluatorInterface;

/**
 * Runs reviews.
 */
final readonly class ReviewRunner implements ReviewRunnerInterface {

  // phpcs:ignore Drupal.Commenting.FunctionComment.Missing
  public function __construct(
    private ReviewBuilderInterface $reviewBuilder,
    private BundleEvaluatorInterface $bundleEvaluator,
    private ReviewManagerInterface $reviewManager,
  ) {}

  /**
   * {@inheritdoc}
   */
  public function runIds(
    Action $action,
    array $review_ids = [],
    array $bundles = [],
  ): array {
    $review_definitions = array_keys($this->reviewManager->getDefinitions());
    if ($review_ids) {
      $review_definitions = array_intersect($review_definitions, $review_ids);
    }

    /** @var array<string, \Drupal\reviewer\Reviewer\Review\ReviewInterface> $reviews */
    $reviews = $this->reviewBuilder->fromIds($review_definitions);
    return $this->run($action, $this->bundleEvaluator->reviewsOfBundles($reviews, $bundles));
  }

  /**
   * {@inheritdoc}
   */
  public function runPlugins(
    Action $action,
    array $review_plugins = [],
    array $bundles = [],
  ): array {
    if (!$review_plugins) {
      return $this->runIds($action, [], $bundles);
    }

    /** @var array<string, \Drupal\reviewer\Reviewer\Review\ReviewInterface> $reviews */
    $reviews = $this->reviewBuilder->fromPlugins($review_plugins);
    return $this->run($action, $this->bundleEvaluator->reviewsOfBundles($reviews, $bundles));
  }

  /**
   * Run reviews.
   *
   * @param array<string, \Drupal\reviewer\Reviewer\Review\ReviewInterface> $reviews
   *
   * @return array<string, \Drupal\reviewer\Reviewer\Review\ReviewInterface>
   */
  private function run(Action $action, array $reviews): array {
    $results = [];
    foreach ($reviews as $review) {
      $review->run($action);
      $results[$review->getId()] = $review;
    }
    return $results;
  }

}

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

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