reviewer-1.2.x-dev/src/Reviewer/Result/CollectionResult.php
src/Reviewer/Result/CollectionResult.php
<?php
declare(strict_types=1);
namespace Drupal\reviewer\Reviewer\Result;
use Drupal\reviewer\Reviewer\Status\Status;
use Drupal\reviewer\Reviewer\Status\StatusFactoryInterface;
/**
* A collection of results.
*
* The overall status of a collection is determined by the most severe status
* of all results contained in the collection.
*/
final class CollectionResult implements CollectionResultInterface {
/**
* Results.
*
* @var array<string, \Drupal\reviewer\Reviewer\Result\ResultInterface>
*/
private array $results = [];
/**
* Constructor.
*
* @param \Drupal\reviewer\Reviewer\Result\ResultInterface[] $results
*/
public function __construct(
private readonly StatusFactoryInterface $statusFactory,
private readonly string $id,
array $results = [],
) {
foreach ($results as $result) {
$this->add($result);
}
}
/**
* {@inheritdoc}
*/
public function getId(): string {
return $this->id;
}
/**
* {@inheritdoc}
*/
public function getStatus(): Status {
return $this->statusFactory->createMostSevere($this->getIndividualResults());
}
/**
* {@inheritdoc}
*/
public function add(ResultInterface $result): CollectionResultInterface {
$this->results[$result->getId()] = $result;
return $this;
}
/**
* {@inheritdoc}
*/
public function remove(ResultInterface $result): CollectionResultInterface {
unset($this->results[$result->getId()]);
return $this;
}
/**
* {@inheritdoc}
*/
public function get(string $id): ResultInterface {
return $this->results[$id];
}
/**
* {@inheritdoc}
*/
public function getAll(): array {
return $this->results;
}
/**
* {@inheritdoc}
*/
public function getIndividualResults(): array {
$results = [];
foreach ($this->results as $result) {
if ($result instanceof CollectionResultInterface) {
$results = array_merge($results, $result->getIndividualResults());
}
elseif ($result instanceof IndividualResultInterface) {
$results[$result->getId()] = $result;
}
}
return $results;
}
}
