PluginProbe ʕ •ᴥ•ʔ
Appointment Booking Plugin – LatePoint | Calendar & Scheduling for WordPress / 5.1.2
Appointment Booking Plugin – LatePoint | Calendar & Scheduling for WordPress v5.1.2
5.6.8 5.6.7 5.6.6 5.6.5 5.6.4 5.6.3 5.6.2 5.6.1 5.6.0 5.5.2 5.5.1 5.5.0 5.4.2 trunk 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.1.91 5.1.92 5.1.93 5.1.94 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1
latepoint / lib / helpers / order_intent_helper.php
latepoint / lib / helpers Last commit date
activities_helper.php 1 year ago agent_helper.php 1 year ago auth_helper.php 1 year ago blocks_helper.php 1 year ago booking_helper.php 1 year ago bricks_helper.php 1 year ago bundles_helper.php 1 year ago calendar_helper.php 1 year ago carts_helper.php 1 year ago connector_helper.php 1 year ago csv_helper.php 1 year ago customer_helper.php 1 year ago database_helper.php 1 year ago debug_helper.php 1 year ago defaults_helper.php 1 year ago elementor_helper.php 1 year ago email_helper.php 1 year ago encrypt_helper.php 1 year ago events_helper.php 1 year ago form_helper.php 1 year ago icalendar_helper.php 1 year ago image_helper.php 1 year ago invoices_helper.php 1 year ago license_helper.php 1 year ago location_helper.php 1 year ago marketing_systems_helper.php 1 year ago meeting_systems_helper.php 1 year ago menu_helper.php 1 year ago meta_helper.php 1 year ago migrations_helper.php 1 year ago money_helper.php 1 year ago notifications_helper.php 1 year ago order_intent_helper.php 1 year ago orders_helper.php 1 year ago pages_helper.php 1 year ago params_helper.php 1 year ago payments_helper.php 1 year ago price_breakdown_helper.php 1 year ago process_jobs_helper.php 1 year ago processes_helper.php 1 year ago replacer_helper.php 1 year ago resource_helper.php 1 year ago roles_helper.php 1 year ago router_helper.php 1 year ago service_helper.php 1 year ago sessions_helper.php 1 year ago settings_helper.php 1 year ago shortcodes_helper.php 1 year ago sms_helper.php 1 year ago steps_helper.php 1 year ago stripe_connect_helper.php 1 year ago styles_helper.php 1 year ago support_topics_helper.php 1 year ago time_helper.php 1 year ago timeline_helper.php 1 year ago transaction_intent_helper.php 1 year ago util_helper.php 1 year ago version_specific_updates_helper.php 1 year ago work_periods_helper.php 1 year ago wp_datetime.php 1 year ago wp_user_helper.php 1 year ago
order_intent_helper.php
189 lines
1 <?php
2 /*
3 * Copyright (c) 2024 LatePoint LLC. All rights reserved.
4 */
5
6 class OsOrderIntentHelper {
7
8 public static function generate_continue_intent_url( $order_intent_key ) {
9 return OsRouterHelper::build_admin_post_link( [
10 'orders',
11 'continue_order_intent'
12 ], [ 'order_intent_key' => $order_intent_key ] );
13 }
14
15 public static function get_order_id_from_intent_key( $intent_key ) {
16 if ( empty( $intent_key ) ) {
17 return false;
18 }
19 $order_intent = new OsOrderIntentModel();
20 $order_intent = $order_intent->where( [ 'intent_key' => $intent_key ] )->set_limit( 1 )->get_results_as_models();
21
22 if ( $order_intent && $order_intent->order_id ) {
23 return $order_intent->order_id;
24 } else {
25 return null;
26 }
27 }
28
29 public static function set_order_intent_data_from_cart( OsOrderIntentModel $order_intent, OsCartModel $cart ): OsOrderIntentModel {
30
31 $cart_items = $cart->get_items();
32
33 $cart_items_data = [];
34 foreach ( $cart_items as $cart_item ) {
35 $cart_item_data = json_decode( $cart_item->item_data, true );
36 // cart item could have been added while user was not logged in, make sure to update customer id when creating order intent
37 $cart_item_data['customer_id'] = $order_intent->customer_id;
38
39
40 $cart_items_data[] = [
41 'variant' => $cart_item->variant,
42 'item_data' => $cart_item_data,
43 'subtotal' => $cart_item->get_subtotal(),
44 'total' => $cart_item->get_total(),
45 'coupon_discount' => $cart_item->get_coupon_discount(),
46 'coupon_code' => $cart_item->get_coupon_code(),
47 'tax_total' => $cart_item->get_tax_total(),
48 ];
49 }
50
51 $order_intent->cart_items_data = wp_json_encode( $cart_items_data );
52 $order_intent->charge_amount = $cart->amount_to_charge();
53 $order_intent->specs_charge_amount = $cart->specs_calculate_amount_to_charge();
54 $order_intent->total = $cart->get_total();
55 $order_intent->subtotal = $cart->get_subtotal();
56 $order_intent->tax_total = $cart->get_tax_total();
57 $order_intent->coupon_code = $cart->get_coupon_code();
58 if ( ! empty( $cart->get_coupon_code() ) ) {
59 $order_intent->coupon_discount = $cart->get_coupon_discount();
60 }
61
62
63 // hide "payments & credits" row if we are not accepting payments
64 $rows_to_hide = ( ! OsPaymentsHelper::is_accepting_payments() ) ? [ 'payments' ] : [];
65 $order_intent->price_breakdown = wp_json_encode( $cart->generate_price_breakdown_rows( $rows_to_hide ) );
66 $order_intent->payment_data = wp_json_encode( [
67 'processor' => $cart->payment_processor,
68 'time' => $cart->payment_time,
69 'method' => $cart->payment_method,
70 'portion' => $cart->payment_portion,
71 'token' => $cart->payment_token
72 ] );
73
74 /**
75 * Sets order intent from a cart
76 *
77 * @param {OsOrderIntentModel} $order_intent Order intent
78 * @param {OsCartModel} $cart Cart that order intent is using
79 * @returns {OsOrderIntentModel} The filtered order intent object
80 *
81 * @since 5.0.0
82 * @hook set_order_intent_data_from_cart
83 *
84 */
85 return apply_filters( 'set_order_intent_data_from_cart', $order_intent, $cart );
86 }
87
88 /**
89 * @param OsCartItemModel $cart
90 * @param array $restrictions_data
91 * @param array $presets_data
92 * @param string $booking_form_page_url
93 *
94 * @return OsOrderIntentModel
95 */
96 public static function create_or_update_order_intent( OsCartModel $cart, array $restrictions_data = [], array $presets_data = [], string $booking_form_page_url = '' ): OsOrderIntentModel {
97 if ( empty( $booking_form_page_url ) ) {
98 $booking_form_page_url = wp_get_original_referer();
99 }
100 $order_intent = new OsOrderIntentModel();
101 if ( ! empty( $cart->order_intent_id ) ) {
102 $order_intent->load_by_id( $cart->order_intent_id );
103 }
104 $is_new = $order_intent->is_new_record();
105
106 if ( ! $is_new ) {
107 if($order_intent->is_converted()){
108 return $order_intent;
109 }
110 $old_order_intent = clone $order_intent;
111 }
112
113 $order_intent->restrictions_data = wp_json_encode( $restrictions_data );
114 $order_intent->presets_data = wp_json_encode( $presets_data );
115 // override only if not empty
116 if(!empty($booking_form_page_url)) $order_intent->booking_form_page_url = urldecode( $booking_form_page_url );
117
118 // set customer id from session, do not trust submitted data
119 $order_intent->customer_id = OsAuthHelper::get_logged_in_customer_id();
120
121 $order_intent = self::set_order_intent_data_from_cart( $order_intent, $cart );
122
123
124 /**
125 * Filters order intent right before it's about to be saved when created or updated from cart
126 *
127 * @param {OsOrderIntentModel} $order_intent Order intent to be filtered
128 * @returns {OsOrderIntentModel} The filtered order intent
129 *
130 * @since 5.0.0
131 * @hook latepoint_before_order_intent_save_from_cart
132 *
133 */
134 $order_intent = apply_filters( 'latepoint_before_order_intent_save_from_cart', $order_intent );
135 if ( $order_intent->save() ) {
136 if ( $is_new ) {
137 $cart->update_attributes( [ 'order_intent_id' => $order_intent->id ] );
138 /**
139 * Order intent is created
140 *
141 * @param {OsOrderIntentModel} $order_intent Instance of order intent model that was created
142 *
143 * @since 5.0.0
144 * @hook latepoint_order_intent_created
145 *
146 */
147 do_action( 'latepoint_order_intent_created', $order_intent );
148 } else {
149 /**
150 * Order intent is updated
151 *
152 * @param {OsOrderIntentModel} $order_intent Updated instance of order intent model
153 * @param {OsOrderIntentModel} $old_order_intent Instance of order intent model before it was updated
154 *
155 * @since 5.0.0
156 * @hook latepoint_order_intent_updated
157 *
158 */
159 do_action( 'latepoint_order_intent_updated', $order_intent, $old_order_intent );
160 }
161 } else {
162 $action_type = $is_new ? 'creating' : 'updating';
163 OsDebugHelper::log( 'Error ' . $action_type . ' order intent', 'error_saving_order_intent', $order_intent->get_error_messages() );
164 }
165
166 return $order_intent;
167 }
168
169 public static function get_order_intent_by_intent_key( string $intent_key ) : OsOrderIntentModel {
170 $order_intent = new OsOrderIntentModel();
171 if(empty($intent_key)) return $order_intent;
172 $order_intent = $order_intent->where( [ 'intent_key' => $intent_key ] )->set_limit( 1 )->get_results_as_models();
173 if(!empty($order_intent)){
174 return $order_intent;
175 }else{
176 return new OsOrderIntentModel();
177 }
178 }
179
180 public static function is_converted( $order_intent_id ) {
181 $order_intent = new OsOrderIntentModel( $order_intent_id );
182 if ( ! empty( $order_intent->order_id ) ) {
183 return $order_intent->order_id;
184 } else {
185 return false;
186 }
187 }
188
189 }