PluginProbe ʕ •ᴥ•ʔ
LatePoint – Calendar Booking Plugin for Appointments and Events / 5.1.4
LatePoint – Calendar Booking Plugin for Appointments and Events v5.1.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 1 year 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 1 year ago carts_helper.php 1 year ago connector_helper.php 1 year ago csv_helper.php 1 year ago customer_helper.php 1 year ago database_helper.php 1 year ago debug_helper.php 1 year ago defaults_helper.php 1 year ago elementor_helper.php 1 year ago email_helper.php 1 year ago encrypt_helper.php 1 year ago events_helper.php 1 year ago form_helper.php 1 year ago icalendar_helper.php 1 year ago image_helper.php 1 year ago invoices_helper.php 1 year 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 1 year ago meta_helper.php 1 year ago migrations_helper.php 1 year ago money_helper.php 1 year ago notifications_helper.php 1 year ago order_intent_helper.php 1 year ago orders_helper.php 1 year 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 1 year ago router_helper.php 1 year ago service_helper.php 1 year ago sessions_helper.php 1 year ago settings_helper.php 1 year ago shortcodes_helper.php 1 year ago sms_helper.php 1 year ago steps_helper.php 1 year ago stripe_connect_helper.php 1 year ago styles_helper.php 1 year ago support_topics_helper.php 1 year ago time_helper.php 1 year ago timeline_helper.php 1 year ago transaction_intent_helper.php 1 year ago util_helper.php 1 year ago version_specific_updates_helper.php 1 year 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
650 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_remote_url( $extra = '' ) {
58 return base64_decode( LATEPOINT_REMOTE_HASH ) . $extra;
59 }
60
61 public static function get_business_logo_url() {
62 $default_logo_url = LATEPOINT_IMAGES_URL . 'logo.png';
63
64 return OsImageHelper::get_image_url_by_id( OsSettingsHelper::get_settings_value( 'business_logo' ), 'thumbnail', $default_logo_url );
65 }
66
67 public static function get_business_logo_image( $height = '50px' ) {
68 $url = self::get_business_logo_url();
69
70 return '<img src="' . $url . '" style="height: ' . $height . '; width: auto"/>';
71 }
72
73 public static function get_encrypted_settings() {
74 $encrypted_settings = apply_filters( 'latepoint_encrypted_settings', self::$encrypted_settings );
75
76 return $encrypted_settings;
77 }
78
79
80 public static function get_active_addons(): array {
81 return json_decode( OsSettingsHelper::get_settings_value( 'active_addons', '' ) ) ?? [];
82 }
83
84 /**
85 * @param array $tables
86 *
87 * @return string
88 */
89 public static function export_data( array $tables = [] ): string {
90
91 if ( empty( $tables ) ) {
92 $tables = OsDatabaseHelper::get_all_latepoint_tables();
93 }
94
95 global $wpdb;
96
97 $output = [];
98
99 foreach ( $tables as $table ) {
100 // Check if table exists
101 $table_exists = $wpdb->get_var( "SHOW TABLES LIKE '{$table}'" );
102
103 if ( ! $table_exists ) {
104 continue; // Skip this table if it doesn't exist
105 }
106 // Get all rows from the table
107 $rows = $wpdb->get_results( "SELECT * FROM {$table}", ARRAY_A );
108
109 if ( $rows ) {
110 // Get table create statement
111 $create_table = $wpdb->get_row( "SHOW CREATE TABLE {$table}", ARRAY_N );
112
113 $output[ $table ] = [
114 'create' => $create_table[1],
115 'data' => $rows
116 ];
117 }
118 }
119
120 // Generate filename
121 $filename = 'latepoint_backup_' . date( 'Y-m-d_H-i-s' ) . '.json';
122
123 $json = wp_json_encode($output, JSON_PRETTY_PRINT);
124
125 // Send headers for file download
126 header( 'Content-Type: application/json' );
127 header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
128 header( 'Content-Length: ' . strlen( $json ) );
129 header( 'Pragma: no-cache' );
130
131 return $json;
132 }
133
134 /**
135 * @param string $data
136 *
137 * @return bool
138 * @throws Exception
139 */
140 public static function import_data( string $data ): bool {
141 global $wpdb;
142
143 if ( empty( $data ) ) {
144 throw new Exception( __( 'Error reading uploaded file', 'latepoint' ) );
145 }
146
147 $data = json_decode( $data, true );
148 if ( json_last_error() !== JSON_ERROR_NONE ) {
149 throw new Exception( __( 'Invalid JSON file format', 'latepoint' ) );
150 }
151
152 foreach ( $data as $table => $table_data ) {
153 // Drop table if exists
154 $wpdb->query( "DROP TABLE IF EXISTS {$table}" );
155
156 // Create table
157 $wpdb->query( $table_data['create'] );
158
159 // Insert data
160 foreach ( $table_data['data'] as $row ) {
161 $wpdb->insert( $table, $row );
162 }
163
164 // Find auto-increment columns and their max values
165 $columns = $wpdb->get_results( "SHOW COLUMNS FROM {$table} WHERE Extra = 'auto_increment'" );
166 foreach ( $columns as $column ) {
167 // Get the maximum value for this column
168 $max_id = $wpdb->get_var( "SELECT MAX({$column->Field}) FROM {$table}" );
169
170 // Set the auto_increment value to max + 1
171 if ( $max_id ) {
172 $wpdb->query( "ALTER TABLE {$table} AUTO_INCREMENT = " . ( $max_id + 1 ) );
173 }
174 }
175 }
176
177 return true;
178 }
179
180 public static function run_autoload() {
181 /**
182 * Default settings to be used in SettingsHelper when no value exists in DB
183 *
184 * @param {array} $default_settings Array of key => value pairs of setting names and their default values
185 * @returns {array} The filtered array of default settings
186 *
187 * @since 4.7.2
188 * @hook latepoint_settings_defaults
189 *
190 */
191 self::$defaults = apply_filters( 'latepoint_settings_defaults', self::$defaults );
192 foreach ( self::$defaults as $name => $default ) {
193 self::$loaded_values[ $name ] = $default;
194 }
195
196 $settings_model = new OsSettingsModel();
197
198 /**
199 * Settings to autoload in SettingsHelper on every page load, this is done to reduce the number of queries to DB
200 *
201 * @param {array} $settings Array of setting names to autoload
202 * @returns {array} The filtered array of setting names
203 *
204 * @since 4.7.2
205 * @hook latepoint_settings_to_autoload
206 *
207 */
208 self::$settings_to_autoload = apply_filters( 'latepoint_settings_to_autoload', self::$settings_to_autoload );
209 $settings_arr = $settings_model->select( 'name, value' )->where( array( 'name' => self::$settings_to_autoload ) )->get_results();
210
211
212 if ( $settings_arr && is_array( $settings_arr ) ) {
213 foreach ( $settings_arr as $setting ) {
214 if ( in_array( $setting->name, self::get_encrypted_settings() ) ) {
215 self::$loaded_values[ $setting->name ] = OsEncryptHelper::decrypt_value( $setting->value );
216 } else {
217 self::$loaded_values[ $setting->name ] = $setting->value;
218 }
219 }
220 }
221 }
222
223
224 // ENVIRONMENT SETTINGS
225
226 // BASE ENVIRONMENT
227 public static function is_env_live() {
228 return ( LATEPOINT_ENV == LATEPOINT_ENV_LIVE );
229 }
230
231 public static function is_env_dev() {
232 return ( LATEPOINT_ENV == LATEPOINT_ENV_DEV );
233 }
234
235 public static function is_env_demo() {
236 return ( LATEPOINT_ENV == LATEPOINT_ENV_DEMO );
237 }
238
239 // SMS, EMAILS
240
241 public static function is_sms_allowed() {
242 return LATEPOINT_ALLOW_SMS;
243 }
244
245 public static function is_whatsapp_allowed() {
246 return LATEPOINT_ALLOW_WHATSAPP;
247 }
248
249 public static function is_email_allowed() {
250 return LATEPOINT_ALLOW_EMAILS;
251 }
252
253 // PAYMENTS ENVIRONMENT
254 public static function is_env_payments_live() {
255 return ( self::get_payments_environment() == LATEPOINT_PAYMENTS_ENV_LIVE );
256 }
257
258 public static function is_env_payments_dev() {
259 return ( self::get_payments_environment() == LATEPOINT_PAYMENTS_ENV_DEV );
260 }
261
262 public static function is_env_payments_demo() {
263 return ( self::get_payments_environment() == LATEPOINT_PAYMENTS_ENV_DEMO );
264 }
265
266 public static function get_payments_environment() {
267 return self::get_settings_value( 'payments_environment', LATEPOINT_PAYMENTS_ENV_LIVE );
268 }
269
270
271 public static function append_payment_env_key( string $string, string $force_env = '' ): string {
272 if ( $force_env ) {
273 if ( $force_env == LATEPOINT_PAYMENTS_ENV_DEV ) {
274 $string .= LATEPOINT_PAYMENTS_DEV_SUFFIX;
275 }
276 } else {
277 if ( self::is_env_payments_dev() ) {
278 $string .= LATEPOINT_PAYMENTS_DEV_SUFFIX;
279 }
280 }
281
282 return $string;
283 }
284
285 public static function set_menu_layout_style( $layout ) {
286 OsSessionsHelper::setcookie( LATEPOINT_ADMIN_MENU_LAYOUT_STYLE_COOKIE, $layout );
287 }
288
289 public static function get_menu_layout_style() {
290 if ( ! isset( $_COOKIE[ LATEPOINT_ADMIN_MENU_LAYOUT_STYLE_COOKIE ] ) ) {
291 self::set_menu_layout_style( 'full' );
292 }
293
294 return isset( $_COOKIE[ LATEPOINT_ADMIN_MENU_LAYOUT_STYLE_COOKIE ] ) ? sanitize_text_field( wp_unslash( $_COOKIE[ LATEPOINT_ADMIN_MENU_LAYOUT_STYLE_COOKIE ] ) ) : 'full';
295 }
296
297 public static function get_time_system() {
298 return self::get_settings_value( 'time_system', LATEPOINT_DEFAULT_TIME_SYSTEM );
299 }
300
301 public static function get_date_format() {
302 return self::get_settings_value( 'date_format', LATEPOINT_DEFAULT_DATE_FORMAT );
303 }
304
305 public static function get_date_format_for_js() {
306 $format = strtolower( self::get_date_format() );
307
308 return str_replace( [ 'd', 'm', 'y' ], [ 'dd', 'mm', 'yyyy' ], $format );
309 }
310
311 public static function get_readable_datetime_format( $no_year = false, $no_seconds = true ) {
312 return self::get_readable_date_format( $no_year ) . ', ' . self::get_readable_time_format( $no_seconds );
313 }
314
315 public static function get_order_types_list_for_any_agent_logic(): array {
316 $order_types = [
317 LATEPOINT_ANY_AGENT_ORDER_RANDOM => __( 'Randomly picked agent', 'latepoint' ),
318 LATEPOINT_ANY_AGENT_ORDER_PRICE_HIGH => __( 'Most expensive agent', 'latepoint' ),
319 LATEPOINT_ANY_AGENT_ORDER_PRICE_LOW => __( 'Least expensive agent', 'latepoint' ),
320 LATEPOINT_ANY_AGENT_ORDER_BUSY_HIGH => __( 'Agent with the most bookings on that day', 'latepoint' ),
321 LATEPOINT_ANY_AGENT_ORDER_BUSY_LOW => __( 'Agent with the least bookings on that day', 'latepoint' )
322 ];
323
324 /**
325 * Get the list of order types for agent selection logic when "ANY" agent is pre-selected in the booking form
326 *
327 * @param {array} $order_types Array of order types
328 *
329 * @returns {array} Filtered array of order types
330 * @since 4.7.6
331 * @hook latepoint_get_order_types_list_for_any_agent_logic
332 *
333 */
334 return apply_filters( 'latepoint_get_order_types_list_for_any_agent_logic', $order_types );
335 }
336
337 public static function get_readable_time_format( $no_seconds = true ) {
338 $seconds = $no_seconds ? '' : ':s';
339 $format = ( self::get_time_system() == '12' ) ? "g:i$seconds a" : "G:i$seconds";
340
341 return $format;
342 }
343
344 public static function get_readable_date_format( $no_year = false ) {
345 if ( OsSettingsHelper::is_on( 'disable_verbose_date_output' ) ) {
346 return self::get_date_format();
347 }
348 $format = ( $no_year ) ? 'F j' : 'M j, Y';
349 switch ( self::get_date_format() ) {
350 case 'm/d/Y':
351 case 'm.d.Y':
352 $format = ( $no_year ) ? 'F j' : 'M j, Y';
353 break;
354 case 'd.m.Y':
355 case 'd/m/Y':
356 $format = ( $no_year ) ? 'j F' : 'j M, Y';
357 break;
358 case 'Y-m-d':
359 $format = ( $no_year ) ? 'F j' : 'Y, M j';
360 break;
361 }
362
363 return $format;
364 }
365
366
367 public static function get_booking_template_for_calendar() {
368 return OsSettingsHelper::get_settings_value( 'booking_template_for_calendar', '{{service_name}}' );
369 }
370
371
372 public static function get_selected_columns_for_bookings_table() {
373 return OsSettingsHelper::get_settings_value( 'bookings_table_columns', [] );
374 }
375
376 public static function get_available_columns_for_bookings_table() {
377 $available_columns = [];
378
379 $available_columns['customer'] = [
380 'email' => __( 'Email', 'latepoint' ),
381 'phone' => __( 'Phone', 'latepoint' )
382 ];
383
384 $available_columns['booking'] = [
385 'booking_code' => __( 'Code', 'latepoint' ),
386 'duration' => __( 'Duration', 'latepoint' ),
387 'source_id' => __( 'Source ID', 'latepoint' ),
388 'payment_method' => __( 'Payment Method', 'latepoint' ),
389 'payment_portion' => __( 'Payment Portion', 'latepoint' ),
390 'formatted_price' => __( 'Price', 'latepoint' )
391 ];
392
393 $available_columns = apply_filters( 'latepoint_bookings_table_columns', $available_columns );
394
395 return $available_columns;
396 }
397
398 public static function force_bite( $request ) {
399 }
400
401 public static function read_encoded( $str ) {
402 return base64_decode( $str );
403 }
404
405 public static function get_db_version() {
406 return get_option( 'latepoint_db_version' );
407 }
408
409 public static function force_release( $request ) {
410 }
411
412 public static function is_enabled_show_dial_code_with_flag() {
413 return ( self::get_settings_value( 'show_dial_code_with_flag', LATEPOINT_VALUE_ON ) == LATEPOINT_VALUE_ON );
414 }
415
416 public static function is_using_google_login() {
417 return self::is_on( 'enable_google_login' );
418 }
419
420 public static function is_using_facebook_login() {
421 return self::is_on( 'enable_facebook_login' );
422 }
423
424 public static function is_using_social_login() {
425 return ( self::is_using_google_login() || self::is_using_facebook_login() );
426 }
427
428 public static function get_steps_support_text() {
429 $default = '<h5>Questions?</h5><p>Call (858) 939-3746 for help</p>';
430
431 return self::get_settings_value( 'steps_support_text', $default );
432 }
433
434 public static function get_default_fields_for_customer() {
435 $default_fields = [
436 'first_name' => [ 'locked' => false, 'label' => __( 'First Name', 'latepoint' ), 'required' => true, 'width' => 'os-col-6', 'active' => true ],
437 'last_name' => [ 'locked' => false, 'label' => __( 'Last Name', 'latepoint' ), 'required' => true, 'width' => 'os-col-6', 'active' => true ],
438 'email' => [ 'locked' => true, 'label' => __( 'Email Address', 'latepoint' ), 'required' => true, 'width' => 'os-col-6', 'active' => true ],
439 'phone' => [ 'locked' => false, 'label' => __( 'Phone Number', 'latepoint' ), 'required' => false, 'width' => 'os-col-6', 'active' => true ],
440 'notes' => [ 'locked' => false, 'label' => __( 'Comments', 'latepoint' ), 'required' => false, 'width' => 'os-col-12', 'active' => true ]
441 ];
442
443 $fields_from_db = OsSettingsHelper::get_settings_value( 'default_fields_for_customer', '' );
444 $fields_from_db_arr = json_decode( $fields_from_db, true );
445 if ( $fields_from_db_arr ) {
446 foreach ( $fields_from_db_arr as $name => $field_from_db ) {
447 if ( isset( $default_fields[ $name ] ) ) {
448 $default_fields[ $name ] = $field_from_db;
449 }
450 }
451 }
452 $default_fields = apply_filters( 'latepoint_default_fields_for_customer', $default_fields );
453
454 return $default_fields;
455 }
456
457 public static function remove_setting_by_name( $name ) {
458 $settings_model = new OsSettingsModel();
459 $settings_model = $settings_model->delete_where( array( 'name' => $name ) );
460 self::reset_loaded_value( $name );
461 }
462
463 public static function save_setting_by_name( $name, $value ) {
464 $settings_model = new OsSettingsModel();
465 $settings_model = $settings_model->where( array( 'name' => $name ) )->set_limit( 1 )->get_results_as_models();
466 if ( $settings_model ) {
467 $settings_model->value = self::prepare_value( $name, $value );
468 } else {
469 $settings_model = new OsSettingsModel();
470 $settings_model->name = $name;
471 $settings_model->value = self::prepare_value( $name, $value );
472 }
473 self::reset_loaded_value( $name );
474
475 return $settings_model->save();
476 }
477
478 public static function reset_loaded_value( $name ) {
479 unset( self::$loaded_values[ $name ] );
480 }
481
482 public static function prepare_value( $name, $value ) {
483 if ( in_array( $name, self::get_encrypted_settings() ) ) {
484 $value = OsEncryptHelper::encrypt_value( $value );
485 }
486 if ( is_array( $value ) ) {
487 $value = maybe_serialize( $value );
488 }
489
490 return $value;
491 }
492
493 public static function get_settings_value( $name, $default = false ) {
494 if ( isset( self::$loaded_values[ $name ] ) ) {
495 return self::$loaded_values[ $name ];
496 }
497 $settings_model = new OsSettingsModel();
498 $settings_model = $settings_model->where( array( 'name' => $name ) )->set_limit( 1 )->get_results_as_models();
499 if ( $settings_model ) {
500 if ( in_array( $name, self::get_encrypted_settings() ) ) {
501 $value = OsEncryptHelper::decrypt_value( $settings_model->value );
502 } else {
503 $value = maybe_unserialize( $settings_model->value );
504 }
505 } else {
506 $value = $default;
507 }
508 self::$loaded_values[ $name ] = $value;
509
510 return self::$loaded_values[ $name ];
511 }
512
513
514 public static function get_any_agent_order() {
515 return self::get_settings_value( 'any_agent_order', LATEPOINT_ANY_AGENT_ORDER_RANDOM );
516 }
517
518 public static function get_day_calendar_min_height() {
519 $height = preg_replace( '/\D/', '', self::get_settings_value( 'day_calendar_min_height', 700 ) );
520 if ( ! $height ) {
521 $height = 700;
522 }
523
524 return $height;
525 }
526
527 public static function get_default_timeblock_interval() {
528 $timeblock_interval = self::get_settings_value( 'timeblock_interval', LATEPOINT_DEFAULT_TIMEBLOCK_INTERVAL );
529 if ( empty( $timeblock_interval ) ) {
530 $timeblock_interval = LATEPOINT_DEFAULT_TIMEBLOCK_INTERVAL;
531 }
532
533 return intval( $timeblock_interval );
534 }
535
536 public static function get_customer_dashboard_url( $include_site_url = true ) {
537 $path = self::get_settings_value( 'page_url_customer_dashboard', '/customer-dashboard' );
538
539 return ( $include_site_url ) ? site_url( $path ) : $path;
540 }
541
542 public static function get_customer_login_url( $include_site_url = true ) {
543 $path = self::get_settings_value( 'page_url_customer_login', '/customer-login' );
544
545 return ( $include_site_url ) ? site_url( $path ) : $path;
546 }
547
548
549 // BOOKING STEPS
550
551 public static function steps_show_service_categories() {
552 return ( self::get_settings_value( 'steps_show_service_categories', 'on' ) == 'on' );
553 }
554
555 public static function steps_show_location_categories() {
556 return ( self::get_settings_value( 'steps_show_location_categories', 'on' ) == 'on' );
557 }
558
559 public static function steps_show_agent_bio() {
560 return ( self::get_settings_value( 'steps_show_agent_bio' ) == 'on' );
561 }
562
563 public static function get_booking_form_color_scheme() {
564 return self::get_settings_value( 'color_scheme_for_booking_form', 'blue' );
565 }
566
567 public static function get_booking_form_border_radius() {
568 return self::get_settings_value( 'border_radius', 'flat' );
569 }
570
571 public static function get_default_phone_country() {
572 return OsSettingsHelper::get_settings_value( 'default_phone_country', 'us' );
573 }
574
575 public static function get_included_phone_countries(): array {
576 if ( OsSettingsHelper::get_settings_value( 'list_of_phone_countries', LATEPOINT_ALL ) == LATEPOINT_ALL ) {
577 return [];
578 } else {
579 return array_map( 'trim', explode( ',', OsSettingsHelper::get_settings_value( 'included_phone_countries', '' ) ) );
580 }
581 }
582
583
584 public static function is_on( string $setting, $default = false ): bool {
585 return ( self::get_settings_value( $setting, $default ) == LATEPOINT_VALUE_ON );
586 }
587
588 public static function is_off( string $setting, $default = false ): bool {
589 return ( self::get_settings_value( $setting, $default ) != LATEPOINT_VALUE_ON );
590 }
591
592 public static function generate_default_form_fields( array $default_fields ) {
593 ?>
594 <div class="os-default-fields" data-route="<?php echo esc_attr( OsRouterHelper::build_route_name( 'form_fields', 'update_default_fields' ) ); ?>">
595 <form>
596 <?php foreach ( $default_fields as $name => $default_field ) {
597 $atts = [];
598 if ( $default_field['locked'] ) {
599 $atts['disabled'] = 'disabled';
600 }
601 ?>
602 <div class="os-default-field <?php echo $default_field['active'] ? '' : 'is-disabled'; ?>">
603 <?php
604 if ( $default_field['locked'] ) {
605 echo '<div class="locked-field"><i class="latepoint-icon latepoint-icon-lock"></i><span>' . esc_html__( 'Email Address field can not be disabled.', 'latepoint' ) . '</span></div>';
606 } else {
607 $active = $default_field['active'] ? 'on' : 'off';
608 $field_name = 'default_fields[' . $name . '][active]';
609 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>';
610 echo OsFormHelper::hidden_field( $field_name, $default_field['active'] );
611 } ?>
612 <div class="os-field-name"><?php echo esc_html( $default_field['label'] ); ?></div>
613 <div class="os-field-setting">
614 <?php echo OsFormHelper::checkbox_field( 'default_fields[' . $name . '][required]', __( 'Required?', 'latepoint' ), 'on', $default_field['required'], $atts ); ?>
615 </div>
616 <div class="os-field-setting">
617 <?php echo OsFormHelper::select_field( 'default_fields[' . $name . '][width]', false, array(
618 'os-col-12' => __( 'Full Width', 'latepoint' ),
619 'os-col-6' => __( 'Half Width', 'latepoint' )
620 ), $default_field['width'] ); ?>
621 </div>
622 </div>
623 <?php } ?>
624 </form>
625 </div>
626 <?php
627 }
628
629
630 /**
631 * Get value set for start of week in WordPress, can be from 1-7 (representing Monday-Sunday)
632 * @return mixed
633 */
634 public static function get_start_of_week(): int {
635 $wp_value = intval( get_option( 'start_of_week', 0 ) );
636
637 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
638 }
639
640 public static function get_number_of_records_per_page(): int {
641 return intval( OsSettingsHelper::get_settings_value( 'number_of_records_per_page', 20 ) );
642 }
643
644 public static function can_download_records_as_csv(): bool {
645 return OsAuthHelper::is_admin_logged_in() || self::is_on( 'allow_non_admins_download_csv' );
646 }
647
648 }
649
650 ?>