is_wpcom_simple() ) { $data['site']['plan']['features'] = Current_Plan::get_simple_site_specific_features(); } $data['site']['wpcom']['blog_id'] = Manager::get_site_id( true ); self::set_wpcom_user_data( $data['user']['current_user'] ); return $data; } /** * Set wpcom user data. * * @param array $user_data The user data. */ private static function set_wpcom_user_data( &$user_data ) { if ( ( new Host() )->is_wpcom_simple() ) { $wpcom_user_data = array( 'ID' => get_current_user_id(), 'login' => wp_get_current_user()->user_login, ); } else { $wpcom_user_data = ( new Manager() )->get_connected_user_data(); } $user_data['wpcom'] = array_merge( $user_data['wpcom'] ?? array(), $wpcom_user_data ? $wpcom_user_data : array() ); } /** * Get the script data for admin UI. * * @return array */ public static function get_admin_script_data() { // Only set script data on the social settings page, // the Jetpack settings page, or the block editor. $should_set_script_data = Utils::is_jetpack_settings_page() || Utils::is_social_settings_page() || Utils::should_block_editor_have_social(); if ( ! $should_set_script_data ) { return array(); } $basic_data = array( 'api_paths' => self::get_api_paths(), 'assets_url' => plugins_url( '/build/', __DIR__ ), 'is_publicize_enabled' => Utils::is_publicize_active(), 'message_templates' => array(), 'supported_services' => array(), 'upgrade' => self::get_upgrade_data(), 'urls' => array(), 'settings' => self::get_social_settings(), 'plugin_info' => self::get_plugin_info(), 'nonces' => self::get_nonces(), ); if ( ! Utils::is_publicize_active() ) { return $basic_data; } // Simple sites don't have a user connection. $is_publicize_configured = ( new Host() )->is_wpcom_simple() || Utils::is_connected(); if ( ! $is_publicize_configured ) { return $basic_data; } return array_merge( $basic_data, array( 'supported_services' => self::get_supported_services(), 'urls' => self::get_urls(), 'store_initial_state' => self::get_store_initial_state(), 'message_templates' => array( 'placeholders' => Message_Templates_Placeholders::get_all(), ), ) ); } /** * Get the plan a site needs to unlock Social's paid features. * * Null off Simple, which keeps the uncached `Plans::get_plan_short_name()` lookup * away from a path the block editor runs on every post edit. * * @return array|null The plan slug and short name, or null when there's nothing to upsell. */ public static function get_upgrade_data() { if ( ! ( new Host() )->is_wpcom_simple() ) { return null; } if ( Current_Plan::supports( 'social-enhanced-publishing' ) ) { return null; } return array( 'plan_slug' => self::UPGRADE_PLAN_SLUG, 'plan_name' => Plans::get_plan_short_name( self::UPGRADE_PLAN_SLUG ), ); } /** * Get the social settings. * * @return array */ public static function get_social_settings() { $settings = ( new Settings() ); return array( 'socialImageGenerator' => $settings->get_image_generator_settings(), 'utmSettings' => $settings->get_utm_settings(), 'socialNotes' => array( 'enabled' => $settings->is_social_notes_enabled(), 'config' => $settings->get_social_notes_config(), ), 'showPricingPage' => $settings->should_show_pricing_page(), 'messageTemplate' => $settings->get_message_template(), ); } /** * Get the plugin info. * * @return array */ public static function get_plugin_info() { $social_version = null; $jetpack_version = null; if ( defined( 'JETPACK_SOCIAL_PLUGIN_ROOT_FILE' ) ) { $plugin_data = get_plugin_data( (string) constant( 'JETPACK_SOCIAL_PLUGIN_ROOT_FILE' ), false, false ); $social_version = $plugin_data['Version']; } if ( defined( 'JETPACK__VERSION' ) ) { $jetpack_version = constant( 'JETPACK__VERSION' ); } return array( 'social' => array( 'version' => $social_version, ), 'jetpack' => array( 'version' => $jetpack_version, ), ); } /** * Get the social store initial state. * * @return array */ public static function get_store_initial_state() { $post = get_post(); $share_status = array(); // get_post_share_status is not available on WPCOM yet. if ( Utils::should_block_editor_have_social() && $post ) { $share_status[ $post->ID ] = Share_Status::get_post_share_status( $post->ID ); } return array( 'connectionData' => array( // Same gate the block editor assets are enqueued behind, so users who // never get the Social UI are not handed connection details either. 'connections' => Utils::current_user_can_access_publicize_data() ? Connections::get_all_for_user() : array(), ), 'shareStatus' => $share_status, ); } /** * Whether the site has the feature flag enabled. * * @deprecated 0.69.1 Use Current_Plan::supports() directly instead. * * @todo Remove this method After March 2026. * * @param string $feature The feature name to check for, without the "social-" prefix. * @return bool */ public static function has_feature_flag( $feature ): bool { return Current_Plan::supports( 'social-' . $feature ); } /** * Get the list of supported Publicize services. * * @return array List of external services and their settings. */ public static function get_supported_services() { return Publicize_Services::get_all(); } /** * Get the API paths. * * @return array */ public static function get_api_paths() { return array( // The complete path will be like `/jetpack/v4/social/settings`. 'socialToggleBase' => Utils::should_use_jetpack_module_endpoint() ? 'settings' : 'social/settings', 'resharePost' => '/wpcom/v2/publicize/share-post/{postId}', ); } /** * Get the URLs. * * @return array */ public static function get_urls() { $urls = array( 'connectionsManagementPage' => self::publicize()->publicize_connections_url(), ); // Escape the URLs. array_walk( $urls, 'esc_url_raw' ); return $urls; } /** * Get nonces required by the Social admin UI. * * @return array */ private static function get_nonces() { return array( 'refresh_plan' => wp_create_nonce( Social_Admin_Page::REFRESH_PLAN_NONCE_ACTION ), ); } }