Spaces:
No application file
No application file
namespace Mautic\CampaignBundle\Executioner\Event; | |
use Doctrine\Common\Collections\ArrayCollection; | |
use Mautic\CampaignBundle\Entity\Event; | |
use Mautic\CampaignBundle\Entity\LeadEventLog; | |
use Mautic\CampaignBundle\EventCollector\Accessor\Event\AbstractEventAccessor; | |
use Mautic\CampaignBundle\EventCollector\Accessor\Event\ActionAccessor; | |
use Mautic\CampaignBundle\Executioner\Dispatcher\ActionDispatcher; | |
use Mautic\CampaignBundle\Executioner\Exception\CannotProcessEventException; | |
use Mautic\CampaignBundle\Executioner\Logger\EventLogger; | |
use Mautic\CampaignBundle\Executioner\Result\EvaluatedContacts; | |
class ActionExecutioner implements EventInterface | |
{ | |
public const TYPE = 'action'; | |
public function __construct( | |
private ActionDispatcher $dispatcher, | |
private EventLogger $eventLogger | |
) { | |
} | |
/** | |
* @throws CannotProcessEventException | |
* @throws \Mautic\CampaignBundle\Executioner\Dispatcher\Exception\LogNotProcessedException | |
* @throws \Mautic\CampaignBundle\Executioner\Dispatcher\Exception\LogPassedAndFailedException | |
*/ | |
public function execute(AbstractEventAccessor $config, ArrayCollection $logs): EvaluatedContacts | |
{ | |
\assert($config instanceof ActionAccessor); | |
/** @var LeadEventLog $firstLog */ | |
if (!$firstLog = $logs->first()) { | |
return new EvaluatedContacts(); | |
} | |
$event = $firstLog->getEvent(); | |
if (Event::TYPE_ACTION !== $event->getEventType()) { | |
throw new CannotProcessEventException('Cannot process event ID '.$event->getId().' as an action.'); | |
} | |
// Execute to process the batch of contacts | |
$pendingEvent = $this->dispatcher->dispatchEvent($config, $event, $logs); | |
$passed = $this->eventLogger->extractContactsFromLogs($pendingEvent->getSuccessful()); | |
$failed = $this->eventLogger->extractContactsFromLogs($pendingEvent->getFailures()); | |
return new EvaluatedContacts($passed, $failed); | |
} | |
} | |