*/ private const BUTTON_LABELS_DEFAULT = array( 'amazon' => 'Amazon', 'rakuten' => '楽天市場', 'yahoo_shopping' => 'Yahoo!ショッピング', 'mercari' => 'メルカリ', ); /** * Map a {@see PluginSettings} snapshot to the §13.1 * public-settings response array. * * The output shape is documented verbatim on the file-level * docblock. Every field is computed from `$settings` except * the hardcoded §6.4 template whitelist (sourced from * {@see TemplateKey::validKeys()}), the §4.3 button-labels * default map, and the §5.1 `per_page_max` cap. * * @param PluginSettings $settings Source settings snapshot. * * @return array */ public function map( PluginSettings $settings ): array { $enabledProviders = array(); foreach ( $settings->providerCredentials() as $credentials ) { if ( $credentials->enabled() ) { $enabledProviders[] = $credentials->providerKey(); } } $rendering = $settings->rendering(); $links = $settings->links(); $cloud = $settings->cloud(); return array( 'enabled_providers' => $enabledProviders, 'default_template' => $rendering->defaultTemplate(), 'available_templates' => TemplateKey::validKeys(), 'button_labels_default' => self::BUTTON_LABELS_DEFAULT, 'feature_flags' => array(), 'per_page_max' => self::PER_PAGE_MAX, 'rendering' => array( 'show_provider_badge_by_default' => $rendering->showProviderBadgeByDefault(), 'show_disclaimer_by_default' => $rendering->showDisclaimerByDefault(), 'lazy_load_images' => $rendering->lazyLoadImages(), 'default_design_preset' => $rendering->defaultDesignPreset(), 'default_button_layout' => $rendering->defaultButtonLayout(), 'default_button_shape' => $rendering->defaultButtonShape(), 'default_color_scheme' => $rendering->defaultColorScheme(), ), 'links' => array( 'open_in_new_tab_default' => $links->openInNewTabDefault(), 'tracking_enabled_default' => $links->trackingEnabledDefault(), 'add_nofollow' => $links->addNofollow(), 'add_sponsored' => $links->addSponsored(), 'add_noopener' => $links->addNoopener(), 'add_noreferrer' => $links->addNoreferrer(), ), 'ai' => array( 'configured' => $cloud->isConfigured(), 'source' => 'cloud', ), 'openai' => array( 'configured' => false, ), 'cloud' => array( 'enabled' => $cloud->enabled(), 'configured' => $cloud->isConfigured(), 'plan' => $cloud->plan(), ), ); } }