Map of tab slug to display label. */ public static function get_visible_tabs(): array { $tabs = [ self::TAB_AUTHENTICATION => __( 'Authentication', 'speechkit' ), self::TAB_INTEGRATION => __( 'Integration', 'speechkit' ), self::TAB_PREFERENCES => __( 'Preferences', 'speechkit' ), ]; if ( ! Utils::has_valid_api_connection() ) { return [ self::TAB_AUTHENTICATION => $tabs[ self::TAB_AUTHENTICATION ] ]; } return $tabs; } /** * Resolve the active tab slug from `$_GET`, falling back to the first. */ public static function get_active_tab(): string { $tabs = self::get_visible_tabs(); if ( empty( $tabs ) ) { return ''; } $default = (string) array_key_first( $tabs ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended $requested = isset( $_GET['tab'] ) ? sanitize_text_field( wp_unslash( $_GET['tab'] ) ) : ''; return ( '' !== $requested && array_key_exists( $requested, $tabs ) ) ? $requested : $default; } /** * Resolve the page slug + settings group for the active tab. * * @return array{page:string,group:string} */ public static function get_active_page_and_group(): array { switch ( self::get_active_tab() ) { case self::TAB_INTEGRATION: return [ 'page' => self::PAGE_INTEGRATION, 'group' => self::SETTINGS_GROUP_INTEGRATION, ]; case self::TAB_PREFERENCES: return [ 'page' => self::PAGE_PREFERENCES, 'group' => self::SETTINGS_GROUP_PREFERENCES, ]; case self::TAB_AUTHENTICATION: default: return [ 'page' => self::PAGE_AUTHENTICATION, 'group' => self::SETTINGS_GROUP_AUTHENTICATION, ]; } } }