PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.36
OttoKit: All-in-One Automation Platform v1.1.36
1.1.37 1.1.36 1.1.35 1.1.34 1.1.33 1.1.32 1.1.31 1.1.30 1.1.29 1.1.28 1.1.27 1.1.9 trunk 1.0.10 1.0.11 1.0.12 1.0.13 1.0.14 1.0.15 1.0.16 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.23 1.0.24 1.0.25 1.0.26 1.0.27 1.0.28 1.0.29 1.0.30 1.0.31 1.0.32 1.0.33 1.0.34 1.0.35 1.0.36 1.0.37 1.0.38 1.0.39 1.0.40 1.0.41 1.0.42 1.0.43 1.0.44 1.0.45 1.0.46 1.0.47 1.0.48 1.0.49 1.0.50 1.0.51 1.0.52 1.0.53 1.0.54 1.0.55 1.0.56 1.0.57 1.0.58 1.0.59 1.0.60 1.0.61 1.0.62 1.0.63 1.0.64 1.0.65 1.0.66 1.0.67 1.0.68 1.0.69 1.0.7 1.0.70 1.0.71 1.0.72 1.0.73 1.0.74 1.0.75 1.0.76 1.0.77 1.0.78 1.0.79 1.0.8 1.0.80 1.0.81 1.0.82 1.0.83 1.0.84 1.0.85 1.0.86 1.0.87 1.0.88 1.0.89 1.0.9 1.0.90 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8
suretriggers / src / Integrations / Mailster / actions / mailster-add-update-subscriber.php
suretriggers / src / Integrations / Mailster / actions Last commit date
mailster-add-subscriber-to-list.php 1 month ago mailster-add-tag-to-subscriber.php 1 month ago mailster-add-update-subscriber.php 1 month ago mailster-delete-subscriber.php 1 month ago mailster-get-subscriber-by-email.php 1 month ago mailster-remove-subscriber-from-list.php 1 month ago mailster-remove-tag-from-subscriber.php 1 month ago mailster-unsubscribe-subscriber.php 1 month ago
mailster-add-update-subscriber.php
182 lines
1 <?php
2 /**
3 * MailsterAddUpdateSubscriber.
4 * php version 5.6
5 *
6 * @category MailsterAddUpdateSubscriber
7 * @package SureTriggers
8 * @author BSF <username@example.com>
9 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
10 * @link https://www.brainstormforce.com/
11 * @since 1.0.0
12 */
13
14 namespace SureTriggers\Integrations\Mailster\Actions;
15
16 use Exception;
17 use SureTriggers\Integrations\AutomateAction;
18 use SureTriggers\Integrations\Mailster\Mailster;
19 use SureTriggers\Traits\SingletonLoader;
20
21 /**
22 * MailsterAddUpdateSubscriber
23 *
24 * @category MailsterAddUpdateSubscriber
25 * @package SureTriggers
26 * @author BSF <username@example.com>
27 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
28 * @link https://www.brainstormforce.com/
29 * @since 1.0.0
30 */
31 class MailsterAddUpdateSubscriber extends AutomateAction {
32
33 /**
34 * Integration type.
35 *
36 * @var string
37 */
38 public $integration = 'Mailster';
39
40 /**
41 * Action name.
42 *
43 * @var string
44 */
45 public $action = 'mailster_add_update_subscriber';
46
47 use SingletonLoader;
48
49 /**
50 * Register a action.
51 *
52 * @param array $actions actions.
53 * @return array
54 */
55 public function register( $actions ) {
56
57 $actions[ $this->integration ][ $this->action ] = [
58 'label' => __( 'Add/Update Subscriber', 'suretriggers' ),
59 'action' => $this->action,
60 'function' => [ $this, 'action_listener' ],
61 ];
62 return $actions;
63 }
64
65 /**
66 * Action listener.
67 *
68 * Uses `mailster( 'subscribers' )->add()` (classes/subscribers.class.php)
69 * which upserts by email when `$overwrite` is true.
70 *
71 * @param int $user_id user_id.
72 * @param int $automation_id automation_id.
73 * @param array $fields fields.
74 * @param array $selected_options selectedOptions.
75 * @return array|void
76 * @throws Exception Exception.
77 */
78 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
79 if ( ! function_exists( 'mailster' ) ) {
80 return [
81 'status' => 'error',
82 'message' => __( 'Mailster plugin functions not found.', 'suretriggers' ),
83 ];
84 }
85
86 $email = isset( $selected_options['email'] ) ? sanitize_email( (string) $selected_options['email'] ) : '';
87
88 if ( empty( $email ) || ! is_email( $email ) ) {
89 return [
90 'status' => 'error',
91 'message' => __( 'Email address is invalid.', 'suretriggers' ),
92 ];
93 }
94
95 $entry = [
96 'email' => $email,
97 ];
98
99 if ( ! empty( $selected_options['first_name'] ) ) {
100 $entry['firstname'] = sanitize_text_field( (string) $selected_options['first_name'] );
101 }
102
103 if ( ! empty( $selected_options['last_name'] ) ) {
104 $entry['lastname'] = sanitize_text_field( (string) $selected_options['last_name'] );
105 }
106
107 if ( isset( $selected_options['status'] ) && is_numeric( $selected_options['status'] ) ) {
108 $entry['status'] = absint( $selected_options['status'] );
109 }
110
111 $send_notification = isset( $selected_options['send_notification'] )
112 && in_array( $selected_options['send_notification'], [ true, 1, '1', 'true' ], true );
113
114 $subscriber_id = mailster( 'subscribers' )->add( $entry, true, false, $send_notification );
115
116 if ( is_wp_error( $subscriber_id ) ) {
117 return [
118 'status' => 'error',
119 'message' => $subscriber_id->get_error_message(),
120 ];
121 }
122
123 if ( ! empty( $selected_options['list_id'] ) ) {
124 $list_ids = $this->normalize_ids( $selected_options['list_id'] );
125
126 if ( ! empty( $list_ids ) ) {
127 mailster( 'subscribers' )->assign_lists( [ $subscriber_id ], $list_ids );
128 }
129 }
130
131 $subscriber = mailster( 'subscribers' )->get( $subscriber_id, true );
132
133 $context = [
134 'subscriber_id' => absint( $subscriber_id ),
135 'email' => $email,
136 'first_name' => is_object( $subscriber ) && isset( $subscriber->firstname ) ? $subscriber->firstname : '',
137 'last_name' => is_object( $subscriber ) && isset( $subscriber->lastname ) ? $subscriber->lastname : '',
138 'status' => is_object( $subscriber ) && isset( $subscriber->status ) ? absint( $subscriber->status ) : 0,
139 'status_label' => Mailster::get_status_label( is_object( $subscriber ) && isset( $subscriber->status ) ? $subscriber->status : 0 ),
140 ];
141
142 return $context;
143 }
144
145 /**
146 * Normalize a select field's value(s) into an array of integer IDs.
147 *
148 * Supports a single ID, a comma-separated string of IDs, or an array
149 * of `{ value, label }` options as produced by multi-select fields.
150 *
151 * @param mixed $value Raw selected option value.
152 * @return int[]
153 */
154 protected function normalize_ids( $value ) {
155 $ids = [];
156
157 if ( is_array( $value ) ) {
158 foreach ( $value as $item ) {
159 if ( is_array( $item ) && isset( $item['value'] ) ) {
160 $ids[] = absint( $item['value'] );
161 } elseif ( is_numeric( $item ) ) {
162 $ids[] = absint( $item );
163 }
164 }
165 } elseif ( is_string( $value ) ) {
166 foreach ( explode( ',', $value ) as $item ) {
167 $item = trim( $item );
168 if ( is_numeric( $item ) ) {
169 $ids[] = absint( $item );
170 }
171 }
172 } elseif ( is_numeric( $value ) ) {
173 $ids[] = absint( $value );
174 }
175
176 return array_values( array_unique( array_filter( $ids ) ) );
177 }
178
179 }
180
181 MailsterAddUpdateSubscriber::get_instance();
182