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 / create-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
create-reservation.php
195 lines
1 <?php
2 /**
3 * CreateReservation.
4 * php version 5.6
5 *
6 * @category CreateReservation
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 * CreateReservation
22 *
23 * @category CreateReservation
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 CreateReservation 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_create_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' => __( 'Create 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 data from selected options.
76 $name = isset( $selected_options['wpc_name'] ) ? sanitize_text_field( $selected_options['wpc_name'] ) : '';
77 $email = isset( $selected_options['wpc_email'] ) ? sanitize_email( $selected_options['wpc_email'] ) : '';
78 $phone = isset( $selected_options['wpc_phone'] ) ? sanitize_text_field( $selected_options['wpc_phone'] ) : '';
79 $party = isset( $selected_options['wpc_party'] ) ? absint( $selected_options['wpc_party'] ) : 1;
80 $date = isset( $selected_options['wpc_date'] ) ? sanitize_text_field( $selected_options['wpc_date'] ) : '';
81 $time = isset( $selected_options['wpc_time'] ) ? sanitize_text_field( $selected_options['wpc_time'] ) : '';
82 $end_time = isset( $selected_options['wpc_end_time'] ) ? sanitize_text_field( $selected_options['wpc_end_time'] ) : '';
83 $message = isset( $selected_options['wpc_message'] ) ? sanitize_textarea_field( $selected_options['wpc_message'] ) : '';
84 $branch = isset( $selected_options['wpc_branch'] ) ? sanitize_text_field( $selected_options['wpc_branch'] ) : '';
85 $status = isset( $selected_options['reservation_status'] ) ? sanitize_text_field( $selected_options['reservation_status'] ) : 'pending';
86
87 // Validate required fields.
88 if ( empty( $name ) ) {
89 return [
90 'status' => 'error',
91 'message' => __( 'Name is required.', 'suretriggers' ),
92 ];
93 }
94
95 if ( empty( $email ) ) {
96 return [
97 'status' => 'error',
98 'message' => __( 'Email is required.', 'suretriggers' ),
99 ];
100 }
101
102 if ( empty( $date ) ) {
103 return [
104 'status' => 'error',
105 'message' => __( 'Reservation date is required.', 'suretriggers' ),
106 ];
107 }
108
109 if ( empty( $time ) ) {
110 return [
111 'status' => 'error',
112 'message' => __( 'Reservation time is required.', 'suretriggers' ),
113 ];
114 }
115
116 try {
117 // Create reservation post.
118 $reservation_data = [
119 'post_type' => 'wpc_reservation',
120 'post_status' => $status,
121 'post_title' => sprintf(
122 /* translators: %1$s: Name, %2$s: Date, %3$s: Time */
123 __( 'Reservation - %1$s - %2$s %3$s', 'suretriggers' ),
124 $name,
125 $date,
126 $time
127 ),
128 ];
129
130 $reservation_id = wp_insert_post( $reservation_data, true );
131
132 if ( is_wp_error( $reservation_id ) ) {
133 return [
134 'status' => 'error',
135 'message' => $reservation_id->get_error_message(),
136 ];
137 }
138
139 // Convert time to Unix timestamp (WPCafe stores times as timestamps).
140 $start_timestamp = strtotime( $date . ' ' . $time );
141 $end_timestamp = ! empty( $end_time ) ? strtotime( $date . ' ' . $end_time ) : $start_timestamp + 3600; // Default 1 hour duration.
142
143 // Add reservation meta data using WPCafe's meta keys.
144 update_post_meta( $reservation_id, 'name', $name );
145 update_post_meta( $reservation_id, 'email', $email );
146 update_post_meta( $reservation_id, 'phone', $phone );
147 update_post_meta( $reservation_id, 'total_guest', $party );
148 update_post_meta( $reservation_id, 'date', $date );
149 update_post_meta( $reservation_id, 'start_time', $start_timestamp );
150 update_post_meta( $reservation_id, 'end_time', $end_timestamp );
151 update_post_meta( $reservation_id, 'status', $status );
152 update_post_meta( $reservation_id, 'invoice', 'WPC' . wp_rand( 1000, 9999 ) );
153
154 if ( ! empty( $message ) ) {
155 update_post_meta( $reservation_id, 'notes', $message );
156 }
157
158 if ( ! empty( $branch ) ) {
159 update_post_meta( $reservation_id, 'branch_id', $branch );
160 // Get branch name from Location_Model.
161 if ( class_exists( 'WpCafe\Models\Location_Model' ) ) {
162 $location = \WpCafe\Models\Location_Model::find( $branch );
163 if ( $location ) {
164 update_post_meta( $reservation_id, 'branch_name', $location->restaurant_name );
165 }
166 }
167 }
168
169 return [
170 'status' => 'success',
171 'message' => __( 'Reservation created successfully.', 'suretriggers' ),
172 'reservation_id' => $reservation_id,
173 'reservation_status' => $status,
174 'wpc_name' => $name,
175 'wpc_email' => $email,
176 'wpc_phone' => $phone,
177 'wpc_party' => $party,
178 'wpc_date' => $date,
179 'wpc_time' => $time,
180 'wpc_end_time' => $end_time,
181 'wpc_message' => $message,
182 'wpc_branch' => $branch,
183 ];
184
185 } catch ( Exception $e ) {
186 return [
187 'status' => 'error',
188 'message' => $e->getMessage(),
189 ];
190 }
191 }
192 }
193
194 CreateReservation::get_instance();
195