PluginProbe ʕ •ᴥ•ʔ
Appointment Booking Plugin – LatePoint | Calendar & Scheduling for WordPress / 5.2.11
Appointment Booking Plugin – LatePoint | Calendar & Scheduling for WordPress v5.2.11
5.6.9 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 / latepoint.php
latepoint Last commit date
blocks 5 months ago languages 9 months ago lib 4 months ago public 4 months ago .distignore 4 months ago latepoint.php 4 months ago readme.txt 4 months ago uninstall.php 4 months ago
latepoint.php
1565 lines
1 <?php
2 /**
3 * Plugin Name: LatePoint
4 * Description: Appointment Scheduling Software for WordPress
5 * Version: 5.2.11
6 * Author: LatePoint
7 * Author URI: https://latepoint.com
8 * Plugin URI: https://latepoint.com
9 * Text Domain: latepoint
10 * Domain Path: /languages
11 * License: GPLv3
12 */
13
14 if ( ! defined( 'ABSPATH' ) ) {
15 exit; // Exit if accessed directly.
16 }
17
18
19 if ( ! class_exists( 'LatePoint' ) ) :
20
21 /**
22 * Main LatePoint Class.
23 *
24 */
25
26 final class LatePoint {
27
28 /**
29 * LatePoint version.
30 *
31 */
32 public $version = '5.2.11';
33 public $db_version = '2.3.0';
34
35
36 /**
37 * LatePoint Constructor.
38 */
39 public function __construct() {
40
41 $this->define_constants();
42 $this->includes();
43 $this->init_hooks();
44 OsDatabaseHelper::check_db_version();
45 OsDatabaseHelper::check_db_version_for_addons();
46
47
48 $GLOBALS['latepoint_settings'] = new OsSettingsHelper();
49 }
50
51
52 /**
53 * Define constant if not already set.
54 *
55 */
56 public function define( $name, $value ) {
57 if ( ! defined( $name ) ) {
58 define( $name, $value );
59 }
60 }
61
62
63 /**
64 * Get the plugin url. *has trailing slash
65 * @return string
66 */
67 public static function plugin_url() {
68 return plugin_dir_url( __FILE__ );
69 }
70
71 public static function public_javascripts() {
72 return plugin_dir_url( __FILE__ ) . 'public/javascripts/';
73 }
74
75 public static function public_vendor_javascripts() {
76 return plugin_dir_url( __FILE__ ) . 'public/javascripts/vendor/';
77 }
78
79 public static function public_stylesheets() {
80 return plugin_dir_url( __FILE__ ) . 'public/stylesheets/';
81 }
82
83 public static function blocks_build_url() {
84 return plugin_dir_url( __FILE__ ) . 'blocks/build/';
85 }
86
87 public static function node_modules_url() {
88 return plugin_dir_url( __FILE__ ) . 'node_modules/';
89 }
90
91 public static function vendor_assets_url() {
92 return plugin_dir_url( __FILE__ ) . 'vendor/';
93 }
94
95 public static function images_url() {
96 return plugin_dir_url( __FILE__ ) . 'public/images/';
97 }
98
99 /**
100 * Get the plugin path.
101 * @return string
102 */
103 public static function plugin_path() {
104 return plugin_dir_path( __FILE__ );
105 }
106
107
108 /**
109 * Define LatePoint Constants.
110 */
111 public function define_constants() {
112 $upload_dir = wp_upload_dir();
113
114 // ENVIRONMENTS TYPES
115 if ( ! defined( 'LATEPOINT_ENV_LIVE' ) ) {
116 define( 'LATEPOINT_ENV_LIVE', 'live' );
117 }
118 if ( ! defined( 'LATEPOINT_ENV_DEMO' ) ) {
119 define( 'LATEPOINT_ENV_DEMO', 'demo' );
120 }
121 if ( ! defined( 'LATEPOINT_ENV_DEV' ) ) {
122 define( 'LATEPOINT_ENV_DEV', 'dev' );
123 }
124
125 // PAYMENT ENVIRONMENTS TYPES
126 if ( ! defined( 'LATEPOINT_PAYMENTS_ENV_LIVE' ) ) {
127 define( 'LATEPOINT_PAYMENTS_ENV_LIVE', 'live' );
128 }
129 if ( ! defined( 'LATEPOINT_PAYMENTS_ENV_DEMO' ) ) {
130 define( 'LATEPOINT_PAYMENTS_ENV_DEMO', 'demo' );
131 }
132 if ( ! defined( 'LATEPOINT_PAYMENTS_ENV_DEV' ) ) {
133 define( 'LATEPOINT_PAYMENTS_ENV_DEV', 'dev' );
134 }
135
136
137 if ( ! defined( 'LATEPOINT_PAYMENTS_DEV_SUFFIX' ) ) {
138 define( 'LATEPOINT_PAYMENTS_DEV_SUFFIX', '_dev' );
139 }
140
141 if ( ! defined( 'LATEPOINT_ENV' ) ) {
142 define( 'LATEPOINT_ENV', LATEPOINT_ENV_LIVE );
143 }
144 if ( ! defined( 'LATEPOINT_ALLOW_LOCAL_SERVER' ) ) {
145 define( 'LATEPOINT_ALLOW_LOCAL_SERVER', true );
146 }
147
148 if ( ! defined( 'LATEPOINT_ALLOW_SMS' ) ) {
149 define( 'LATEPOINT_ALLOW_SMS', true );
150 }
151 if ( ! defined( 'LATEPOINT_ALLOW_WHATSAPP' ) ) {
152 define( 'LATEPOINT_ALLOW_WHATSAPP', true );
153 }
154 if ( ! defined( 'LATEPOINT_ALLOW_EMAILS' ) ) {
155 define( 'LATEPOINT_ALLOW_EMAILS', true );
156 }
157
158 if ( ! defined( 'LATEPOINT_PLUGIN_FILE' ) ) {
159 define( 'LATEPOINT_PLUGIN_FILE', __FILE__ );
160 }
161 if ( ! defined( 'LATEPOINT_STYLESHEETS_URL' ) ) {
162 define( 'LATEPOINT_STYLESHEETS_URL', $this->public_stylesheets() );
163 }
164 if ( ! defined( 'LATEPOINT_BLOCKS_BUILD_URL' ) ) {
165 define( 'LATEPOINT_BLOCKS_BUILD_URL', $this->blocks_build_url() );
166 }
167 if ( ! defined( 'LATEPOINT_ABSPATH' ) ) {
168 define( 'LATEPOINT_ABSPATH', dirname( __FILE__ ) . '/' );
169 }
170 if ( ! defined( 'LATEPOINT_LIB_ABSPATH' ) ) {
171 define( 'LATEPOINT_LIB_ABSPATH', LATEPOINT_ABSPATH . 'lib/' );
172 }
173 if ( ! defined( 'LATEPOINT_CONFIG_ABSPATH' ) ) {
174 define( 'LATEPOINT_CONFIG_ABSPATH', LATEPOINT_LIB_ABSPATH . 'config/' );
175 }
176 if ( ! defined( 'LATEPOINT_BLOCKS_ABSPATH' ) ) {
177 define( 'LATEPOINT_BLOCKS_ABSPATH', LATEPOINT_ABSPATH . 'blocks/build/' );
178 }
179 if ( ! defined( 'LATEPOINT_BOWER_ABSPATH' ) ) {
180 define( 'LATEPOINT_BOWER_ABSPATH', LATEPOINT_ABSPATH . 'vendor/bower_components/' );
181 }
182 if ( ! defined( 'LATEPOINT_VIEWS_ABSPATH' ) ) {
183 define( 'LATEPOINT_VIEWS_ABSPATH', LATEPOINT_LIB_ABSPATH . 'views/' );
184 }
185 if ( ! defined( 'LATEPOINT_VIEWS_ABSPATH_SHARED' ) ) {
186 define( 'LATEPOINT_VIEWS_ABSPATH_SHARED', LATEPOINT_LIB_ABSPATH . 'views/shared/' );
187 }
188 if ( ! defined( 'LATEPOINT_VIEWS_MAILERS_ABSPATH' ) ) {
189 define( 'LATEPOINT_VIEWS_MAILERS_ABSPATH', LATEPOINT_VIEWS_ABSPATH . 'mailers/' );
190 }
191 if ( ! defined( 'LATEPOINT_VIEWS_LAYOUTS_ABSPATH' ) ) {
192 define( 'LATEPOINT_VIEWS_LAYOUTS_ABSPATH', LATEPOINT_VIEWS_ABSPATH . 'layouts/' );
193 }
194 if ( ! defined( 'LATEPOINT_VIEWS_PARTIALS_ABSPATH' ) ) {
195 define( 'LATEPOINT_VIEWS_PARTIALS_ABSPATH', LATEPOINT_VIEWS_ABSPATH . 'partials/' );
196 }
197 if ( ! defined( 'LATEPOINT_PLUGIN_BASENAME' ) ) {
198 define( 'LATEPOINT_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
199 }
200
201 if ( ! defined( 'LATEPOINT_PLUGIN_URL' ) ) {
202 define( 'LATEPOINT_PLUGIN_URL', $this->plugin_url() );
203 }
204 if ( ! defined( 'LATEPOINT_LIB_URL' ) ) {
205 define( 'LATEPOINT_LIB_URL', LATEPOINT_PLUGIN_URL . 'lib/' );
206 }
207 if ( ! defined( 'LATEPOINT_PUBLIC_URL' ) ) {
208 define( 'LATEPOINT_PUBLIC_URL', LATEPOINT_PLUGIN_URL . 'public/' );
209 }
210 if ( ! defined( 'LATEPOINT_IMAGES_URL' ) ) {
211 define( 'LATEPOINT_IMAGES_URL', LATEPOINT_PUBLIC_URL . 'images/' );
212 }
213 if ( ! defined( 'LATEPOINT_DEFAULT_AVATAR_URL' ) ) {
214 define( 'LATEPOINT_DEFAULT_AVATAR_URL', LATEPOINT_IMAGES_URL . 'default-avatar.jpg' );
215 }
216 if ( ! defined( 'LATEPOINT_MARKETPLACE' ) ) {
217 define( 'LATEPOINT_MARKETPLACE', 'codecanyon' );
218 }
219 // role to assigne WP user to so they are connected to a LatePoint backend user type (agent or manager)
220 if ( ! defined( 'LATEPOINT_WP_ADMIN_ROLE' ) ) {
221 define( 'LATEPOINT_WP_ADMIN_ROLE', 'administrator' );
222 }
223 if ( ! defined( 'LATEPOINT_WP_AGENT_ROLE' ) ) {
224 define( 'LATEPOINT_WP_AGENT_ROLE', 'latepoint_agent' );
225 }
226 if ( ! defined( 'LATEPOINT_WP_MANAGER_ROLE' ) ) {
227 define( 'LATEPOINT_WP_MANAGER_ROLE', 'latepoint_manager' );
228 }
229 if ( ! defined( 'LATEPOINT_WP_CUSTOMER_ROLE' ) ) {
230 define( 'LATEPOINT_WP_CUSTOMER_ROLE', 'latepoint_customer' );
231 }
232
233 if ( ! defined( 'LATEPOINT_USER_TYPE_ADMIN' ) ) {
234 define( 'LATEPOINT_USER_TYPE_ADMIN', 'admin' );
235 }
236 if ( ! defined( 'LATEPOINT_USER_TYPE_AGENT' ) ) {
237 define( 'LATEPOINT_USER_TYPE_AGENT', 'agent' );
238 }
239 if ( ! defined( 'LATEPOINT_USER_TYPE_CUSTOM' ) ) {
240 define( 'LATEPOINT_USER_TYPE_CUSTOM', 'custom' );
241 }
242 if ( ! defined( 'LATEPOINT_USER_TYPE_CUSTOMER' ) ) {
243 define( 'LATEPOINT_USER_TYPE_CUSTOMER', 'customer' );
244 }
245
246 if ( ! defined( 'LATEPOINT_PARAMS_SCOPE_PUBLIC' ) ) {
247 define( 'LATEPOINT_PARAMS_SCOPE_PUBLIC', 'public' );
248 }
249 if ( ! defined( 'LATEPOINT_PARAMS_SCOPE_ADMIN' ) ) {
250 define( 'LATEPOINT_PARAMS_SCOPE_ADMIN', 'admin' );
251 }
252 if ( ! defined( 'LATEPOINT_PARAMS_SCOPE_CUSTOMER' ) ) {
253 define( 'LATEPOINT_PARAMS_SCOPE_CUSTOMER', 'customer' );
254 }
255
256
257 if ( ! defined( 'LATEPOINT_VERSION' ) ) {
258 define( 'LATEPOINT_VERSION', $this->version );
259 }
260 if ( ! defined( 'LATEPOINT_ENCRYPTION_KEY' ) ) {
261 define( 'LATEPOINT_ENCRYPTION_KEY', 'oiaf(*Ufdsoh2ie7QEy,R@6(I9H/VoX^r4}SHC_7W-<$S!,/kd)OSw?.Y9lcd105cu$' );
262 }
263
264 if ( ! defined( 'LATEPOINT_AGENT_POST_TYPE' ) ) {
265 define( 'LATEPOINT_AGENT_POST_TYPE', 'latepoint_agent' );
266 }
267
268 if ( ! defined( 'LATEPOINT_UPGRADE_URL' ) ) {
269 define( 'LATEPOINT_UPGRADE_URL', 'https://latepoint.com/upgrade-from-wp' );
270 }
271 if ( ! defined( 'LATEPOINT_SERVICE_POST_TYPE' ) ) {
272 define( 'LATEPOINT_SERVICE_POST_TYPE', 'latepoint_service' );
273 }
274 if ( ! defined( 'LATEPOINT_CUSTOMER_POST_TYPE' ) ) {
275 define( 'LATEPOINT_CUSTOMER_POST_TYPE', 'latepoint_customer' );
276 }
277
278 if ( ! defined( 'LATEPOINT_DB_VERSION' ) ) {
279 define( 'LATEPOINT_DB_VERSION', $this->db_version );
280 }
281
282 global $wpdb;
283 if ( ! defined( 'LATEPOINT_TABLE_RECURRENCES' ) ) {
284 define( 'LATEPOINT_TABLE_RECURRENCES', $wpdb->prefix . 'latepoint_recurrences' );
285 }
286 if ( ! defined( 'LATEPOINT_TABLE_BUNDLES' ) ) {
287 define( 'LATEPOINT_TABLE_BUNDLES', $wpdb->prefix . 'latepoint_bundles' );
288 }
289 if ( ! defined( 'LATEPOINT_TABLE_BUNDLES_SERVICES' ) ) {
290 define( 'LATEPOINT_TABLE_JOIN_BUNDLES_SERVICES', $wpdb->prefix . 'latepoint_bundles_services' );
291 }
292 if ( ! defined( 'LATEPOINT_TABLE_BOOKINGS' ) ) {
293 define( 'LATEPOINT_TABLE_BOOKINGS', $wpdb->prefix . 'latepoint_bookings' );
294 }
295 if ( ! defined( 'LATEPOINT_TABLE_SESSIONS' ) ) {
296 define( 'LATEPOINT_TABLE_SESSIONS', $wpdb->prefix . 'latepoint_sessions' );
297 }
298 if ( ! defined( 'LATEPOINT_TABLE_SERVICES' ) ) {
299 define( 'LATEPOINT_TABLE_SERVICES', $wpdb->prefix . 'latepoint_services' );
300 }
301 if ( ! defined( 'LATEPOINT_TABLE_SETTINGS' ) ) {
302 define( 'LATEPOINT_TABLE_SETTINGS', $wpdb->prefix . 'latepoint_settings' );
303 }
304 if ( ! defined( 'LATEPOINT_TABLE_SERVICE_CATEGORIES' ) ) {
305 define( 'LATEPOINT_TABLE_SERVICE_CATEGORIES', $wpdb->prefix . 'latepoint_service_categories' );
306 }
307 if ( ! defined( 'LATEPOINT_TABLE_WORK_PERIODS' ) ) {
308 define( 'LATEPOINT_TABLE_WORK_PERIODS', $wpdb->prefix . 'latepoint_work_periods' );
309 }
310 if ( ! defined( 'LATEPOINT_TABLE_CUSTOM_PRICES' ) ) {
311 define( 'LATEPOINT_TABLE_CUSTOM_PRICES', $wpdb->prefix . 'latepoint_custom_prices' );
312 }
313 if ( ! defined( 'LATEPOINT_TABLE_AGENTS_SERVICES' ) ) {
314 define( 'LATEPOINT_TABLE_AGENTS_SERVICES', $wpdb->prefix . 'latepoint_agents_services' );
315 }
316 if ( ! defined( 'LATEPOINT_TABLE_ACTIVITIES' ) ) {
317 define( 'LATEPOINT_TABLE_ACTIVITIES', $wpdb->prefix . 'latepoint_activities' );
318 }
319 if ( ! defined( 'LATEPOINT_TABLE_TRANSACTIONS' ) ) {
320 define( 'LATEPOINT_TABLE_TRANSACTIONS', $wpdb->prefix . 'latepoint_transactions' );
321 }
322 if ( ! defined( 'LATEPOINT_TABLE_TRANSACTION_REFUNDS' ) ) {
323 define( 'LATEPOINT_TABLE_TRANSACTION_REFUNDS', $wpdb->prefix . 'latepoint_transaction_refunds' );
324 }
325 if ( ! defined( 'LATEPOINT_TABLE_TRANSACTION_INTENTS' ) ) {
326 define( 'LATEPOINT_TABLE_TRANSACTION_INTENTS', $wpdb->prefix . 'latepoint_transaction_intents' );
327 }
328 if ( ! defined( 'LATEPOINT_TABLE_AGENTS' ) ) {
329 define( 'LATEPOINT_TABLE_AGENTS', $wpdb->prefix . 'latepoint_agents' );
330 }
331 if ( ! defined( 'LATEPOINT_TABLE_CUSTOMERS' ) ) {
332 define( 'LATEPOINT_TABLE_CUSTOMERS', $wpdb->prefix . 'latepoint_customers' );
333 }
334 if ( ! defined( 'LATEPOINT_TABLE_CUSTOMER_META' ) ) {
335 define( 'LATEPOINT_TABLE_CUSTOMER_META', $wpdb->prefix . 'latepoint_customer_meta' );
336 }
337 if ( ! defined( 'LATEPOINT_TABLE_SERVICE_META' ) ) {
338 define( 'LATEPOINT_TABLE_SERVICE_META', $wpdb->prefix . 'latepoint_service_meta' );
339 }
340 if ( ! defined( 'LATEPOINT_TABLE_BOOKING_META' ) ) {
341 define( 'LATEPOINT_TABLE_BOOKING_META', $wpdb->prefix . 'latepoint_booking_meta' );
342 }
343 if ( ! defined( 'LATEPOINT_TABLE_AGENT_META' ) ) {
344 define( 'LATEPOINT_TABLE_AGENT_META', $wpdb->prefix . 'latepoint_agent_meta' );
345 }
346 if ( ! defined( 'LATEPOINT_TABLE_BUNDLE_META' ) ) {
347 define( 'LATEPOINT_TABLE_BUNDLE_META', $wpdb->prefix . 'latepoint_bundle_meta' );
348 }
349 if ( ! defined( 'LATEPOINT_TABLE_STEPS' ) ) {
350 define( 'LATEPOINT_TABLE_STEPS', $wpdb->prefix . 'latepoint_steps' );
351 }
352 if ( ! defined( 'LATEPOINT_TABLE_STEP_SETTINGS' ) ) {
353 define( 'LATEPOINT_TABLE_STEP_SETTINGS', $wpdb->prefix . 'latepoint_step_settings' );
354 }
355 if ( ! defined( 'LATEPOINT_TABLE_LOCATIONS' ) ) {
356 define( 'LATEPOINT_TABLE_LOCATIONS', $wpdb->prefix . 'latepoint_locations' );
357 }
358 if ( ! defined( 'LATEPOINT_TABLE_LOCATION_CATEGORIES' ) ) {
359 define( 'LATEPOINT_TABLE_LOCATION_CATEGORIES', $wpdb->prefix . 'latepoint_location_categories' );
360 }
361 if ( ! defined( 'LATEPOINT_TABLE_PROCESSES' ) ) {
362 define( 'LATEPOINT_TABLE_PROCESSES', $wpdb->prefix . 'latepoint_processes' );
363 }
364 if ( ! defined( 'LATEPOINT_TABLE_PROCESS_JOBS' ) ) {
365 define( 'LATEPOINT_TABLE_PROCESS_JOBS', $wpdb->prefix . 'latepoint_process_jobs' );
366 }
367
368 if ( ! defined( 'LATEPOINT_TABLE_CARTS' ) ) {
369 define( 'LATEPOINT_TABLE_CARTS', $wpdb->prefix . 'latepoint_carts' );
370 }
371 if ( ! defined( 'LATEPOINT_TABLE_CART_META' ) ) {
372 define( 'LATEPOINT_TABLE_CART_META', $wpdb->prefix . 'latepoint_cart_meta' );
373 }
374 if ( ! defined( 'LATEPOINT_TABLE_CART_ITEMS' ) ) {
375 define( 'LATEPOINT_TABLE_CART_ITEMS', $wpdb->prefix . 'latepoint_cart_items' );
376 }
377
378 if ( ! defined( 'LATEPOINT_TABLE_BLOCKED_PERIODS' ) ) {
379 define( 'LATEPOINT_TABLE_BLOCKED_PERIODS', $wpdb->prefix . 'latepoint_blocked_periods' );
380 }
381 if ( ! defined( 'LATEPOINT_TABLE_ORDERS' ) ) {
382 define( 'LATEPOINT_TABLE_ORDERS', $wpdb->prefix . 'latepoint_orders' );
383 }
384 if ( ! defined( 'LATEPOINT_TABLE_ORDER_META' ) ) {
385 define( 'LATEPOINT_TABLE_ORDER_META', $wpdb->prefix . 'latepoint_order_meta' );
386 }
387 if ( ! defined( 'LATEPOINT_TABLE_ORDER_ITEMS' ) ) {
388 define( 'LATEPOINT_TABLE_ORDER_ITEMS', $wpdb->prefix . 'latepoint_order_items' );
389 }
390 if ( ! defined( 'LATEPOINT_TABLE_ORDER_INTENTS' ) ) {
391 define( 'LATEPOINT_TABLE_ORDER_INTENTS', $wpdb->prefix . 'latepoint_order_intents' );
392 }
393 if ( ! defined( 'LATEPOINT_TABLE_ORDER_INTENT_META' ) ) {
394 define( 'LATEPOINT_TABLE_ORDER_INTENT_META', $wpdb->prefix . 'latepoint_order_intent_meta' );
395 }
396 if ( ! defined( 'LATEPOINT_TABLE_ORDER_INVOICES' ) ) {
397 define( 'LATEPOINT_TABLE_ORDER_INVOICES', $wpdb->prefix . 'latepoint_order_invoices' );
398 }
399 if ( ! defined( 'LATEPOINT_TABLE_PAYMENT_REQUESTS' ) ) {
400 define( 'LATEPOINT_TABLE_PAYMENT_REQUESTS', $wpdb->prefix . 'latepoint_payment_requests' );
401 }
402 if ( ! defined( 'LATEPOINT_TABLE_CUSTOMER_OTP_CODES' ) ) {
403 define( 'LATEPOINT_TABLE_CUSTOMER_OTP_CODES', $wpdb->prefix . 'latepoint_customer_otp_codes' );
404 }
405 if ( ! defined( 'LATEPOINT_CUSTOMER_OTP_CODE_STATUS_ACTIVE' ) ) {
406 define( 'LATEPOINT_CUSTOMER_OTP_CODE_STATUS_ACTIVE', 'active' );
407 }
408 if ( ! defined( 'LATEPOINT_CUSTOMER_OTP_CODE_STATUS_USED' ) ) {
409 define( 'LATEPOINT_CUSTOMER_OTP_CODE_STATUS_USED', 'used' );
410 }
411 if ( ! defined( 'LATEPOINT_CUSTOMER_OTP_CODE_STATUS_EXPIRED' ) ) {
412 define( 'LATEPOINT_CUSTOMER_OTP_CODE_STATUS_EXPIRED', 'expired' );
413 }
414 if ( ! defined( 'LATEPOINT_CUSTOMER_OTP_CODE_STATUS_CANCELLED' ) ) {
415 define( 'LATEPOINT_CUSTOMER_OTP_CODE_STATUS_CANCELLED', 'cancelled' );
416 }
417 if ( ! defined( 'LATEPOINT_ORDER_INTENT_STATUS_NEW' ) ) {
418 define( 'LATEPOINT_ORDER_INTENT_STATUS_NEW', 'new' );
419 }
420 if ( ! defined( 'LATEPOINT_ORDER_INTENT_STATUS_CONVERTED' ) ) {
421 define( 'LATEPOINT_ORDER_INTENT_STATUS_CONVERTED', 'converted' );
422 }
423 if ( ! defined( 'LATEPOINT_ORDER_INTENT_STATUS_PROCESSING' ) ) {
424 define( 'LATEPOINT_ORDER_INTENT_STATUS_PROCESSING', 'processing' );
425 }
426 if ( ! defined( 'LATEPOINT_ORDER_INTENT_STATUS_FAILED' ) ) {
427 define( 'LATEPOINT_ORDER_INTENT_STATUS_FAILED', 'failed' );
428 }
429
430 if ( ! defined( 'LATEPOINT_TRANSACTION_INTENT_STATUS_NEW' ) ) {
431 define( 'LATEPOINT_TRANSACTION_INTENT_STATUS_NEW', 'new' );
432 }
433 if ( ! defined( 'LATEPOINT_TRANSACTION_INTENT_STATUS_CONVERTED' ) ) {
434 define( 'LATEPOINT_TRANSACTION_INTENT_STATUS_CONVERTED', 'converted' );
435 }
436 if ( ! defined( 'LATEPOINT_TRANSACTION_INTENT_STATUS_PROCESSING' ) ) {
437 define( 'LATEPOINT_TRANSACTION_INTENT_STATUS_PROCESSING', 'processing' );
438 }
439 if ( ! defined( 'LATEPOINT_TRANSACTION_INTENT_STATUS_FAILED' ) ) {
440 define( 'LATEPOINT_TRANSACTION_INTENT_STATUS_FAILED', 'failed' );
441 }
442
443 if ( ! defined( 'LATEPOINT_BOOKING_STATUS_APPROVED' ) ) {
444 define( 'LATEPOINT_BOOKING_STATUS_APPROVED', 'approved' );
445 }
446 if ( ! defined( 'LATEPOINT_BOOKING_STATUS_PENDING' ) ) {
447 define( 'LATEPOINT_BOOKING_STATUS_PENDING', 'pending' );
448 }
449 if ( ! defined( 'LATEPOINT_BOOKING_STATUS_PAYMENT_PENDING' ) ) {
450 define( 'LATEPOINT_BOOKING_STATUS_PAYMENT_PENDING', 'payment_pending' );
451 }
452 if ( ! defined( 'LATEPOINT_BOOKING_STATUS_CANCELLED' ) ) {
453 define( 'LATEPOINT_BOOKING_STATUS_CANCELLED', 'cancelled' );
454 }
455 if ( ! defined( 'LATEPOINT_BOOKING_STATUS_NO_SHOW' ) ) {
456 define( 'LATEPOINT_BOOKING_STATUS_NO_SHOW', 'no_show' );
457 }
458 if ( ! defined( 'LATEPOINT_BOOKING_STATUS_COMPLETED' ) ) {
459 define( 'LATEPOINT_BOOKING_STATUS_COMPLETED', 'completed' );
460 }
461
462 if ( ! defined( 'LATEPOINT_JOB_STATUS_COMPLETED' ) ) {
463 define( 'LATEPOINT_JOB_STATUS_COMPLETED', 'completed' );
464 }
465 if ( ! defined( 'LATEPOINT_JOB_STATUS_SCHEDULED' ) ) {
466 define( 'LATEPOINT_JOB_STATUS_SCHEDULED', 'scheduled' );
467 }
468 if ( ! defined( 'LATEPOINT_JOB_STATUS_CANCELLED' ) ) {
469 define( 'LATEPOINT_JOB_STATUS_CANCELLED', 'cancelled' );
470 }
471 if ( ! defined( 'LATEPOINT_JOB_STATUS_ERROR' ) ) {
472 define( 'LATEPOINT_JOB_STATUS_ERROR', 'error' );
473 }
474
475 // order statuses
476 if ( ! defined( 'LATEPOINT_ORDER_STATUS_OPEN' ) ) {
477 define( 'LATEPOINT_ORDER_STATUS_OPEN', 'open' );
478 }
479 if ( ! defined( 'LATEPOINT_ORDER_STATUS_CANCELLED' ) ) {
480 define( 'LATEPOINT_ORDER_STATUS_CANCELLED', 'cancelled' );
481 }
482 if ( ! defined( 'LATEPOINT_ORDER_STATUS_COMPLETED' ) ) {
483 define( 'LATEPOINT_ORDER_STATUS_COMPLETED', 'completed' );
484 }
485
486 // order fulfillment statuses
487 if ( ! defined( 'LATEPOINT_ORDER_FULFILLMENT_STATUS_NOT_FULFILLED' ) ) {
488 define( 'LATEPOINT_ORDER_FULFILLMENT_STATUS_NOT_FULFILLED', 'not_fulfilled' );
489 }
490 if ( ! defined( 'LATEPOINT_ORDER_FULFILLMENT_STATUS_FULFILLED' ) ) {
491 define( 'LATEPOINT_ORDER_FULFILLMENT_STATUS_FULFILLED', 'fulfilled' );
492 }
493 if ( ! defined( 'LATEPOINT_ORDER_FULFILLMENT_STATUS_PARTIALLY_FULFILLED' ) ) {
494 define( 'LATEPOINT_ORDER_FULFILLMENT_STATUS_PARTIALLY_FULFILLED', 'partially_fulfilled' );
495 }
496
497 if ( ! defined( 'LATEPOINT_ORDER_PAYMENT_STATUS_NOT_PAID' ) ) {
498 define( 'LATEPOINT_ORDER_PAYMENT_STATUS_NOT_PAID', 'not_paid' );
499 }
500 if ( ! defined( 'LATEPOINT_ORDER_PAYMENT_STATUS_PARTIALLY_PAID' ) ) {
501 define( 'LATEPOINT_ORDER_PAYMENT_STATUS_PARTIALLY_PAID', 'partially_paid' );
502 }
503 if ( ! defined( 'LATEPOINT_ORDER_PAYMENT_STATUS_FULLY_PAID' ) ) {
504 define( 'LATEPOINT_ORDER_PAYMENT_STATUS_FULLY_PAID', 'fully_paid' );
505 }
506 if ( ! defined( 'LATEPOINT_ORDER_PAYMENT_STATUS_PROCESSING' ) ) {
507 define( 'LATEPOINT_ORDER_PAYMENT_STATUS_PROCESSING', 'processing' );
508 }
509 if ( ! defined( 'LATEPOINT_ORDER_PAYMENT_STATUS_REFUNDED' ) ) {
510 define( 'LATEPOINT_ORDER_PAYMENT_STATUS_REFUNDED', 'refunded' );
511 }
512 if ( ! defined( 'LATEPOINT_ORDER_PAYMENT_STATUS_PARTIALLY_REFUNDED' ) ) {
513 define( 'LATEPOINT_ORDER_PAYMENT_STATUS_PARTIALLY_REFUNDED', 'partially_refunded' );
514 }
515
516 if ( ! defined( 'LATEPOINT_DEFAULT_TIME_SYSTEM' ) ) {
517 define( 'LATEPOINT_DEFAULT_TIME_SYSTEM', '12' );
518 }
519 if ( ! defined( 'LATEPOINT_DEFAULT_DATE_FORMAT' ) ) {
520 define( 'LATEPOINT_DEFAULT_DATE_FORMAT', 'm/d/Y' );
521 }
522 if ( ! defined( 'LATEPOINT_DATETIME_DB_FORMAT' ) ) {
523 define( 'LATEPOINT_DATETIME_DB_FORMAT', 'Y-m-d H:i:s' );
524 }
525
526 if ( ! defined( 'LATEPOINT_STATUS_ERROR' ) ) {
527 define( 'LATEPOINT_STATUS_ERROR', 'error' );
528 }
529 if ( ! defined( 'LATEPOINT_STATUS_SUCCESS' ) ) {
530 define( 'LATEPOINT_STATUS_SUCCESS', 'success' );
531 }
532
533 if ( ! defined( 'LATEPOINT_SERVICE_STATUS_ACTIVE' ) ) {
534 define( 'LATEPOINT_SERVICE_STATUS_ACTIVE', 'active' );
535 }
536 if ( ! defined( 'LATEPOINT_SERVICE_STATUS_DISABLED' ) ) {
537 define( 'LATEPOINT_SERVICE_STATUS_DISABLED', 'disabled' );
538 }
539
540 if ( ! defined( 'LATEPOINT_SERVICE_VISIBILITY_VISIBLE' ) ) {
541 define( 'LATEPOINT_SERVICE_VISIBILITY_VISIBLE', 'visible' );
542 }
543 if ( ! defined( 'LATEPOINT_SERVICE_VISIBILITY_HIDDEN' ) ) {
544 define( 'LATEPOINT_SERVICE_VISIBILITY_HIDDEN', 'hidden' );
545 }
546
547
548 if ( ! defined( 'LATEPOINT_LOCATION_STATUS_ACTIVE' ) ) {
549 define( 'LATEPOINT_LOCATION_STATUS_ACTIVE', 'active' );
550 }
551 if ( ! defined( 'LATEPOINT_LOCATION_STATUS_DISABLED' ) ) {
552 define( 'LATEPOINT_LOCATION_STATUS_DISABLED', 'disabled' );
553 }
554
555 if ( ! defined( 'LATEPOINT_AGENT_STATUS_ACTIVE' ) ) {
556 define( 'LATEPOINT_AGENT_STATUS_ACTIVE', 'active' );
557 }
558 if ( ! defined( 'LATEPOINT_AGENT_STATUS_DISABLED' ) ) {
559 define( 'LATEPOINT_AGENT_STATUS_DISABLED', 'disabled' );
560 }
561
562 if ( ! defined( 'LATEPOINT_BUNDLE_STATUS_ACTIVE' ) ) {
563 define( 'LATEPOINT_BUNDLE_STATUS_ACTIVE', 'active' );
564 }
565 if ( ! defined( 'LATEPOINT_BUNDLE_STATUS_DISABLED' ) ) {
566 define( 'LATEPOINT_BUNDLE_STATUS_DISABLED', 'disabled' );
567 }
568
569 if ( ! defined( 'LATEPOINT_BUNDLE_VISIBILITY_VISIBLE' ) ) {
570 define( 'LATEPOINT_BUNDLE_VISIBILITY_VISIBLE', 'visible' );
571 }
572 if ( ! defined( 'LATEPOINT_BUNDLE_VISIBILITY_HIDDEN' ) ) {
573 define( 'LATEPOINT_BUNDLE_VISIBILITY_HIDDEN', 'hidden' );
574 }
575
576 if ( ! defined( 'LATEPOINT_ITEM_VARIANT_BOOKING' ) ) {
577 define( 'LATEPOINT_ITEM_VARIANT_BOOKING', 'booking' );
578 }
579 if ( ! defined( 'LATEPOINT_ITEM_VARIANT_BUNDLE' ) ) {
580 define( 'LATEPOINT_ITEM_VARIANT_BUNDLE', 'bundle' );
581 }
582
583 if ( ! defined( 'LATEPOINT_DEFAULT_TIMEBLOCK_INTERVAL' ) ) {
584 define( 'LATEPOINT_DEFAULT_TIMEBLOCK_INTERVAL', 30 );
585 }
586 if ( ! defined( 'LATEPOINT_DEFAULT_PHONE_CODE' ) ) {
587 define( 'LATEPOINT_DEFAULT_PHONE_CODE', '+1' );
588 }
589 if ( ! defined( 'LATEPOINT_DEFAULT_PHONE_FORMAT' ) ) {
590 define( 'LATEPOINT_DEFAULT_PHONE_FORMAT', '(999) 999-9999' );
591 }
592
593 if ( ! defined( 'LATEPOINT_TRANSACTION_STATUS_SUCCEEDED' ) ) {
594 define( 'LATEPOINT_TRANSACTION_STATUS_SUCCEEDED', 'succeeded' );
595 }
596 if ( ! defined( 'LATEPOINT_TRANSACTION_STATUS_PROCESSING' ) ) {
597 define( 'LATEPOINT_TRANSACTION_STATUS_PROCESSING', 'processing' );
598 }
599 if ( ! defined( 'LATEPOINT_TRANSACTION_STATUS_FAILED' ) ) {
600 define( 'LATEPOINT_TRANSACTION_STATUS_FAILED', 'failed' );
601 }
602
603 // invoices
604 if ( ! defined( 'LATEPOINT_INVOICE_STATUS_OPEN' ) ) {
605 define( 'LATEPOINT_INVOICE_STATUS_OPEN', 'open' );
606 }
607 if ( ! defined( 'LATEPOINT_INVOICE_STATUS_PAID' ) ) {
608 define( 'LATEPOINT_INVOICE_STATUS_PAID', 'paid' );
609 }
610 if ( ! defined( 'LATEPOINT_INVOICE_STATUS_PARTIALLY_PAID' ) ) {
611 define( 'LATEPOINT_INVOICE_STATUS_PARTIALLY_PAID', 'partially_paid' );
612 }
613 if ( ! defined( 'LATEPOINT_INVOICE_STATUS_DRAFT' ) ) {
614 define( 'LATEPOINT_INVOICE_STATUS_DRAFT', 'draft' );
615 }
616 if ( ! defined( 'LATEPOINT_INVOICE_STATUS_VOID' ) ) {
617 define( 'LATEPOINT_INVOICE_STATUS_VOID', 'void' );
618 }
619 if ( ! defined( 'LATEPOINT_INVOICE_STATUS_UNCOLLECTIBLE' ) ) {
620 define( 'LATEPOINT_INVOICE_STATUS_UNCOLLECTIBLE', 'uncollectible' );
621 }
622
623 // PAYMENTS
624
625 if ( ! defined( 'LATEPOINT_PAYMENT_PROCESSOR_STRIPE' ) ) {
626 define( 'LATEPOINT_PAYMENT_PROCESSOR_STRIPE', 'stripe' );
627 }
628 if ( ! defined( 'LATEPOINT_PAYMENT_PROCESSOR_BRAINTREE' ) ) {
629 define( 'LATEPOINT_PAYMENT_PROCESSOR_BRAINTREE', 'braintree' );
630 }
631 if ( ! defined( 'LATEPOINT_PAYMENT_PROCESSOR_PAYPAL' ) ) {
632 define( 'LATEPOINT_PAYMENT_PROCESSOR_PAYPAL', 'paypal' );
633 }
634
635 if ( ! defined( 'LATEPOINT_TRANSACTION_KIND_CAPTURE' ) ) {
636 define( 'LATEPOINT_TRANSACTION_KIND_CAPTURE', 'capture' );
637 }
638 if ( ! defined( 'LATEPOINT_TRANSACTION_KIND_AUTHORIZATION' ) ) {
639 define( 'LATEPOINT_TRANSACTION_KIND_AUTHORIZATION', 'authorization' );
640 }
641 if ( ! defined( 'LATEPOINT_TRANSACTION_KIND_VOID' ) ) {
642 define( 'LATEPOINT_TRANSACTION_KIND_VOID', 'void' );
643 }
644
645 if ( ! defined( 'LATEPOINT_PAYMENT_METHOD_LOCAL' ) ) {
646 define( 'LATEPOINT_PAYMENT_METHOD_LOCAL', 'local' );
647 }
648 if ( ! defined( 'LATEPOINT_PAYMENT_METHOD_PAYPAL' ) ) {
649 define( 'LATEPOINT_PAYMENT_METHOD_PAYPAL', 'paypal' );
650 }
651 if ( ! defined( 'LATEPOINT_PAYMENT_METHOD_CARD' ) ) {
652 define( 'LATEPOINT_PAYMENT_METHOD_CARD', 'card' );
653 }
654
655 if ( ! defined( 'LATEPOINT_PAYMENT_TIME_LATER' ) ) {
656 define( 'LATEPOINT_PAYMENT_TIME_LATER', 'later' );
657 }
658 if ( ! defined( 'LATEPOINT_PAYMENT_TIME_NOW' ) ) {
659 define( 'LATEPOINT_PAYMENT_TIME_NOW', 'now' );
660 }
661
662 if ( ! defined( 'LATEPOINT_VALUE_ON' ) ) {
663 define( 'LATEPOINT_VALUE_ON', 'on' );
664 }
665 if ( ! defined( 'LATEPOINT_VALUE_OFF' ) ) {
666 define( 'LATEPOINT_VALUE_OFF', 'off' );
667 }
668
669 if ( ! defined( 'LATEPOINT_STATUS_ACTIVE' ) ) {
670 define( 'LATEPOINT_STATUS_ACTIVE', 'active' );
671 }
672 if ( ! defined( 'LATEPOINT_STATUS_DISABLED' ) ) {
673 define( 'LATEPOINT_STATUS_DISABLED', 'disabled' );
674 }
675
676 if ( ! defined( 'LATEPOINT_PAYMENT_PORTION_FULL' ) ) {
677 define( 'LATEPOINT_PAYMENT_PORTION_FULL', 'full' );
678 }
679 if ( ! defined( 'LATEPOINT_PAYMENT_PORTION_REMAINING' ) ) {
680 define( 'LATEPOINT_PAYMENT_PORTION_REMAINING', 'remaining' );
681 }
682 if ( ! defined( 'LATEPOINT_PAYMENT_PORTION_DEPOSIT' ) ) {
683 define( 'LATEPOINT_PAYMENT_PORTION_DEPOSIT', 'deposit' );
684 }
685 if ( ! defined( 'LATEPOINT_PAYMENT_PORTION_CUSTOM' ) ) {
686 define( 'LATEPOINT_PAYMENT_PORTION_CUSTOM', 'custom' );
687 }
688
689 if ( ! defined( 'LATEPOINT_ANY_AGENT' ) ) {
690 define( 'LATEPOINT_ANY_AGENT', 'any' );
691 }
692 if ( ! defined( 'LATEPOINT_ANY_LOCATION' ) ) {
693 define( 'LATEPOINT_ANY_LOCATION', 'any' );
694 }
695
696 if ( ! defined( 'LATEPOINT_ANY_AGENT_ORDER_RANDOM' ) ) {
697 define( 'LATEPOINT_ANY_AGENT_ORDER_RANDOM', 'random' );
698 }
699 if ( ! defined( 'LATEPOINT_ANY_AGENT_ORDER_PRICE_HIGH' ) ) {
700 define( 'LATEPOINT_ANY_AGENT_ORDER_PRICE_HIGH', 'price_high' );
701 }
702 if ( ! defined( 'LATEPOINT_ANY_AGENT_ORDER_PRICE_LOW' ) ) {
703 define( 'LATEPOINT_ANY_AGENT_ORDER_PRICE_LOW', 'price_low' );
704 }
705 if ( ! defined( 'LATEPOINT_ANY_AGENT_ORDER_BUSY_HIGH' ) ) {
706 define( 'LATEPOINT_ANY_AGENT_ORDER_BUSY_HIGH', 'busy_high' );
707 }
708 if ( ! defined( 'LATEPOINT_ANY_AGENT_ORDER_BUSY_LOW' ) ) {
709 define( 'LATEPOINT_ANY_AGENT_ORDER_BUSY_LOW', 'busy_low' );
710 }
711 if ( ! defined( 'LATEPOINT_RECURRING_BOOKINGS_UNFOLDED_COUNT' ) ) {
712 define( 'LATEPOINT_RECURRING_BOOKINGS_UNFOLDED_COUNT', 5 );
713 }
714
715 if ( ! defined( 'LATEPOINT_ALL' ) ) {
716 define( 'LATEPOINT_ALL', 'all' );
717 }
718
719 // Latepoint APP URL
720 if ( ! defined( 'LATEPOINT_APP_CONNECT_URL' ) ) {
721 define( 'LATEPOINT_APP_CONNECT_URL', 'https://app.latepoint.com' );
722 }
723
724 // Stripe Connect
725 if ( ! defined( 'LATEPOINT_STRIPE_CONNECT_URL' ) ) {
726 define( 'LATEPOINT_STRIPE_CONNECT_URL', LATEPOINT_APP_CONNECT_URL );
727 }
728 }
729
730
731 /**
732 * Include required core files used in admin and on the frontend.
733 */
734 public function includes() {
735
736 // CONTROLLERS
737 include_once LATEPOINT_ABSPATH . 'lib/controllers/controller.php';
738 include_once LATEPOINT_ABSPATH . 'lib/controllers/pro_controller.php';
739 include_once LATEPOINT_ABSPATH . 'lib/controllers/default_agent_controller.php';
740 include_once LATEPOINT_ABSPATH . 'lib/controllers/activities_controller.php';
741 include_once LATEPOINT_ABSPATH . 'lib/controllers/search_controller.php';
742 include_once LATEPOINT_ABSPATH . 'lib/controllers/customers_controller.php';
743 include_once LATEPOINT_ABSPATH . 'lib/controllers/services_controller.php';
744 include_once LATEPOINT_ABSPATH . 'lib/controllers/carts_controller.php';
745 include_once LATEPOINT_ABSPATH . 'lib/controllers/transactions_controller.php';
746 include_once LATEPOINT_ABSPATH . 'lib/controllers/orders_controller.php';
747 include_once LATEPOINT_ABSPATH . 'lib/controllers/auth_controller.php';
748 include_once LATEPOINT_ABSPATH . 'lib/controllers/processes_controller.php';
749 include_once LATEPOINT_ABSPATH . 'lib/controllers/process_jobs_controller.php';
750 include_once LATEPOINT_ABSPATH . 'lib/controllers/settings_controller.php';
751 include_once LATEPOINT_ABSPATH . 'lib/controllers/form_fields_controller.php';
752 include_once LATEPOINT_ABSPATH . 'lib/controllers/bookings_controller.php';
753 include_once LATEPOINT_ABSPATH . 'lib/controllers/dashboard_controller.php';
754 include_once LATEPOINT_ABSPATH . 'lib/controllers/wizard_controller.php';
755 include_once LATEPOINT_ABSPATH . 'lib/controllers/notifications_controller.php';
756 include_once LATEPOINT_ABSPATH . 'lib/controllers/steps_controller.php';
757 include_once LATEPOINT_ABSPATH . 'lib/controllers/calendars_controller.php';
758 include_once LATEPOINT_ABSPATH . 'lib/controllers/booking_form_settings_controller.php';
759 include_once LATEPOINT_ABSPATH . 'lib/controllers/integrations_controller.php';
760 include_once LATEPOINT_ABSPATH . 'lib/controllers/customer_cabinet_controller.php';
761 include_once LATEPOINT_ABSPATH . 'lib/controllers/manage_booking_by_key_controller.php';
762 include_once LATEPOINT_ABSPATH . 'lib/controllers/manage_order_by_key_controller.php';
763 include_once LATEPOINT_ABSPATH . 'lib/controllers/events_controller.php';
764 include_once LATEPOINT_ABSPATH . 'lib/controllers/stripe_connect_controller.php';
765 include_once LATEPOINT_ABSPATH . 'lib/controllers/invoices_controller.php';
766 include_once LATEPOINT_ABSPATH . 'lib/controllers/support_topics_controller.php';
767
768
769 // MODELS
770 include_once LATEPOINT_ABSPATH . 'lib/models/model.php';
771 include_once LATEPOINT_ABSPATH . 'lib/models/meta_model.php';
772 include_once LATEPOINT_ABSPATH . 'lib/models/bundle_model.php';
773 include_once LATEPOINT_ABSPATH . 'lib/models/cart_model.php';
774 include_once LATEPOINT_ABSPATH . 'lib/models/cart_meta_model.php';
775 include_once LATEPOINT_ABSPATH . 'lib/models/cart_item_model.php';
776 include_once LATEPOINT_ABSPATH . 'lib/models/order_model.php';
777 include_once LATEPOINT_ABSPATH . 'lib/models/order_meta_model.php';
778 include_once LATEPOINT_ABSPATH . 'lib/models/order_item_model.php';
779 include_once LATEPOINT_ABSPATH . 'lib/models/activity_model.php';
780 include_once LATEPOINT_ABSPATH . 'lib/models/work_period_model.php';
781 include_once LATEPOINT_ABSPATH . 'lib/models/agent_model.php';
782 include_once LATEPOINT_ABSPATH . 'lib/models/service_model.php';
783 include_once LATEPOINT_ABSPATH . 'lib/models/connector_model.php';
784 include_once LATEPOINT_ABSPATH . 'lib/models/service_category_model.php';
785 include_once LATEPOINT_ABSPATH . 'lib/models/customer_model.php';
786 include_once LATEPOINT_ABSPATH . 'lib/models/settings_model.php';
787 include_once LATEPOINT_ABSPATH . 'lib/models/booking_model.php';
788 include_once LATEPOINT_ABSPATH . 'lib/models/step_settings_model.php';
789 include_once LATEPOINT_ABSPATH . 'lib/models/transaction_model.php';
790 include_once LATEPOINT_ABSPATH . 'lib/models/transaction_intent_model.php';
791 include_once LATEPOINT_ABSPATH . 'lib/models/transaction_refund_model.php';
792 include_once LATEPOINT_ABSPATH . 'lib/models/booking_meta_model.php';
793 include_once LATEPOINT_ABSPATH . 'lib/models/customer_meta_model.php';
794 include_once LATEPOINT_ABSPATH . 'lib/models/agent_meta_model.php';
795 include_once LATEPOINT_ABSPATH . 'lib/models/service_meta_model.php';
796 include_once LATEPOINT_ABSPATH . 'lib/models/bundle_meta_model.php';
797 include_once LATEPOINT_ABSPATH . 'lib/models/location_model.php';
798 include_once LATEPOINT_ABSPATH . 'lib/models/location_category_model.php';
799 include_once LATEPOINT_ABSPATH . 'lib/models/session_model.php';
800 include_once LATEPOINT_ABSPATH . 'lib/models/order_intent_model.php';
801 include_once LATEPOINT_ABSPATH . 'lib/models/order_intent_meta_model.php';
802 include_once LATEPOINT_ABSPATH . 'lib/models/process_model.php';
803 include_once LATEPOINT_ABSPATH . 'lib/models/process_job_model.php';
804 include_once LATEPOINT_ABSPATH . 'lib/models/join_bundles_services_model.php';
805 include_once LATEPOINT_ABSPATH . 'lib/models/invoice_model.php';
806 include_once LATEPOINT_ABSPATH . 'lib/models/payment_request_model.php';
807 include_once LATEPOINT_ABSPATH . 'lib/models/recurrence_model.php';
808 include_once LATEPOINT_ABSPATH . 'lib/models/off_period_model.php';
809 include_once LATEPOINT_ABSPATH . 'lib/models/otp_model.php';
810
811
812 // HELPERS
813 include_once LATEPOINT_ABSPATH . 'lib/helpers/wp_datetime.php';
814 include_once LATEPOINT_ABSPATH . 'lib/helpers/router_helper.php';
815 include_once LATEPOINT_ABSPATH . 'lib/helpers/sessions_helper.php';
816 include_once LATEPOINT_ABSPATH . 'lib/helpers/auth_helper.php';
817 include_once LATEPOINT_ABSPATH . 'lib/helpers/encrypt_helper.php';
818 include_once LATEPOINT_ABSPATH . 'lib/helpers/license_helper.php';
819 include_once LATEPOINT_ABSPATH . 'lib/helpers/form_helper.php';
820 include_once LATEPOINT_ABSPATH . 'lib/helpers/migrations_helper.php';
821 include_once LATEPOINT_ABSPATH . 'lib/helpers/util_helper.php';
822 include_once LATEPOINT_ABSPATH . 'lib/helpers/debug_helper.php';
823 include_once LATEPOINT_ABSPATH . 'lib/helpers/wp_user_helper.php';
824 include_once LATEPOINT_ABSPATH . 'lib/helpers/menu_helper.php';
825 include_once LATEPOINT_ABSPATH . 'lib/helpers/image_helper.php';
826 include_once LATEPOINT_ABSPATH . 'lib/helpers/events_helper.php';
827 include_once LATEPOINT_ABSPATH . 'lib/helpers/icalendar_helper.php';
828 include_once LATEPOINT_ABSPATH . 'lib/helpers/version_specific_updates_helper.php';
829 include_once LATEPOINT_ABSPATH . 'lib/helpers/calendar_helper.php';
830 include_once LATEPOINT_ABSPATH . 'lib/helpers/meeting_systems_helper.php';
831 include_once LATEPOINT_ABSPATH . 'lib/helpers/marketing_systems_helper.php';
832 include_once LATEPOINT_ABSPATH . 'lib/helpers/short_links_systems_helper.php';
833 include_once LATEPOINT_ABSPATH . 'lib/helpers/timeline_helper.php';
834 include_once LATEPOINT_ABSPATH . 'lib/helpers/booking_helper.php';
835 include_once LATEPOINT_ABSPATH . 'lib/helpers/order_intent_helper.php';
836 include_once LATEPOINT_ABSPATH . 'lib/helpers/activities_helper.php';
837 include_once LATEPOINT_ABSPATH . 'lib/helpers/settings_helper.php';
838 include_once LATEPOINT_ABSPATH . 'lib/helpers/customer_helper.php';
839 include_once LATEPOINT_ABSPATH . 'lib/helpers/customer_import_helper.php';
840 include_once LATEPOINT_ABSPATH . 'lib/helpers/processes_helper.php';
841 include_once LATEPOINT_ABSPATH . 'lib/helpers/agent_helper.php';
842 include_once LATEPOINT_ABSPATH . 'lib/helpers/service_helper.php';
843 include_once LATEPOINT_ABSPATH . 'lib/helpers/database_helper.php';
844 include_once LATEPOINT_ABSPATH . 'lib/helpers/money_helper.php';
845 include_once LATEPOINT_ABSPATH . 'lib/helpers/time_helper.php';
846 include_once LATEPOINT_ABSPATH . 'lib/helpers/notifications_helper.php';
847 include_once LATEPOINT_ABSPATH . 'lib/helpers/email_helper.php';
848 include_once LATEPOINT_ABSPATH . 'lib/helpers/sms_helper.php';
849 include_once LATEPOINT_ABSPATH . 'lib/helpers/whatsapp_helper.php';
850 include_once LATEPOINT_ABSPATH . 'lib/helpers/styles_helper.php';
851 include_once LATEPOINT_ABSPATH . 'lib/helpers/work_periods_helper.php';
852 include_once LATEPOINT_ABSPATH . 'lib/helpers/bundles_helper.php';
853 include_once LATEPOINT_ABSPATH . 'lib/helpers/carts_helper.php';
854 include_once LATEPOINT_ABSPATH . 'lib/helpers/orders_helper.php';
855 include_once LATEPOINT_ABSPATH . 'lib/helpers/replacer_helper.php';
856 include_once LATEPOINT_ABSPATH . 'lib/helpers/payments_helper.php';
857 include_once LATEPOINT_ABSPATH . 'lib/helpers/resource_helper.php';
858 include_once LATEPOINT_ABSPATH . 'lib/helpers/meta_helper.php';
859 include_once LATEPOINT_ABSPATH . 'lib/helpers/shortcodes_helper.php';
860 include_once LATEPOINT_ABSPATH . 'lib/helpers/connector_helper.php';
861 include_once LATEPOINT_ABSPATH . 'lib/helpers/location_helper.php';
862 include_once LATEPOINT_ABSPATH . 'lib/helpers/csv_helper.php';
863 include_once LATEPOINT_ABSPATH . 'lib/helpers/steps_helper.php';
864 include_once LATEPOINT_ABSPATH . 'lib/helpers/params_helper.php';
865 include_once LATEPOINT_ABSPATH . 'lib/helpers/process_jobs_helper.php';
866 include_once LATEPOINT_ABSPATH . 'lib/helpers/blocks_helper.php';
867 include_once LATEPOINT_ABSPATH . 'lib/helpers/roles_helper.php';
868 include_once LATEPOINT_ABSPATH . 'lib/helpers/price_breakdown_helper.php';
869 include_once LATEPOINT_ABSPATH . 'lib/helpers/stripe_connect_helper.php';
870 include_once LATEPOINT_ABSPATH . 'lib/helpers/pages_helper.php';
871 include_once LATEPOINT_ABSPATH . 'lib/helpers/elementor_helper.php';
872 include_once LATEPOINT_ABSPATH . 'lib/helpers/bricks_helper.php';
873 include_once LATEPOINT_ABSPATH . 'lib/helpers/transaction_intent_helper.php';
874 include_once LATEPOINT_ABSPATH . 'lib/helpers/transaction_helper.php';
875 include_once LATEPOINT_ABSPATH . 'lib/helpers/invoices_helper.php';
876 include_once LATEPOINT_ABSPATH . 'lib/helpers/support_topics_helper.php';
877 include_once LATEPOINT_ABSPATH . 'lib/helpers/otp_helper.php';
878 include_once LATEPOINT_ABSPATH . 'lib/helpers/nps_survey_helper.php';
879 include_once LATEPOINT_ABSPATH . 'lib/helpers/analytics_helper.php';
880
881 // MISC
882 include_once LATEPOINT_ABSPATH . 'lib/misc/time_period.php';
883 include_once LATEPOINT_ABSPATH . 'lib/misc/blocked_period.php';
884 include_once LATEPOINT_ABSPATH . 'lib/misc/booked_period.php';
885 include_once LATEPOINT_ABSPATH . 'lib/misc/stripe_connect_customer.php';
886 include_once LATEPOINT_ABSPATH . 'lib/misc/booking_request.php';
887 include_once LATEPOINT_ABSPATH . 'lib/misc/booking_resource.php';
888 include_once LATEPOINT_ABSPATH . 'lib/misc/work_period.php';
889 include_once LATEPOINT_ABSPATH . 'lib/misc/filter.php';
890 include_once LATEPOINT_ABSPATH . 'lib/misc/booking_slot.php';
891 include_once LATEPOINT_ABSPATH . 'lib/misc/process_event.php';
892 include_once LATEPOINT_ABSPATH . 'lib/misc/process_action.php';
893 include_once LATEPOINT_ABSPATH . 'lib/misc/role.php';
894 include_once LATEPOINT_ABSPATH . 'lib/misc/user.php';
895 include_once LATEPOINT_ABSPATH . 'lib/misc/step.php';
896 include_once LATEPOINT_ABSPATH . 'lib/misc/router.php';
897
898 // MAILERS
899 include_once LATEPOINT_ABSPATH . 'lib/mailers/mailer.php';
900 include_once LATEPOINT_ABSPATH . 'lib/mailers/agent_mailer.php';
901 include_once LATEPOINT_ABSPATH . 'lib/mailers/customer_mailer.php';
902
903 do_action( 'latepoint_includes' );
904 }
905
906
907 /**
908 * Hook into actions and filters.
909 */
910 public function init_hooks() {
911 if ( isset( $_GET['latepoint'] ) && $_GET['latepoint'] == 'instant' ) {
912 add_action( 'init', array( $this, 'public_route_call' ), 100 );
913 }
914 $siteurl = get_site_option( 'siteurl' );
915 if ( $siteurl ) {
916 $siteurl_hash = md5( $siteurl );
917 } else {
918 $siteurl_hash = '';
919 }
920
921 if ( ! defined( 'LATEPOINT_CUSTOMER_LOGGED_IN_COOKIE' ) ) {
922 define( 'LATEPOINT_CUSTOMER_LOGGED_IN_COOKIE', 'latepoint_customer_logged_in_' . $siteurl_hash );
923 }
924 if ( ! defined( 'LATEPOINT_ADMIN_MENU_LAYOUT_STYLE_COOKIE' ) ) {
925 define( 'LATEPOINT_ADMIN_MENU_LAYOUT_STYLE_COOKIE', 'latepoint_admin_menu_layout_style_' . $siteurl_hash );
926 }
927 if ( ! defined( 'LATEPOINT_SELECTED_TIMEZONE_COOKIE' ) ) {
928 define( 'LATEPOINT_SELECTED_TIMEZONE_COOKIE', 'latepoint_selected_timezone_' . $siteurl_hash );
929 }
930
931 if ( ! defined( 'LATEPOINT_CART_COOKIE' ) ) {
932 define( 'LATEPOINT_CART_COOKIE', 'latepoint_cart_' . $siteurl_hash );
933 }
934
935 // Plugins loaded
936 add_action( 'plugins_loaded', array( $this, 'plugins_loaded_hook' ) );
937
938 // Activation / deactivation hooks.
939 register_activation_hook( __FILE__, array( $this, 'create_required_tables' ) );
940 register_activation_hook( __FILE__, array( $this, 'on_activate' ) );
941 register_deactivation_hook( __FILE__, [ $this, 'on_deactivate' ] );
942
943 add_action( 'after_setup_theme', array( $this, 'setup_environment' ) );
944 add_action( 'init', array( $this, 'init' ), 0 );
945 add_action( 'init', array( $this, 'init_widgets' ), 11 );
946
947 add_action( 'admin_menu', array( $this, 'init_menus' ) );
948 add_action( 'wp_enqueue_scripts', array( $this, 'load_front_scripts_and_styles' ) );
949 add_action( 'admin_enqueue_scripts', array( $this, 'load_admin_scripts_and_styles' ) );
950 add_filter( 'admin_body_class', array( $this, 'add_admin_body_class' ), 40 );
951 add_filter( 'body_class', array( $this, 'add_body_class' ) );
952
953 add_filter( 'cron_schedules', [ $this, 'add_custom_cron_schedules' ] );
954
955 // used for testing of localhost to prevent wordpress issues with getting files from local server
956 if ( LATEPOINT_ALLOW_LOCAL_SERVER ) {
957 add_filter( 'http_request_args', [ $this, 'disable_localhost_url_check_for_development' ] );
958 }
959
960 // Add Link to latepoint to admin bar
961 add_action( 'admin_bar_menu', array( $this, 'add_latepoint_link_to_admin_bar' ), 999 );
962
963
964 // fix for output buffering error in WP
965 // remove_action( 'shutdown', 'wp_ob_end_flush_all', 1 );
966
967 add_action( 'wp_loaded', array( $this, 'pre_route_call' ) );
968
969
970 // Create router action
971 // ajax
972 add_action( 'wp_ajax_latepoint_route_call', array( $this, 'route_call' ) );
973 add_action( 'wp_ajax_nopriv_latepoint_route_call', array( $this, 'route_call' ) );
974 // admin custom post/get
975 add_action( 'admin_post_latepoint_route_call', array( $this, 'route_call' ) );
976 add_action( 'admin_post_nopriv_latepoint_route_call', array( $this, 'route_call' ) );
977
978 // crons
979 add_action( 'latepoint_clear_old_activity_logs', [ $this, 'clear_old_activity_logs' ] );
980
981
982 add_action( 'latepoint_on_addon_activate', [ $this, 'addon_activated' ], 10, 2 );
983 add_action( 'latepoint_on_addon_deactivate', [ $this, 'addon_deactivated' ], 10, 2 );
984
985
986 add_action( 'latepoint_email_processor_settings', [ $this, 'email_processor_settings' ], 10, 2 );
987
988
989 // Auth
990 add_filter( 'login_redirect', [ $this, 'redirect_manager_and_agent_to_latepoint' ], 10, 3 );
991
992
993 // But WordPress has a whitelist of variables it allows, so we must put it on that list
994 add_action( 'query_vars', array( $this, 'front_route_query_vars' ) );
995
996 // If this is done, we can access it later
997 // This example checks very early in the process:
998 // if the variable is set, we include our page and stop execution after it
999 add_action( 'parse_request', array( $this, 'front_route_parse_request' ) );
1000
1001
1002 add_action( 'admin_init', array( $this, 'redirect_after_activation' ) );
1003
1004 add_filter( 'display_post_states', 'OsPagesHelper::add_display_post_states', 10, 2 );
1005
1006 // allow agents to access admin when woocommerce plugin is installed
1007 add_filter( 'woocommerce_prevent_admin_access', [ $this, 'woocommerce_allow_agent_to_access_admin' ], 20, 1 );
1008
1009 // plugin related hooks
1010 add_action( 'latepoint_model_save', [ $this, 'save_connected_wordpress_user' ] );
1011
1012 // Stripe Connect
1013
1014 add_filter( 'latepoint_payment_processors', 'OsStripeConnectHelper::register_payment_processor' );
1015 add_action( 'latepoint_payment_processor_settings', 'OsStripeConnectHelper::add_settings_fields', 10 );
1016 add_action( 'latepoint_step_payment__pay_content', 'OsStripeConnectHelper::output_payment_step_contents', 10 );
1017 add_action( 'latepoint_order_payment__pay_content_after', 'OsStripeConnectHelper::output_order_payment_pay_contents', 10 );
1018
1019 add_filter( 'latepoint_convert_charge_amount_to_requirements', 'OsStripeConnectHelper::convert_charge_amount_to_requirements', 10, 2 );
1020 add_filter( 'latepoint_process_payment_for_order_intent', 'OsStripeConnectHelper::process_payment', 10, 2 );
1021 add_filter( 'latepoint_process_payment_for_transaction_intent', 'OsStripeConnectHelper::process_payment_for_transaction_intent', 10, 2 );
1022 add_filter( 'latepoint_transaction_intent_specs_charge_amount', 'OsStripeConnectHelper::convert_transaction_intent_charge_amount_to_specs', 10, 2 );
1023
1024 add_filter( 'latepoint_get_all_payment_times', 'OsStripeConnectHelper::add_all_payment_methods_to_payment_times' );
1025 add_filter( 'latepoint_get_enabled_payment_times', 'OsStripeConnectHelper::add_enabled_payment_methods_to_payment_times' );
1026 add_filter( 'latepoint_transaction_is_refund_available', 'OsStripeConnectHelper::transaction_is_refund_available', 10, 2 );
1027 add_filter( 'latepoint_process_refund', 'OsStripeConnectHelper::process_refund', 10, 3 );
1028 add_filter( 'plugin_action_links', [ $this, 'add_upgrade_link' ], 10, 2 );
1029
1030
1031 add_action( 'latepoint_customer_edit_form_after', 'OsStripeConnectHelper::output_stripe_link_on_customer_quick_form' );
1032
1033 add_action( 'save_post', 'OsBlockHelper::save_blocks_styles' );
1034 // misc
1035 add_action( 'latepoint_after_step_content', 'OsStepsHelper::output_preset_fields' );
1036
1037 OsActivitiesHelper::init_hooks();
1038 OsProcessJobsHelper::init_hooks();
1039
1040 // Initialize NPS Survey.
1041 OsNpsSurveyHelper::get_instance();
1042
1043 do_action( 'latepoint_init_hooks' );
1044 }
1045
1046 function plugins_loaded_hook() {
1047 OsAnalyticsHelper::init();
1048 }
1049
1050
1051 function add_custom_cron_schedules( $schedules ) {
1052 if ( ! isset( $schedules['latepoint_5_minutes'] ) ) {
1053 $schedules['latepoint_5_minutes'] = array(
1054 'interval' => 5 * 60,
1055 'display' => __( 'Once every 5 minutes', 'latepoint' ),
1056 );
1057 }
1058
1059 return $schedules;
1060 }
1061
1062 function add_upgrade_link( $links, $plugin_file ) {
1063 if ( plugin_basename( __FILE__ ) == $plugin_file ) {
1064 if ( apply_filters( 'latepoint_show_upgrade_link_on_plugins_page', true, $plugin_file ) ) {
1065 $custom_link = '<a class="latepoint-plugin-upgrade-premium-link" href="' . LATEPOINT_UPGRADE_URL . '">' . esc_html__( 'Get LatePoint Pro' ) . '</a>';
1066 $links[] = $custom_link;
1067 }
1068 }
1069
1070 return $links;
1071 }
1072
1073 function woocommerce_allow_agent_to_access_admin( $prevent_access ) {
1074 if ( OsAuthHelper::is_agent_logged_in() ) {
1075 $prevent_access = false;
1076 }
1077
1078 return $prevent_access;
1079 }
1080
1081 function email_processor_settings( $processor_code ) {
1082 if ( $processor_code == 'wp_mail' ) {
1083 echo '<div class="sub-section-row">
1084 <div class="sub-section-label">
1085 <h3>' . esc_html__( 'Email Settings', 'latepoint' ) . '</h3>
1086 </div>
1087 <div class="sub-section-content">
1088 <div class="os-row">
1089 <div class="os-col-4">' . OsFormHelper::text_field( 'settings[notification_email_setting_from_name]', __( 'From Name', 'latepoint' ), OsSettingsHelper::get_settings_value( 'notification_email_setting_from_name', get_bloginfo( 'name' ) ), [ 'theme' => 'simple' ] ) . '</div>
1090 <div class="os-col-8">' . OsFormHelper::text_field( 'settings[notification_email_setting_from_email]', __( 'From Email Address', 'latepoint' ), OsSettingsHelper::get_settings_value( 'notification_email_setting_from_email', get_bloginfo( 'admin_email' ) ), [ 'theme' => 'simple' ] ) . '</div>
1091 </div>
1092 </div>
1093 </div>';
1094 }
1095 }
1096
1097 public function save_connected_wordpress_user( $customer ) {
1098 if ( $customer->is_new_record() ) {
1099 return;
1100 }
1101 if ( $customer instanceof OsCustomerModel ) {
1102 if ( $customer->wordpress_user_id ) {
1103 // has connected wp user
1104 $wp_user = get_user_by( 'id', $customer->wordpress_user_id );
1105 if ( $wp_user && ! is_super_admin( $wp_user->ID ) ) {
1106 // update linked wordpress user
1107 if ( $customer->first_name && $customer->first_name != $wp_user->first_name ) {
1108 $wp_user->first_name = $customer->first_name;
1109 }
1110 if ( $customer->last_name && $customer->last_name != $wp_user->last_name ) {
1111 $wp_user->last_name = $customer->last_name;
1112 }
1113 if ( $customer->email && $customer->email != $wp_user->user_email ) {
1114 $wp_user->user_email = $customer->email;
1115 }
1116 $result = wp_update_user( $wp_user );
1117 if ( is_wp_error( $result ) ) {
1118 error_log( 'Error saving wp user' );
1119 } else {
1120 // update user cookies because their data has changed
1121 }
1122 }
1123 } else {
1124 if ( OsAuthHelper::can_wp_users_login_as_customers() ) {
1125 OsCustomerHelper::create_wp_user_for_customer( $customer );
1126 }
1127 }
1128 }
1129 }
1130
1131 // used for testing of localhost to prevent wordpress issues with getting files from local server
1132 public function disable_localhost_url_check_for_development( $parsed_args ) {
1133 $parsed_args['reject_unsafe_urls'] = false;
1134
1135 return $parsed_args;
1136 }
1137
1138 /*
1139 * Check if current user is Agent or Manager, automatically redirect to latepoint dashboard instead of default WordPress admin
1140 */
1141 public function redirect_manager_and_agent_to_latepoint( $redirect_to, $request, $user ) {
1142 if ( $user && is_object( $user ) && is_a( $user, 'WP_User' ) ) {
1143 if ( $user->has_cap( 'edit_bookings' ) || $user->has_cap( 'manage_latepoint' ) ) {
1144 return OsRouterHelper::build_link( [ 'dashboard', 'index' ] );
1145 }
1146 }
1147
1148 return $redirect_to;
1149 }
1150
1151
1152 public function clear_old_activity_logs() {
1153 if ( OsSettingsHelper::is_on( 'should_clear_old_activity_log' ) ) {
1154 global $wpdb;
1155 $activity = new OsActivityModel();
1156
1157 $now_datetime = OsTimeHelper::now_datetime_object();
1158
1159 $cutoff = $now_datetime->modify( '-6 months' )->format( LATEPOINT_DATETIME_DB_FORMAT );
1160 $wpdb->query( $wpdb->prepare( 'DELETE FROM %i WHERE `created_at` < %s', [ esc_sql( $activity->table_name ), $cutoff ] ) );
1161 }
1162 }
1163
1164 public function addon_activated( $addon_name, $addon_version ) {
1165 OsDatabaseHelper::check_db_version_for_addons();
1166 }
1167
1168 public function addon_deactivated( $addon_name, $addon_version ) {
1169 OsDatabaseHelper::delete_addon_info( $addon_name, $addon_version );
1170 }
1171
1172
1173 public function on_deactivate() {
1174 wp_clear_scheduled_hook( 'latepoint_check_if_addons_update_available' );
1175 wp_clear_scheduled_hook( 'latepoint_clear_old_activity_logs' );
1176 }
1177
1178 function on_activate() {
1179 OsRolesHelper::register_roles_in_wp();
1180
1181 if ( ! wp_next_scheduled( 'latepoint_check_if_addons_update_available' ) ) {
1182 wp_schedule_event( time(), 'daily', 'latepoint_check_if_addons_update_available' );
1183 }
1184
1185 if ( ! wp_next_scheduled( 'latepoint_clear_old_activity_logs' ) ) {
1186 wp_schedule_event( time(), 'daily', 'latepoint_clear_old_activity_logs' );
1187 }
1188
1189 // if wizard has not been visited yet - redirect to it
1190 if ( ! get_option( 'latepoint_wizard_visited', false ) ) {
1191 add_option( 'latepoint_redirect_to_wizard', true );
1192 }
1193
1194 // create default location
1195 OsLocationHelper::get_default_location();
1196
1197 # create default pages if not existing (customer cabinet)
1198 OsPagesHelper::create_predefined_pages();
1199
1200 do_action( 'latepoint_on_activate', 'latepoint', $this->version );
1201 }
1202
1203 function redirect_after_activation() {
1204 if ( get_option( 'latepoint_redirect_to_wizard', false ) ) {
1205 delete_option( 'latepoint_redirect_to_wizard' );
1206 if ( ! isset( $_GET['activate-multi'] ) ) {
1207 wp_redirect( OsRouterHelper::build_link( OsRouterHelper::build_route_name( 'wizard', 'setup' ) ) );
1208 }
1209 } elseif ( get_option( 'latepoint_show_version_5_modal', false ) ) {
1210 delete_option( 'latepoint_show_version_5_modal' );
1211 if ( ! isset( $_GET['activate-multi'] ) ) {
1212 wp_redirect( OsRouterHelper::build_link( OsRouterHelper::build_route_name( 'settings', 'version_5_intro' ) ) );
1213 }
1214 }
1215 }
1216
1217 public function front_route_parse_request( $wp ) {
1218 if ( isset( $wp->query_vars['latepoint_is_custom_route'] ) ) {
1219 if ( isset( $wp->query_vars['route_name'] ) ) {
1220 $this->route_call();
1221 }
1222 }
1223 }
1224
1225 public function front_route_query_vars( $query_vars ) {
1226 $query_vars[] = 'latepoint_booking_id';
1227 $query_vars[] = 'latepoint_is_custom_route';
1228 $query_vars[] = 'route_name';
1229
1230 return $query_vars;
1231 }
1232
1233 public function route_call() {
1234 $route_name = OsRouterHelper::get_request_param( 'route_name', OsRouterHelper::build_route_name( 'dashboard', 'index' ) );
1235 OsRouterHelper::call_by_route_name( $route_name, OsRouterHelper::get_request_param( 'return_format', 'html' ) );
1236 }
1237
1238 public function public_route_call() {
1239 OsRouterHelper::call_by_route_name( OsRouterHelper::build_route_name( 'steps', 'start_instant' ), OsRouterHelper::get_request_param( 'return_format', 'html' ) );
1240 }
1241
1242 public function pre_route_call() {
1243 if ( OsRouterHelper::get_request_param( 'pre_route' ) ) {
1244 $this->route_call();
1245 }
1246 }
1247
1248
1249 /**
1250 * Init LatePoint when WordPress Initialises.
1251 */
1252 public function init() {
1253 OsAuthHelper::set_current_user();
1254 OsStepsHelper::init_step_actions();
1255 OsSettingsHelper::run_autoload();
1256 $this->register_post_types();
1257 $this->register_shortcodes();
1258 // Set up localisation.
1259 $this->load_plugin_textdomain();
1260 do_action( 'latepoint_init' );
1261 add_filter( 'http_request_host_is_external', '__return_true' );
1262
1263 OsBlockHelper::register_blocks();
1264 }
1265
1266 public function init_widgets() {
1267 OsElementorHelper::init();
1268 OsBricksHelper::init();
1269 }
1270
1271 public function load_plugin_textdomain() {
1272 load_plugin_textdomain( 'latepoint', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
1273 }
1274
1275
1276 /**
1277 * Register a custom menu page.
1278 */
1279 function init_menus() {
1280 // link for admins
1281 add_menu_page(
1282 __( 'LatePoint', 'latepoint' ),
1283 __( 'LatePoint', 'latepoint' ),
1284 OsAuthHelper::get_current_user()->wp_capability,
1285 'latepoint',
1286 [ $this, 'route_call' ],
1287 'none'
1288 );
1289 }
1290
1291
1292 function add_latepoint_link_to_admin_bar( $wp_admin_bar ) {
1293 if ( OsAuthHelper::get_current_user()->has_backend_access() ) {
1294 // build link depending on who is logged in
1295 $args = [
1296 'id' => 'latepoint_top_link',
1297 'title' => '<span class="latepoint-icon latepoint-icon-lp-logo" style="margin-right: 7px;"></span><span style="">' . __( 'LatePoint', 'latepoint' ) . '</span>',
1298 'href' => OsRouterHelper::build_link( [ 'dashboard', 'index' ] ),
1299 'meta' => array( 'class' => '' ),
1300 ];
1301 $wp_admin_bar->add_node( $args );
1302 }
1303 }
1304
1305
1306 /**
1307 * Register shortcodes
1308 */
1309 public function register_shortcodes() {
1310 add_shortcode( 'latepoint_book_button', array( 'OsShortcodesHelper', 'shortcode_latepoint_book_button' ) );
1311 add_shortcode( 'latepoint_book_form', array( 'OsShortcodesHelper', 'shortcode_latepoint_book_form' ) );
1312 add_shortcode( 'latepoint_customer_dashboard', array( 'OsShortcodesHelper', 'shortcode_latepoint_customer_dashboard' ) );
1313 add_shortcode( 'latepoint_customer_login', array( 'OsShortcodesHelper', 'shortcode_latepoint_customer_login' ) );
1314 add_shortcode( 'latepoint_resources', array( 'OsShortcodesHelper', 'shortcode_latepoint_resources' ) );
1315 add_shortcode( 'latepoint_calendar', array( 'OsShortcodesHelper', 'shortcode_latepoint_calendar' ) );
1316 }
1317
1318 /*
1319
1320 SHORTCODES
1321
1322 */
1323
1324
1325 public function setup_environment() {
1326 if ( ! current_theme_supports( 'post-thumbnails' ) ) {
1327 add_theme_support( 'post-thumbnails' );
1328 }
1329 add_post_type_support( LATEPOINT_AGENT_POST_TYPE, 'thumbnail' );
1330 add_post_type_support( LATEPOINT_SERVICE_POST_TYPE, 'thumbnail' );
1331 add_post_type_support( LATEPOINT_CUSTOMER_POST_TYPE, 'thumbnail' );
1332 }
1333
1334
1335 public function create_required_tables() {
1336 OsDatabaseHelper::run_setup();
1337 }
1338
1339
1340 /**
1341 * Register core post types.
1342 */
1343 public function register_post_types() {
1344 }
1345
1346
1347 /**
1348 * Register scripts and styles - FRONT
1349 */
1350 public function load_front_scripts_and_styles() {
1351 $localized_vars = [
1352 'route_action' => 'latepoint_route_call',
1353 'response_status' => [
1354 'success' => 'success',
1355 'error' => 'error',
1356 ],
1357 'ajaxurl' => admin_url( 'admin-ajax.php' ),
1358 'time_pick_style' => OsStepsHelper::get_time_pick_style(),
1359 'string_today' => __( 'Today', 'latepoint' ),
1360 'reload_booking_form_summary_route' => OsRouterHelper::build_route_name( 'steps', 'reload_booking_form_summary_panel' ),
1361 'time_system' => OsTimeHelper::get_time_system(),
1362 'msg_not_available' => __( 'Not Available', 'latepoint' ),
1363 'booking_button_route' => OsRouterHelper::build_route_name( 'steps', 'start' ),
1364 'remove_cart_item_route' => OsRouterHelper::build_route_name( 'carts', 'remove_item_from_cart' ),
1365 'show_booking_end_time' => ( OsSettingsHelper::is_on( 'show_booking_end_time' ) ) ? 'yes' : 'no',
1366 'customer_dashboard_url' => OsSettingsHelper::get_customer_dashboard_url( true ),
1367 'demo_mode' => OsSettingsHelper::is_env_demo(),
1368 'cancel_booking_prompt' => __( 'Are you sure you want to cancel this appointment?', 'latepoint' ),
1369 'single_space_message' => __( 'Space Available', 'latepoint' ),
1370 'many_spaces_message' => __( 'Spaces Available', 'latepoint' ),
1371 'body_font_family' => '"latepoint", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif ',
1372 'headings_font_family' => '"latepoint", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif ',
1373 'currency_symbol_before' => OsSettingsHelper::get_settings_value( 'currency_symbol_before', '' ),
1374 'currency_symbol_after' => OsSettingsHelper::get_settings_value( 'currency_symbol_after', '' ),
1375 'thousand_separator' => OsSettingsHelper::get_settings_value( 'thousand_separator', ',' ),
1376 'decimal_separator' => OsSettingsHelper::get_settings_value( 'decimal_separator', '.' ),
1377 'number_of_decimals' => OsSettingsHelper::get_settings_value( 'number_of_decimals', '2' ),
1378 'included_phone_countries' => wp_json_encode( OsSettingsHelper::get_included_phone_countries() ),
1379 'default_phone_country' => OsSettingsHelper::get_default_phone_country(),
1380 'is_timezone_selected' => OsTimeHelper::is_timezone_saved_in_session(),
1381 'start_from_order_intent_route' => OsRouterHelper::build_route_name( 'steps', 'start_from_order_intent' ),
1382 'start_from_order_intent_key' => OsRouterHelper::get_request_param( 'latepoint_order_intent_key' ) ? OsRouterHelper::get_request_param( 'latepoint_order_intent_key' ) : '',
1383 'is_enabled_show_dial_code_with_flag' => OsSettingsHelper::is_enabled_show_dial_code_with_flag(),
1384 'mask_phone_number_fields' => OsSettingsHelper::is_on( 'mask_phone_number_fields', LATEPOINT_VALUE_ON ),
1385 'msg_validation_presence' => __( 'can not be blank', 'latepoint' ),
1386 'msg_validation_presence_checkbox' => __( 'has to be checked', 'latepoint' ),
1387 'msg_validation_invalid' => __( 'is invalid', 'latepoint' ),
1388 'msg_minutes_suffix' => __( ' minutes', 'latepoint' ),
1389 'is_stripe_connect_enabled' => OsPaymentsHelper::is_payment_processor_enabled( OsStripeConnectHelper::$processor_code ),
1390 'check_order_intent_bookable_route' => OsRouterHelper::build_route_name( 'steps', 'check_order_intent_bookable' ),
1391 'generate_timeslots_for_day_route' => OsRouterHelper::build_route_name( 'steps', 'generate_timeslots_for_day' ),
1392 'payment_environment' => OsSettingsHelper::get_payments_environment(),
1393 'style_border_radius' => OsSettingsHelper::get_booking_form_border_radius(),
1394 'datepicker_timeslot_selected_label' => __( 'Selected', 'latepoint' ),
1395 'invoices_payment_form_route' => OsRouterHelper::build_route_name( 'invoices', 'payment_form' ),
1396 'invoices_summary_before_payment_route' => OsRouterHelper::build_route_name( 'invoices', 'summary_before_payment' ),
1397 'reset_presets_when_adding_new_item' => OsSettingsHelper::is_on( 'reset_presets_when_adding_new_item' ),
1398 ];
1399
1400 $localized_vars['start_from_transaction_access_key'] = '';
1401 if ( OsRouterHelper::get_request_param( 'latepoint_transaction_intent_key' ) ) {
1402 $invoice = OsInvoicesHelper::get_invoice_by_transaction_intent_key( OsRouterHelper::get_request_param( 'latepoint_transaction_intent_key' ) );
1403 if ( $invoice ) {
1404 $localized_vars['start_from_transaction_access_key'] = $invoice->access_key;
1405 }
1406 }
1407
1408 if ( OsPaymentsHelper::is_payment_processor_enabled( OsStripeConnectHelper::$processor_code ) ) {
1409 $localized_vars['stripe_connect_key'] = OsStripeConnectHelper::get_connect_publishable_key();
1410 $localized_vars['stripe_connected_account_id'] = OsStripeConnectHelper::get_connect_account_id();
1411 }
1412 $localized_vars['stripe_connect_route_create_payment_intent'] = OsRouterHelper::build_route_name( 'stripe_connect', 'create_payment_intent' );
1413 $localized_vars['stripe_connect_route_create_payment_intent_for_transaction_intent'] = OsRouterHelper::build_route_name( 'stripe_connect', 'create_payment_intent_for_transaction' );
1414
1415 // Stylesheets
1416 wp_enqueue_style( 'latepoint-main-front', $this->public_stylesheets() . 'front.css', false, $this->version );
1417
1418 // add styles from options if gutenberg blocks exists
1419 OsBlockHelper::add_block_styles_to_page();
1420
1421 // Javscripts
1422
1423 // Addon scripts and styles
1424 do_action( 'latepoint_wp_enqueue_scripts' );
1425
1426 if ( OsPaymentsHelper::is_payment_processor_enabled( OsStripeConnectHelper::$processor_code ) ) {
1427 wp_enqueue_script( 'stripe', 'https://js.stripe.com/v3/', false, null );
1428 }
1429
1430 wp_register_script( 'latepoint-vendor-front', $this->public_javascripts() . 'vendor-front.js', [ 'jquery' ], $this->version );
1431 wp_register_script(
1432 'latepoint-main-front',
1433 $this->public_javascripts() . 'front.js',
1434 [
1435 'jquery',
1436 'latepoint-vendor-front',
1437 'wp-i18n',
1438 ],
1439 $this->version
1440 );
1441
1442
1443 $localized_vars = apply_filters( 'latepoint_localized_vars_front', $localized_vars );
1444
1445 wp_localize_script( 'latepoint-main-front', 'latepoint_helper', $localized_vars );
1446 wp_enqueue_script( 'latepoint-main-front' );
1447
1448
1449 $latepoint_css_variables = OsStylesHelper::generate_css_variables();
1450 wp_add_inline_style( 'latepoint-main-front', $latepoint_css_variables );
1451 }
1452
1453 public function add_admin_body_class( $classes ) {
1454 if ( ( is_admin() ) && isset( $_GET['page'] ) && $_GET['page'] == 'latepoint' ) {
1455 $classes = $classes . ' latepoint-admin latepoint';
1456 }
1457
1458 return $classes;
1459 }
1460
1461 public function add_body_class( $classes ) {
1462 $classes[] = 'latepoint';
1463
1464 return $classes;
1465 }
1466
1467
1468 /**
1469 * Register admin scripts and styles - ADMIN
1470 */
1471 public function load_admin_scripts_and_styles() {
1472 // Stylesheets
1473 wp_enqueue_style( 'latepoint-blocks-editor', LatePoint::plugin_url() . 'blocks/assets/css/editor-styles.css', array( 'wp-edit-blocks' ), $this->version );
1474 wp_enqueue_style( 'latepoint-main-admin', $this->public_stylesheets() . 'admin.css', false, $this->version );
1475
1476 // Javscripts
1477 wp_enqueue_media();
1478
1479
1480 wp_enqueue_script( 'latepoint-vendor-admin', $this->public_javascripts() . 'vendor-admin.js', [ 'jquery' ], $this->version );
1481 wp_enqueue_script(
1482 'latepoint-main-admin',
1483 $this->public_javascripts() . 'admin.js',
1484 [
1485 'jquery',
1486 'latepoint-vendor-admin',
1487 'wp-i18n',
1488 ],
1489 $this->version
1490 );
1491
1492
1493 do_action( 'latepoint_admin_enqueue_scripts' );
1494
1495 $localized_vars = [
1496 'route_action' => 'latepoint_route_call',
1497 'response_status' => [
1498 'success' => 'success',
1499 'error' => 'error',
1500 ],
1501 'ajaxurl' => admin_url( 'admin-ajax.php' ),
1502 'value_all' => LATEPOINT_ALL,
1503 'value_on' => LATEPOINT_VALUE_ON,
1504 'value_off' => LATEPOINT_VALUE_OFF,
1505 'body_font_family' => '"latepoint", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif ',
1506 'headings_font_family' => '"latepoint", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif ',
1507 'wp_locale' => get_locale(),
1508 'string_today' => __( 'Today', 'latepoint' ),
1509 'click_to_copy_done' => __( 'Copied', 'latepoint' ),
1510 'click_to_copy_prompt' => __( 'Just click to copy', 'latepoint' ),
1511 'approve_confirm' => __( 'Are you sure you want to approve this booking?', 'latepoint' ),
1512 'reject_confirm' => __( 'Are you sure you want to reject this booking?', 'latepoint' ),
1513 'time_system' => OsTimeHelper::get_time_system(),
1514 'msg_not_available' => __( 'Not Available', 'latepoint' ),
1515 'msg_addon_activated' => __( 'Active', 'latepoint' ),
1516 'datepicker_timeslot_selected_label' => __( 'Selected', 'latepoint' ),
1517 'string_minutes' => __( 'minutes', 'latepoint' ),
1518 'single_space_message' => __( 'Space Available', 'latepoint' ),
1519 'many_spaces_message' => __( 'Spaces Available', 'latepoint' ),
1520 'currency_symbol_before' => OsSettingsHelper::get_settings_value( 'currency_symbol_before', '' ),
1521 'currency_symbol_after' => OsSettingsHelper::get_settings_value( 'currency_symbol_after', '' ),
1522 'thousand_separator' => OsSettingsHelper::get_settings_value( 'thousand_separator', ',' ),
1523 'decimal_separator' => OsSettingsHelper::get_settings_value( 'decimal_separator', '.' ),
1524 'number_of_decimals' => OsSettingsHelper::get_settings_value( 'number_of_decimals', '2' ),
1525 'included_phone_countries' => wp_json_encode( OsSettingsHelper::get_included_phone_countries() ),
1526 'default_phone_country' => OsSettingsHelper::get_default_phone_country(),
1527 'date_format' => OsSettingsHelper::get_date_format(),
1528 'date_format_for_js' => OsSettingsHelper::get_date_format_for_js(),
1529 'is_enabled_show_dial_code_with_flag' => OsSettingsHelper::is_enabled_show_dial_code_with_flag(),
1530 'mask_phone_number_fields' => OsSettingsHelper::is_on( 'mask_phone_number_fields', LATEPOINT_VALUE_ON ),
1531 'msg_validation_presence' => __( 'can not be blank', 'latepoint' ),
1532 'msg_validation_presence_checkbox' => __( 'has to be checked', 'latepoint' ),
1533 'msg_validation_invalid' => __( 'is invalid', 'latepoint' ),
1534 'msg_minutes_suffix' => __( ' minutes', 'latepoint' ),
1535 'order_item_variant_booking' => LATEPOINT_ITEM_VARIANT_BOOKING,
1536 'order_item_variant_bundle' => LATEPOINT_ITEM_VARIANT_BUNDLE,
1537 ];
1538
1539 // Add block related variables
1540 $localized_vars = array_merge( $localized_vars, OsBlockHelper::localized_vars_for_blocks() );
1541
1542 /**
1543 * Array of localized variables to be available in latepoint_helper object in admin
1544 *
1545 * @param {array} $localized_vars The default array being filtered
1546 * @returns {array} The filtered array of localized variables
1547 *
1548 * @since 5.0.0
1549 * @hook latepoint_localized_vars_admin
1550 *
1551 */
1552 $localized_vars = apply_filters( 'latepoint_localized_vars_admin', $localized_vars );
1553
1554 wp_localize_script( 'latepoint-main-admin', 'latepoint_helper', $localized_vars );
1555
1556
1557 $latepoint_css_variables = OsStylesHelper::generate_css_variables();
1558 wp_add_inline_style( 'latepoint-main-admin', $latepoint_css_variables );
1559 }
1560 }
1561 endif;
1562
1563
1564 $LATEPOINT = new LatePoint();
1565