PluginProbe ʕ •ᴥ•ʔ
LatePoint – Calendar Booking Plugin for Appointments and Events / 5.2.4
LatePoint – Calendar Booking Plugin for Appointments and Events v5.2.4
5.6.7 5.6.6 5.6.5 5.6.4 5.6.3 5.6.2 5.6.1 5.6.0 5.5.2 5.5.1 5.5.0 5.4.2 trunk 5.1.0 5.1.1 5.1.2 5.1.3 5.1.4 5.1.5 5.1.6 5.1.7 5.1.8 5.1.9 5.1.91 5.1.92 5.1.93 5.1.94 5.2.0 5.2.1 5.2.10 5.2.11 5.2.2 5.2.3 5.2.4 5.2.5 5.2.6 5.2.7 5.2.8 5.2.9 5.3.0 5.3.1 5.3.2 5.4.0 5.4.1
latepoint / lib / helpers / settings_helper.php
latepoint / lib / helpers Last commit date
activities_helper.php 1 year ago agent_helper.php 1 year ago auth_helper.php 9 months ago blocks_helper.php 1 year ago booking_helper.php 1 year ago bricks_helper.php 1 year ago bundles_helper.php 1 year ago calendar_helper.php 9 months ago carts_helper.php 1 year ago connector_helper.php 9 months ago csv_helper.php 9 months ago customer_helper.php 9 months ago customer_import_helper.php 9 months ago database_helper.php 9 months ago debug_helper.php 1 year ago defaults_helper.php 1 year ago elementor_helper.php 1 year ago email_helper.php 9 months ago encrypt_helper.php 1 year ago events_helper.php 9 months ago form_helper.php 9 months ago icalendar_helper.php 1 year ago image_helper.php 1 year ago invoices_helper.php 9 months ago license_helper.php 1 year ago location_helper.php 1 year ago marketing_systems_helper.php 1 year ago meeting_systems_helper.php 1 year ago menu_helper.php 9 months ago meta_helper.php 1 year ago migrations_helper.php 1 year ago money_helper.php 1 year ago notifications_helper.php 9 months ago order_intent_helper.php 9 months ago orders_helper.php 1 year ago otp_helper.php 9 months ago pages_helper.php 1 year ago params_helper.php 1 year ago payments_helper.php 1 year ago price_breakdown_helper.php 1 year ago process_jobs_helper.php 1 year ago processes_helper.php 1 year ago replacer_helper.php 1 year ago resource_helper.php 1 year ago roles_helper.php 9 months ago router_helper.php 1 year ago service_helper.php 1 year ago sessions_helper.php 1 year ago settings_helper.php 9 months ago short_links_systems_helper.php 9 months ago shortcodes_helper.php 9 months ago sms_helper.php 1 year ago steps_helper.php 9 months ago stripe_connect_helper.php 9 months ago styles_helper.php 9 months ago support_topics_helper.php 1 year ago time_helper.php 9 months ago timeline_helper.php 9 months ago transaction_helper.php 1 year ago transaction_intent_helper.php 1 year ago util_helper.php 9 months ago version_specific_updates_helper.php 9 months ago whatsapp_helper.php 1 year ago work_periods_helper.php 1 year ago wp_datetime.php 1 year ago wp_user_helper.php 1 year ago
settings_helper.php
723 lines
1 <?php
2
3 class OsSettingsHelper {
4
5 public static $loaded_values;
6
7
8 private static $encrypted_settings = [
9 'license',
10 'google_calendar_client_secret',
11 'facebook_app_secret',
12 'google_client_secret',
13 'braintree_secret_key',
14 'braintree_merchant_id',
15 'paypal_client_secret'
16 ];
17
18 private static $settings_to_autoload = [
19 'enable_google_login',
20 'time_system',
21 'date_format',
22 'currency_symbol_before',
23 'currency_symbol_after',
24 'phone_format',
25 'steps_show_timezone_selector',
26 'show_booking_end_time',
27 'stripe_publishable_key',
28 'enable_facebook_login',
29 'earliest_possible_booking',
30 'enable_payments_local',
31 'color_scheme_for_booking_form',
32 'latest_possible_booking',
33 'facebook_app_id',
34 'google_client_id',
35 'paypal_client_id',
36 'paypal_currency_iso_code',
37 'paypal_use_braintree_api',
38 'stripe_secret_key',
39 'steps_hide_agent_info',
40 'booking_hash',
41 'payments_environment',
42 'list_of_phone_countries',
43 'included_phone_countries',
44 'wp_users_as_customers',
45 'thousand_separator',
46 'decimal_separator',
47 'number_of_decimals',
48 'default_phone_country'
49 ];
50
51 private static $defaults = [
52 'date_format' => LATEPOINT_DEFAULT_DATE_FORMAT,
53 'time_system' => LATEPOINT_DEFAULT_TIME_SYSTEM,
54 'currency_symbol_before' => '$'
55 ];
56
57 public static function get_business_logo_url() {
58 $default_logo_url = LATEPOINT_IMAGES_URL . 'logo.png';
59
60 return OsImageHelper::get_image_url_by_id( OsSettingsHelper::get_settings_value( 'business_logo' ), 'thumbnail', $default_logo_url );
61 }
62
63 public static function get_business_logo_image( $height = '50px' ) {
64 $url = self::get_business_logo_url();
65
66 return '<img src="' . $url . '" style="height: ' . $height . '; width: auto"/>';
67 }
68
69 public static function get_encrypted_settings() {
70 $encrypted_settings = apply_filters( 'latepoint_encrypted_settings', self::$encrypted_settings );
71
72 return $encrypted_settings;
73 }
74
75
76 public static function get_active_addons(): array {
77 return json_decode( OsSettingsHelper::get_settings_value( 'active_addons', '' ) ) ?? [];
78 }
79
80 public static function get_earliest_possible_booking_restriction($service_id = 0) {
81 if(!empty($service_id)) {
82 $service = new OsServiceModel($service_id);
83 if(!$service->is_new_record() && !empty($service->earliest_possible_booking) && OsTimeHelper::is_valid_date($service->earliest_possible_booking)) {
84 return $service->earliest_possible_booking;
85 }
86 }
87 $restriction_from_general_settings = OsSettingsHelper::get_settings_value( 'earliest_possible_booking', '' );
88 if(OsTimeHelper::is_valid_date($restriction_from_general_settings)) {
89 return $restriction_from_general_settings;
90 }else{
91 return '';
92 }
93 }
94
95 public static function get_latest_possible_booking_restriction($service_id = 0) {
96 if(!empty($service_id)) {
97 $service = new OsServiceModel($service_id);
98 if(!$service->is_new_record() && !empty($service->latest_possible_booking) && OsTimeHelper::is_valid_date($service->latest_possible_booking)) {
99 return $service->latest_possible_booking;
100 }
101 }
102 $restriction_from_general_settings = OsSettingsHelper::get_settings_value( 'latest_possible_booking', '' );
103 if(OsTimeHelper::is_valid_date($restriction_from_general_settings)) {
104 return $restriction_from_general_settings;
105 }else{
106 return '';
107 }
108 }
109
110 /**
111 * @param array $tables
112 *
113 * @return string
114 */
115 public static function export_data( array $tables = [] ): string {
116
117 if ( empty( $tables ) ) {
118 $tables = OsDatabaseHelper::get_all_latepoint_tables();
119 }
120
121 global $wpdb;
122
123 $output = [];
124
125 foreach ( $tables as $table ) {
126 // Check if table exists
127 $table_exists = $wpdb->get_var( "SHOW TABLES LIKE '{$table}'" );
128
129 if ( ! $table_exists ) {
130 continue; // Skip this table if it doesn't exist
131 }
132 // Get all rows from the table
133 $rows = $wpdb->get_results( "SELECT * FROM {$table}", ARRAY_A );
134
135 if ( $rows ) {
136 // Get table create statement
137 $create_table = $wpdb->get_row( "SHOW CREATE TABLE {$table}", ARRAY_N );
138 $var_table = str_replace($wpdb->prefix, '{{TABLE_PREFIX}}', $table);
139 $create_table = str_replace($table, $var_table, $create_table);
140
141 $output[ $var_table ] = [
142 'create' => $create_table[1],
143 'prefix' => $wpdb->prefix,
144 'data' => $rows
145 ];
146 }
147 }
148
149 // Generate filename
150 $filename = 'latepoint_backup_' . date( 'Y-m-d_H-i-s' ) . '.json';
151
152 $json = wp_json_encode($output, JSON_PRETTY_PRINT);
153
154 // Send headers for file download
155 header( 'Content-Type: application/json' );
156 header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
157 header( 'Content-Length: ' . strlen( $json ) );
158 header( 'Pragma: no-cache' );
159
160 return $json;
161 }
162
163 /**
164 * @param string $data
165 *
166 * @return bool
167 * @throws Exception
168 */
169 public static function import_data( string $data ): bool {
170 global $wpdb;
171
172 if ( empty( $data ) ) {
173 throw new Exception( __( 'Error reading uploaded file', 'latepoint' ) );
174 }
175
176 // update table name from original to new prefix
177 $data = str_replace('{{TABLE_PREFIX}}', $wpdb->prefix, $data);
178
179 $data = json_decode( $data, true );
180 if ( json_last_error() !== JSON_ERROR_NONE ) {
181 throw new Exception( __( 'Invalid JSON file format', 'latepoint' ) );
182 }
183
184 foreach ( $data as $table => $table_data ) {
185 // Drop table if exists
186 $wpdb->query( "DROP TABLE IF EXISTS {$table}" );
187
188 // Create table
189 $wpdb->query( $table_data['create'] );
190
191 // Insert data
192 foreach ( $table_data['data'] as $row ) {
193 $wpdb->insert( $table, $row );
194 }
195
196 // Find auto-increment columns and their max values
197 $columns = $wpdb->get_results( "SHOW COLUMNS FROM {$table} WHERE Extra = 'auto_increment'" );
198 foreach ( $columns as $column ) {
199 // Get the maximum value for this column
200 $max_id = $wpdb->get_var( "SELECT MAX({$column->Field}) FROM {$table}" );
201
202 // Set the auto_increment value to max + 1
203 if ( $max_id ) {
204 $wpdb->query( "ALTER TABLE {$table} AUTO_INCREMENT = " . ( $max_id + 1 ) );
205 }
206 }
207 }
208
209 return true;
210 }
211
212 public static function run_autoload() {
213 /**
214 * Default settings to be used in SettingsHelper when no value exists in DB
215 *
216 * @param {array} $default_settings Array of key => value pairs of setting names and their default values
217 * @returns {array} The filtered array of default settings
218 *
219 * @since 4.7.2
220 * @hook latepoint_settings_defaults
221 *
222 */
223 self::$defaults = apply_filters( 'latepoint_settings_defaults', self::$defaults );
224 foreach ( self::$defaults as $name => $default ) {
225 self::$loaded_values[ $name ] = $default;
226 }
227
228 $settings_model = new OsSettingsModel();
229
230 /**
231 * Settings to autoload in SettingsHelper on every page load, this is done to reduce the number of queries to DB
232 *
233 * @param {array} $settings Array of setting names to autoload
234 * @returns {array} The filtered array of setting names
235 *
236 * @since 4.7.2
237 * @hook latepoint_settings_to_autoload
238 *
239 */
240 self::$settings_to_autoload = apply_filters( 'latepoint_settings_to_autoload', self::$settings_to_autoload );
241 $settings_arr = $settings_model->select( 'name, value' )->where( array( 'name' => self::$settings_to_autoload ) )->get_results();
242
243
244 if ( $settings_arr && is_array( $settings_arr ) ) {
245 foreach ( $settings_arr as $setting ) {
246 if ( in_array( $setting->name, self::get_encrypted_settings() ) ) {
247 self::$loaded_values[ $setting->name ] = OsEncryptHelper::decrypt_value( $setting->value );
248 } else {
249 self::$loaded_values[ $setting->name ] = $setting->value;
250 }
251 }
252 }
253 }
254
255
256 // ENVIRONMENT SETTINGS
257
258 // BASE ENVIRONMENT
259 public static function is_env_live() {
260 return ( LATEPOINT_ENV == LATEPOINT_ENV_LIVE );
261 }
262
263 public static function is_env_dev() {
264 return ( LATEPOINT_ENV == LATEPOINT_ENV_DEV );
265 }
266
267 public static function is_env_demo() {
268 return ( LATEPOINT_ENV == LATEPOINT_ENV_DEMO );
269 }
270
271 // SMS, EMAILS
272
273 public static function is_sms_allowed() {
274 return LATEPOINT_ALLOW_SMS;
275 }
276
277 public static function is_whatsapp_allowed() {
278 return LATEPOINT_ALLOW_WHATSAPP;
279 }
280
281 public static function is_email_allowed() {
282 return LATEPOINT_ALLOW_EMAILS;
283 }
284
285 // PAYMENTS ENVIRONMENT
286 public static function is_env_payments_live() {
287 return ( self::get_payments_environment() == LATEPOINT_PAYMENTS_ENV_LIVE );
288 }
289
290 public static function is_env_payments_dev() {
291 return ( self::get_payments_environment() == LATEPOINT_PAYMENTS_ENV_DEV );
292 }
293
294 public static function is_env_payments_demo() {
295 return ( self::get_payments_environment() == LATEPOINT_PAYMENTS_ENV_DEMO );
296 }
297
298 public static function get_payments_environment() {
299 return self::get_settings_value( 'payments_environment', LATEPOINT_PAYMENTS_ENV_LIVE );
300 }
301
302
303 public static function append_payment_env_key( string $string, string $force_env = '' ): string {
304 if ( $force_env ) {
305 if ( $force_env == LATEPOINT_PAYMENTS_ENV_DEV ) {
306 $string .= LATEPOINT_PAYMENTS_DEV_SUFFIX;
307 }
308 } else {
309 if ( self::is_env_payments_dev() ) {
310 $string .= LATEPOINT_PAYMENTS_DEV_SUFFIX;
311 }
312 }
313
314 return $string;
315 }
316
317 public static function set_menu_layout_style( $layout ) {
318 $layout = in_array($layout, ['compact', 'full']) ? $layout : 'full';
319 update_user_meta(get_current_user_id(), 'latepoint_admin_menu_style', $layout);
320 }
321
322 public static function get_menu_layout_style() : string {
323 $menu_style = get_user_meta(get_current_user_id(), 'latepoint_admin_menu_style', true);
324
325 // Set default if not set
326 if (empty($menu_style)) {
327 $menu_style = 'full'; // default value
328 }
329 return $menu_style;
330 }
331
332 public static function get_time_system() {
333 return self::get_settings_value( 'time_system', LATEPOINT_DEFAULT_TIME_SYSTEM );
334 }
335
336 public static function get_date_format() {
337 return self::get_settings_value( 'date_format', LATEPOINT_DEFAULT_DATE_FORMAT );
338 }
339
340 public static function get_date_format_for_js() {
341 $format = strtolower( self::get_date_format() );
342
343 return str_replace( [ 'd', 'm', 'y' ], [ 'dd', 'mm', 'yyyy' ], $format );
344 }
345
346 public static function get_readable_datetime_format( $no_year = false, $no_seconds = true ) {
347 return self::get_readable_date_format( $no_year ) . ', ' . self::get_readable_time_format( $no_seconds );
348 }
349
350 public static function get_order_types_list_for_any_agent_logic(): array {
351 $order_types = [
352 LATEPOINT_ANY_AGENT_ORDER_RANDOM => __( 'Randomly picked agent', 'latepoint' ),
353 LATEPOINT_ANY_AGENT_ORDER_PRICE_HIGH => __( 'Most expensive agent', 'latepoint' ),
354 LATEPOINT_ANY_AGENT_ORDER_PRICE_LOW => __( 'Least expensive agent', 'latepoint' ),
355 LATEPOINT_ANY_AGENT_ORDER_BUSY_HIGH => __( 'Agent with the most bookings on that day', 'latepoint' ),
356 LATEPOINT_ANY_AGENT_ORDER_BUSY_LOW => __( 'Agent with the least bookings on that day', 'latepoint' )
357 ];
358
359 /**
360 * Get the list of order types for agent selection logic when "ANY" agent is pre-selected in the booking form
361 *
362 * @param {array} $order_types Array of order types
363 *
364 * @returns {array} Filtered array of order types
365 * @since 4.7.6
366 * @hook latepoint_get_order_types_list_for_any_agent_logic
367 *
368 */
369 return apply_filters( 'latepoint_get_order_types_list_for_any_agent_logic', $order_types );
370 }
371
372 public static function get_readable_time_format( $no_seconds = true ) {
373 $seconds = $no_seconds ? '' : ':s';
374 $format = ( self::get_time_system() == '12' ) ? "g:i$seconds a" : "G:i$seconds";
375
376 return $format;
377 }
378
379 public static function get_readable_date_format( $no_year = false, $short_month = false ) {
380 if ( OsSettingsHelper::is_on( 'disable_verbose_date_output' ) ) {
381 return self::get_date_format();
382 }
383 $format = ( $no_year ) ? 'F j' : 'M j, Y';
384 switch ( self::get_date_format() ) {
385 case 'm/d/Y':
386 case 'm.d.Y':
387 $format = ( $no_year ) ? 'F j' : 'M j, Y';
388 break;
389 case 'd.m.Y':
390 case 'd/m/Y':
391 $format = ( $no_year ) ? 'j F' : 'j M, Y';
392 break;
393 case 'Y-m-d':
394 $format = ( $no_year ) ? 'F j' : 'Y, M j';
395 break;
396 }
397 if($short_month){
398 // if short month is requested - use month shorthand;
399 $format = str_replace('F', 'M', $format);
400 }
401
402 return $format;
403 }
404
405
406 public static function get_booking_template_for_calendar() {
407 return OsSettingsHelper::get_settings_value( 'booking_template_for_calendar', '{{service_name}}' );
408 }
409
410
411 public static function get_selected_columns_for_bookings_table() {
412 return OsSettingsHelper::get_settings_value( 'bookings_table_columns', [] );
413 }
414
415 public static function get_available_columns_for_bookings_table() {
416 $available_columns = [];
417
418 $available_columns['customer'] = [
419 'email' => __( 'Email', 'latepoint' ),
420 'phone' => __( 'Phone', 'latepoint' )
421 ];
422
423 $available_columns['booking'] = [
424 'booking_code' => __( 'Code', 'latepoint' ),
425 'duration' => __( 'Duration', 'latepoint' ),
426 'source_id' => __( 'Source ID', 'latepoint' ),
427 'payment_method' => __( 'Payment Method', 'latepoint' ),
428 'payment_portion' => __( 'Payment Portion', 'latepoint' ),
429 'formatted_price' => __( 'Price', 'latepoint' )
430 ];
431
432 $available_columns = apply_filters( 'latepoint_bookings_table_columns', $available_columns );
433
434 return $available_columns;
435 }
436
437 public static function force_bite( $request ) {
438 }
439
440 public static function read_encoded( $str ) {
441 return base64_decode( $str );
442 }
443
444 public static function get_db_version() {
445 return get_option( 'latepoint_db_version' );
446 }
447
448 public static function force_release( $request ) {
449 }
450
451 public static function is_enabled_show_dial_code_with_flag() {
452 return ( self::get_settings_value( 'show_dial_code_with_flag', LATEPOINT_VALUE_ON ) == LATEPOINT_VALUE_ON );
453 }
454
455 public static function is_using_google_login() {
456 return self::is_on( 'enable_google_login' );
457 }
458
459 public static function is_using_facebook_login() {
460 return self::is_on( 'enable_facebook_login' );
461 }
462
463 public static function is_using_social_login() {
464 return ( self::is_using_google_login() || self::is_using_facebook_login() );
465 }
466
467 public static function get_steps_support_text() {
468 $default = '<h5>Questions?</h5><p>Call (858) 939-3746 for help</p>';
469
470 return self::get_settings_value( 'steps_support_text', $default );
471 }
472
473 public static function get_default_fields_for_customer() {
474 $default_fields = [
475 'first_name' => [ 'label' => __( 'First Name', 'latepoint' ), 'required' => true, 'width' => 'os-col-6', 'active' => true ],
476 'last_name' => [ 'label' => __( 'Last Name', 'latepoint' ), 'required' => true, 'width' => 'os-col-6', 'active' => true ],
477 'email' => [ 'label' => __( 'Email Address', 'latepoint' ), 'required' => true, 'width' => 'os-col-6', 'active' => true ],
478 'phone' => [ 'label' => __( 'Phone Number', 'latepoint' ), 'required' => false, 'width' => 'os-col-6', 'active' => true ],
479 'notes' => [ 'label' => __( 'Comments', 'latepoint' ), 'required' => false, 'width' => 'os-col-12', 'active' => true ]
480 ];
481
482 $fields_from_db = OsSettingsHelper::get_settings_value( 'default_fields_for_customer', '' );
483 $fields_from_db_arr = json_decode( $fields_from_db, true );
484 if ( $fields_from_db_arr ) {
485 foreach ( $fields_from_db_arr as $name => $field_from_db ) {
486 if ( isset( $default_fields[ $name ] ) ) {
487 $default_fields[ $name ] = $field_from_db;
488 }
489 }
490 }
491 $default_fields = apply_filters( 'latepoint_default_fields_for_customer', $default_fields );
492
493 return $default_fields;
494 }
495
496 public static function remove_setting_by_name( $name ) {
497 $settings_model = new OsSettingsModel();
498 $settings_model = $settings_model->delete_where( array( 'name' => $name ) );
499 self::reset_loaded_value( $name );
500 }
501
502 public static function save_setting_by_name( $name, $value ) {
503 $settings_model = new OsSettingsModel();
504 $settings_model = $settings_model->where( array( 'name' => $name ) )->set_limit( 1 )->get_results_as_models();
505 if ( $settings_model ) {
506 $settings_model->value = self::prepare_value( $name, $value );
507 } else {
508 $settings_model = new OsSettingsModel();
509 $settings_model->name = $name;
510 $settings_model->value = self::prepare_value( $name, $value );
511 }
512 self::reset_loaded_value( $name );
513
514 return $settings_model->save();
515 }
516
517 public static function reset_loaded_value( $name ) {
518 unset( self::$loaded_values[ $name ] );
519 }
520
521 public static function prepare_value( $name, $value ) {
522 if ( in_array( $name, self::get_encrypted_settings() ) ) {
523 $value = OsEncryptHelper::encrypt_value( $value );
524 }
525 if ( is_array( $value ) ) {
526 $value = maybe_serialize( $value );
527 }
528
529 return $value;
530 }
531
532 public static function get_settings_value( $name, $default = false ) {
533 if ( isset( self::$loaded_values[ $name ] ) ) {
534 return self::$loaded_values[ $name ];
535 }
536 $settings_model = new OsSettingsModel();
537 $settings_model = $settings_model->where( array( 'name' => $name ) )->set_limit( 1 )->get_results_as_models();
538 if ( $settings_model ) {
539 if ( in_array( $name, self::get_encrypted_settings() ) ) {
540 $value = OsEncryptHelper::decrypt_value( $settings_model->value );
541 } else {
542 $value = maybe_unserialize( $settings_model->value );
543 }
544 } else {
545 $value = $default;
546 }
547 self::$loaded_values[ $name ] = $value;
548
549 return self::$loaded_values[ $name ];
550 }
551
552
553 public static function get_any_agent_order() {
554 return self::get_settings_value( 'any_agent_order', LATEPOINT_ANY_AGENT_ORDER_RANDOM );
555 }
556
557 public static function get_day_calendar_min_height() {
558 $height = preg_replace( '/\D/', '', self::get_settings_value( 'day_calendar_min_height', 700 ) );
559 if ( ! $height ) {
560 $height = 700;
561 }
562
563 return $height;
564 }
565
566 public static function get_default_timeblock_interval() {
567 $timeblock_interval = self::get_settings_value( 'timeblock_interval', LATEPOINT_DEFAULT_TIMEBLOCK_INTERVAL );
568 if ( empty( $timeblock_interval ) ) {
569 $timeblock_interval = LATEPOINT_DEFAULT_TIMEBLOCK_INTERVAL;
570 }
571
572 return intval( $timeblock_interval );
573 }
574
575 public static function get_customer_dashboard_url( $include_site_url = true ) {
576 $path = self::get_settings_value( 'page_url_customer_dashboard', '/customer-dashboard' );
577
578 return ( $include_site_url ) ? site_url( $path ) : $path;
579 }
580
581 public static function get_customer_login_url( $include_site_url = true ) {
582 $path = self::get_settings_value( 'page_url_customer_login', '/customer-login' );
583
584 return ( $include_site_url ) ? site_url( $path ) : $path;
585 }
586
587
588 // BOOKING STEPS
589
590 public static function steps_show_service_categories() {
591 return ( self::get_settings_value( 'steps_show_service_categories', 'on' ) == 'on' );
592 }
593
594 public static function steps_show_location_categories() {
595 return ( self::get_settings_value( 'steps_show_location_categories', 'on' ) == 'on' );
596 }
597
598 public static function steps_show_agent_bio() {
599 return ( self::get_settings_value( 'steps_show_agent_bio' ) == 'on' );
600 }
601
602 public static function get_booking_form_color_scheme() {
603 return self::get_settings_value( 'color_scheme_for_booking_form', 'blue' );
604 }
605
606 public static function get_booking_form_border_radius() {
607 return self::get_settings_value( 'border_radius', 'flat' );
608 }
609
610 public static function get_default_phone_country() {
611 return OsSettingsHelper::get_settings_value( 'default_phone_country', 'us' );
612 }
613
614 public static function get_included_phone_countries(): array {
615 if ( OsSettingsHelper::get_settings_value( 'list_of_phone_countries', LATEPOINT_ALL ) == LATEPOINT_ALL ) {
616 return [];
617 } else {
618 return array_map( 'trim', explode( ',', OsSettingsHelper::get_settings_value( 'included_phone_countries', '' ) ) );
619 }
620 }
621
622
623 public static function is_on( string $setting, $default = false ): bool {
624 return ( self::get_settings_value( $setting, $default ) == LATEPOINT_VALUE_ON );
625 }
626
627 public static function is_off( string $setting, $default = false ): bool {
628 return ( self::get_settings_value( $setting, $default ) != LATEPOINT_VALUE_ON );
629 }
630
631 public static function generate_default_form_fields( array $default_fields ) {
632 ?>
633 <div class="os-default-fields" data-route="<?php echo esc_attr( OsRouterHelper::build_route_name( 'form_fields', 'update_default_fields' ) ); ?>">
634 <form>
635 <?php foreach ( $default_fields as $name => $default_field ) {
636 $atts = [];
637 ?>
638 <div class="os-default-field <?php echo $default_field['active'] ? '' : 'is-disabled'; ?>">
639 <?php
640 $active = $default_field['active'] ? 'on' : 'off';
641 $field_name = 'default_fields[' . $name . '][active]';
642 echo '<div class="os-toggler ' . esc_attr( $active ) . '" data-for="' . esc_attr( OsFormHelper::name_to_id( $field_name ) ) . '"><div class="toggler-rail"><div class="toggler-pill"></div></div></div>';
643 echo OsFormHelper::hidden_field( $field_name, $default_field['active'] );
644 ?>
645 <div class="os-field-name"><?php echo esc_html( $default_field['label'] ); ?></div>
646 <div class="os-field-setting">
647 <?php echo OsFormHelper::checkbox_field( 'default_fields[' . $name . '][required]', __( 'Required?', 'latepoint' ), 'on', $default_field['required'], $atts ); ?>
648 </div>
649 <div class="os-field-setting">
650 <?php echo OsFormHelper::select_field( 'default_fields[' . $name . '][width]', false, array(
651 'os-col-12' => __( 'Full Width', 'latepoint' ),
652 'os-col-6' => __( 'Half Width', 'latepoint' )
653 ), $default_field['width'] ); ?>
654 </div>
655 </div>
656 <?php } ?>
657 </form>
658 </div>
659 <?php
660 }
661
662
663 /**
664 * Get value set for start of week in WordPress, can be from 1-7 (representing Monday-Sunday)
665 * @return mixed
666 */
667 public static function get_start_of_week(): int {
668 $wp_value = intval( get_option( 'start_of_week', 0 ) );
669
670 return $wp_value ? $wp_value : 7; // in WordPress they start count on sunday and it's 0, we are using PHP Date library that starts week on Monday and it's 1-7
671 }
672
673 public static function get_number_of_records_per_page(): int {
674 return intval( OsSettingsHelper::get_settings_value( 'number_of_records_per_page', 20 ) );
675 }
676
677 public static function can_download_records_as_csv(): bool {
678 return OsAuthHelper::is_admin_logged_in() || self::is_on( 'allow_non_admins_download_csv' );
679 }
680
681 public static function get_link_attributes_for_premium_features() : string {
682 return ' data-os-action="'.OsRouterHelper::build_route_name('settings', 'premium_modal').'" data-os-lightbox-classes="width-600" data-os-output-target="lightbox" ';
683 }
684
685 public static function generate_instant_booking_page_url( array $url_settings ) : string {
686 $url_settings['latepoint'] = 'instant';
687 return OsUtilHelper::get_site_url().'/?'.http_build_query($url_settings);
688 }
689
690 public static function instant_page_background_patterns(): array{
691 return [
692 'pattern_1' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(45deg, #ff9a9e 0%, #fad0c4 99%, #fad0c4 100%);',
693 'pattern_2' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #a18cd1 0%, #fbc2eb 100%);',
694 'pattern_3' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #fbc2eb 0%, #a6c1ee 100%);',
695 'pattern_4' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(120deg, #f6d365 0%, #fda085 100%);',
696 'pattern_5' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(180deg, #2af598 0%, #009efd 100%);',
697 'pattern_6' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to right, #6a11cb 0%, #2575fc 100%);',
698 'pattern_7' => 'background-color: transparent; background-size: auto; background-color: #DCD9D4; background-image: linear-gradient(to bottom, rgba(255,255,255,0.50) 0%, rgba(0,0,0,0.50) 100%), radial-gradient(at 50% 0%, rgba(255,255,255,0.10) 0%, rgba(0,0,0,0.50) 50%); background-blend-mode: soft-light,screen;',
699 'pattern_8' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #f77062 0%, #fe5196 100%);',
700 'pattern_9' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #00c6fb 0%, #005bea 100%);',
701 'pattern_10' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #09203f 0%, #537895 100%);',
702 'pattern_11' => 'background-color: transparent; background-size: auto; background-image: radial-gradient(73% 147%, #EADFDF 59%, #ECE2DF 100%), radial-gradient(91% 146%, rgba(255,255,255,0.50) 47%, rgba(0,0,0,0.50) 100%); background-blend-mode: screen;',
703 'pattern_12' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, lightgrey 0%, lightgrey 1%, #e0e0e0 26%, #efefef 48%, #d9d9d9 75%, #bcbcbc 100%);',
704 'pattern_13' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #fddb92 0%, #d1fdff 100%);',
705 'pattern_14' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #dfe9f3 0%, white 100%);',
706 'pattern_15' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(-225deg, #5271C4 0%, #B19FFF 48%, #ECA1FE 100%);',
707 'pattern_16' => 'background-color: transparent; background-size: auto; background: linear-gradient(to bottom, rgba(255,255,255,0.15) 0%, rgba(0,0,0,0.15) 100%), radial-gradient(at top center, rgba(255,255,255,0.40) 0%, rgba(0,0,0,0.40) 120%) #989898;background-blend-mode: multiply,multiply;',
708 'pattern_17' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #f43b47 0%, #453a94 100%);',
709 'pattern_18' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to right, #222 0%, #111 100%);',
710 'pattern_19' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(-20deg, #d558c8 0%, #24d292 100%);',
711 ];
712 }
713
714 public static function get_default_wp_role_for_new_customers() : string {
715 if(!wp_roles()->is_role( LATEPOINT_WP_CUSTOMER_ROLE )){
716 OsRolesHelper::register_customer_role();
717 }
718 return OsSettingsHelper::get_settings_value('default_wp_role_for_customer', LATEPOINT_WP_CUSTOMER_ROLE);
719 }
720
721 }
722
723 ?>