subscribersRepository = $subscribersRepository; $this->trackingConfig = $trackingConfig; $this->unsubscribesTracker = $unsubscribesTracker; } public function getKey(): string { return 'mailpoet:unsubscribe'; } public function getName(): string { // translators: automation action title return __('Unsubscribe', 'mailpoet-premium'); } public function getArgsSchema(): ObjectSchema { return Builder::object(); } public function getSubjectKeys(): array { return [ SubscriberSubject::KEY, ]; } public function validate(StepValidationArgs $args): void { // TODO: we may want to add some checks here } public function run(StepRunArgs $args, StepRunController $controller): void { $subscriberId = $args->getSinglePayloadByClass(SubscriberPayload::class)->getId(); $subscriber = $this->subscribersRepository->findOneById($subscriberId); if (!$subscriber) { throw InvalidStateException::create()->withMessage(sprintf("subscriber with ID '%s' not found", $subscriberId)); } if ($this->trackingConfig->isEmailTrackingEnabled()) { $meta = json_encode([ 'automation' => $args->getAutomation()->getId(), 'automation_run' => $args->getAutomationRun()->getId(), 'step' => $args->getStep()->getId(), ]); $this->unsubscribesTracker->track( (int)$subscriber->getId(), StatisticsUnsubscribeEntity::SOURCE_AUTOMATION, null, $meta ?: null ); } $subscriber->setStatus(SubscriberEntity::STATUS_UNSUBSCRIBED); $this->subscribersRepository->persist($subscriber); $this->subscribersRepository->flush(); } }