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