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 ];
}
}