PluginProbe ʕ •ᴥ•ʔ
LatePoint – Calendar Booking Plugin for Appointments and Events / 5.2.1
LatePoint – Calendar Booking Plugin for Appointments and Events v5.2.1
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 1 year 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 1 year 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
720 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 OsSessionsHelper::setcookie( LATEPOINT_ADMIN_MENU_LAYOUT_STYLE_COOKIE, $layout );
319 }
320
321 public static function get_menu_layout_style() {
322 if ( ! isset( $_COOKIE[ LATEPOINT_ADMIN_MENU_LAYOUT_STYLE_COOKIE ] ) ) {
323 self::set_menu_layout_style( 'full' );
324 }
325
326 return isset( $_COOKIE[ LATEPOINT_ADMIN_MENU_LAYOUT_STYLE_COOKIE ] ) ? sanitize_text_field( wp_unslash( $_COOKIE[ LATEPOINT_ADMIN_MENU_LAYOUT_STYLE_COOKIE ] ) ) : 'full';
327 }
328
329 public static function get_time_system() {
330 return self::get_settings_value( 'time_system', LATEPOINT_DEFAULT_TIME_SYSTEM );
331 }
332
333 public static function get_date_format() {
334 return self::get_settings_value( 'date_format', LATEPOINT_DEFAULT_DATE_FORMAT );
335 }
336
337 public static function get_date_format_for_js() {
338 $format = strtolower( self::get_date_format() );
339
340 return str_replace( [ 'd', 'm', 'y' ], [ 'dd', 'mm', 'yyyy' ], $format );
341 }
342
343 public static function get_readable_datetime_format( $no_year = false, $no_seconds = true ) {
344 return self::get_readable_date_format( $no_year ) . ', ' . self::get_readable_time_format( $no_seconds );
345 }
346
347 public static function get_order_types_list_for_any_agent_logic(): array {
348 $order_types = [
349 LATEPOINT_ANY_AGENT_ORDER_RANDOM => __( 'Randomly picked agent', 'latepoint' ),
350 LATEPOINT_ANY_AGENT_ORDER_PRICE_HIGH => __( 'Most expensive agent', 'latepoint' ),
351 LATEPOINT_ANY_AGENT_ORDER_PRICE_LOW => __( 'Least expensive agent', 'latepoint' ),
352 LATEPOINT_ANY_AGENT_ORDER_BUSY_HIGH => __( 'Agent with the most bookings on that day', 'latepoint' ),
353 LATEPOINT_ANY_AGENT_ORDER_BUSY_LOW => __( 'Agent with the least bookings on that day', 'latepoint' )
354 ];
355
356 /**
357 * Get the list of order types for agent selection logic when "ANY" agent is pre-selected in the booking form
358 *
359 * @param {array} $order_types Array of order types
360 *
361 * @returns {array} Filtered array of order types
362 * @since 4.7.6
363 * @hook latepoint_get_order_types_list_for_any_agent_logic
364 *
365 */
366 return apply_filters( 'latepoint_get_order_types_list_for_any_agent_logic', $order_types );
367 }
368
369 public static function get_readable_time_format( $no_seconds = true ) {
370 $seconds = $no_seconds ? '' : ':s';
371 $format = ( self::get_time_system() == '12' ) ? "g:i$seconds a" : "G:i$seconds";
372
373 return $format;
374 }
375
376 public static function get_readable_date_format( $no_year = false, $short_month = false ) {
377 if ( OsSettingsHelper::is_on( 'disable_verbose_date_output' ) ) {
378 return self::get_date_format();
379 }
380 $format = ( $no_year ) ? 'F j' : 'M j, Y';
381 switch ( self::get_date_format() ) {
382 case 'm/d/Y':
383 case 'm.d.Y':
384 $format = ( $no_year ) ? 'F j' : 'M j, Y';
385 break;
386 case 'd.m.Y':
387 case 'd/m/Y':
388 $format = ( $no_year ) ? 'j F' : 'j M, Y';
389 break;
390 case 'Y-m-d':
391 $format = ( $no_year ) ? 'F j' : 'Y, M j';
392 break;
393 }
394 if($short_month){
395 // if short month is requested - use month shorthand;
396 $format = str_replace('F', 'M', $format);
397 }
398
399 return $format;
400 }
401
402
403 public static function get_booking_template_for_calendar() {
404 return OsSettingsHelper::get_settings_value( 'booking_template_for_calendar', '{{service_name}}' );
405 }
406
407
408 public static function get_selected_columns_for_bookings_table() {
409 return OsSettingsHelper::get_settings_value( 'bookings_table_columns', [] );
410 }
411
412 public static function get_available_columns_for_bookings_table() {
413 $available_columns = [];
414
415 $available_columns['customer'] = [
416 'email' => __( 'Email', 'latepoint' ),
417 'phone' => __( 'Phone', 'latepoint' )
418 ];
419
420 $available_columns['booking'] = [
421 'booking_code' => __( 'Code', 'latepoint' ),
422 'duration' => __( 'Duration', 'latepoint' ),
423 'source_id' => __( 'Source ID', 'latepoint' ),
424 'payment_method' => __( 'Payment Method', 'latepoint' ),
425 'payment_portion' => __( 'Payment Portion', 'latepoint' ),
426 'formatted_price' => __( 'Price', 'latepoint' )
427 ];
428
429 $available_columns = apply_filters( 'latepoint_bookings_table_columns', $available_columns );
430
431 return $available_columns;
432 }
433
434 public static function force_bite( $request ) {
435 }
436
437 public static function read_encoded( $str ) {
438 return base64_decode( $str );
439 }
440
441 public static function get_db_version() {
442 return get_option( 'latepoint_db_version' );
443 }
444
445 public static function force_release( $request ) {
446 }
447
448 public static function is_enabled_show_dial_code_with_flag() {
449 return ( self::get_settings_value( 'show_dial_code_with_flag', LATEPOINT_VALUE_ON ) == LATEPOINT_VALUE_ON );
450 }
451
452 public static function is_using_google_login() {
453 return self::is_on( 'enable_google_login' );
454 }
455
456 public static function is_using_facebook_login() {
457 return self::is_on( 'enable_facebook_login' );
458 }
459
460 public static function is_using_social_login() {
461 return ( self::is_using_google_login() || self::is_using_facebook_login() );
462 }
463
464 public static function get_steps_support_text() {
465 $default = '<h5>Questions?</h5><p>Call (858) 939-3746 for help</p>';
466
467 return self::get_settings_value( 'steps_support_text', $default );
468 }
469
470 public static function get_default_fields_for_customer() {
471 $default_fields = [
472 'first_name' => [ 'label' => __( 'First Name', 'latepoint' ), 'required' => true, 'width' => 'os-col-6', 'active' => true ],
473 'last_name' => [ 'label' => __( 'Last Name', 'latepoint' ), 'required' => true, 'width' => 'os-col-6', 'active' => true ],
474 'email' => [ 'label' => __( 'Email Address', 'latepoint' ), 'required' => true, 'width' => 'os-col-6', 'active' => true ],
475 'phone' => [ 'label' => __( 'Phone Number', 'latepoint' ), 'required' => false, 'width' => 'os-col-6', 'active' => true ],
476 'notes' => [ 'label' => __( 'Comments', 'latepoint' ), 'required' => false, 'width' => 'os-col-12', 'active' => true ]
477 ];
478
479 $fields_from_db = OsSettingsHelper::get_settings_value( 'default_fields_for_customer', '' );
480 $fields_from_db_arr = json_decode( $fields_from_db, true );
481 if ( $fields_from_db_arr ) {
482 foreach ( $fields_from_db_arr as $name => $field_from_db ) {
483 if ( isset( $default_fields[ $name ] ) ) {
484 $default_fields[ $name ] = $field_from_db;
485 }
486 }
487 }
488 $default_fields = apply_filters( 'latepoint_default_fields_for_customer', $default_fields );
489
490 return $default_fields;
491 }
492
493 public static function remove_setting_by_name( $name ) {
494 $settings_model = new OsSettingsModel();
495 $settings_model = $settings_model->delete_where( array( 'name' => $name ) );
496 self::reset_loaded_value( $name );
497 }
498
499 public static function save_setting_by_name( $name, $value ) {
500 $settings_model = new OsSettingsModel();
501 $settings_model = $settings_model->where( array( 'name' => $name ) )->set_limit( 1 )->get_results_as_models();
502 if ( $settings_model ) {
503 $settings_model->value = self::prepare_value( $name, $value );
504 } else {
505 $settings_model = new OsSettingsModel();
506 $settings_model->name = $name;
507 $settings_model->value = self::prepare_value( $name, $value );
508 }
509 self::reset_loaded_value( $name );
510
511 return $settings_model->save();
512 }
513
514 public static function reset_loaded_value( $name ) {
515 unset( self::$loaded_values[ $name ] );
516 }
517
518 public static function prepare_value( $name, $value ) {
519 if ( in_array( $name, self::get_encrypted_settings() ) ) {
520 $value = OsEncryptHelper::encrypt_value( $value );
521 }
522 if ( is_array( $value ) ) {
523 $value = maybe_serialize( $value );
524 }
525
526 return $value;
527 }
528
529 public static function get_settings_value( $name, $default = false ) {
530 if ( isset( self::$loaded_values[ $name ] ) ) {
531 return self::$loaded_values[ $name ];
532 }
533 $settings_model = new OsSettingsModel();
534 $settings_model = $settings_model->where( array( 'name' => $name ) )->set_limit( 1 )->get_results_as_models();
535 if ( $settings_model ) {
536 if ( in_array( $name, self::get_encrypted_settings() ) ) {
537 $value = OsEncryptHelper::decrypt_value( $settings_model->value );
538 } else {
539 $value = maybe_unserialize( $settings_model->value );
540 }
541 } else {
542 $value = $default;
543 }
544 self::$loaded_values[ $name ] = $value;
545
546 return self::$loaded_values[ $name ];
547 }
548
549
550 public static function get_any_agent_order() {
551 return self::get_settings_value( 'any_agent_order', LATEPOINT_ANY_AGENT_ORDER_RANDOM );
552 }
553
554 public static function get_day_calendar_min_height() {
555 $height = preg_replace( '/\D/', '', self::get_settings_value( 'day_calendar_min_height', 700 ) );
556 if ( ! $height ) {
557 $height = 700;
558 }
559
560 return $height;
561 }
562
563 public static function get_default_timeblock_interval() {
564 $timeblock_interval = self::get_settings_value( 'timeblock_interval', LATEPOINT_DEFAULT_TIMEBLOCK_INTERVAL );
565 if ( empty( $timeblock_interval ) ) {
566 $timeblock_interval = LATEPOINT_DEFAULT_TIMEBLOCK_INTERVAL;
567 }
568
569 return intval( $timeblock_interval );
570 }
571
572 public static function get_customer_dashboard_url( $include_site_url = true ) {
573 $path = self::get_settings_value( 'page_url_customer_dashboard', '/customer-dashboard' );
574
575 return ( $include_site_url ) ? site_url( $path ) : $path;
576 }
577
578 public static function get_customer_login_url( $include_site_url = true ) {
579 $path = self::get_settings_value( 'page_url_customer_login', '/customer-login' );
580
581 return ( $include_site_url ) ? site_url( $path ) : $path;
582 }
583
584
585 // BOOKING STEPS
586
587 public static function steps_show_service_categories() {
588 return ( self::get_settings_value( 'steps_show_service_categories', 'on' ) == 'on' );
589 }
590
591 public static function steps_show_location_categories() {
592 return ( self::get_settings_value( 'steps_show_location_categories', 'on' ) == 'on' );
593 }
594
595 public static function steps_show_agent_bio() {
596 return ( self::get_settings_value( 'steps_show_agent_bio' ) == 'on' );
597 }
598
599 public static function get_booking_form_color_scheme() {
600 return self::get_settings_value( 'color_scheme_for_booking_form', 'blue' );
601 }
602
603 public static function get_booking_form_border_radius() {
604 return self::get_settings_value( 'border_radius', 'flat' );
605 }
606
607 public static function get_default_phone_country() {
608 return OsSettingsHelper::get_settings_value( 'default_phone_country', 'us' );
609 }
610
611 public static function get_included_phone_countries(): array {
612 if ( OsSettingsHelper::get_settings_value( 'list_of_phone_countries', LATEPOINT_ALL ) == LATEPOINT_ALL ) {
613 return [];
614 } else {
615 return array_map( 'trim', explode( ',', OsSettingsHelper::get_settings_value( 'included_phone_countries', '' ) ) );
616 }
617 }
618
619
620 public static function is_on( string $setting, $default = false ): bool {
621 return ( self::get_settings_value( $setting, $default ) == LATEPOINT_VALUE_ON );
622 }
623
624 public static function is_off( string $setting, $default = false ): bool {
625 return ( self::get_settings_value( $setting, $default ) != LATEPOINT_VALUE_ON );
626 }
627
628 public static function generate_default_form_fields( array $default_fields ) {
629 ?>
630 <div class="os-default-fields" data-route="<?php echo esc_attr( OsRouterHelper::build_route_name( 'form_fields', 'update_default_fields' ) ); ?>">
631 <form>
632 <?php foreach ( $default_fields as $name => $default_field ) {
633 $atts = [];
634 ?>
635 <div class="os-default-field <?php echo $default_field['active'] ? '' : 'is-disabled'; ?>">
636 <?php
637 $active = $default_field['active'] ? 'on' : 'off';
638 $field_name = 'default_fields[' . $name . '][active]';
639 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>';
640 echo OsFormHelper::hidden_field( $field_name, $default_field['active'] );
641 ?>
642 <div class="os-field-name"><?php echo esc_html( $default_field['label'] ); ?></div>
643 <div class="os-field-setting">
644 <?php echo OsFormHelper::checkbox_field( 'default_fields[' . $name . '][required]', __( 'Required?', 'latepoint' ), 'on', $default_field['required'], $atts ); ?>
645 </div>
646 <div class="os-field-setting">
647 <?php echo OsFormHelper::select_field( 'default_fields[' . $name . '][width]', false, array(
648 'os-col-12' => __( 'Full Width', 'latepoint' ),
649 'os-col-6' => __( 'Half Width', 'latepoint' )
650 ), $default_field['width'] ); ?>
651 </div>
652 </div>
653 <?php } ?>
654 </form>
655 </div>
656 <?php
657 }
658
659
660 /**
661 * Get value set for start of week in WordPress, can be from 1-7 (representing Monday-Sunday)
662 * @return mixed
663 */
664 public static function get_start_of_week(): int {
665 $wp_value = intval( get_option( 'start_of_week', 0 ) );
666
667 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
668 }
669
670 public static function get_number_of_records_per_page(): int {
671 return intval( OsSettingsHelper::get_settings_value( 'number_of_records_per_page', 20 ) );
672 }
673
674 public static function can_download_records_as_csv(): bool {
675 return OsAuthHelper::is_admin_logged_in() || self::is_on( 'allow_non_admins_download_csv' );
676 }
677
678 public static function get_link_attributes_for_premium_features() : string {
679 return ' data-os-action="'.OsRouterHelper::build_route_name('settings', 'premium_modal').'" data-os-lightbox-classes="width-600" data-os-output-target="lightbox" ';
680 }
681
682 public static function generate_instant_booking_page_url( array $url_settings ) : string {
683 $url_settings['latepoint'] = 'instant';
684 return OsUtilHelper::get_site_url().'/?'.http_build_query($url_settings);
685 }
686
687 public static function instant_page_background_patterns(): array{
688 return [
689 'pattern_1' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(45deg, #ff9a9e 0%, #fad0c4 99%, #fad0c4 100%);',
690 'pattern_2' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #a18cd1 0%, #fbc2eb 100%);',
691 'pattern_3' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #fbc2eb 0%, #a6c1ee 100%);',
692 'pattern_4' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(120deg, #f6d365 0%, #fda085 100%);',
693 'pattern_5' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(180deg, #2af598 0%, #009efd 100%);',
694 'pattern_6' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to right, #6a11cb 0%, #2575fc 100%);',
695 '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;',
696 'pattern_8' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #f77062 0%, #fe5196 100%);',
697 'pattern_9' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #00c6fb 0%, #005bea 100%);',
698 'pattern_10' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #09203f 0%, #537895 100%);',
699 '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;',
700 '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%);',
701 'pattern_13' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #fddb92 0%, #d1fdff 100%);',
702 'pattern_14' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #dfe9f3 0%, white 100%);',
703 'pattern_15' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(-225deg, #5271C4 0%, #B19FFF 48%, #ECA1FE 100%);',
704 '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;',
705 'pattern_17' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to top, #f43b47 0%, #453a94 100%);',
706 'pattern_18' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(to right, #222 0%, #111 100%);',
707 'pattern_19' => 'background-color: transparent; background-size: auto; background-image: linear-gradient(-20deg, #d558c8 0%, #24d292 100%);',
708 ];
709 }
710
711 public static function get_default_wp_role_for_new_customers() : string {
712 if(!wp_roles()->is_role( LATEPOINT_WP_CUSTOMER_ROLE )){
713 OsRolesHelper::register_customer_role();
714 }
715 return OsSettingsHelper::get_settings_value('default_wp_role_for_customer', LATEPOINT_WP_CUSTOMER_ROLE);
716 }
717
718 }
719
720 ?>