() !== self::$current_blog_id ) { self::$plugins = (array) get_option( self::ACTIVE_PLUGINS_OPTION_NAME, array() ); self::$current_blog_id = get_current_blog_id(); } return true; } /** * Called once to configure this class after plugins_loaded. * * @return void */ public static function configure() { if ( self::$configured ) { return; } self::$configured = true; add_action( 'update_option_active_plugins', array( __CLASS__, 'set_flag_to_refresh_active_connected_plugins' ) ); self::maybe_update_active_connected_plugins(); } /** * Set a flag to indicate that the active connected plugins list needs to be updated. * This will happen when the `active_plugins` option is updated. * * @see configure */ public static function set_flag_to_refresh_active_connected_plugins() { set_transient( self::ACTIVE_PLUGINS_REFRESH_FLAG, time() ); } /** * Determine if we need to update the active connected plugins list. */ public static function maybe_update_active_connected_plugins() { $maybe_error = self::ensure_configured(); if ( $maybe_error instanceof WP_Error ) { return; } // Only attempt to update the option if the corresponding flag is set. if ( ! get_transient( self::ACTIVE_PLUGINS_REFRESH_FLAG ) ) { return; } // Only attempt to update the option on POST requests. // This will prevent the option from being updated multiple times due to concurrent requests. if ( ! ( isset( $_SERVER['REQUEST_METHOD'] ) && 'POST' === $_SERVER['REQUEST_METHOD'] ) ) { return; } delete_transient( self::ACTIVE_PLUGINS_REFRESH_FLAG ); if ( is_multisite() ) { self::$current_blog_id = get_current_blog_id(); } // If a plugin was activated or deactivated. // self::$plugins is populated in Config::ensure_options_connection(). $number_of_plugins_differ = count( self::$plugins ) !== count( (array) get_option( self::ACTIVE_PLUGINS_OPTION_NAME, array() ) ); if ( $number_of_plugins_differ ) { self::update_active_plugins_option(); } } /** * Updates the active plugins option with current list of active plugins. * * @return void */ public static function update_active_plugins_option() { // Note: Since this option is synced to wpcom, if you change its structure, you have to update the sanitizer at wpcom side. update_option( self::ACTIVE_PLUGINS_OPTION_NAME, self::$plugins ); if ( ! class_exists( 'Automattic\Jetpack\Sync\Settings' ) || ! \Automattic\Jetpack\Sync\Settings::is_sync_enabled() ) { self::update_active_plugins_wpcom_no_sync_fallback(); } } /** * Add the plugin to the set of disconnected ones. * * @deprecated since 1.39.0. * * @param string $slug Plugin slug. * * @return bool */ public static function disable_plugin( $slug ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable return true; } /** * Remove the plugin from the set of disconnected ones. * * @deprecated since 1.39.0. * * @param string $slug Plugin slug. * * @return bool */ public static function enable_plugin( $slug ) { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable return true; } /** * Get all plugins that were disconnected by user. * * @deprecated since 1.39.0. * * @return array */ public static function get_all_disabled_plugins() { // phpcs:ignore VariableAnalysis.CodeAnalysis.VariableAnalysis.UnusedVariable return array(); } /** * Update active plugins option with current list of active plugins on WPCOM. * This is a fallback to ensure this option is always up to date on WPCOM in case * Sync is not present or disabled. * * @since 1.34.0 */ private static function update_active_plugins_wpcom_no_sync_fallback() { $connection = new Manager(); if ( ! $connection->is_connected() ) { return; } $site_id = \Jetpack_Options::get_option( 'id' ); $body = wp_json_encode( array( 'active_connected_plugins' => self::$plugins, ) ); Client::wpcom_json_api_request_as_blog( sprintf( '/sites/%d/jetpack-active-connected-plugins', $site_id ), '2', array( 'headers' => array( 'content-type' => 'application/json' ), 'method' => 'POST', ), $body, 'wpcom' ); } }
Fatal error: Uncaught Error: Class "Automattic\Jetpack\Connection\Plugin_Storage" not found in /htdocs/wp-content/plugins/jetpack/jetpack_vendor/automattic/jetpack-connection/src/class-plugin.php:64 Stack trace: #0 /htdocs/wp-content/plugins/jetpack/jetpack_vendor/automattic/jetpack-config/src/class-config.php(390): Automattic\Jetpack\Connection\Plugin->add('Jetpack', Array) #1 /htdocs/wp-content/plugins/jetpack/jetpack_vendor/automattic/jetpack-config/src/class-config.php(95): Automattic\Jetpack\Config->ensure_options_connection() #2 /htdocs/wp-content/plugins/jetpack/class.jetpack.php(888): Automattic\Jetpack\Config->ensure('connection', Array) #3 /htdocs/wp-includes/class-wp-hook.php(324): Jetpack->configure('') #4 /htdocs/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters('', Array) #5 /htdocs/wp-includes/plugin.php(517): WP_Hook->do_action(Array) #6 /htdocs/wp-settings.php(559): do_action('plugins_loaded') #7 /htdocs/wp-config.php(85): require_once('/htdocs/wp-sett...') #8 /htdocs/wp-load.php(50): require_once('/htdocs/wp-conf...') #9 /htdocs/wp-blog-header.php(13): require_once('/htdocs/wp-load...') #10 /htdocs/index.php(17): require('/htdocs/wp-blog...') #11 {main} thrown in /htdocs/wp-content/plugins/jetpack/jetpack_vendor/automattic/jetpack-connection/src/class-plugin.php on line 64