PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.36.0
MailPoet – Newsletters, Email Marketing, and Automation v5.36.0
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 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / lib / Automation / Integrations / WooCommerce / Triggers / Orders / OrderNoteAddedTrigger.php
mailpoet / lib / Automation / Integrations / WooCommerce / Triggers / Orders Last commit date
OrderCancelledTrigger.php 2 years ago OrderCompletedTrigger.php 2 years ago OrderCreatedTrigger.php 3 months ago OrderNoteAddedTrigger.php 1 year ago OrderStatusChangedTrigger.php 2 years ago index.php 2 years ago
OrderNoteAddedTrigger.php
141 lines
1 <?php declare(strict_types = 1);
2
3 namespace MailPoet\Automation\Integrations\WooCommerce\Triggers\Orders;
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\Engine\WordPress;
14 use MailPoet\Automation\Integrations\WooCommerce\Subjects\CustomerSubject;
15 use MailPoet\Automation\Integrations\WooCommerce\Subjects\OrderSubject;
16 use MailPoet\Automation\Integrations\WooCommerce\WooCommerce;
17 use MailPoet\Automation\Integrations\WordPress\Subjects\CommentSubject;
18 use MailPoet\Validator\Builder;
19 use MailPoet\Validator\Schema\ObjectSchema;
20
21 class OrderNoteAddedTrigger implements Trigger {
22
23 /** @var WordPress */
24 protected $wp;
25
26 /** @var WooCommerce */
27 protected $woocommerce;
28
29 public function __construct(
30 WordPress $wp,
31 WooCommerce $woocommerceHelper
32 ) {
33 $this->wp = $wp;
34 $this->woocommerce = $woocommerceHelper;
35 }
36
37 public function getKey(): string {
38 return 'woocommerce:order-note-added';
39 }
40
41 public function getName(): string {
42 // translators: automation trigger title
43 return __('Order note added', 'mailpoet');
44 }
45
46 public function getArgsSchema(): ObjectSchema {
47 return Builder::object([
48 'note_contains' => Builder::string()->default(''),
49 'note_type' => Builder::string()->default('all'),
50 ]);
51 }
52
53 public function getSubjectKeys(): array {
54 return [
55 OrderSubject::KEY,
56 CustomerSubject::KEY,
57 CommentSubject::KEY,
58 ];
59 }
60
61 public function validate(StepValidationArgs $args): void {
62 $triggerArgs = $args->getStep()->getArgs();
63 $noteType = $triggerArgs['note_type'] ?? 'all';
64
65 if (!in_array($noteType, ['all', 'customer', 'private'], true)) {
66 throw new \InvalidArgumentException(
67 sprintf('Invalid note_type "%s". Allowed values: all, customer, private', $noteType)
68 );
69 }
70 }
71
72 public function registerHooks(): void {
73 $this->wp->addAction(
74 'woocommerce_order_note_added',
75 [
76 $this,
77 'handle',
78 ],
79 10,
80 2
81 );
82 }
83
84 public function handle(int $commentId, \WC_Order $order): void {
85 $comment = get_comment($commentId);
86 if (!$comment) {
87 return;
88 }
89
90 $isCustomerNote = (bool)get_comment_meta($commentId, 'is_customer_note', true);
91 $noteType = $isCustomerNote ? 'customer' : 'private';
92
93 $this->wp->doAction(Hooks::TRIGGER, $this, [
94 new Subject(OrderSubject::KEY, ['order_id' => $order->get_id()]),
95 new Subject(CustomerSubject::KEY, ['customer_id' => $order->get_customer_id(), 'order_id' => $order->get_id()]),
96 new Subject(CommentSubject::KEY, [
97 'comment_id' => $commentId,
98 // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
99 'comment_content' => $comment->comment_content,
100 'note_type' => $noteType,
101 ]),
102 ]);
103 }
104
105 public function isTriggeredBy(StepRunArgs $args): bool {
106 $triggerArgs = $args->getStep()->getArgs();
107 $configuredNoteContains = $triggerArgs['note_contains'] ?? '';
108 $configuredNoteType = $triggerArgs['note_type'] ?? 'all';
109
110 // Get the comment from the CommentPayload
111 try {
112 $commentPayload = $args->getSinglePayloadByClass(\MailPoet\Automation\Integrations\WordPress\Payloads\CommentPayload::class);
113 } catch (\Exception $e) {
114 return false;
115 }
116
117 $comment = $commentPayload->getComment();
118 if (!$comment) {
119 return false;
120 }
121
122 // Check note content filter
123 // phpcs:ignore Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps
124 if (($configuredNoteContains !== '') && (stripos($comment->comment_content, $configuredNoteContains) === false)) {
125 return false;
126 }
127
128 // Check note type filter
129 if ($configuredNoteType !== 'all') {
130 $commentSubjectEntry = $args->getSingleSubjectEntry(CommentSubject::KEY);
131 $subjectArgs = $commentSubjectEntry->getSubjectData()->getArgs();
132 $actualNoteType = $subjectArgs['note_type'] ?? null;
133 if ($actualNoteType !== $configuredNoteType) {
134 return false;
135 }
136 }
137
138 return true;
139 }
140 }
141