File "StepValidationArgs.php"
Full Path: /home/warrior1/public_html/languages/wp-content/plugins/mailpoet/lib/Automation/Engine/Data/StepValidationArgs.php
File size: 1.81 KB
MIME-type: text/x-php
Charset: utf-8
<?php declare(strict_types = 1);
namespace MailPoet\Automation\Engine\Data;
if (!defined('ABSPATH')) exit;
use MailPoet\Automation\Engine\Exceptions;
use MailPoet\Automation\Engine\Integration\Payload;
use MailPoet\Automation\Engine\Integration\Subject;
class StepValidationArgs {
/** @var Workflow */
private $workflow;
/** @var Step */
private $step;
/** @var array<string, Subject<Payload>> */
private $subjects = [];
/** @var array<class-string, string> */
private $subjectKeyClassMap = [];
/** @param Subject<Payload>[] $subjects */
public function __construct(
Workflow $workflow,
Step $step,
array $subjects
) {
$this->workflow = $workflow;
$this->step = $step;
foreach ($subjects as $subject) {
$key = $subject->getKey();
$this->subjects[$key] = $subject;
$this->subjectKeyClassMap[get_class($subject)] = $key;
}
}
public function getWorkflow(): Workflow {
return $this->workflow;
}
public function getStep(): Step {
return $this->step;
}
/** @return Subject<Payload>[] */
public function getSubjects(): array {
return array_values($this->subjects);
}
/** @return Subject<Payload> */
public function getSingleSubject(string $key): Subject {
$subject = $this->subjects[$key] ?? null;
if (!$subject) {
throw Exceptions::subjectNotFound($key);
}
return $subject;
}
/**
* @template P of Payload
* @template S of Subject<P>
* @param class-string<S> $class
* @return S<P>
*/
public function getSingleSubjectByClass(string $class): Subject {
$key = $this->subjectKeyClassMap[$class] ?? null;
if (!$key) {
throw Exceptions::subjectClassNotFound($class);
}
/** @var S<P> $subject -- for PHPStan */
$subject = $this->getSingleSubject($key);
return $subject;
}
}