PluginProbe ʕ •ᴥ•ʔ
OttoKit: All-in-One Automation Platform / 1.1.32
OttoKit: All-in-One Automation Platform v1.1.32
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 / eventprime / actions / create-event.php
suretriggers / src / Integrations / eventprime / actions Last commit date
cancel-booking.php 3 months ago create-event.php 3 months ago
create-event.php
283 lines
1 <?php
2 /**
3 * CreateEvent.
4 * php version 5.6
5 *
6 * @category CreateEvent
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\EventPrime\Actions;
15
16 use Exception;
17 use SureTriggers\Integrations\AutomateAction;
18 use SureTriggers\Integrations\EventPrime\EventPrime;
19 use SureTriggers\Traits\SingletonLoader;
20
21 /**
22 * CreateEvent
23 *
24 * @category CreateEvent
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 CreateEvent extends AutomateAction {
32
33 /**
34 * Integration type.
35 *
36 * @var string
37 */
38 public $integration = 'EventPrime';
39
40 /**
41 * Action name.
42 *
43 * @var string
44 */
45 public $action = 'ep_create_event';
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' => __( 'Create an Event', 'suretriggers' ),
59 'action' => $this->action,
60 'function' => [ $this, 'action_listener' ],
61 ];
62
63 return $actions;
64 }
65
66 /**
67 * Action listener.
68 *
69 * @param int $user_id user_id.
70 * @param int $automation_id automation_id.
71 * @param array $fields fields.
72 * @param array $selected_options selectedOptions.
73 *
74 * @return array|mixed
75 *
76 * @throws Exception Exception.
77 */
78 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
79
80 $event_title = isset( $selected_options['event_title'] ) ? sanitize_text_field( $selected_options['event_title'] ) : '';
81
82 if ( empty( $event_title ) ) {
83 return [
84 'status' => 'error',
85 'message' => __( 'Event title is required.', 'suretriggers' ),
86 ];
87 }
88
89 $start_date_input = isset( $selected_options['event_start_date'] ) ? sanitize_text_field( $selected_options['event_start_date'] ) : '';
90
91 if ( empty( $start_date_input ) ) {
92 return [
93 'status' => 'error',
94 'message' => __( 'Start date is required.', 'suretriggers' ),
95 ];
96 }
97
98 // Determine post status.
99 $post_status = 'publish';
100 $allowed_statuses = [ 'publish', 'draft', 'pending', 'private' ];
101 if ( ! empty( $selected_options['event_status'] ) ) {
102 $status = sanitize_text_field( $selected_options['event_status'] );
103 if ( in_array( $status, $allowed_statuses, true ) ) {
104 $post_status = $status;
105 }
106 }
107
108 // Create the event post.
109 $event_args = [
110 'post_title' => $event_title,
111 'post_type' => 'em_event',
112 'post_status' => $post_status,
113 'post_content' => '',
114 ];
115
116 if ( ! empty( $selected_options['event_description'] ) ) {
117 $event_args['post_content'] = wp_kses_post( $selected_options['event_description'] );
118 }
119
120 $event_id = wp_insert_post( $event_args, true );
121
122 if ( is_wp_error( $event_id ) ) {
123 return [
124 'status' => 'error',
125 'message' => $event_id->get_error_message(),
126 ];
127 }
128
129 // Core meta.
130 update_post_meta( $event_id, 'em_id', $event_id );
131 update_post_meta( $event_id, 'em_name', $event_title );
132
133 // Parse dates and times.
134 $start_ts = strtotime( $start_date_input );
135 if ( false === $start_ts ) {
136 wp_delete_post( $event_id, true );
137 return [
138 'status' => 'error',
139 'message' => __( 'Invalid start date format.', 'suretriggers' ),
140 ];
141 }
142
143 $end_date_input = isset( $selected_options['event_end_date'] ) ? sanitize_text_field( $selected_options['event_end_date'] ) : '';
144 $end_ts = $start_ts;
145 if ( ! empty( $end_date_input ) ) {
146 $end_ts = strtotime( $end_date_input );
147 if ( false === $end_ts ) {
148 wp_delete_post( $event_id, true );
149 return [
150 'status' => 'error',
151 'message' => __( 'Invalid end date format.', 'suretriggers' ),
152 ];
153 }
154 }
155
156 // Start time / end time (12h format expected by EP, e.g. "10:00 AM").
157 $start_time = ! empty( $selected_options['event_start_time'] ) ? sanitize_text_field( $selected_options['event_start_time'] ) : '';
158 $end_time = ! empty( $selected_options['event_end_time'] ) ? sanitize_text_field( $selected_options['event_end_time'] ) : '';
159
160 // Use EP helper if available for timestamp conversion, fallback to strtotime.
161 $ep_functions = null;
162 if ( class_exists( 'Eventprime_Basic_Functions' ) ) {
163 $ep_functions = new \Eventprime_Basic_Functions();
164 }
165
166 $start_date_str = gmdate( 'Y-m-d', $start_ts );
167 $end_date_str = gmdate( 'Y-m-d', $end_ts );
168
169 if ( $ep_functions && method_exists( $ep_functions, 'ep_date_to_timestamp' ) ) {
170 $em_start_date = (int) $ep_functions->ep_date_to_timestamp( $start_date_str, 'Y-m-d', 1 );
171 $em_end_date = (int) $ep_functions->ep_date_to_timestamp( $end_date_str, 'Y-m-d', 1 );
172 } else {
173 $em_start_date = (int) strtotime( $start_date_str . ' 00:00:00' );
174 $em_end_date = (int) strtotime( $end_date_str . ' 00:00:00' );
175 }
176
177 update_post_meta( $event_id, 'em_start_date', $em_start_date );
178 update_post_meta( $event_id, 'em_end_date', $em_end_date );
179 update_post_meta( $event_id, 'em_start_time', $start_time );
180 update_post_meta( $event_id, 'em_end_time', $end_time );
181
182 // Combined date_time timestamps.
183 if ( ! empty( $start_time ) ) {
184 $start_dt_str = $start_date_str . ' ' . $start_time;
185 if ( $ep_functions && method_exists( $ep_functions, 'ep_datetime_to_timestamp' ) ) {
186 $em_start_dt = (int) $ep_functions->ep_datetime_to_timestamp( $start_dt_str, 'Y-m-d', '', 0, 1 );
187 } else {
188 $em_start_dt = (int) strtotime( $start_dt_str );
189 }
190 update_post_meta( $event_id, 'em_start_date_time', $em_start_dt );
191 }
192
193 if ( ! empty( $end_time ) ) {
194 $end_dt_str = $end_date_str . ' ' . $end_time;
195 if ( $ep_functions && method_exists( $ep_functions, 'ep_datetime_to_timestamp' ) ) {
196 $em_end_dt = (int) $ep_functions->ep_datetime_to_timestamp( $end_dt_str, 'Y-m-d', '', 0, 1 );
197 } else {
198 $em_end_dt = (int) strtotime( $end_dt_str );
199 }
200 update_post_meta( $event_id, 'em_end_date_time', $em_end_dt );
201 }
202
203 // All day.
204 $all_day = 0;
205 if ( ! empty( $selected_options['event_all_day'] ) && 'yes' === strtolower( sanitize_text_field( $selected_options['event_all_day'] ) ) ) {
206 $all_day = 1;
207 }
208 update_post_meta( $event_id, 'em_all_day', $all_day );
209
210 // Enable booking.
211 $enable_booking = 'bookings_off';
212 if ( ! empty( $selected_options['event_enable_booking'] ) && 'yes' === strtolower( sanitize_text_field( $selected_options['event_enable_booking'] ) ) ) {
213 $enable_booking = 'bookings_on';
214 }
215 update_post_meta( $event_id, 'em_enable_booking', $enable_booking );
216
217 // Fixed event price.
218 if ( isset( $selected_options['event_fixed_price'] ) && '' !== $selected_options['event_fixed_price'] && is_numeric( $selected_options['event_fixed_price'] ) ) {
219 update_post_meta( $event_id, 'em_fixed_event_price', (string) floatval( $selected_options['event_fixed_price'] ) );
220 }
221
222 // Venue (taxonomy term ID).
223 if ( ! empty( $selected_options['event_venue_id'] ) ) {
224 $venue_id = absint( $selected_options['event_venue_id'] );
225 if ( $venue_id > 0 && term_exists( $venue_id, 'em_venue' ) ) {
226 update_post_meta( $event_id, 'em_venue', $venue_id );
227 wp_set_object_terms( $event_id, [ $venue_id ], 'em_venue', false );
228 }
229 }
230
231 // Event Type (taxonomy term ID).
232 if ( ! empty( $selected_options['event_type_id'] ) ) {
233 $type_id = absint( $selected_options['event_type_id'] );
234 if ( $type_id > 0 && term_exists( $type_id, 'em_event_type' ) ) {
235 update_post_meta( $event_id, 'em_event_type', $type_id );
236 wp_set_object_terms( $event_id, [ $type_id ], 'em_event_type', false );
237 }
238 }
239
240 // Organizer (taxonomy term ID).
241 if ( ! empty( $selected_options['event_organizer_id'] ) ) {
242 $organizer_id = absint( $selected_options['event_organizer_id'] );
243 if ( $organizer_id > 0 && term_exists( $organizer_id, 'em_event_organizer' ) ) {
244 update_post_meta( $event_id, 'em_organizer', $organizer_id );
245 wp_set_object_terms( $event_id, [ $organizer_id ], 'em_event_organizer', false );
246 }
247 }
248
249 // Performer(s) (post IDs, comma-separated).
250 if ( ! empty( $selected_options['event_performer_ids'] ) ) {
251 $raw_performers = sanitize_text_field( $selected_options['event_performer_ids'] );
252 $performer_ids = array_filter( array_map( 'absint', explode( ',', $raw_performers ) ) );
253 $valid_ids = [];
254 foreach ( $performer_ids as $pid ) {
255 if ( 'em_performer' === get_post_type( $pid ) ) {
256 $valid_ids[] = $pid;
257 }
258 }
259 if ( ! empty( $valid_ids ) ) {
260 update_post_meta( $event_id, 'em_performer', $valid_ids );
261 }
262 }
263
264 // Featured image.
265 if ( ! empty( $selected_options['event_featured_image'] ) ) {
266 $image_url = esc_url_raw( $selected_options['event_featured_image'] );
267 if ( ! function_exists( 'media_sideload_image' ) ) {
268 require_once ABSPATH . 'wp-admin/includes/media.php';
269 require_once ABSPATH . 'wp-admin/includes/file.php';
270 require_once ABSPATH . 'wp-admin/includes/image.php';
271 }
272 $attachment_id = media_sideload_image( $image_url, $event_id, $event_title, 'id' );
273 if ( ! is_wp_error( $attachment_id ) && is_int( $attachment_id ) ) {
274 set_post_thumbnail( $event_id, $attachment_id );
275 }
276 }
277
278 return EventPrime::get_event_context( $event_id );
279 }
280 }
281
282 CreateEvent::get_instance();
283