diff options
Diffstat (limited to 'plugins/jetpack/3rd-party/woocommerce-services.php')
-rw-r--r-- | plugins/jetpack/3rd-party/woocommerce-services.php | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/plugins/jetpack/3rd-party/woocommerce-services.php b/plugins/jetpack/3rd-party/woocommerce-services.php new file mode 100644 index 00000000..b868697f --- /dev/null +++ b/plugins/jetpack/3rd-party/woocommerce-services.php @@ -0,0 +1,133 @@ +<?php + +if ( ! defined( 'ABSPATH' ) ) { + exit; +} + +class WC_Services_Installer { + + /** + * @var Jetpack + **/ + private $jetpack; + + /** + * @var WC_Services_Installer + **/ + private static $instance = null; + + static function init() { + if ( is_null( self::$instance ) ) { + self::$instance = new WC_Services_Installer(); + } + return self::$instance; + } + + public function __construct() { + $this->jetpack = Jetpack::init(); + + add_action( 'admin_init', array( $this, 'add_error_notice' ) ); + add_action( 'admin_init', array( $this, 'try_install' ) ); + } + + /** + * 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; + } + + $redirect = isset( $_GET['redirect'] ) ? admin_url( $_GET['redirect'] ) : wp_get_referer(); + + 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'] ) ) { + 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 _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() { + include_once( ABSPATH . '/wp-admin/includes/admin.php' ); + include_once( ABSPATH . '/wp-admin/includes/plugin-install.php' ); + include_once( ABSPATH . '/wp-admin/includes/plugin.php' ); + include_once( ABSPATH . '/wp-admin/includes/class-wp-upgrader.php' ); + include_once( ABSPATH . '/wp-admin/includes/class-plugin-upgrader.php' ); + + $api = plugins_api( 'plugin_information', array( 'slug' => 'woocommerce-services' ) ); + + if ( is_wp_error( $api ) ) { + return false; + } + + $upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() ); + $result = $upgrader->install( $api->download_link ); + + return true === $result; + } + + /** + * 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(); |