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 / amelia / triggers / appointment-booking-status-changed.php
suretriggers / src / Integrations / amelia / triggers Last commit date
appointment-booked.php 2 years ago appointment-booking-status-changed.php 2 years ago appointment-cancelled.php 2 years ago appointment-rescheduled.php 2 years ago event-attendee.php 2 months ago event-booking-status-changed.php 1 year ago event-cancelled.php 1 year ago event-rescheduled.php 1 year ago package-purchase-status-updated.php 8 months ago package-purchased.php 8 months ago
appointment-booking-status-changed.php
192 lines
1 <?php
2 /**
3 * AppointmentBookingStatusChanged.
4 * php version 5.6
5 *
6 * @category AppointmentBookingStatusChanged
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\Amelia\Triggers;
15
16 use SureTriggers\Controllers\AutomationController;
17 use SureTriggers\Integrations\WordPress\WordPress;
18 use SureTriggers\Traits\SingletonLoader;
19
20 if ( ! class_exists( 'AppointmentBookingStatusChanged' ) ) :
21
22 /**
23 * AppointmentBookingStatusChanged
24 *
25 * @category AppointmentBookingStatusChanged
26 * @package SureTriggers
27 * @author BSF <username@example.com>
28 * @license https://www.gnu.org/licenses/gpl-3.0.html GPLv3
29 * @link https://www.brainstormforce.com/
30 * @since 1.0.0
31 *
32 * @psalm-suppress UndefinedTrait
33 */
34 class AppointmentBookingStatusChanged {
35
36 /**
37 * Integration type.
38 *
39 * @var string
40 */
41 public $integration = 'Amelia';
42
43 /**
44 * Trigger name.
45 *
46 * @var string
47 */
48 public $trigger = 'amelia_appointment_booking_status_changed';
49
50 use SingletonLoader;
51
52 /**
53 * Constructor
54 *
55 * @since 1.0.0
56 */
57 public function __construct() {
58 add_filter( 'sure_trigger_register_trigger', [ $this, 'register' ] );
59 }
60
61 /**
62 * Register action.
63 *
64 * @param array $triggers trigger data.
65 * @return array
66 */
67 public function register( $triggers ) {
68 $triggers[ $this->integration ][ $this->trigger ] = [
69 'label' => __( 'Appointment Booking Status Changed', 'suretriggers' ),
70 'action' => $this->trigger,
71 'common_action' => 'AmeliaBookingStatusUpdated',
72 'function' => [ $this, 'trigger_listener' ],
73 'priority' => 10,
74 'accepted_args' => 1,
75 ];
76 return $triggers;
77 }
78
79 /**
80 * Trigger listener
81 *
82 * @param array $args Appointment Data.
83 * @since 1.0.0
84 *
85 * @return void
86 */
87 public function trigger_listener( $args ) {
88 if ( empty( $args ) ) {
89 return;
90 }
91
92 if ( 'appointment' !== $args['type'] ) {
93 return;
94 }
95
96 $status = isset( $args['status'] ) ? $args['status'] : null;
97
98 global $wpdb;
99
100 $result = $wpdb->get_row(
101 $wpdb->prepare(
102 'SELECT appointments.*, customer.*
103 FROM ' . $wpdb->prefix . 'amelia_customer_bookings as customer
104 INNER JOIN ' . $wpdb->prefix . 'amelia_appointments as appointments
105 ON customer.appointmentId=appointments.id
106 WHERE customer.appointmentId = %d AND appointments.serviceId = %d',
107 [ $args['bookings'][0]['appointmentId'], $args['serviceId'] ]
108 ),
109 ARRAY_A
110 );
111
112 $payment_result = $wpdb->get_row(
113 $wpdb->prepare(
114 'SELECT * FROM ' . $wpdb->prefix . 'amelia_payments WHERE customerBookingId = %d',
115 [ $args['bookings'][0]['id'] ]
116 ),
117 ARRAY_A
118 );
119
120 $customer_result = $wpdb->get_row(
121 $wpdb->prepare(
122 'SELECT * FROM ' . $wpdb->prefix . 'amelia_users WHERE id = %d',
123 [ $args['bookings'][0]['customerId'] ]
124 ),
125 ARRAY_A
126 );
127
128 $service_result = $wpdb->get_row(
129 $wpdb->prepare(
130 'SELECT name AS serviceName, description AS serviceDescription, categoryId FROM ' . $wpdb->prefix . 'amelia_services WHERE id = %d',
131 [ $args['serviceId'] ]
132 ),
133 ARRAY_A
134 );
135
136 $category_result = $wpdb->get_row(
137 $wpdb->prepare(
138 'SELECT name AS categoryName FROM ' . $wpdb->prefix . 'amelia_categories WHERE id = %d',
139 [ $service_result['categoryId'] ]
140 ),
141 ARRAY_A
142 );
143
144 if ( isset( $args['bookings'][0]['couponId'] ) ) {
145 $coupon_result = $wpdb->get_row(
146 $wpdb->prepare(
147 'SELECT code AS couponCode, expirationDate AS couponExpirationDate FROM ' . $wpdb->prefix . 'amelia_coupons WHERE id = %d',
148 [ $args['bookings'][0]['couponId'] ]
149 ),
150 ARRAY_A
151 );
152 } else {
153 $coupon_result = [];
154 }
155
156 if ( ! empty( $result['customFields'] ) ) {
157 $custom_fields = json_decode( $result['customFields'], true );
158
159 $fields_arr = [];
160 foreach ( (array) $custom_fields as $fields ) {
161 if ( is_array( $fields ) ) {
162 $fields_arr[ $fields['label'] ] = $fields['value'];
163 }
164 }
165 unset( $result['customFields'] );
166 } else {
167 $fields_arr = [];
168 }
169
170 $context = array_merge( $result, $fields_arr, $payment_result, $customer_result, $service_result, $category_result, $coupon_result );
171 $context['amelia_category_list'] = $service_result['categoryId'];
172 $context['amelia_service_list'] = $args['serviceId'];
173 $context['appointment_status'] = $status;
174
175 AutomationController::sure_trigger_handle_trigger(
176 [
177 'trigger' => $this->trigger,
178 'context' => $context,
179 ]
180 );
181 }
182 }
183
184 /**
185 * Ignore false positive
186 *
187 * @psalm-suppress UndefinedMethod
188 */
189 AppointmentBookingStatusChanged::get_instance();
190
191 endif;
192