PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.33
OttoKit: All-in-One Automation Platform v1.1.33
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 / mailerpress / actions / get-all-segments.php
suretriggers / src / Integrations / mailerpress / actions Last commit date
add-contact-to-list.php 7 months ago add-tag-to-contact.php 7 months ago create-list.php 7 months ago create-tag.php 7 months ago delete-contact.php 7 months ago delete-list.php 7 months ago delete-tag.php 7 months ago get-all-lists.php 7 months ago get-all-segments.php 7 months ago get-all-tags.php 7 months ago get-contact-by-email.php 7 months ago get-contacts-by-list.php 7 months ago get-contacts-by-tag.php 7 months ago remove-contact-from-list.php 7 months ago remove-tag-from-contact.php 7 months ago
get-all-segments.php
212 lines
1 <?php
2 /**
3 * GetAllSegments.
4 * php version 5.6
5 *
6 * @category GetAllSegments
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\MailerPress\Actions;
15
16 use Exception;
17 use SureTriggers\Integrations\AutomateAction;
18 use SureTriggers\Traits\SingletonLoader;
19
20 /**
21 * GetAllSegments
22 *
23 * @category GetAllSegments
24 * @package SureTriggers
25 * @author BSF <username@example.com>
26 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
27 * @link https://www.brainstormforce.com/
28 * @since 1.0.0
29 */
30 class GetAllSegments extends AutomateAction {
31
32 /**
33 * Integration type.
34 *
35 * @var string
36 */
37 public $integration = 'MailerPress';
38
39 /**
40 * Action name.
41 *
42 * @var string
43 */
44 public $action = 'get_all_segments';
45
46 use SingletonLoader;
47
48 /**
49 * Register a action.
50 *
51 * @param array $actions actions.
52 *
53 * @return array
54 */
55 public function register( $actions ) {
56 $actions[ $this->integration ][ $this->action ] = [
57 'label' => __( 'Get all segments', 'suretriggers' ),
58 'action' => $this->action,
59 'function' => [ $this, 'action_listener' ],
60 ];
61 return $actions;
62 }
63
64 /**
65 * Action listener.
66 *
67 * @param int $user_id user_id.
68 * @param int $automation_id automation_id.
69 * @param array $fields fields.
70 * @param array $selected_options selectedOptions.
71 * @return array|void
72 * @throws Exception Exception.
73 */
74 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
75 // Get optional parameters.
76 $limit = isset( $selected_options['limit'] ) ? absint( $selected_options['limit'] ) : 0;
77 $order_by = isset( $selected_options['order_by'] ) ? sanitize_text_field( $selected_options['order_by'] ) : 'name';
78 $order = isset( $selected_options['order'] ) ? sanitize_text_field( $selected_options['order'] ) : 'ASC';
79 $search = isset( $selected_options['search'] ) ? sanitize_text_field( $selected_options['search'] ) : '';
80
81 // Validate order_by field.
82 $allowed_order_by = [ 'id', 'name', 'created_at', 'updated_at' ];
83 if ( ! in_array( $order_by, $allowed_order_by, true ) ) {
84 $order_by = 'name';
85 }
86
87 // Validate order direction.
88 $order = strtoupper( $order );
89 if ( ! in_array( $order, [ 'ASC', 'DESC' ], true ) ) {
90 $order = 'ASC';
91 }
92
93 try {
94 global $wpdb;
95
96 // Check if segments table exists.
97 $table_name = $wpdb->prefix . 'mailerpress_segments';
98 $table_exists = $wpdb->get_var( $wpdb->prepare( 'SHOW TABLES LIKE %s', $table_name ) );
99
100 if ( ! $table_exists ) {
101 return [
102 'status' => 'error',
103 'message' => 'Segments feature is not available or table does not exist.',
104 ];
105 }
106
107 // Build query.
108 $segments_table = $wpdb->prefix . 'mailerpress_segments';
109
110 if ( ! empty( $search ) ) {
111 $search_term = '%' . $wpdb->esc_like( $search ) . '%';
112 if ( $limit > 0 ) {
113 $segments = $wpdb->get_results(
114 $wpdb->prepare(
115 'SELECT id, name, conditions, created_at, updated_at FROM `' . esc_sql( $segments_table ) . '` WHERE name LIKE %s ORDER BY ' . esc_sql( $order_by ) . ' ' . esc_sql( $order ) . ' LIMIT %d',
116 $search_term,
117 $limit
118 )
119 );
120 } else {
121 $segments = $wpdb->get_results(
122 $wpdb->prepare(
123 'SELECT id, name, conditions, created_at, updated_at FROM `' . esc_sql( $segments_table ) . '` WHERE name LIKE %s ORDER BY ' . esc_sql( $order_by ) . ' ' . esc_sql( $order ),
124 $search_term
125 )
126 );
127 }
128 } else {
129 if ( $limit > 0 ) {
130 $segments = $wpdb->get_results(
131 $wpdb->prepare(
132 'SELECT id, name, conditions, created_at, updated_at FROM `' . esc_sql( $segments_table ) . '` ORDER BY ' . esc_sql( $order_by ) . ' ' . esc_sql( $order ) . ' LIMIT %d',
133 $limit
134 )
135 );
136 } else {
137 $segments = $wpdb->get_results(
138 $wpdb->prepare(
139 'SELECT id, name, conditions, created_at, updated_at FROM `' . esc_sql( $segments_table ) . '` ORDER BY ' . esc_sql( $order_by ) . ' ' . esc_sql( $order )
140 )
141 );
142 }
143 }
144
145 if ( $wpdb->last_error ) {
146 throw new Exception( 'Database error: ' . $wpdb->last_error );
147 }
148
149 // Format the results.
150 $formatted_segments = [];
151 if ( $segments ) {
152 foreach ( $segments as $segment ) {
153 // Parse conditions JSON if it exists.
154 $conditions = null;
155 if ( ! empty( $segment->conditions ) ) {
156 $decoded_conditions = json_decode( $segment->conditions, true );
157 if ( json_last_error() === JSON_ERROR_NONE ) {
158 $conditions = $decoded_conditions;
159 } else {
160 $conditions = $segment->conditions; // Return raw if JSON decode fails.
161 }
162 }
163
164 $formatted_segments[] = [
165 'segment_id' => (int) $segment->id,
166 'name' => $segment->name,
167 'conditions' => $conditions,
168 'created_at' => $segment->created_at,
169 'updated_at' => $segment->updated_at,
170 ];
171 }
172 }
173
174 // Get total count for pagination info.
175 if ( ! empty( $search ) ) {
176 $search_term = '%' . $wpdb->esc_like( $search ) . '%';
177 $total_count = $wpdb->get_var(
178 $wpdb->prepare(
179 'SELECT COUNT(*) FROM `' . esc_sql( $segments_table ) . '` WHERE name LIKE %s',
180 $search_term
181 )
182 );
183 } else {
184 $total_count = $wpdb->get_var(
185 $wpdb->prepare(
186 'SELECT COUNT(*) FROM `' . esc_sql( $segments_table ) . '`'
187 )
188 );
189 }
190
191 return [
192 'segments' => $formatted_segments,
193 'total_count' => (int) $total_count,
194 'returned' => count( $formatted_segments ),
195 'search' => $search,
196 'order_by' => $order_by,
197 'order' => $order,
198 'limit' => $limit,
199 'success' => true,
200 ];
201
202 } catch ( Exception $e ) {
203 return [
204 'status' => 'error',
205 'message' => $e->getMessage(),
206 ];
207 }
208 }
209 }
210
211 GetAllSegments::get_instance();
212