addon_manager = $addon_manager; $this->addon_activate_action = $addon_activate_action; $this->addon_install_action = $addon_install_action; } /** * Registers all hooks to WordPress. * * @return void */ public function register_hooks() { \add_action( 'wpseo_install_and_activate_addons', [ $this, 'install_and_activate_addons' ] ); } /** * Installs and activates missing addons. * * @return void */ public function install_and_activate_addons() { if ( ! isset( $_GET['action'] ) || ! \is_string( $_GET['action'] ) ) { return; } // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Reason: We are only strictly comparing action below. $action = \wp_unslash( $_GET['action'] ); if ( $action !== 'install' ) { return; } \check_admin_referer( 'wpseo_addon_installation', 'nonce' ); echo '
'; \printf( '

%s

', \esc_html__( 'Installing and activating addons', 'wordpress-seo' ) ); $licensed_addons = $this->addon_manager->get_myyoast_site_information()->subscriptions; foreach ( $licensed_addons as $addon ) { \printf( '

%s

', \esc_html( $addon->product->name ) ); list( $installed, $output ) = $this->install_addon( $addon->product->slug, $addon->product->download ); if ( $installed ) { $activation_output = $this->activate_addon( $addon->product->slug ); $output = \array_merge( $output, $activation_output ); } echo '

'; echo \implode( '
', \array_map( 'esc_html', $output ) ); echo '

'; } \printf( /* translators: %1$s expands to an anchor tag to the admin premium page, %2$s expands to Yoast SEO Premium, %3$s expands to a closing anchor tag */ \esc_html__( '%1$s Continue to %2$s%3$s', 'wordpress-seo' ), '', 'Yoast SEO Premium', '' ); echo '
'; exit; } /** * Activates an addon. * * @param string $addon_slug The addon to activate. * * @return array The output of the activation. */ public function activate_addon( $addon_slug ) { $output = []; try { $this->addon_activate_action->activate_addon( $addon_slug ); /* Translators: %s expands to the name of the addon. */ $output[] = \__( 'Addon activated.', 'wordpress-seo' ); } catch ( User_Cannot_Activate_Plugins_Exception $exception ) { $output[] = \__( 'You are not allowed to activate plugins.', 'wordpress-seo' ); } catch ( Addon_Activation_Error_Exception $exception ) { $output[] = \sprintf( /* Translators:%s expands to the error message. */ \__( 'Addon activation failed because of an error: %s.', 'wordpress-seo' ), $exception->getMessage() ); } return $output; } /** * Installs an addon. * * @param string $addon_slug The slug of the addon to install. * @param string $addon_download The download URL of the addon. * * @return array The installation success state and the output of the installation. */ public function install_addon( $addon_slug, $addon_download ) { $installed = false; $output = []; try { $installed = $this->addon_install_action->install_addon( $addon_slug, $addon_download ); } catch ( Addon_Already_Installed_Exception $exception ) { /* Translators: %s expands to the name of the addon. */ $output[] = \__( 'Addon installed.', 'wordpress-seo' ); $installed = true; } catch ( User_Cannot_Install_Plugins_Exception $exception ) { $output[] = \__( 'You are not allowed to install plugins.', 'wordpress-seo' ); } catch ( Addon_Installation_Error_Exception $exception ) { $output[] = \sprintf( /* Translators: %s expands to the error message. */ \__( 'Addon installation failed because of an error: %s.', 'wordpress-seo' ), $exception->getMessage() ); } return [ $installed, $output ]; } }