Plugin Directory


Ignore:
Timestamp:
08/10/2026 03:32:57 AM (2 months ago)
Author:
roxyapi
Message:

Update to version 1.10.0 from GitHub

File:
1 edited

Legend:

Unmodified
Added
Removed
  • roxyapi/trunk/src/Admin/SettingsPage.php

    r3639803 r3639910  
    157157                echo '<div class="wrap roxyapi-settings">';
    158158
     159                // "Settings saved." is added by wp-admin/options-head.php, which only the
     160                // core options-*.php screens load, so a custom menu page saves silently
     161                // unless it registers the notice itself. Core's own rule is mirrored here,
     162                // including staying quiet when the same save also produced an error.
     163                // The string carries OUR text domain even though core ships the same one:
     164                // borrowing `default` would leave it untranslated the day core reworded it.
     165                // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only flag, set by options.php on its own redirect after it has verified the nonce.
     166                if ( isset( $_GET['settings-updated'] ) && count( get_settings_errors( self::OPTION_NAME ) ) === 0 ) {
     167                        add_settings_error( self::OPTION_NAME, 'roxyapi_settings_updated', __( 'Settings saved.', 'roxyapi' ), 'success' );
     168                }
     169
    159170                settings_errors( self::OPTION_NAME );
    160171
    161                 if ( ! $is_configured ) {
    162                         $html = Templates::render(
    163                                 'admin-onboarding',
    164                                 array(
    165                                         'signup_url'     => Onboarding::signup_url(),
    166                                         'playground_url' => Onboarding::playground_url(),
    167                                         'shortcodes_url' => admin_url( 'admin.php?page=' . ShortcodesPage::PAGE_SLUG ),
    168                                         'samples'        => Onboarding::quickstart_samples(),
    169                                         'key_input'      => SettingsFields::api_key_input_html(),
    170                                         'key_help'       => SettingsFields::api_key_help_html(),
    171                                         'key_disabled'   => $key_disabled,
    172                                         'is_configured'  => false,
    173                                         'option_group'   => self::OPTION_GROUP,
    174                                 )
    175                         );
    176                 } else {
    177                         // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only tab selector on a manage_options page.
    178                         $active_tab = isset( $_GET['tab'] ) ? sanitize_key( wp_unslash( $_GET['tab'] ) ) : 'connect';
    179                         if ( ! in_array( $active_tab, array( 'connect', 'branding', 'display', 'privacy', 'advanced' ), true ) ) {
    180                                 $active_tab = 'connect';
    181                         }
    182 
    183                         $html = Templates::render(
    184                                 'admin-connected',
    185                                 array(
    186                                         'active_tab'             => $active_tab,
    187                                         'attribution_input'      => SettingsFields::attribution_checkbox_html(),
    188                                         'consent_label_input'    => SettingsFields::consent_label_textarea_html(),
    189                                         'palette_preset_input'   => SettingsFields::palette_preset_input_html(),
    190                                         'palette_colors_input'   => SettingsFields::palette_colors_html(),
    191                                         'palette_reset_input'    => SettingsFields::palette_reset_html(),
    192                                         'palette_is_custom'      => (string) ( SettingsSchema::get_option()['palette_preset'] ?? '' ) === '',
    193                                         'theme_mode_input'       => SettingsFields::theme_mode_input_html(),
    194                                         'display_language_input' => SettingsFields::display_language_input_html(),
    195                                         'hide_readings_input'    => SettingsFields::hide_readings_html(),
    196                                         'disclaimer_show_input'  => SettingsFields::disclaimer_show_html(),
    197                                         'disclaimer_text_input'  => SettingsFields::disclaimer_text_html(),
    198                                         'form_title_input'       => SettingsFields::form_title_input_html(),
    199                                         'form_submit_input'      => SettingsFields::form_submit_input_html(),
    200                                         'cache_preset_input'     => SettingsFields::cache_preset_input_html(),
    201                                         'privacy_policy_url'     => admin_url( 'options-privacy.php' ),
    202                                         'shortcodes_url'         => admin_url( 'admin.php?page=' . ShortcodesPage::PAGE_SLUG ),
    203                                         'samples'                => Onboarding::quickstart_samples(),
    204                                         'key_input'              => SettingsFields::api_key_input_html(),
    205                                         'key_help'               => SettingsFields::api_key_help_html(),
    206                                         'key_disabled'           => $key_disabled,
    207                                         'option_group'           => self::OPTION_GROUP,
    208                                         'docs_url'               => Onboarding::docs_url(),
    209                                         'support_url'            => Onboarding::support_url(),
    210                                         'dashboard_url'          => Onboarding::dashboard_url(),
    211                                 )
    212                         );
    213                 }
     172                // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only tab selector on a manage_options page.
     173                $active_tab = isset( $_GET['tab'] ) ? sanitize_key( wp_unslash( $_GET['tab'] ) ) : 'connect';
     174                if ( ! in_array( $active_tab, array( 'connect', 'branding', 'display', 'privacy', 'advanced' ), true ) ) {
     175                        $active_tab = 'connect';
     176                }
     177
     178                // Every tab renders whether or not a key is stored. Readings render from
     179                // the moment the plugin is activated, so the settings that shape them
     180                // (language, palette, theme, disclaimer, hide-written-readings) have to be
     181                // reachable from that same moment. Only the Connect tab body changes:
     182                // setup steps before a key, key management after one.
     183                $onboarding = $is_configured ? '' : Templates::render(
     184                        'admin-onboarding',
     185                        array(
     186                                'signup_url'     => Onboarding::signup_url(),
     187                                'playground_url' => Onboarding::playground_url(),
     188                                'shortcodes_url' => admin_url( 'admin.php?page=' . ShortcodesPage::PAGE_SLUG ),
     189                                'samples'        => Onboarding::quickstart_samples(),
     190                                'key_input'      => SettingsFields::api_key_input_html(),
     191                                'key_help'       => SettingsFields::api_key_help_html(),
     192                                'key_disabled'   => $key_disabled,
     193                                'is_configured'  => false,
     194                                'option_group'   => self::OPTION_GROUP,
     195                        )
     196                );
     197
     198                $html = Templates::render(
     199                        'admin-connected',
     200                        array(
     201                                'is_configured'          => $is_configured,
     202                                'onboarding'             => $onboarding,
     203                                'active_tab'             => $active_tab,
     204                                'attribution_input'      => SettingsFields::attribution_checkbox_html(),
     205                                'consent_label_input'    => SettingsFields::consent_label_textarea_html(),
     206                                'palette_preset_input'   => SettingsFields::palette_preset_input_html(),
     207                                'palette_colors_input'   => SettingsFields::palette_colors_html(),
     208                                'palette_reset_input'    => SettingsFields::palette_reset_html(),
     209                                'palette_is_custom'      => (string) ( SettingsSchema::get_option()['palette_preset'] ?? '' ) === '',
     210                                'theme_mode_input'       => SettingsFields::theme_mode_input_html(),
     211                                'display_language_input' => SettingsFields::display_language_input_html(),
     212                                'hide_readings_input'    => SettingsFields::hide_readings_html(),
     213                                'disclaimer_show_input'  => SettingsFields::disclaimer_show_html(),
     214                                'disclaimer_text_input'  => SettingsFields::disclaimer_text_html(),
     215                                'form_title_input'       => SettingsFields::form_title_input_html(),
     216                                'form_submit_input'      => SettingsFields::form_submit_input_html(),
     217                                'cache_preset_input'     => SettingsFields::cache_preset_input_html(),
     218                                'privacy_policy_url'     => admin_url( 'options-privacy.php' ),
     219                                'shortcodes_url'         => admin_url( 'admin.php?page=' . ShortcodesPage::PAGE_SLUG ),
     220                                'samples'                => Onboarding::quickstart_samples(),
     221                                'key_input'              => SettingsFields::api_key_input_html(),
     222                                'key_help'               => SettingsFields::api_key_help_html(),
     223                                'key_disabled'           => $key_disabled,
     224                                'option_group'           => self::OPTION_GROUP,
     225                                'docs_url'               => Onboarding::docs_url(),
     226                                'support_url'            => Onboarding::support_url(),
     227                                'dashboard_url'          => Onboarding::dashboard_url(),
     228                        )
     229                );
    214230
    215231                // Templates assemble $html from pre-escaped fragments: every dynamic
Note: See TracChangeset for help on using the changeset viewer.