| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
- if ( ! defined( 'ABSPATH' ) ) {
- exit;
- }
- /**
- * Installs and activates the WooCommerce Services plugin.
- */
- class WC_Services_Installer {
- /**
- * The instance of the Jetpack class.
- *
- * @var Jetpack
- */
- private $jetpack;
- /**
- * The singleton instance of this class.
- *
- * @var WC_Services_Installer
- */
- private static $instance = null;
- /**
- * Returns the singleton instance of this class.
- *
- * @return object The WC_Services_Installer object.
- */
- public static function init() {
- if ( is_null( self::$instance ) ) {
- self::$instance = new WC_Services_Installer();
- }
- return self::$instance;
- }
- /**
- * Constructor
- */
- public function __construct() {
- add_action( 'jetpack_loaded', array( $this, 'on_jetpack_loaded' ) );
- add_action( 'admin_init', array( $this, 'add_error_notice' ) );
- add_action( 'admin_init', array( $this, 'try_install' ) );
- }
- /**
- * Runs on Jetpack being ready to load its packages.
- *
- * @param Jetpack $jetpack object.
- */
- public function on_jetpack_loaded( $jetpack ) {
- $this->jetpack = $jetpack;
- }
- /**
- * Verify the intent to install WooCommerce Services, and kick off installation.
- */
- public function try_install() {
- if ( ! isset( $_GET['wc-services-action'] ) ) {
- return;
- }
- check_admin_referer( 'wc-services-install' );
- $result = false;
- switch ( $_GET['wc-services-action'] ) {
- case 'install':
- if ( current_user_can( 'install_plugins' ) ) {
- $this->jetpack->stat( 'jitm', 'wooservices-install-' . JETPACK__VERSION );
- $result = $this->install();
- if ( $result ) {
- $result = $this->activate();
- }
- }
- break;
- case 'activate':
- if ( current_user_can( 'activate_plugins' ) ) {
- $this->jetpack->stat( 'jitm', 'wooservices-activate-' . JETPACK__VERSION );
- $result = $this->activate();
- }
- break;
- }
- if ( isset( $_GET['redirect'] ) ) {
- $redirect = home_url( esc_url_raw( wp_unslash( $_GET['redirect'] ) ) );
- } else {
- $redirect = admin_url();
- }
- if ( $result ) {
- $this->jetpack->stat( 'jitm', 'wooservices-activated-' . JETPACK__VERSION );
- } else {
- $redirect = add_query_arg( 'wc-services-install-error', true, $redirect );
- }
- wp_safe_redirect( $redirect );
- exit;
- }
- /**
- * Set up installation error admin notice.
- */
- public function add_error_notice() {
- if ( ! empty( $_GET['wc-services-install-error'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
- add_action( 'admin_notices', array( $this, 'error_notice' ) );
- }
- }
- /**
- * Notify the user that the installation of WooCommerce Services failed.
- */
- public function error_notice() {
- ?>
- <div class="notice notice-error is-dismissible">
- <p><?php esc_html_e( 'There was an error installing WooCommerce Services.', 'jetpack' ); ?></p>
- </div>
- <?php
- }
- /**
- * Download and install the WooCommerce Services plugin.
- *
- * @return bool result of installation
- */
- private function install() {
- jetpack_require_lib( 'plugins' );
- $result = Jetpack_Plugins::install_plugin( 'woocommerce-services' );
- if ( is_wp_error( $result ) ) {
- return false;
- } else {
- return true;
- }
- }
- /**
- * Activate the WooCommerce Services plugin.
- *
- * @return bool result of activation
- */
- private function activate() {
- $result = activate_plugin( 'woocommerce-services/woocommerce-services.php' );
- // Activate_plugin() returns null on success.
- return is_null( $result );
- }
- }
- WC_Services_Installer::init();
|