config_factory = $config_factory ?: new ADECK_WordPress_Config(); $this->renderer = $renderer ?: new ADECK_Panel_Renderer(); } public function get_frontend_config() { return $this->config_factory->build_frontend_config(); } public function get_admin_config() { return $this->config_factory->build_admin_config(); } public function build_widget_bootstrap( $messages = [] ) { $config = $this->get_frontend_config(); $edition_id = $this->get_default_edition_id(); $edition = ADECK_Edition_Flags::build( $edition_id ); $features = apply_filters( 'adeck_product_feature_flags', $edition['features'], $edition['edition'], $config, $this->get_tenant_context() ); $features = is_array( $features ) ? $features : $edition['features']; $widget_feature_flags = $this->get_effective_widget_feature_flags( $config, $features ); $branding_colors = $this->get_branding_color_values( $config, $features ); $launcher_size = ! empty( $features['launcherSize'] ) ? (int) $config->get( 'adeck_widget_launcher_size', ADECK_Config_Schema::get_widget_launcher_size_bounds()['default'] ) : (int) ADECK_Config_Schema::get_widget_launcher_size_bounds()['default']; $launcher_icon = ! empty( $features['launcherSize'] ) ? $config->get( 'adeck_widget_launcher_icon', ADECK_Config_Schema::get_option_defaults()['adeck_widget_launcher_icon'] ) : ADECK_Config_Schema::get_option_defaults()['adeck_widget_launcher_icon']; $custom_logo = ! empty( $features['customBranding'] ) ? $config->get( 'adeck_custom_logo', '' ) : ''; $logo_src = ! empty( $custom_logo ) ? esc_url( $custom_logo, [ 'http', 'https' ] ) : esc_url( ADECK_PLUGIN_URL . 'assets/images/adecksibility-logo.svg' ); $footer_link = ! empty( $features['customBranding'] ) ? esc_url( $config->get( 'adeck_footer_link', ADECK_Config_Schema::get_option_defaults()['adeck_footer_link'] ), [ 'http', 'https' ] ) : esc_url( ADECK_Config_Schema::get_option_defaults()['adeck_footer_link'], [ 'http', 'https' ] ); $footer_enable = ! empty( $features['whiteLabel'] ) ? ( 'on' === $config->get( 'adeck_footer_enable', 'on' ) ) : false; $widget_config = ADECK_Widget_Bootstrap::build( [ 'host' => 'wordpress', 'platform' => 'wordpress', 'edition' => $edition['edition'], 'features' => $widget_feature_flags, 'tenant' => $this->get_tenant_context(), 'storageNamespace' => $this->get_storage_namespace(), 'ui' => [ 'widgetEnable' => 'on' === $config->get( 'adeck_widget_enable', 'on' ), 'widgetPosition' => $config->get( 'adeck_widget_position', 'bottom-right' ), 'widgetSide' => $config->get( 'adeck_widget_side', 'right' ), 'widgetLauncherSize'=> $launcher_size, 'widgetLauncherIcon'=> $launcher_icon, 'statementEnable' => 'on' === $config->get( 'adeck_statement_enable', 'on' ), 'footerEnable' => $footer_enable, 'hideOnDesktop' => 'on' === $config->get( 'adeck_display_hide_desktop', 'off' ), 'hideOnTablet' => 'on' === $config->get( 'adeck_display_hide_tablet', 'off' ), 'hideOnMobile' => 'on' === $config->get( 'adeck_display_hide_mobile', 'off' ), ], 'branding' => [ 'logoUrl' => $logo_src, 'linkUrl' => $footer_link, ], 'colors' => [ 'widgetColor' => $branding_colors['widget_color'], 'headerBgColor' => $branding_colors['header_bg_color'], 'primaryColor' => $branding_colors['primary_color'], 'modalBgColor' => $branding_colors['modal_bg_color'], 'iconTextColor' => $branding_colors['icon_text_color'], 'resetBgColor' => $branding_colors['reset_bg_color'], 'resetTextColor' => $branding_colors['reset_text_color'], 'resetHoverColor' => $branding_colors['reset_hover_color'], ], 'i18n' => $messages, ] ); return $widget_config; } public function get_wordpress_edition_context( $scope = 'frontend' ) { $config = ( 'admin' === $scope ) ? $this->get_admin_config() : $this->get_frontend_config(); $edition_id = $this->get_default_edition_id(); $edition = ADECK_Edition_Flags::build( $edition_id ); $features = apply_filters( 'adeck_product_feature_flags', $edition['features'], $edition['edition'], $config, $this->get_tenant_context() ); return [ 'edition' => $edition['edition'], 'features' => is_array( $features ) ? $features : $edition['features'], ]; } public function get_tenant_context() { return $this->build_base_tenant_context(); } public function get_storage_namespace() { $tenant = $this->get_tenant_context(); $namespace = apply_filters( 'adeck_storage_namespace', ADECK_Tenant_Config::build_storage_namespace( $tenant ), $tenant ); return is_string( $namespace ) && '' !== $namespace ? $namespace : ADECK_Tenant_Config::build_storage_namespace( $tenant ); } public function get_tenant_option_overrides( $scope = 'frontend' ) { return []; } public function get_tenant_widget_overrides( array $widget_config ) { return []; } private function build_base_tenant_context() { $origin = esc_url_raw( home_url( '/' ), [ 'http', 'https' ] ); $host = wp_parse_url( $origin, PHP_URL_HOST ); $slug = sanitize_title( $host ? $host : 'wordpress-site' ); if ( '' === $slug ) { $slug = 'wordpress-site'; } return ADECK_Tenant_Config::normalize_tenant_context( apply_filters( 'adeck_tenant_context', [ 'id' => $slug, 'slug' => $slug, 'origin' => $origin, 'configSource' => 'wp_options', ] ) ); } private function get_default_edition_id() { if ( class_exists( 'ADECK_Package_Edition' ) ) { return ADECK_Package_Edition::get_edition_id(); } return 'wordpress-lite'; } public function get_frontend_messages() { $statement_content = wp_kses_post( $this->get_frontend_config()->get( 'adeck_statement_content', ADECK_Config_Schema::get_default_statement() ) ); return ADECK_I18n::get_frontend_messages( $statement_content ); } public function get_frontend_script_config() { $messages = $this->get_frontend_messages(); return [ 'messages' => $messages, 'widget_config' => $this->build_widget_bootstrap( $messages ), ]; } public function should_render_frontend_widget() { $edition = $this->get_wordpress_edition_context( 'frontend' ); if ( empty( $edition['features']['displayRules'] ) ) { return true; } $config = $this->get_frontend_config(); $mode = ADECK_Config_Schema::sanitize_display_mode( $config->get( 'adeck_display_mode', 'everywhere' ) ); if ( 'hide_selected' === $mode ) { return ! ( $this->current_request_matches_legacy_display_selection( $config ) || $this->current_request_matches_display_exclusion( $config ) ); } if ( 'show_selected' === $mode ) { $primary_page_ids = ADECK_Config_Schema::sanitize_display_page_ids( $config->get( 'adeck_display_page_ids', [] ) ); $legacy_include_patterns = ADECK_Config_Schema::sanitize_display_url_patterns( $config->get( 'adeck_display_url_patterns', '' ) ); if ( empty( $primary_page_ids ) && '' === trim( (string) $legacy_include_patterns ) ) { return true; } if ( ! $this->current_request_matches_display_targets( $primary_page_ids, $legacy_include_patterns ) ) { return false; } } if ( $this->current_request_matches_display_exclusion( $config ) ) { return false; } return true; } public function get_frontend_panel_context() { $config = $this->get_frontend_config(); $edition = $this->get_wordpress_edition_context( 'frontend' ); $features = $edition['features']; $widget_feature_flags = $this->get_effective_widget_feature_flags( $config, $features ); $launcher_size = ! empty( $features['launcherSize'] ) ? $config->get( 'adeck_widget_launcher_size', ADECK_Config_Schema::get_widget_launcher_size_bounds()['default'] ) : ADECK_Config_Schema::get_widget_launcher_size_bounds()['default']; $custom_logo = ! empty( $features['customBranding'] ) ? $config->get( 'adeck_custom_logo', '' ) : ''; $logo_src = ! empty( $custom_logo ) ? esc_url( $custom_logo, [ 'http', 'https' ] ) : esc_url( ADECK_PLUGIN_URL . 'assets/images/adecksibility-logo.svg' ); $footer_link = ! empty( $features['customBranding'] ) ? esc_url( $config->get( 'adeck_footer_link', ADECK_Config_Schema::get_option_defaults()['adeck_footer_link'] ), [ 'http', 'https' ] ) : esc_url( ADECK_Config_Schema::get_option_defaults()['adeck_footer_link'], [ 'http', 'https' ] ); $footer_enable = ! empty( $features['whiteLabel'] ) ? $config->get( 'adeck_footer_enable', 'on' ) : 'off'; $launcher_icon = ! empty( $features['launcherSize'] ) ? $config->get( 'adeck_widget_launcher_icon', ADECK_Config_Schema::get_option_defaults()['adeck_widget_launcher_icon'] ) : ADECK_Config_Schema::get_option_defaults()['adeck_widget_launcher_icon']; $launcher_icon_url = ADECK_Config_Schema::get_widget_launcher_icon_url( $launcher_icon ); return [ 'widget_enable' => $config->get( 'adeck_widget_enable', 'on' ), 'widget_side' => $config->get( 'adeck_widget_side', 'right' ), 'widget_pos' => $config->get( 'adeck_widget_position', 'bottom-right' ), 'widget_launcher_size' => $launcher_size, 'widget_launcher_icon' => $launcher_icon, 'launcher_icon_url' => $launcher_icon_url, 'statement_enable' => $config->get( 'adeck_statement_enable', 'on' ), 'footer_enable' => $footer_enable, 'features' => $widget_feature_flags, 'logo_src' => $logo_src, 'footer_link' => $footer_link, 'check_svg' => '', ]; } public function get_frontend_color_context() { $config = $this->get_frontend_config(); $edition = $this->get_wordpress_edition_context( 'frontend' ); $branding_colors = $this->get_branding_color_values( $config, $edition['features'] ); $launcher_size = ! empty( $edition['features']['launcherSize'] ) ? $config->get( 'adeck_widget_launcher_size', ADECK_Config_Schema::get_widget_launcher_size_bounds()['default'] ) : ADECK_Config_Schema::get_widget_launcher_size_bounds()['default']; $launcher_icon = ! empty( $edition['features']['launcherSize'] ) ? $config->get( 'adeck_widget_launcher_icon', ADECK_Config_Schema::get_option_defaults()['adeck_widget_launcher_icon'] ) : ADECK_Config_Schema::get_option_defaults()['adeck_widget_launcher_icon']; return [ 'hbg' => $branding_colors['header_bg_color'], 'p' => $branding_colors['primary_color'], 'bg' => $branding_colors['modal_bg_color'], 'txt' => $branding_colors['icon_text_color'], 'rbg' => $branding_colors['reset_bg_color'], 'rtxt' => $branding_colors['reset_text_color'], 'rhov' => $branding_colors['reset_hover_color'], 'wbg' => $branding_colors['widget_color'], 'wsize' => $this->get_widget_launcher_metrics( $launcher_size ), 'launcher_icon' => $launcher_icon, ]; } public function get_admin_script_config() { $defaults = ADECK_Config_Schema::get_option_defaults(); $edition = $this->get_wordpress_edition_context( 'admin' ); return [ 'edition' => $edition['edition'], 'features' => $edition['features'], 'defaults' => [ 'adeck_widget_enable' => true, 'adeck_widget_position' => $defaults['adeck_widget_position'], 'adeck_widget_position_v' => 'bottom', 'adeck_widget_position_h' => 'right', 'adeck_widget_side' => $defaults['adeck_widget_side'], 'adeck_widget_launcher_size'=> $defaults['adeck_widget_launcher_size'], 'adeck_widget_launcher_icon'=> $defaults['adeck_widget_launcher_icon'], 'adeck_display_mode' => $defaults['adeck_display_mode'], 'adeck_display_url_patterns'=> $defaults['adeck_display_url_patterns'], 'adeck_display_exclusions_enabled' => 'on' === $defaults['adeck_display_exclusions_enabled'], 'adeck_display_excluded_url_patterns' => $defaults['adeck_display_excluded_url_patterns'], 'adeck_display_hide_desktop'=> 'on' === $defaults['adeck_display_hide_desktop'], 'adeck_display_hide_tablet' => 'on' === $defaults['adeck_display_hide_tablet'], 'adeck_display_hide_mobile' => 'on' === $defaults['adeck_display_hide_mobile'], 'adeck_visible_widget_features[]' => $defaults['adeck_visible_widget_features'], 'adeck_visible_widget_features_initialized' => 'on', 'adeck_statement_content' => $defaults['adeck_statement_content'], 'adeck_widget_color' => $defaults['adeck_widget_color'], 'adeck_header_bg_color' => $defaults['adeck_header_bg_color'], 'adeck_modal_bg_color' => $defaults['adeck_modal_bg_color'], 'adeck_icon_text_color' => $defaults['adeck_icon_text_color'], 'adeck_primary_color' => $defaults['adeck_primary_color'], 'adeck_reset_bg_color' => $defaults['adeck_reset_bg_color'], 'adeck_reset_text_color' => $defaults['adeck_reset_text_color'], 'adeck_reset_hover_color' => $defaults['adeck_reset_hover_color'], 'adeck_footer_enable' => false, 'adeck_custom_logo' => '', 'adeck_footer_link' => $defaults['adeck_footer_link'], ], 'strings' => [ 'copy_default' => 'Copy', 'copy_success' => 'Copied!', 'docs_default' => 'Read Documentation', 'docs_coming' => 'Coming Soon!', 'upload_label' => 'Upload', 'remove_label' => 'Remove', 'media_title' => 'Choose Custom Logo', 'media_button' => 'Use this logo', 'confirm_reset' => 'Are you sure you want to reset all settings to their default values?', 'confirm_reset_statement' => 'Reset the statement editor back to the default Adecksibility statement and save it now?', ], ]; } public function get_admin_color_context() { $config = $this->get_admin_config(); $edition = $this->get_wordpress_edition_context( 'admin' ); $branding_colors = $this->get_branding_color_values( $config, $edition['features'] ); return [ 'header_bg' => $branding_colors['header_bg_color'], 'primary' => $branding_colors['primary_color'], 'modal_bg' => $branding_colors['modal_bg_color'], 'icon_text' => $branding_colors['icon_text_color'], 'reset_bg' => $branding_colors['reset_bg_color'], 'reset_text' => $branding_colors['reset_text_color'], 'reset_hover' => $branding_colors['reset_hover_color'], 'widget_color' => $branding_colors['widget_color'], ]; } public function get_widget_position_parts( $widget_pos ) { $parts = explode( '-', (string) $widget_pos ); return [ 'vertical' => ( isset( $parts[0] ) && in_array( $parts[0], [ 'top', 'middle', 'bottom' ], true ) ) ? $parts[0] : 'bottom', 'horizontal' => ( isset( $parts[1] ) && in_array( $parts[1], [ 'left', 'right' ], true ) ) ? $parts[1] : 'right', ]; } public function get_admin_settings_page_context() { $config = $this->get_admin_config(); $widget_pos = $config->get( 'adeck_widget_position', 'bottom-right' ); $widget_position = $this->get_widget_position_parts( $widget_pos ); $edition = $this->get_wordpress_edition_context( 'admin' ); $features = $edition['features']; $launcher_size = ! empty( $features['launcherSize'] ) ? $config->get( 'adeck_widget_launcher_size', ADECK_Config_Schema::get_widget_launcher_size_bounds()['default'] ) : ADECK_Config_Schema::get_widget_launcher_size_bounds()['default']; $launcher_icon = ! empty( $features['launcherSize'] ) ? $config->get( 'adeck_widget_launcher_icon', ADECK_Config_Schema::get_option_defaults()['adeck_widget_launcher_icon'] ) : ADECK_Config_Schema::get_option_defaults()['adeck_widget_launcher_icon']; $launcher_icon_url = ADECK_Config_Schema::get_widget_launcher_icon_url( $launcher_icon ); $footer_enable = ! empty( $features['whiteLabel'] ) ? $config->get( 'adeck_footer_enable', 'on' ) : 'off'; $custom_logo = ! empty( $features['customBranding'] ) ? $config->get( 'adeck_custom_logo', '' ) : ''; $footer_link = ! empty( $features['customBranding'] ) ? $config->get( 'adeck_footer_link', ADECK_Config_Schema::get_option_defaults()['adeck_footer_link'] ) : ADECK_Config_Schema::get_option_defaults()['adeck_footer_link']; $display_page_ids = ADECK_Config_Schema::sanitize_display_page_ids( $config->get( 'adeck_display_page_ids', [] ) ); $display_excluded_page_ids = ADECK_Config_Schema::sanitize_display_page_ids( $config->get( 'adeck_display_excluded_page_ids', [] ) ); $visible_widget_features = $this->get_resolved_visible_widget_features( $config ); $monitoring_status = []; return [ 'edition' => $edition['edition'], 'features' => $features, 'package_state' => ADECK_Package_Edition::get_state(), 'package_state_meta' => ADECK_Package_Edition::get_state_meta(), 'colors' => $this->get_admin_color_context(), 'widget_enable' => $config->get( 'adeck_widget_enable', 'on' ), 'widget_pos' => $widget_pos, 'widget_side' => $config->get( 'adeck_widget_side', 'right' ), 'widget_launcher_size' => $launcher_size, 'widget_launcher_icon' => $launcher_icon, 'widget_launcher_icon_url' => $launcher_icon_url, 'display_mode' => ADECK_Config_Schema::sanitize_display_mode( $config->get( 'adeck_display_mode', 'everywhere' ) ), 'display_page_ids' => $display_page_ids, 'display_url_patterns' => ADECK_Config_Schema::sanitize_display_url_patterns( $config->get( 'adeck_display_url_patterns', '' ) ), 'display_exclusions_enabled' => $config->get( 'adeck_display_exclusions_enabled', 'off' ), 'display_excluded_page_ids' => $display_excluded_page_ids, 'display_excluded_url_patterns' => ADECK_Config_Schema::sanitize_display_url_patterns( $config->get( 'adeck_display_excluded_url_patterns', '' ) ), 'display_hide_desktop' => $config->get( 'adeck_display_hide_desktop', 'off' ), 'display_hide_tablet' => $config->get( 'adeck_display_hide_tablet', 'off' ), 'display_hide_mobile' => $config->get( 'adeck_display_hide_mobile', 'off' ), 'display_rule_pages' => $this->get_display_rule_pages( array_merge( $display_page_ids, $display_excluded_page_ids ) ), 'widget_feature_catalog' => ADECK_Config_Schema::get_widget_feature_catalog(), 'visible_widget_features' => $visible_widget_features, 'statement_enable' => $config->get( 'adeck_statement_enable', 'on' ), 'statement_content' => $config->get( 'adeck_statement_content', ADECK_Config_Schema::get_default_statement() ), 'footer_enable' => $footer_enable, 'custom_logo' => $custom_logo, 'footer_link' => $footer_link, 'monitoring_status' => $monitoring_status, 'settings_updated' => isset( $_GET['settings-updated'] ) && 'true' === sanitize_text_field( wp_unslash( $_GET['settings-updated'] ) ), 'pos_vertical' => $widget_position['vertical'], 'pos_horiz' => $widget_position['horizontal'], 'launcher_metrics' => $this->get_widget_launcher_metrics( $launcher_size ), ]; } public function renderer() { return $this->renderer; } private function get_widget_launcher_metrics( $size ) { $base_size = (int) ADECK_Config_Schema::sanitize_widget_launcher_size( $size ); return [ 'width' => $base_size, 'height' => $base_size + 8, 'icon' => max( 20, (int) round( $base_size * 0.54 ) ), 'hover' => $base_size + 6, ]; } private function get_display_rule_pages( $selected_page_ids = [] ) { if ( ! function_exists( 'get_pages' ) ) { return []; } $selected_page_ids = array_values( array_unique( array_map( 'absint', (array) $selected_page_ids ) ) ); $selected_lookup = array_fill_keys( $selected_page_ids, true ); $pages = get_pages( [ 'sort_column' => 'post_title', 'sort_order' => 'ASC', 'post_status' => 'publish', ] ); if ( ! is_array( $pages ) ) { return []; } $display_pages = array_map( function( $page ) { $page_id = isset( $page->ID ) ? absint( $page->ID ) : 0; $page_path = function_exists( 'get_page_uri' ) && $page_id > 0 ? trim( (string) get_page_uri( $page_id ) ) : ''; if ( '' !== $page_path ) { $page_path = '/' . ltrim( $page_path, '/' ); } else { $page_path = '/'; } return [ 'id' => $page_id, 'title' => isset( $page->post_title ) && '' !== trim( $page->post_title ) ? $page->post_title : sprintf( 'Page #%d', $page_id ), 'path' => $page_path, ]; }, $pages ); usort( $display_pages, function( $left, $right ) use ( $selected_lookup ) { $left_selected = ! empty( $selected_lookup[ isset( $left['id'] ) ? (int) $left['id'] : 0 ] ); $right_selected = ! empty( $selected_lookup[ isset( $right['id'] ) ? (int) $right['id'] : 0 ] ); if ( $left_selected !== $right_selected ) { return $left_selected ? -1 : 1; } return strcasecmp( isset( $left['title'] ) ? (string) $left['title'] : '', isset( $right['title'] ) ? (string) $right['title'] : '' ); } ); return $display_pages; } private function get_effective_widget_feature_flags( $config, array $edition_features ) { $effective = [ 'profiles' => ! empty( $edition_features['profiles'] ), 'whiteLabel' => ! empty( $edition_features['whiteLabel'] ), 'customBranding' => ! empty( $edition_features['customBranding'] ), 'launcherSize' => ! empty( $edition_features['launcherSize'] ), 'remoteConfig' => ! empty( $edition_features['remoteConfig'] ), 'analytics' => ! empty( $edition_features['analytics'] ), 'readAloud' => ! empty( $edition_features['readAloud'] ), 'lineHeight' => ! empty( $edition_features['lineHeight'] ), 'textSpacing' => ! empty( $edition_features['textSpacing'] ), 'pageStructure' => ! empty( $edition_features['pageStructure'] ), 'displayRules' => ! empty( $edition_features['displayRules'] ), 'darkMode' => true, 'grayscale' => true, 'negative' => true, 'lowSaturation' => true, 'highSaturation' => true, 'fontSize' => true, 'dyslexiaFont' => true, 'centerText' => true, 'boldText' => true, 'focusIndicator' => true, 'muteMedia' => true, 'highlightLinks' => true, 'highlightTitles' => true, 'highlightContent' => true, 'stopAnimations' => true, 'hideImages' => true, 'readingGuide' => true, 'readingMask' => true, 'bigCursor' => true, ]; $visible_feature_keys = $this->get_resolved_visible_widget_features( $config ); $visible_lookup = array_fill_keys( $visible_feature_keys, true ); foreach ( ADECK_Config_Schema::get_allowed_widget_feature_visibility_keys() as $feature_key ) { if ( empty( $visible_lookup[ $feature_key ] ) && array_key_exists( $feature_key, $effective ) ) { $effective[ $feature_key ] = false; } } return $effective; } private function get_resolved_visible_widget_features( $config ) { $is_initialized = 'on' === $config->get( 'adeck_visible_widget_features_initialized', 'off' ); if ( ! $is_initialized ) { return ADECK_Config_Schema::get_default_visible_widget_features(); } return ADECK_Config_Schema::sanitize_visible_widget_features( $config->get( 'adeck_visible_widget_features', ADECK_Config_Schema::get_default_visible_widget_features() ) ); } private function current_request_matches_legacy_display_selection( $config ) { return $this->current_request_matches_display_targets( ADECK_Config_Schema::sanitize_display_page_ids( $config->get( 'adeck_display_page_ids', [] ) ), ADECK_Config_Schema::sanitize_display_url_patterns( $config->get( 'adeck_display_url_patterns', '' ) ) ); } private function current_request_matches_display_exclusion( $config ) { if ( 'on' !== $config->get( 'adeck_display_exclusions_enabled', 'off' ) ) { return false; } return $this->current_request_matches_display_targets( ADECK_Config_Schema::sanitize_display_page_ids( $config->get( 'adeck_display_excluded_page_ids', [] ) ), ADECK_Config_Schema::sanitize_display_url_patterns( $config->get( 'adeck_display_excluded_url_patterns', '' ) ) ); } private function current_request_matches_display_targets( $page_ids, $patterns ) { $page_ids = ADECK_Config_Schema::sanitize_display_page_ids( $page_ids ); if ( ! empty( $page_ids ) && function_exists( 'get_queried_object_id' ) ) { $current_id = absint( get_queried_object_id() ); if ( $current_id > 0 && in_array( $current_id, $page_ids, true ) ) { return true; } } return $this->current_path_matches_display_patterns( ADECK_Config_Schema::sanitize_display_url_patterns( $patterns ) ); } private function current_path_matches_display_patterns( $patterns ) { $patterns = preg_split( '/\r\n|\r|\n/', (string) $patterns ); $path = $this->get_current_request_path(); if ( '' === $path ) { return false; } foreach ( $patterns as $pattern ) { $pattern = trim( (string) $pattern ); if ( '' === $pattern ) { continue; } if ( $this->path_matches_display_pattern( $path, $pattern ) ) { return true; } } return false; } private function get_current_request_path() { $request_uri = isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : ''; $path = wp_parse_url( $request_uri, PHP_URL_PATH ); if ( ! is_string( $path ) || '' === $path ) { return '/'; } $path = '/' . ltrim( $path, '/' ); return '/' !== $path ? untrailingslashit( $path ) : '/'; } private function path_matches_display_pattern( $path, $pattern ) { $pattern = '/' . ltrim( trim( $pattern ), '/' ); $pattern = '/' !== $pattern ? untrailingslashit( $pattern ) : '/'; if ( $path === $pattern ) { return true; } if ( false === strpos( $pattern, '*' ) ) { return false; } $regex = '#^' . str_replace( '\\*', '.*', preg_quote( $pattern, '#' ) ) . '$#i'; return 1 === preg_match( $regex, $path ); } private function get_branding_color_values( $config, array $features ) { $defaults = ADECK_Config_Schema::get_option_defaults(); if ( empty( $features['customBranding'] ) ) { return [ 'widget_color' => $defaults['adeck_widget_color'], 'header_bg_color' => $defaults['adeck_header_bg_color'], 'primary_color' => $defaults['adeck_primary_color'], 'modal_bg_color' => $defaults['adeck_modal_bg_color'], 'icon_text_color' => $defaults['adeck_icon_text_color'], 'reset_bg_color' => $defaults['adeck_reset_bg_color'], 'reset_text_color' => $defaults['adeck_reset_text_color'], 'reset_hover_color'=> $defaults['adeck_reset_hover_color'], ]; } return [ 'widget_color' => $config->get( 'adeck_widget_color' ), 'header_bg_color' => $config->get( 'adeck_header_bg_color' ), 'primary_color' => $config->get( 'adeck_primary_color' ), 'modal_bg_color' => $config->get( 'adeck_modal_bg_color' ), 'icon_text_color' => $config->get( 'adeck_icon_text_color' ), 'reset_bg_color' => $config->get( 'adeck_reset_bg_color' ), 'reset_text_color' => $config->get( 'adeck_reset_text_color' ), 'reset_hover_color' => $config->get( 'adeck_reset_hover_color' ), ]; } }