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 | ?> |