roles ) ) ? $user->roles : []; $ignore_user_roles = get_option( 'edacp_ignore_user_roles' ); $interset = ( $user_roles && $ignore_user_roles ) ? array_intersect( $user_roles, $ignore_user_roles ) : false; return ( $interset ); } /** * Add an options page under the Settings submenu */ function edac_add_options_page() { // we don't want to show even the welcome page to subscribers. if ( ! current_user_can( 'edit_posts' ) ) { return; } add_menu_page( __( 'Welcome to Accessibility Checker', 'accessibility-checker' ), __( 'Accessibility Checker', 'accessibility-checker' ), 'read', 'accessibility_checker', 'edac_display_welcome_page', 'dashicons-universal-access-alt' ); if ( ! edac_user_can_ignore() ) { return; } /** * Filter the capability required to access the settings page. * * @since 1.4.0 * * @param string $settings_capability The capability required to access the settings page. */ $settings_capability = apply_filters( 'edac_filter_settings_capability', 'manage_options' ); add_submenu_page( 'accessibility_checker', __( 'Accessibility Checker Settings', 'accessibility-checker' ), __( 'Settings', 'accessibility-checker' ), $settings_capability, 'accessibility_checker_settings', 'edac_display_options_page' // The submenu doesn't typically require a separate icon. ); $fixes_page = new FixesPage( $settings_capability ); $fixes_page->add_page(); // Deregister the pro setting registration - this is added for backwards compatibility for users // that don't update pro. Added here in 1.31.0 and released with pro 1.16.0. add_action( 'admin_init', function () { // Remove the pro plugin's settings registration entirely. remove_action( 'admin_init', 'edacp_register_setting', 11 ); } ); } /** * Render the welcome page for plugin */ function edac_display_welcome_page() { include_once plugin_dir_path( __DIR__ ) . 'partials/welcome-page.php'; } /** * Render the options page for plugin */ function edac_display_options_page() { include_once plugin_dir_path( __DIR__ ) . 'partials/settings-page.php'; } /** * Register settings */ function edac_register_setting() { // Add sections. add_settings_section( 'edac_general', __( 'Scan Settings', 'accessibility-checker' ), 'edac_general_cb', 'edac_settings' ); add_settings_section( 'edac_permissions', __( 'Permissions', 'accessibility-checker' ), 'edac_permissions_section_cb', 'edac_settings' ); add_settings_section( 'edac_simplified_summary', __( 'Simplified Summary Settings', 'accessibility-checker' ), 'edac_simplified_summary_cb', 'edac_settings' ); add_settings_section( 'edac_footer_accessibility_statement', __( 'Footer Accessibility Statement', 'accessibility-checker' ), 'edac_footer_accessibility_statement_cb', 'edac_settings' ); add_settings_section( 'edac_frontend_highlighter', __( 'Frontend Accessibility Checker', 'accessibility-checker' ), 'edac_frontend_highlighter_section_cb', 'edac_settings' ); add_settings_section( 'edac_system', __( 'System Settings', 'accessibility-checker' ), 'edac_system_cb', 'edac_settings' ); // Add fields. add_settings_field( 'edac_post_types', __( 'Post Types To Be Checked', 'accessibility-checker' ), 'edac_post_types_cb', 'edac_settings', 'edac_general', [ 'label_for' => 'edac_post_types' ] ); add_settings_field( 'edacp_full_site_scan_speed', __( 'Scan Speed', 'accessibility-checker' ), 'edac_full_site_scan_speed_cb', 'edac_settings', 'edac_general', [ 'label_for' => 'edacp_full_site_scan_speed' ] ); add_settings_field( 'edacp_enable_archive_scanning', __( 'Archive Scanning', 'accessibility-checker' ), 'edac_enable_archive_scanning_cb', 'edac_settings', 'edac_general', [ 'label_for' => 'edacp_enable_archive_scanning' ] ); add_settings_field( 'edacp_scan_all_taxonomy_terms', __( 'Taxonomy Scanning', 'accessibility-checker' ), 'edac_scan_all_taxonomy_terms_cb', 'edac_settings', 'edac_general', [ 'label_for' => 'edacp_scan_all_taxonomy_terms' ] ); add_settings_field( 'edacp_ignore_user_roles', __( 'Ignore Permissions', 'accessibility-checker' ), 'edac_ignore_user_roles_cb', 'edac_settings', 'edac_permissions', [ 'label_for' => 'edac_ignore_user_roles' ] ); add_settings_field( 'edac_delete_data', __( 'Delete Data', 'accessibility-checker' ), 'edac_delete_data_cb', 'edac_settings', 'edac_system', [ 'label_for' => 'edac_delete_data' ] ); add_settings_field( 'edac_simplified_summary_prompt', __( 'Prompt for Simplified Summary', 'accessibility-checker' ), 'edac_simplified_summary_prompt_cb', 'edac_settings', 'edac_simplified_summary', [ 'label_for' => 'edac_simplified_summary_prompt' ] ); add_settings_field( 'edac_simplified_summary_position', __( 'Simplified Summary Position', 'accessibility-checker' ), 'edac_simplified_summary_position_cb', 'edac_settings', 'edac_simplified_summary', [ 'label_for' => 'edac_simplified_summary_position' ] ); add_settings_field( 'edacp_simplified_summary_heading', __( 'Simplified Summary Heading', 'accessibility-checker' ), 'edac_simplified_summary_heading_cb', 'edac_settings', 'edac_simplified_summary', [ 'label_for' => 'edacp_simplified_summary_heading' ] ); add_settings_field( 'edac_add_footer_accessibility_statement', __( 'Add Footer Accessibility Statement', 'accessibility-checker' ), 'edac_add_footer_accessibility_statement_cb', 'edac_settings', 'edac_footer_accessibility_statement', [ 'label_for' => 'edac_add_footer_accessibility_statement' ] ); add_settings_field( 'edac_include_accessibility_statement_link', __( 'Include Link to Accessibility Policy', 'accessibility-checker' ), 'edac_include_accessibility_statement_link_cb', 'edac_settings', 'edac_footer_accessibility_statement', [ 'label_for' => 'edac_include_accessibility_statement_link' ] ); add_settings_field( 'edac_accessibility_policy_page', __( 'Accessibility Policy page', 'accessibility-checker' ), 'edac_accessibility_policy_page_cb', 'edac_settings', 'edac_footer_accessibility_statement', [ 'label_for' => 'edac_accessibility_policy_page' ] ); add_settings_field( 'edac_accessibility_statement_preview', __( 'Accessibility Statement Preview', 'accessibility-checker' ), 'edac_accessibility_statement_preview_cb', 'edac_settings', 'edac_footer_accessibility_statement', [ 'label_for' => 'edac_accessibility_statement_preview' ] ); add_settings_field( 'edac_frontend_highlighter_position', __( 'Frontend Accessibility Checker Position', 'accessibility-checker' ), 'edac_frontend_highlighter_position_cb', 'edac_settings', 'edac_frontend_highlighter', [ 'label_for' => 'edac_frontend_highlighter_position' ] ); // Register settings. register_setting( 'edac_settings', 'edac_post_types', 'edac_sanitize_post_types' ); register_setting( 'edac_settings', 'edac_delete_data', 'edac_sanitize_checkbox' ); register_setting( 'edac_settings', 'edac_simplified_summary_prompt', [ 'type' => 'string', 'sanitize_callback' => 'edac_sanitize_simplified_summary_prompt', 'default' => 'when required', ] ); register_setting( 'edac_settings', 'edac_simplified_summary_position', [ 'type' => 'string', 'sanitize_callback' => 'edac_sanitize_simplified_summary_position', 'default' => 'after', ] ); register_setting( 'edac_settings', 'edac_add_footer_accessibility_statement', 'edac_sanitize_checkbox' ); register_setting( 'edac_settings', 'edac_include_accessibility_statement_link', 'edac_sanitize_checkbox' ); register_setting( 'edac_settings', 'edac_accessibility_policy_page', 'edac_sanitize_accessibility_policy_page' ); register_setting( 'edac_settings', 'edac_frontend_highlighter_position', 'edac_sanitize_frontend_highlighter_position' ); // Upsell settings - these are using edacp prefix for backwards compatibility. register_setting( 'edac_settings', 'edacp_full_site_scan_speed', 'edac_sanitize_pro_scan_speed' ); register_setting( 'edac_settings', 'edacp_enable_archive_scanning', 'edac_sanitize_pro_archive_scanning' ); register_setting( 'edac_settings', 'edacp_scan_all_taxonomy_terms', 'edac_sanitize_pro_taxonomy_terms' ); register_setting( 'edac_settings', 'edacp_ignore_user_roles', 'edac_sanitize_pro_ignore_roles' ); register_setting( 'edac_settings', 'edacp_simplified_summary_heading', 'edac_sanitize_pro_summary_heading' ); } /** * Render the text for the general section */ function edac_general_cb() { echo '
'; esc_html_e( 'Configure the types of content that should be checked for accessibility issues.', 'accessibility-checker' ); if ( ! edac_is_pro() ) { printf( /* translators: %1$s: link to the "Accessibility Checker Pro" website. */ ' ' . esc_html__( 'More features and email support is available with %1$s.', 'accessibility-checker' ), '' . esc_html__( 'Accessibility Checker Pro', 'accessibility-checker' ) . '' ); } echo '
'; } /** * Render the copy used to explain the frontend highlighter section. * * @return void */ function edac_frontend_highlighter_section_cb() { echo ''; esc_html_e( 'Use the settings below to configure the frontend accessibility checker.', 'accessibility-checker' ); echo '
'; } /** * Render the text for the simplified summary section */ function edac_simplified_summary_cb() { printf( '%1$s %2$s
', esc_html__( 'Web Content Accessibility Guidelines (WCAG) at the AAA level require any content with a reading level above 9th grade to have an alternative that is easier to read. Simplified summary text is added on the readability tab in the Accessibility Checker meta box on each post\'s or page\'s edit screen.', 'accessibility-checker' ), '' . esc_html__( 'Learn more about simplified summaries and readability requirements.', 'accessibility-checker' ) . '' ); } /** * Render the text for the footer accessiblity statement section */ function edac_footer_accessibility_statement_cb() { echo ''; echo esc_html__( 'Are you thinking "Wow, this plugin is amazing" and is it helping you make your website more accessible? Share your efforts to make your website more accessible with your customers and let them know you\'re using Accessibility Checker to ensure all people can use your website. Add a small text-only link and statement in the footer of your website.', 'accessibility-checker' ); echo '
'; } /** * Render the text for the system settings section */ function edac_system_cb() { echo ''; esc_html_e( 'Configure system-level settings for the Accessibility Checker plugin.', 'accessibility-checker' ); echo '
'; } /** * Render the dropdown input field for scan speed option. * * Note: this setting is purposefully using edacp as prefix for back compat reasons. */ function edac_full_site_scan_speed_cb() { $full_site_scan_speed = (int) get_option( 'edacp_full_site_scan_speed', 1000 ); $speed_values = [ '250' => __( 'Fast', 'accessibility-checker' ), '1000' => __( 'Normal', 'accessibility-checker' ), '5000' => __( 'Slow', 'accessibility-checker' ), '30000' => __( 'Slowest', 'accessibility-checker' ), ]; ?>
edac_get_simplified_summary($post);
$post_type ) { if ( ! in_array( $post_type, $post_types, true ) ) { unset( $selected_post_types[ $key ] ); } } } // get unselected post types. $unselected_post_types = $post_types; if ( $selected_post_types ) { $unselected_post_types = array_diff( $post_types, $selected_post_types ); } // delete unselected post type issues. if ( $unselected_post_types ) { foreach ( $unselected_post_types as $unselected_post_type ) { Purge_Post_Data::delete_cpt_posts( $unselected_post_type ); } } // clear cached stats if selected posts types change. $prev = array_values( array_unique( Settings::get_scannable_post_types() ) ); $next = array_values( array_unique( (array) $selected_post_types ) ); sort( $prev ); sort( $next ); if ( $prev !== $next ) { $scan_stats = new Scans_Stats(); $scan_stats->clear_cache(); // EDACP\Scans is the old namespace, kept for back compat but should be removed after a few releases. if ( class_exists( '\EDACP\Scans' ) || class_exists( '\EqualizeDigital\AccessibilityCheckerPro\Admin\Scans' ) ) { delete_option( 'edacp_fullscan_completed_at' ); } } return $selected_post_types; } /** * Render the checkbox input field for add footer accessibility statement option */ function edac_add_footer_accessibility_statement_cb() { $option = get_option( 'edac_add_footer_accessibility_statement' ) ? get_option( 'edac_add_footer_accessibility_statement' ) : false; ?> get_accessibility_statement() ); } /** * Render the checkbox input field for delete data option */ function edac_delete_data_cb() { $option = get_option( 'edac_delete_data' ) ? get_option( 'edac_delete_data' ) : false; ?> type="text" name="edacp_simplified_summary_heading" id="edacp_simplified_summary_heading" value="" > roles; ?>
roles ); if ( $selected_roles ) { foreach ( $selected_roles as $key => $selected_role ) { if ( ! in_array( $selected_role, (array) $roles, true ) ) { unset( $selected_roles[ $key ] ); } } } return $selected_roles; } /** * Render the text for the permissions section */ function edac_permissions_section_cb() { ?>