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 / wpcafe / actions / update-reservation.php
suretriggers / src / Integrations / wpcafe / actions Last commit date
create-reservation.php 5 months ago delete-reservation.php 5 months ago update-reservation.php 5 months ago
update-reservation.php
240 lines
1 <?php
2 /**
3 * UpdateReservation.
4 * php version 5.6
5 *
6 * @category UpdateReservation
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\WPCafe\Actions;
15
16 use Exception;
17 use SureTriggers\Integrations\AutomateAction;
18 use SureTriggers\Traits\SingletonLoader;
19
20 /**
21 * UpdateReservation
22 *
23 * @category UpdateReservation
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 UpdateReservation extends AutomateAction {
31
32 /**
33 * Integration type.
34 *
35 * @var string
36 */
37 public $integration = 'WPCafe';
38
39 /**
40 * Action name.
41 *
42 * @var string
43 */
44 public $action = 'wpcafe_update_reservation';
45
46 use SingletonLoader;
47
48 /**
49 * Register a action.
50 *
51 * @param array $actions actions.
52 * @return array
53 */
54 public function register( $actions ) {
55 $actions[ $this->integration ][ $this->action ] = [
56 'label' => __( 'Update Reservation', 'suretriggers' ),
57 'action' => $this->action,
58 'function' => [ $this, 'action_listener' ],
59 ];
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 Selected options.
71 *
72 * @return array|void
73 */
74 public function _action_listener( $user_id, $automation_id, $fields, $selected_options ) {
75 // Get reservation ID.
76 $reservation_id = isset( $selected_options['reservation_id'] ) ? absint( $selected_options['reservation_id'] ) : 0;
77
78 // Validate reservation ID.
79 if ( empty( $reservation_id ) ) {
80 return [
81 'status' => 'error',
82 'message' => __( 'Reservation ID is required.', 'suretriggers' ),
83 ];
84 }
85
86 // Check if reservation exists.
87 $reservation = get_post( $reservation_id );
88
89 if ( ! $reservation || 'wpc_reservation' !== $reservation->post_type ) {
90 return [
91 'status' => 'error',
92 'message' => __( 'Reservation not found.', 'suretriggers' ),
93 ];
94 }
95
96 try {
97 $updated_fields = [];
98 $status = null;
99
100 // Update status if provided.
101 if ( isset( $selected_options['reservation_status'] ) && ! empty( $selected_options['reservation_status'] ) ) {
102 $status = sanitize_text_field( $selected_options['reservation_status'] );
103 $update_post = wp_update_post(
104 [
105 'ID' => $reservation_id,
106 'post_status' => $status,
107 ],
108 true
109 );
110
111 if ( is_wp_error( $update_post ) ) {
112 return [
113 'status' => 'error',
114 'message' => $update_post->get_error_message(),
115 ];
116 }
117
118 $updated_fields['reservation_status'] = $status;
119 }
120
121 // Get current date for timestamp conversion.
122 $current_date = get_post_meta( $reservation_id, 'date', true );
123
124 // Update name if provided.
125 if ( isset( $selected_options['wpc_name'] ) && ! empty( $selected_options['wpc_name'] ) ) {
126 $name = sanitize_text_field( $selected_options['wpc_name'] );
127 update_post_meta( $reservation_id, 'name', $name );
128 $updated_fields['name'] = $name;
129 }
130
131 // Update email if provided.
132 if ( isset( $selected_options['wpc_email'] ) && ! empty( $selected_options['wpc_email'] ) ) {
133 $email = sanitize_email( $selected_options['wpc_email'] );
134 update_post_meta( $reservation_id, 'email', $email );
135 $updated_fields['email'] = $email;
136 }
137
138 // Update phone if provided.
139 if ( isset( $selected_options['wpc_phone'] ) && ! empty( $selected_options['wpc_phone'] ) ) {
140 $phone = sanitize_text_field( $selected_options['wpc_phone'] );
141 update_post_meta( $reservation_id, 'phone', $phone );
142 $updated_fields['phone'] = $phone;
143 }
144
145 // Update party size if provided.
146 if ( isset( $selected_options['wpc_party'] ) && ! empty( $selected_options['wpc_party'] ) ) {
147 $party = absint( $selected_options['wpc_party'] );
148 update_post_meta( $reservation_id, 'total_guest', $party );
149 $updated_fields['total_guest'] = $party;
150 }
151
152 // Update date if provided.
153 if ( isset( $selected_options['wpc_date'] ) && ! empty( $selected_options['wpc_date'] ) ) {
154 $date = sanitize_text_field( $selected_options['wpc_date'] );
155 update_post_meta( $reservation_id, 'date', $date );
156 $updated_fields['date'] = $date;
157 $current_date = $date; // Update for timestamp conversion.
158 }
159
160 // Update start time if provided (convert to timestamp).
161 if ( isset( $selected_options['wpc_time'] ) && ! empty( $selected_options['wpc_time'] ) ) {
162 $time = sanitize_text_field( $selected_options['wpc_time'] );
163 $start_timestamp = strtotime( $current_date . ' ' . $time );
164 update_post_meta( $reservation_id, 'start_time', $start_timestamp );
165 $updated_fields['start_time'] = $start_timestamp;
166 }
167
168 // Update end time if provided (convert to timestamp).
169 if ( isset( $selected_options['wpc_end_time'] ) && ! empty( $selected_options['wpc_end_time'] ) ) {
170 $end_time = sanitize_text_field( $selected_options['wpc_end_time'] );
171 $end_timestamp = strtotime( $current_date . ' ' . $end_time );
172 update_post_meta( $reservation_id, 'end_time', $end_timestamp );
173 $updated_fields['end_time'] = $end_timestamp;
174 }
175
176 // Update message/notes if provided.
177 if ( isset( $selected_options['wpc_message'] ) && ! empty( $selected_options['wpc_message'] ) ) {
178 $message = sanitize_textarea_field( $selected_options['wpc_message'] );
179 update_post_meta( $reservation_id, 'notes', $message );
180 $updated_fields['notes'] = $message;
181 }
182
183 // Update branch if provided.
184 if ( isset( $selected_options['wpc_branch'] ) && ! empty( $selected_options['wpc_branch'] ) ) {
185 $branch = sanitize_text_field( $selected_options['wpc_branch'] );
186 update_post_meta( $reservation_id, 'branch_id', $branch );
187 $updated_fields['branch_id'] = $branch;
188
189 // Get branch name from Location_Model.
190 if ( class_exists( 'WpCafe\Models\Location_Model' ) ) {
191 $location = \WpCafe\Models\Location_Model::find( $branch );
192 if ( $location ) {
193 update_post_meta( $reservation_id, 'branch_name', $location->restaurant_name );
194 $updated_fields['branch_name'] = $location->restaurant_name;
195 }
196 }
197 }
198
199 // Update status in meta as well.
200 if ( isset( $selected_options['reservation_status'] ) && ! empty( $selected_options['reservation_status'] ) ) {
201 update_post_meta( $reservation_id, 'status', $status );
202 }
203
204 // Get current reservation data.
205 $current_data = [
206 'reservation_id' => $reservation_id,
207 'reservation_status' => get_post_status( $reservation_id ),
208 'name' => get_post_meta( $reservation_id, 'name', true ),
209 'email' => get_post_meta( $reservation_id, 'email', true ),
210 'phone' => get_post_meta( $reservation_id, 'phone', true ),
211 'total_guest' => get_post_meta( $reservation_id, 'total_guest', true ),
212 'date' => get_post_meta( $reservation_id, 'date', true ),
213 'start_time' => get_post_meta( $reservation_id, 'start_time', true ),
214 'end_time' => get_post_meta( $reservation_id, 'end_time', true ),
215 'notes' => get_post_meta( $reservation_id, 'notes', true ),
216 'branch_id' => get_post_meta( $reservation_id, 'branch_id', true ),
217 'branch_name' => get_post_meta( $reservation_id, 'branch_name', true ),
218 'invoice' => get_post_meta( $reservation_id, 'invoice', true ),
219 ];
220
221 return array_merge(
222 [
223 'status' => 'success',
224 'message' => __( 'Reservation updated successfully.', 'suretriggers' ),
225 'updated_fields' => array_keys( $updated_fields ),
226 ],
227 $current_data
228 );
229
230 } catch ( Exception $e ) {
231 return [
232 'status' => 'error',
233 'message' => $e->getMessage(),
234 ];
235 }
236 }
237 }
238
239 UpdateReservation::get_instance();
240