context = new Context( $main_file ); } /** * Retrieves the plugin context object. * * @since 1.0.0 * * @return Context Plugin context. */ public function context() { return $this->context; } /** * Registers the plugin with WordPress. * * @since 1.0.0 */ public function register() { if ( $this->context->is_network_active() ) { add_action( 'network_admin_notices', function() { ?>

not yet compatible for use in a WordPress multisite network, but we’re actively working on that.', 'google-site-kit' ), array( 'strong' => array(), ) ); ?>

\WP_REST_Server::EDITABLE, 'callback' => function( \WP_REST_Request $request ) { $token = wp_generate_uuid4(); set_transient( 'googlesitekit_setup_token', $token, 5 * MINUTE_IN_SECONDS ); return new \WP_REST_Response( array( 'token' => $token ) ); }, 'permission_callback' => $can_setup, ), ) ); return $routes; } ); // Output temporary tag if set. add_action( 'wp_head', function () { $token = get_transient( 'googlesitekit_setup_token' ); if ( $token ) { printf( '', esc_attr( $token ) ); } } ); $display_site_kit_meta = function() { echo apply_filters( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped 'googlesitekit_generator', sprintf( '', esc_attr( GOOGLESITEKIT_VERSION ) ) ); }; add_action( 'wp_head', $display_site_kit_meta ); add_action( 'login_head', $display_site_kit_meta ); $options = new Core\Storage\Options( $this->context ); // Register activation flag logic outside of 'init' since it hooks into // plugin activation. $activation_flag = new Core\Util\Activation_Flag( $this->context, $options ); $activation_flag->register(); // Register uninstallation logic outside of 'init' since it hooks into // plugin uninstallation. $uninstallation = new Core\Util\Uninstallation( $this->context, $options ); $uninstallation->register(); // Initiate the plugin on 'init' for relying on current user being set. add_action( 'init', function() use ( $options, $activation_flag ) { $transients = new Core\Storage\Transients( $this->context ); $user_options = new Core\Storage\User_Options( $this->context, get_current_user_id() ); $assets = new Core\Assets\Assets( $this->context ); $authentication = new Core\Authentication\Authentication( $this->context, $options, $user_options, $transients ); $authentication->register(); $modules = new Core\Modules\Modules( $this->context, $options, $user_options, $authentication, $assets ); $modules->register(); $dismissals = new Core\Dismissals\Dismissals( $this->context, $user_options ); $dismissals->register(); $dismissed_items = $dismissals->get_dismissed_items(); $permissions = new Core\Permissions\Permissions( $this->context, $authentication, $modules, $user_options, $dismissed_items ); $permissions->register(); // Assets must be registered after Modules instance is registered. $assets->register(); $screens = new Core\Admin\Screens( $this->context, $assets, $modules ); $screens->register(); if ( Feature_Flags::enabled( 'serviceSetupV2' ) ) { ( new Core\Authentication\Setup_V2( $this->context, $user_options, $authentication ) )->register(); } else { ( new Core\Authentication\Setup_V1( $this->context, $user_options, $authentication ) )->register(); } ( new Core\Util\Reset( $this->context ) )->register(); ( new Core\Util\Reset_Persistent( $this->context ) )->register(); ( new Core\Util\Developer_Plugin_Installer( $this->context ) )->register(); ( new Core\Tracking\Tracking( $this->context, $user_options, $screens ) )->register(); ( new Core\REST_API\REST_Routes( $this->context, $authentication, $modules ) )->register(); ( new Core\Util\REST_Entity_Search_Controller( $this->context ) )->register(); ( new Core\Admin_Bar\Admin_Bar( $this->context, $assets, $modules ) )->register(); ( new Core\Admin\Available_Tools() )->register(); ( new Core\Admin\Notices() )->register(); ( new Core\Admin\Dashboard( $this->context, $assets, $modules ) )->register(); ( new Core\Notifications\Notifications( $this->context, $options, $authentication ) )->register(); ( new Core\Util\Debug_Data( $this->context, $options, $user_options, $authentication, $modules, $permissions ) )->register(); ( new Core\Util\Health_Checks( $authentication ) )->register(); ( new Core\Admin\Standalone( $this->context ) )->register(); ( new Core\Util\Activation_Notice( $this->context, $activation_flag, $assets ) )->register(); ( new Core\Feature_Tours\Feature_Tours( $this->context, $user_options ) )->register(); ( new Core\User_Surveys\REST_User_Surveys_Controller( $authentication ) )->register(); ( new Core\Util\Migration_1_3_0( $this->context, $options, $user_options ) )->register(); ( new Core\Util\Migration_1_8_1( $this->context, $options, $user_options, $authentication ) )->register(); // If a login is happening (runs after 'init'), update current user in dependency chain. add_action( 'wp_login', function( $username, $user ) use ( $user_options ) { $user_options->switch_user( $user->ID ); }, -999, 2 ); /** * Fires when Site Kit has fully initialized. * * @since 1.0.0 */ do_action( 'googlesitekit_init' ); }, -999 ); // Register _gl parameter to be removed from the URL. add_filter( 'removable_query_args', function ( $args ) { $args[] = '_gl'; return $args; } ); // WP CLI Commands. if ( defined( 'WP_CLI' ) && WP_CLI ) { ( new Core\CLI\CLI_Commands( $this->context ) )->register(); } // Add Plugin Row Meta. ( new Core\Admin\Plugin_Row_Meta() )->register(); // Add Plugin Action Links. ( new Core\Admin\Plugin_Action_Links( $this->context ) )->register(); } /** * Retrieves the main instance of the plugin. * * @since 1.0.0 * * @return Plugin Plugin main instance. */ public static function instance() { return static::$instance; } /** * Loads the plugin main instance and initializes it. * * @since 1.0.0 * * @param string $main_file Absolute path to the plugin main file. * @return bool True if the plugin main instance could be loaded, false otherwise. */ public static function load( $main_file ) { if ( null !== static::$instance ) { return false; } if ( file_exists( GOOGLESITEKIT_PLUGIN_DIR_PATH . 'dist/config.php' ) ) { $config = include GOOGLESITEKIT_PLUGIN_DIR_PATH . 'dist/config.php'; Build_Mode::set_mode( $config['buildMode'] ); Feature_Flags::set_features( (array) $config['features'] ); } static::$instance = new static( $main_file ); static::$instance->register(); return true; } }