'array', 'sanitize_callback' => 'a11ybridge_sanitize_option_array')); register_setting('a11ybridge_ai_settings_group', 'a11ybridge_simplification_settings', [ 'sanitize_callback' => 'a11ybridge_sanitize_simplification_settings', ]); } if (!function_exists('a11ybridge_sanitize_simplification_settings')) { /** * Canonicalize stored admin simplification defaults to Catalog values. */ function a11ybridge_sanitize_simplification_settings($input) { $in = is_array($input) ? $input : []; $out = []; $out['enable_text_simplification'] = !empty($in['enable_text_simplification']) ? 1 : 0; // NOTE: show_toolbar_button must default to ON. // If the field is missing in the POST payload, keep previous stored value (or default to 1). $existing = get_option('a11ybridge_simplification_settings', []); if (!is_array($existing)) { $existing = []; } $existing_show = array_key_exists('show_toolbar_button', $existing) ? (int)$existing['show_toolbar_button'] : 1; $out['show_toolbar_button'] = array_key_exists('show_toolbar_button', $in) ? (!empty($in['show_toolbar_button']) ? 1 : 0) : $existing_show; $out['consent_required'] = !empty($in['consent_required']) ? 1 : 0; $out['consent_ttl_hours'] = isset($in['consent_ttl_hours']) ? max(0, intval($in['consent_ttl_hours'])) : 24; $out['default_level'] = a11ybridge_catalog_canonical( 'textSimplification.level', (string)($in['default_level'] ?? ''), 'basic' ); $tl_raw = (string)($in['target_language'] ?? ''); // Legacy UI values (pre-catalog). Keep backward compatibility. $legacy_map = [ 'german' => 'de-DE', 'english' => 'en-US', 'french' => 'fr-FR', 'spanish' => 'es-ES', ]; $tl_key = strtolower(trim($tl_raw)); if (isset($legacy_map[$tl_key])) { $tl_raw = $legacy_map[$tl_key]; } $out['target_language'] = a11ybridge_catalog_canonical( 'textSimplification.targetLanguage', $tl_raw, 'original' ); return $out; } } // Render directly (avoid raw superglobals in file scope; keeps PHPCS happy) if (is_admin()) { $a11ybridge_page_raw = filter_input(INPUT_GET, 'page', FILTER_UNSAFE_RAW); $a11ybridge_page = is_string($a11ybridge_page_raw) ? sanitize_key(wp_unslash($a11ybridge_page_raw)) : ''; if ($a11ybridge_page === 'a11ybridge-settings') { a11ybridge_show_ai_settings(); } } function a11ybridge_show_ai_settings() { $ai_settings = get_option('a11ybridge_ai_settings', [ 'enable_ai_image_description' => false, 'description_level' => 'detailed', 'target_language' => 'german', 'auto_describe_on_upload' => true, 'daily_cron_check' => true ]); // While AI Alt-Text is not implemented yet, hard-disable its controls. // This avoids an UI that appears interactive but doesn't do anything. if (function_exists('a11ybridge_feature_state')) { $a11ybridge_alt_state = a11ybridge_feature_state('ai_alt_text'); if ($a11ybridge_alt_state === 'coming_soon' || $a11ybridge_alt_state === 'experimental') { $ai_settings['enable_ai_image_description'] = false; $ai_settings['auto_describe_on_upload'] = false; $ai_settings['daily_cron_check'] = false; } } $simplification_settings = get_option('a11ybridge_simplification_settings', [ 'enable_text_simplification' => false, 'default_level' => 'basic', 'target_language' => 'original', 'show_toolbar_button' => true, 'consent_required' => true, 'consent_ttl_hours' => 24 ]); // Canonicalize legacy stored values so UI + resolver + requests stay in sync. // (e.g. german/english, a2_level/b1_level, bullet_form/step_by_step, etc.) $simplification_settings['default_level'] = a11ybridge_catalog_alias( 'simplificationLevels', (string)($simplification_settings['default_level'] ?? 'basic') ); $simplification_settings['target_language'] = a11ybridge_catalog_alias( 'languages', (string)($simplification_settings['target_language'] ?? 'original') ); ?>

📝

/> i '; ?>
/> i '; ?>
i '; ?>
i '; ?>

🤖

/> i '; ?>
/> i '; ?>
i '; ?>
i '; ?>
/> i '; ?>

💾

'a11y-button']); ?>

🚀