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;
}
}
