blob: 01e7d86031783b8df14b060062d28b7485049004 [file] [log] [blame]
<?php
declare(strict_types=1);
namespace Ddeboer\Imap\Search\LogicalOperator;
use Ddeboer\Imap\Search\ConditionInterface;
/**
* Represents an OR operator. Messages only need to match one of the conditions
* after this operator to match the expression.
*/
final class OrConditions implements ConditionInterface
{
/**
* The conditions that together represent the expression.
*
* @var ConditionInterface[]
*/
private array $conditions = [];
/**
* @param ConditionInterface[] $conditions
*/
public function __construct(array $conditions)
{
foreach ($conditions as $condition) {
$this->addCondition($condition);
}
}
/**
* Adds a new condition to the expression.
*
* @param ConditionInterface $condition the condition to be added
*
* @return void
*/
private function addCondition(ConditionInterface $condition)
{
$this->conditions[] = $condition;
}
/**
* Returns the keyword that the condition represents.
*/
public function toString(): string
{
$conditions = \array_map(static function (ConditionInterface $condition): string {
return $condition->toString();
}, $this->conditions);
return \sprintf('( %s )', \implode(' OR ', $conditions));
}
}