PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 12.1.3
Jetpack – WP Security, Backup, Speed, & Growth v12.1.3
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 All 500 releases
jetpack / 3rd-party / woocommerce-services.php
woocommerce-services.php
150 lines 3.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php // phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
2
3 use Automattic\Jetpack\Plugins_Installer;
4
5 if ( ! defined( 'ABSPATH' ) ) {
6 exit;
7 }
8
9 /**
10 * Installs and activates the WooCommerce Services plugin.
11 */
12 class WC_Services_Installer {
13
14 /**
15 * The instance of the Jetpack class.
16 *
17 * @var Jetpack
18 */
19 private $jetpack;
20
21 /**
22 * The singleton instance of this class.
23 *
24 * @var WC_Services_Installer
25 */
26 private static $instance = null;
27
28 /**
29 * Returns the singleton instance of this class.
30 *
31 * @return object The WC_Services_Installer object.
32 */
33 public static function init() {
34 if ( self::$instance === null ) {
35 self::$instance = new WC_Services_Installer();
36 }
37 return self::$instance;
38 }
39
40 /**
41 * Constructor
42 */
43 public function __construct() {
44 add_action( 'jetpack_loaded', array( $this, 'on_jetpack_loaded' ) );
45 if ( ! empty( $_GET['wc-services-install-error'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
46 add_action( 'admin_notices', array( $this, 'error_notice' ) );
47 }
48
49 if ( isset( $_GET['wc-services-action'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
50 add_action( 'admin_init', array( $this, 'try_install' ) );
51 }
52 }
53
54 /**
55 * Runs on Jetpack being ready to load its packages.
56 *
57 * @param Jetpack $jetpack object.
58 */
59 public function on_jetpack_loaded( $jetpack ) {
60 $this->jetpack = $jetpack;
61 }
62
63 /**
64 * Verify the intent to install WooCommerce Services, and kick off installation.
65 */
66 public function try_install() {
67 if ( ! isset( $_GET['wc-services-action'] ) ) {
68 return;
69 }
70 check_admin_referer( 'wc-services-install' );
71
72 $result = false;
73
74 switch ( $_GET['wc-services-action'] ) {
75 case 'install':
76 if ( current_user_can( 'install_plugins' ) ) {
77 $this->jetpack->stat( 'jitm', 'wooservices-install-' . JETPACK__VERSION );
78 $result = $this->install();
79 if ( $result ) {
80 $result = $this->activate();
81 }
82 }
83 break;
84
85 case 'activate':
86 if ( current_user_can( 'activate_plugins' ) ) {
87 $this->jetpack->stat( 'jitm', 'wooservices-activate-' . JETPACK__VERSION );
88 $result = $this->activate();
89 }
90 break;
91 }
92
93 if ( isset( $_GET['redirect'] ) ) {
94 $redirect = home_url( esc_url_raw( wp_unslash( $_GET['redirect'] ) ) );
95 } else {
96 $redirect = admin_url();
97 }
98
99 if ( $result ) {
100 $this->jetpack->stat( 'jitm', 'wooservices-activated-' . JETPACK__VERSION );
101 } else {
102 $redirect = add_query_arg( 'wc-services-install-error', true, $redirect );
103 }
104
105 wp_safe_redirect( $redirect );
106
107 exit;
108 }
109
110 /**
111 * Notify the user that the installation of WooCommerce Services failed.
112 */
113 public function error_notice() {
114 ?>
115 <div class="notice notice-error is-dismissible">
116 <p><?php esc_html_e( 'There was an error installing WooCommerce Services.', 'jetpack' ); ?></p>
117 </div>
118 <?php
119 }
120
121 /**
122 * Download and install the WooCommerce Services plugin.
123 *
124 * @return bool result of installation
125 */
126 private function install() {
127 $result = Plugins_Installer::install_plugin( 'woocommerce-services' );
128
129 if ( is_wp_error( $result ) ) {
130 return false;
131 } else {
132 return true;
133 }
134 }
135
136 /**
137 * Activate the WooCommerce Services plugin.
138 *
139 * @return bool result of activation
140 */
141 private function activate() {
142 $result = activate_plugin( 'woocommerce-services/woocommerce-services.php' );
143
144 // Activate_plugin() returns null on success.
145 return $result === null;
146 }
147 }
148
149 WC_Services_Installer::init();
150