PluginProbe
MailPoet – Newsletters, Email Marketing, and Automation / 5.33.1
MailPoet – Newsletters, Email Marketing, and Automation v5.33.1
5.38.0 5.37.0 5.36.1 5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 All 542 releases
mailpoet / lib / Automation / Integrations / MailPoet / Triggers / SomeoneSubscribesTrigger.php
SomeoneSubscribesTrigger.php
97 lines 3.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Automation\Integrations\MailPoet\Triggers;
4
5 if (!defined('ABSPATH')) exit;
6
7
8 use MailPoet\Automation\Engine\Data\StepRunArgs;
9 use MailPoet\Automation\Engine\Data\StepValidationArgs;
10 use MailPoet\Automation\Engine\Data\Subject;
11 use MailPoet\Automation\Engine\Hooks;
12 use MailPoet\Automation\Engine\Integration\Trigger;
13 use MailPoet\Automation\Integrations\MailPoet\Payloads\SegmentPayload;
14 use MailPoet\Automation\Integrations\MailPoet\Subjects\SegmentSubject;
15 use MailPoet\Automation\Integrations\MailPoet\Subjects\SubscriberSubject;
16 use MailPoet\Entities\SegmentEntity;
17 use MailPoet\Entities\SubscriberSegmentEntity;
18 use MailPoet\InvalidStateException;
19 use MailPoet\Segments\SegmentsRepository;
20 use MailPoet\Validator\Builder;
21 use MailPoet\Validator\Schema\ObjectSchema;
22 use MailPoet\WP\Functions as WPFunctions;
23
24 class SomeoneSubscribesTrigger implements Trigger {
25 const KEY = 'mailpoet:someone-subscribes';
26
27 /** @var WPFunctions */
28 private $wp;
29
30 /** @var SegmentsRepository */
31 private $segmentsRepository;
32
33 public function __construct(
34 WPFunctions $wp,
35 SegmentsRepository $segmentsRepository
36 ) {
37 $this->wp = $wp;
38 $this->segmentsRepository = $segmentsRepository;
39 }
40
41 public function getKey(): string {
42 return 'mailpoet:someone-subscribes';
43 }
44
45 public function getName(): string {
46 // translators: automation trigger title
47 return __('Someone subscribes', 'mailpoet');
48 }
49
50 public function getArgsSchema(): ObjectSchema {
51 return Builder::object([
52 'segment_ids' => Builder::array(Builder::number()),
53 ]);
54 }
55
56 public function getSubjectKeys(): array {
57 return [
58 SubscriberSubject::KEY,
59 SegmentSubject::KEY,
60 ];
61 }
62
63 public function validate(StepValidationArgs $args): void {
64 }
65
66 public function registerHooks(): void {
67 $this->wp->addAction('mailpoet_segment_subscribed', [$this, 'handleSubscription'], 10, 2);
68 }
69
70 public function handleSubscription(SubscriberSegmentEntity $subscriberSegment): void {
71 $segment = $subscriberSegment->getSegment();
72 $subscriber = $subscriberSegment->getSubscriber();
73
74 if (!$segment || !$subscriber) {
75 throw new InvalidStateException();
76 }
77
78 $this->wp->doAction(Hooks::TRIGGER, $this, [
79 new Subject(SegmentSubject::KEY, ['segment_id' => $segment->getId()]),
80 new Subject(SubscriberSubject::KEY, ['subscriber_id' => $subscriber->getId()]),
81 ]);
82 }
83
84 public function isTriggeredBy(StepRunArgs $args): bool {
85 $segmentId = $args->getSinglePayloadByClass(SegmentPayload::class)->getId();
86 $segment = $this->segmentsRepository->findOneById($segmentId);
87 if (!$segment || $segment->getType() !== SegmentEntity::TYPE_DEFAULT) {
88 return false;
89 }
90
91 // Triggers when no segment IDs defined (= any segment) or the current segment payload.
92 $triggerArgs = $args->getStep()->getArgs();
93 $segmentIds = $triggerArgs['segment_ids'] ?? [];
94 return !is_array($segmentIds) || !$segmentIds || in_array($segmentId, $segmentIds, true);
95 }
96 }
97