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