PluginProbe ʕ •ᴥ•ʔ
LatePoint – Calendar Booking Plugin for Appointments and Events / 5.1.6
LatePoint – Calendar Booking Plugin for Appointments and Events v5.1.6
5.6.5 5.6.4 5.6.3 5.6.2 5.6.1 5.6.0 5.5.2 5.5.1 5.5.0 5.4.2 trunk 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.1.91 5.1.92 5.1.93 5.1.94 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1
latepoint / latepoint.php
latepoint Last commit date
blocks 1 year ago languages 1 year ago lib 1 year ago public 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
1471 lines
1 <?php
2 /**
3 * Plugin Name: LatePoint
4 * Description: Appointment Scheduling Software for WordPress
5 * Version: 5.1.6
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.6';
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 add_filter( 'latepoint_transaction_intent_specs_charge_amount', 'OsStripeConnectHelper::convert_transaction_intent_charge_amount_to_specs', 10, 2 );
977
978 add_filter( 'latepoint_get_all_payment_times', 'OsStripeConnectHelper::add_all_payment_methods_to_payment_times' );
979 add_filter( 'latepoint_get_enabled_payment_times', 'OsStripeConnectHelper::add_enabled_payment_methods_to_payment_times' );
980
981 add_action( 'latepoint_customer_edit_form_after', 'OsStripeConnectHelper::output_stripe_link_on_customer_quick_form' );
982
983 add_action('save_post', 'OsBlockHelper::save_blocks_styles');
984 // misc
985 add_action( 'latepoint_after_step_content', 'OsStepsHelper::output_preset_fields' );
986
987 OsActivitiesHelper::init_hooks();
988 OsProcessJobsHelper::init_hooks();
989
990 do_action('latepoint_init_hooks');
991 }
992
993
994 function add_custom_cron_schedules( $schedules ) {
995 if ( ! isset( $schedules['latepoint_5_minutes'] ) ) {
996 $schedules['latepoint_5_minutes'] = array(
997 'interval' => 5 * 60,
998 'display' => __( 'Once every 5 minutes', 'latepoint' )
999 );
1000 }
1001
1002 return $schedules;
1003 }
1004
1005 function woocommerce_allow_agent_to_access_admin( $prevent_access ) {
1006 if ( OsAuthHelper::is_agent_logged_in() ) {
1007 $prevent_access = false;
1008 }
1009
1010 return $prevent_access;
1011 }
1012
1013 function email_processor_settings( $processor_code ) {
1014 if ( $processor_code == 'wp_mail' ) {
1015 echo '<div class="sub-section-row">
1016 <div class="sub-section-label">
1017 <h3>' . esc_html__( 'Email Settings', 'latepoint' ) . '</h3>
1018 </div>
1019 <div class="sub-section-content">
1020 <div class="os-row">
1021 <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>
1022 <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>
1023 </div>
1024 </div>
1025 </div>';
1026 }
1027 }
1028
1029 public function save_connected_wordpress_user( $customer ) {
1030 if ( $customer->is_new_record() ) {
1031 return;
1032 }
1033 if ( $customer instanceof OsCustomerModel ) {
1034 if ( $customer->wordpress_user_id ) {
1035 // has connected wp user
1036 $wp_user = get_user_by( 'id', $customer->wordpress_user_id );
1037 if ( $wp_user && ! is_super_admin( $wp_user->ID ) ) {
1038 // update linked wordpress user
1039 if ( $customer->first_name && $customer->first_name != $wp_user->first_name ) {
1040 $wp_user->first_name = $customer->first_name;
1041 }
1042 if ( $customer->last_name && $customer->last_name != $wp_user->last_name ) {
1043 $wp_user->last_name = $customer->last_name;
1044 }
1045 if ( $customer->email && $customer->email != $wp_user->user_email ) {
1046 $wp_user->user_email = $customer->email;
1047 }
1048 $result = wp_update_user( $wp_user );
1049 if ( is_wp_error( $result ) ) {
1050 error_log( 'Error saving wp user' );
1051 } else {
1052 // update user cookies because their data has changed
1053 }
1054 }
1055 } else {
1056 if ( OsAuthHelper::wp_users_as_customers() ) {
1057 OsCustomerHelper::create_wp_user_for_customer( $customer );
1058 }
1059 }
1060 }
1061 }
1062
1063 // used for testing of localhost to prevent wordpress issues with getting files from local server
1064 public function disable_localhost_url_check_for_development( $parsed_args ) {
1065 $parsed_args['reject_unsafe_urls'] = false;
1066
1067 return $parsed_args;
1068 }
1069
1070 /*
1071 * Check if current user is Agent or Manager, automatically redirect to latepoint dashboard instead of default WordPress admin
1072 */
1073 public function redirect_manager_and_agent_to_latepoint( $redirect_to, $request, $user ) {
1074 if ( $user && is_object( $user ) && is_a( $user, 'WP_User' ) ) {
1075 if ( $user->has_cap( 'edit_bookings' ) || $user->has_cap( 'manage_latepoint' ) ) {
1076 return OsRouterHelper::build_link( [ 'dashboard', 'index' ] );
1077 }
1078 }
1079
1080 return $redirect_to;
1081 }
1082
1083
1084 public function clear_old_activity_logs() {
1085 global $wpdb;
1086 $activity = new OsActivityModel();
1087 $cutoff = OsTimeHelper::get_modified_now_object( '-1 week' )->format( LATEPOINT_DATETIME_DB_FORMAT );
1088 $wpdb->query( $wpdb->prepare( "DELETE FROM %i WHERE `created_at` < %s", [esc_sql($activity->table_name), $cutoff] ) );
1089 }
1090
1091 public function addon_activated( $addon_name, $addon_version ) {
1092 OsDatabaseHelper::check_db_version_for_addons();
1093 }
1094
1095 public function addon_deactivated( $addon_name, $addon_version ) {
1096 OsDatabaseHelper::delete_addon_info( $addon_name, $addon_version );
1097 }
1098
1099
1100 public function on_deactivate() {
1101 wp_clear_scheduled_hook( 'latepoint_check_if_addons_update_available' );
1102 wp_clear_scheduled_hook( 'latepoint_clear_old_activity_logs' );
1103 }
1104
1105 function on_activate() {
1106 OsRolesHelper::register_roles_in_wp();
1107
1108 if ( ! wp_next_scheduled( 'latepoint_check_if_addons_update_available' ) ) {
1109 wp_schedule_event( time(), 'daily', 'latepoint_check_if_addons_update_available' );
1110 }
1111
1112 if ( ! wp_next_scheduled( 'latepoint_clear_old_activity_logs' ) ) {
1113 wp_schedule_event( time(), 'daily', 'latepoint_clear_old_activity_logs' );
1114 }
1115
1116 // if wizard has not been visited yet - redirect to it
1117 if ( ! get_option( 'latepoint_wizard_visited', false ) ) {
1118 add_option( 'latepoint_redirect_to_wizard', true );
1119 }
1120
1121 // create default location
1122 OsLocationHelper::get_default_location();
1123
1124 # create default pages if not existing (customer cabinet)
1125 OsPagesHelper::create_predefined_pages();
1126
1127 do_action( 'latepoint_on_activate', 'latepoint', $this->version );
1128 }
1129
1130 function redirect_after_activation() {
1131 if ( get_option( 'latepoint_redirect_to_wizard', false ) ) {
1132 delete_option( 'latepoint_redirect_to_wizard' );
1133 if ( ! isset( $_GET['activate-multi'] ) ) {
1134 wp_redirect( OsRouterHelper::build_link( OsRouterHelper::build_route_name( 'wizard', 'setup' ) ) );
1135 }
1136 } elseif ( get_option( 'latepoint_show_version_5_modal', false ) ) {
1137 delete_option( 'latepoint_show_version_5_modal' );
1138 if ( ! isset( $_GET['activate-multi'] ) ) {
1139 wp_redirect( OsRouterHelper::build_link( OsRouterHelper::build_route_name( 'settings', 'version_5_intro' ) ) );
1140 }
1141 }
1142 }
1143
1144 public function front_route_parse_request( $wp ) {
1145 if ( isset( $wp->query_vars['latepoint_is_custom_route'] ) ) {
1146 if ( isset( $wp->query_vars['route_name'] ) ) {
1147 $this->route_call();
1148 }
1149 }
1150 }
1151
1152 public function front_route_query_vars( $query_vars ) {
1153 $query_vars[] = 'latepoint_booking_id';
1154 $query_vars[] = 'latepoint_is_custom_route';
1155 $query_vars[] = 'route_name';
1156
1157 return $query_vars;
1158 }
1159
1160 public function route_call() {
1161 $route_name = OsRouterHelper::get_request_param( 'route_name', OsRouterHelper::build_route_name( 'dashboard', 'index' ) );
1162 OsRouterHelper::call_by_route_name( $route_name, OsRouterHelper::get_request_param( 'return_format', 'html' ) );
1163 }
1164
1165 public function pre_route_call() {
1166 if ( OsRouterHelper::get_request_param( 'pre_route' ) ) {
1167 $this->route_call();
1168 }
1169 }
1170
1171
1172
1173 /**
1174 * Init LatePoint when WordPress Initialises.
1175 */
1176 public function init() {
1177 OsAuthHelper::set_current_user();
1178 OsStepsHelper::init_step_actions();
1179 OsSettingsHelper::run_autoload();
1180 $this->register_post_types();
1181 $this->register_shortcodes();
1182 // Set up localisation.
1183 $this->load_plugin_textdomain();
1184 do_action( 'latepoint_init' );
1185 add_filter( 'http_request_host_is_external', '__return_true' );
1186
1187 OsBlockHelper::register_blocks();
1188 }
1189
1190 public function init_widgets( ) {
1191 OsElementorHelper::init();
1192 OsBricksHelper::init();
1193 }
1194
1195 public function load_plugin_textdomain() {
1196 load_plugin_textdomain( 'latepoint', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
1197 }
1198
1199
1200 /**
1201 * Register a custom menu page.
1202 */
1203 function init_menus() {
1204 // link for admins
1205 add_menu_page(
1206 __( 'LatePoint', 'latepoint' ),
1207 __( 'LatePoint', 'latepoint' ),
1208 OsAuthHelper::get_current_user()->wp_capability,
1209 'latepoint',
1210 [ $this, 'route_call' ],
1211 'none'
1212 );
1213
1214
1215 }
1216
1217
1218 function add_latepoint_link_to_admin_bar( $wp_admin_bar ) {
1219 if ( OsAuthHelper::get_current_user()->has_backend_access() ) {
1220 // build link depending on who is logged in
1221 $args = [
1222 'id' => 'latepoint_top_link',
1223 'title' => '<span class="latepoint-icon latepoint-icon-lp-logo" style="margin-right: 7px;"></span><span style="">' . __( 'LatePoint', 'latepoint' ) . '</span>',
1224 'href' => OsRouterHelper::build_link( [ 'dashboard', 'index' ] ),
1225 'meta' => array( 'class' => '' )
1226 ];
1227 $wp_admin_bar->add_node( $args );
1228 }
1229 }
1230
1231
1232 /**
1233 * Register shortcodes
1234 */
1235 public function register_shortcodes() {
1236 add_shortcode( 'latepoint_book_button', array( 'OsShortcodesHelper', 'shortcode_latepoint_book_button' ) );
1237 add_shortcode( 'latepoint_book_form', array( 'OsShortcodesHelper', 'shortcode_latepoint_book_form' ) );
1238 add_shortcode( 'latepoint_customer_dashboard', array(
1239 'OsShortcodesHelper',
1240 'shortcode_latepoint_customer_dashboard'
1241 ) );
1242 add_shortcode( 'latepoint_customer_login', array(
1243 'OsShortcodesHelper',
1244 'shortcode_latepoint_customer_login'
1245 ) );
1246 add_shortcode( 'latepoint_resources', array( 'OsShortcodesHelper', 'shortcode_latepoint_resources' ) );
1247 add_shortcode( 'latepoint_calendar', array( 'OsShortcodesHelper', 'shortcode_latepoint_calendar' ) );
1248 }
1249
1250 /*
1251
1252 SHORTCODES
1253
1254 */
1255
1256
1257 public function setup_environment() {
1258 if ( ! current_theme_supports( 'post-thumbnails' ) ) {
1259 add_theme_support( 'post-thumbnails' );
1260 }
1261 add_post_type_support( LATEPOINT_AGENT_POST_TYPE, 'thumbnail' );
1262 add_post_type_support( LATEPOINT_SERVICE_POST_TYPE, 'thumbnail' );
1263 add_post_type_support( LATEPOINT_CUSTOMER_POST_TYPE, 'thumbnail' );
1264 }
1265
1266
1267 public function create_required_tables() {
1268 OsDatabaseHelper::run_setup();
1269 }
1270
1271
1272 /**
1273 * Register core post types.
1274 */
1275 public function register_post_types() {
1276 }
1277
1278
1279
1280 /**
1281 * Register scripts and styles - FRONT
1282 */
1283 public function load_front_scripts_and_styles() {
1284 $localized_vars = [
1285 'route_action' => 'latepoint_route_call',
1286 'response_status' => [ 'success' => 'success', 'error' => 'error' ],
1287 'ajaxurl' => admin_url( 'admin-ajax.php' ),
1288 'time_pick_style' => OsStepsHelper::get_time_pick_style(),
1289 'string_today' => __( 'Today', 'latepoint' ),
1290 'reload_booking_form_summary_route' => OsRouterHelper::build_route_name( 'steps', 'reload_booking_form_summary_panel' ),
1291 'time_system' => OsTimeHelper::get_time_system(),
1292 'msg_not_available' => __( 'Not Available', 'latepoint' ),
1293 'booking_button_route' => OsRouterHelper::build_route_name( 'steps', 'start' ),
1294 'remove_cart_item_route' => OsRouterHelper::build_route_name( 'carts', 'remove_item_from_cart' ),
1295 'show_booking_end_time' => ( OsSettingsHelper::is_on( 'show_booking_end_time' ) ) ? 'yes' : 'no',
1296 'customer_dashboard_url' => OsSettingsHelper::get_customer_dashboard_url( true ),
1297 'demo_mode' => OsSettingsHelper::is_env_demo(),
1298 'cancel_booking_prompt' => __( 'Are you sure you want to cancel this appointment?', 'latepoint' ),
1299 'single_space_message' => __( 'Space Available', 'latepoint' ),
1300 'many_spaces_message' => __( 'Spaces Available', 'latepoint' ),
1301 'body_font_family' => '"latepoint", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif ',
1302 'headings_font_family' => '"latepoint", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif ',
1303 'currency_symbol_before' => OsSettingsHelper::get_settings_value( 'currency_symbol_before', '' ),
1304 'currency_symbol_after' => OsSettingsHelper::get_settings_value( 'currency_symbol_after', '' ),
1305 'thousand_separator' => OsSettingsHelper::get_settings_value( 'thousand_separator', ',' ),
1306 'decimal_separator' => OsSettingsHelper::get_settings_value( 'decimal_separator', '.' ),
1307 'number_of_decimals' => OsSettingsHelper::get_settings_value( 'number_of_decimals', '2' ),
1308 'included_phone_countries' => wp_json_encode( OsSettingsHelper::get_included_phone_countries() ),
1309 'default_phone_country' => OsSettingsHelper::get_default_phone_country(),
1310 'is_timezone_selected' => OsTimeHelper::is_timezone_saved_in_session(),
1311 'start_from_order_intent_route' => OsRouterHelper::build_route_name( 'steps', 'start_from_order_intent' ),
1312 'start_from_order_intent_key' => OsRouterHelper::get_request_param( 'latepoint_order_intent_key' ) ? OsRouterHelper::get_request_param( 'latepoint_order_intent_key' ) : '',
1313 'is_enabled_show_dial_code_with_flag' => OsSettingsHelper::is_enabled_show_dial_code_with_flag(),
1314 'mask_phone_number_fields' => OsSettingsHelper::is_on( 'mask_phone_number_fields', LATEPOINT_VALUE_ON ),
1315 'msg_validation_presence' => __( 'can not be blank', 'latepoint' ),
1316 'msg_validation_presence_checkbox' => __( 'has to be checked', 'latepoint' ),
1317 'msg_validation_invalid' => __( 'is invalid', 'latepoint' ),
1318 'msg_minutes_suffix' => __( ' minutes', 'latepoint' ),
1319 'is_stripe_connect_enabled' => OsPaymentsHelper::is_payment_processor_enabled( OsStripeConnectHelper::$processor_code ),
1320 'check_order_intent_bookable_route' => OsRouterHelper::build_route_name( 'steps', 'check_order_intent_bookable' ),
1321 'payment_environment' => OsSettingsHelper::get_payments_environment(),
1322 'style_border_radius' => OsSettingsHelper::get_booking_form_border_radius(),
1323 'datepicker_timeslot_selected_label' => __('Selected', 'latepoint'),
1324 'invoices_payment_form_route' => OsRouterHelper::build_route_name('invoices', 'payment_form')
1325 ];
1326
1327 if ( OsPaymentsHelper::is_payment_processor_enabled( OsStripeConnectHelper::$processor_code ) ) {
1328 $localized_vars['stripe_connect_key'] = OsStripeConnectHelper::get_connect_publishable_key();
1329 $localized_vars['stripe_connected_account_id'] = OsStripeConnectHelper::get_connect_account_id();
1330 }
1331 $localized_vars['stripe_connect_route_create_payment_intent'] = OsRouterHelper::build_route_name( 'stripe_connect', 'create_payment_intent' );
1332 $localized_vars['stripe_connect_route_create_payment_intent_for_transaction_intent'] = OsRouterHelper::build_route_name( 'stripe_connect', 'create_payment_intent_for_transaction' );
1333
1334 // Stylesheets
1335 wp_enqueue_style( 'latepoint-main-front', $this->public_stylesheets() . 'front.css', false, $this->version );
1336
1337 // add styles from options if gutenberg blocks exists
1338 OsBlockHelper::add_block_styles_to_page();
1339
1340 // Javscripts
1341
1342 // Addon scripts and styles
1343 do_action( 'latepoint_wp_enqueue_scripts' );
1344
1345 if ( OsPaymentsHelper::is_payment_processor_enabled( OsStripeConnectHelper::$processor_code ) ) {
1346 wp_enqueue_script( 'stripe', 'https://js.stripe.com/v3/', false, null );
1347 }
1348
1349 wp_register_script( 'latepoint-vendor-front', $this->public_javascripts() . 'vendor-front.js', [ 'jquery' ], $this->version );
1350 wp_register_script( 'latepoint-main-front', $this->public_javascripts() . 'front.js', [
1351 'jquery',
1352 'latepoint-vendor-front',
1353 'wp-i18n'
1354 ], $this->version );
1355
1356
1357 $localized_vars = apply_filters( 'latepoint_localized_vars_front', $localized_vars );
1358
1359 wp_localize_script( 'latepoint-main-front', 'latepoint_helper', $localized_vars );
1360 wp_enqueue_script( 'latepoint-main-front' );
1361
1362
1363 $latepoint_css_variables = OsStylesHelper::generate_css_variables();
1364 wp_add_inline_style( 'latepoint-main-front', $latepoint_css_variables );
1365 }
1366
1367 public function add_admin_body_class( $classes ) {
1368 if ( ( is_admin() ) && isset( $_GET['page'] ) && $_GET['page'] == 'latepoint' ) {
1369 $classes = $classes . ' latepoint-admin latepoint';
1370 }
1371
1372 return $classes;
1373 }
1374
1375 public function add_body_class( $classes ) {
1376 $classes[] = 'latepoint';
1377
1378 return $classes;
1379 }
1380
1381
1382 /**
1383 * Register admin scripts and styles - ADMIN
1384 */
1385 public function load_admin_scripts_and_styles() {
1386 // Stylesheets
1387 wp_enqueue_style( 'latepoint-blocks-editor', LatePoint::plugin_url() . 'blocks/assets/css/editor-styles.css', array( 'wp-edit-blocks' ), $this->version );
1388 wp_enqueue_style( 'latepoint-main-admin', $this->public_stylesheets() . 'admin.css', false, $this->version );
1389
1390 // Javscripts
1391 wp_enqueue_media();
1392
1393
1394 wp_enqueue_script( 'latepoint-vendor-admin', $this->public_javascripts() . 'vendor-admin.js', [ 'jquery' ], $this->version );
1395 wp_enqueue_script( 'latepoint-main-admin', $this->public_javascripts() . 'admin.js', [
1396 'jquery',
1397 'latepoint-vendor-admin',
1398 'wp-i18n'
1399 ], $this->version );
1400
1401
1402 do_action( 'latepoint_admin_enqueue_scripts' );
1403
1404 $localized_vars = [
1405 'route_action' => 'latepoint_route_call',
1406 'response_status' => [ 'success' => 'success', 'error' => 'error' ],
1407 'ajaxurl' => admin_url( 'admin-ajax.php' ),
1408 'value_all' => LATEPOINT_ALL,
1409 'value_on' => LATEPOINT_VALUE_ON,
1410 'value_off' => LATEPOINT_VALUE_OFF,
1411 'body_font_family' => '"latepoint", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif ',
1412 'headings_font_family' => '"latepoint", -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif ',
1413 'wp_locale' => get_locale(),
1414 'string_today' => __( 'Today', 'latepoint' ),
1415 'click_to_copy_done' => __( 'Copied', 'latepoint' ),
1416 'click_to_copy_prompt' => __( 'Just click to copy', 'latepoint' ),
1417 'approve_confirm' => __( 'Are you sure you want to approve this booking?', 'latepoint' ),
1418 'reject_confirm' => __( 'Are you sure you want to reject this booking?', 'latepoint' ),
1419 'time_system' => OsTimeHelper::get_time_system(),
1420 'msg_not_available' => __( 'Not Available', 'latepoint' ),
1421 'msg_addon_activated' => __( 'Active', 'latepoint' ),
1422 'datepicker_timeslot_selected_label' => __( 'Selected', 'latepoint' ),
1423 'string_minutes' => __( 'minutes', 'latepoint' ),
1424 'single_space_message' => __( 'Space Available', 'latepoint' ),
1425 'many_spaces_message' => __( 'Spaces Available', 'latepoint' ),
1426 'currency_symbol_before' => OsSettingsHelper::get_settings_value( 'currency_symbol_before', '' ),
1427 'currency_symbol_after' => OsSettingsHelper::get_settings_value( 'currency_symbol_after', '' ),
1428 'thousand_separator' => OsSettingsHelper::get_settings_value( 'thousand_separator', ',' ),
1429 'decimal_separator' => OsSettingsHelper::get_settings_value( 'decimal_separator', '.' ),
1430 'number_of_decimals' => OsSettingsHelper::get_settings_value( 'number_of_decimals', '2' ),
1431 'included_phone_countries' => wp_json_encode( OsSettingsHelper::get_included_phone_countries() ),
1432 'default_phone_country' => OsSettingsHelper::get_default_phone_country(),
1433 'date_format' => OsSettingsHelper::get_date_format(),
1434 'date_format_for_js' => OsSettingsHelper::get_date_format_for_js(),
1435 'is_enabled_show_dial_code_with_flag' => OsSettingsHelper::is_enabled_show_dial_code_with_flag(),
1436 'mask_phone_number_fields' => OsSettingsHelper::is_on( 'mask_phone_number_fields', LATEPOINT_VALUE_ON ),
1437 'msg_validation_presence' => __( 'can not be blank', 'latepoint' ),
1438 'msg_validation_presence_checkbox' => __( 'has to be checked', 'latepoint' ),
1439 'msg_validation_invalid' => __( 'is invalid', 'latepoint' ),
1440 'msg_minutes_suffix' => __( ' minutes', 'latepoint' ),
1441 'order_item_variant_booking' => LATEPOINT_ITEM_VARIANT_BOOKING,
1442 'order_item_variant_bundle' => LATEPOINT_ITEM_VARIANT_BUNDLE
1443 ];
1444
1445 // Add block related variables
1446 $localized_vars = array_merge($localized_vars, OsBlockHelper::localized_vars_for_blocks());
1447
1448 /**
1449 * Array of localized variables to be available in latepoint_helper object in admin
1450 *
1451 * @since 5.0.0
1452 * @hook latepoint_localized_vars_admin
1453 *
1454 * @param {array} $localized_vars The default array being filtered
1455 * @returns {array} The filtered array of localized variables
1456 */
1457 $localized_vars = apply_filters( 'latepoint_localized_vars_admin', $localized_vars );
1458
1459 wp_localize_script( 'latepoint-main-admin', 'latepoint_helper', $localized_vars );
1460
1461
1462 $latepoint_css_variables = OsStylesHelper::generate_css_variables();
1463 wp_add_inline_style( 'latepoint-main-admin', $latepoint_css_variables );
1464
1465 }
1466
1467 }
1468 endif;
1469
1470
1471 $LATEPOINT = new LatePoint();