Completed
Push — master ( 7c87e6...d3efe2 )
by Roy
03:13
created

woocommerce-gateway-stripe.php (5 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/**
3
 * Plugin Name: WooCommerce Stripe Gateway
4
 * Plugin URI: https://wordpress.org/plugins/woocommerce-gateway-stripe/
5
 * Description: Take credit card payments on your store using Stripe.
6
 * Author: WooCommerce
7
 * Author URI: https://woocommerce.com/
8
 * Version: 4.1.0
9
 * Requires at least: 4.4
10
 * Tested up to: 4.9
11
 * WC requires at least: 2.6
12
 * WC tested up to: 3.3
13
 * Text Domain: woocommerce-gateway-stripe
14
 * Domain Path: /languages/
15
 *
16
 */
17
18
if ( ! defined( 'ABSPATH' ) ) {
19
	exit;
20
}
21
22
if ( ! class_exists( 'WC_Stripe' ) ) :
23
	/**
24
	 * Required minimums and constants
25
	 */
26
	define( 'WC_STRIPE_VERSION', '4.1.0' );
27
	define( 'WC_STRIPE_MIN_PHP_VER', '5.6.0' );
28
	define( 'WC_STRIPE_MIN_WC_VER', '2.6.0' );
29
	define( 'WC_STRIPE_MAIN_FILE', __FILE__ );
30
	define( 'WC_STRIPE_PLUGIN_URL', untrailingslashit( plugins_url( basename( plugin_dir_path( __FILE__ ) ), basename( __FILE__ ) ) ) );
31
	define( 'WC_STRIPE_PLUGIN_PATH', untrailingslashit( plugin_dir_path( __FILE__ ) ) );
32
33
	class WC_Stripe {
34
35
		/**
36
		 * @var Singleton The reference the *Singleton* instance of this class
37
		 */
38
		private static $instance;
39
40
		/**
41
		 * @var Reference to logging class.
42
		 */
43
		private static $log;
0 ignored issues
show
The property $log is not used and could be removed.

This check marks private properties in classes that are never used. Those properties can be removed.

Loading history...
44
45
		/**
46
		 * Returns the *Singleton* instance of this class.
47
		 *
48
		 * @return Singleton The *Singleton* instance.
49
		 */
50
		public static function get_instance() {
51
			if ( null === self::$instance ) {
52
				self::$instance = new self();
0 ignored issues
show
Documentation Bug introduced by
It seems like new self() of type object<WC_Stripe> is incompatible with the declared type object<Singleton> of property $instance.

Our type inference engine has found an assignment to a property that is incompatible with the declared type of that property.

Either this assignment is in error or the assigned type should be added to the documentation/type hint for that property..

Loading history...
53
			}
54
			return self::$instance;
0 ignored issues
show
Bug Compatibility introduced by
The expression self::$instance; of type WC_Stripe|Singleton adds the type WC_Stripe to the return on line 54 which is incompatible with the return type documented by WC_Stripe::get_instance of type Singleton.
Loading history...
55
		}
56
57
		/**
58
		 * Private clone method to prevent cloning of the instance of the
59
		 * *Singleton* instance.
60
		 *
61
		 * @return void
62
		 */
63
		private function __clone() {}
64
65
		/**
66
		 * Private unserialize method to prevent unserializing of the *Singleton*
67
		 * instance.
68
		 *
69
		 * @return void
70
		 */
71
		private function __wakeup() {}
72
73
		/**
74
		 * Protected constructor to prevent creating a new instance of the
75
		 * *Singleton* via the `new` operator from outside of this class.
76
		 */
77
		private function __construct() {
78
			add_action( 'admin_init', array( $this, 'install' ) );
79
			add_action( 'plugins_loaded', array( $this, 'init' ) );
80
		}
81
82
		/**
83
		 * Init the plugin after plugins_loaded so environment variables are set.
84
		 *
85
		 * @since 1.0.0
86
		 * @version 4.0.0
87
		 */
88
		public function init() {
89
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-exception.php' );
90
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-logger.php' );
91
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-helper.php' );
92
			include_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-api.php' );
93
94
			// Don't hook anything else in the plugin if we're in an incompatible environment.
95
			if ( $this->get_environment_warning() && is_plugin_active( plugin_basename( __FILE__ ) ) ) {
96
				return;
97
			}
98
99
			load_plugin_textdomain( 'woocommerce-gateway-stripe', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
100
101
			require_once( dirname( __FILE__ ) . '/includes/abstracts/abstract-wc-stripe-payment-gateway.php' );
102
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-webhook-handler.php' );
103
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-sepa-payment-token.php' );
104
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-apple-pay-registration.php' );
105
			require_once( dirname( __FILE__ ) . '/includes/compat/class-wc-stripe-pre-orders-compat.php' );
106
			require_once( dirname( __FILE__ ) . '/includes/class-wc-gateway-stripe.php' );
107
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-bancontact.php' );
108
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-sofort.php' );
109
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-giropay.php' );
110
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-eps.php' );
111
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-ideal.php' );
112
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-p24.php' );
113
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-alipay.php' );
114
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-sepa.php' );
115
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-bitcoin.php' );
116
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-multibanco.php' );
117
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-stripe-payment-request.php' );
118
			require_once( dirname( __FILE__ ) . '/includes/compat/class-wc-stripe-subs-compat.php' );
119
			require_once( dirname( __FILE__ ) . '/includes/compat/class-wc-stripe-sepa-subs-compat.php' );
120
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-order-handler.php' );
121
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-payment-tokens.php' );
122
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-customer.php' );
123
124
			if ( is_admin() ) {
125
				require_once( dirname( __FILE__ ) . '/includes/admin/class-wc-stripe-admin-notices.php' );
126
			}
127
128
			// REMOVE IN THE FUTURE.
129
			require_once( dirname( __FILE__ ) . '/includes/deprecated/class-wc-stripe-apple-pay.php' );
130
131
			add_filter( 'woocommerce_payment_gateways', array( $this, 'add_gateways' ) );
132
			add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( $this, 'plugin_action_links' ) );
133
			add_filter( 'woocommerce_get_sections_checkout', array( $this, 'filter_gateway_order_admin' ) );
134
		}
135
136
		/**
137
		 * Checks the environment for compatibility problems.
138
		 * Returns a string with the first incompatibility
139
		 * found or false if the environment has no problems.
140
		 *
141
		 * @since 1.0.0
142
		 * @version 4.0.0
143
		 */
144
		public function get_environment_warning() {
145 View Code Duplication
			if ( version_compare( phpversion(), WC_STRIPE_MIN_PHP_VER, '<' ) ) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
146
				/* translators: 1) int version 2) int version */
147
				$message = __( 'WooCommerce Stripe - The minimum PHP version required for this plugin is %1$s. You are running %2$s.', 'woocommerce-gateway-stripe' );
148
149
				return sprintf( $message, WC_STRIPE_MIN_PHP_VER, phpversion() );
150
			}
151
152
			if ( ! defined( 'WC_VERSION' ) ) {
153
				return __( 'WooCommerce Stripe requires WooCommerce to be activated to work.', 'woocommerce-gateway-stripe' );
154
			}
155
156 View Code Duplication
			if ( version_compare( WC_VERSION, WC_STRIPE_MIN_WC_VER, '<' ) ) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
157
				/* translators: 1) int version 2) int version */
158
				$message = __( 'WooCommerce Stripe - The minimum WooCommerce version required for this plugin is %1$s. You are running %2$s.', 'woocommerce-gateway-stripe' );
159
160
				return sprintf( $message, WC_STRIPE_MIN_WC_VER, WC_VERSION );
161
			}
162
163
			if ( ! function_exists( 'curl_init' ) ) {
164
				return __( 'WooCommerce Stripe - cURL is not installed.', 'woocommerce-gateway-stripe' );
165
			}
166
167
			return false;
168
		}
169
170
		/**
171
		 * Updates the plugin version in db
172
		 *
173
		 * @since 3.1.0
174
		 * @version 4.0.0
175
		 */
176
		public function update_plugin_version() {
177
			delete_option( 'wc_stripe_version' );
178
			update_option( 'wc_stripe_version', WC_STRIPE_VERSION );
179
		}
180
181
		/**
182
		 * Handles upgrade routines.
183
		 *
184
		 * @since 3.1.0
185
		 * @version 3.1.0
186
		 */
187
		public function install() {
188
			if ( ! defined( 'IFRAME_REQUEST' ) && ( WC_STRIPE_VERSION !== get_option( 'wc_stripe_version' ) ) ) {
189
				do_action( 'woocommerce_stripe_updated' );
190
191
				if ( ! defined( 'WC_STRIPE_INSTALLING' ) ) {
192
					define( 'WC_STRIPE_INSTALLING', true );
193
				}
194
195
				$this->update_plugin_version();
196
			}
197
		}
198
199
		/**
200
		 * Adds plugin action links.
201
		 *
202
		 * @since 1.0.0
203
		 * @version 4.0.0
204
		 */
205
		public function plugin_action_links( $links ) {
206
			$plugin_links = array(
207
				'<a href="admin.php?page=wc-settings&tab=checkout&section=stripe">' . esc_html__( 'Settings', 'woocommerce-gateway-stripe' ) . '</a>',
208
				'<a href="https://docs.woocommerce.com/document/stripe/">' . esc_html__( 'Docs', 'woocommerce-gateway-stripe' ) . '</a>',
209
				'<a href="https://woocommerce.com/contact-us/">' . esc_html__( 'Support', 'woocommerce-gateway-stripe' ) . '</a>',
210
			);
211
			return array_merge( $plugin_links, $links );
212
		}
213
214
		/**
215
		 * Add the gateways to WooCommerce.
216
		 *
217
		 * @since 1.0.0
218
		 * @version 4.0.0
219
		 */
220
		public function add_gateways( $methods ) {
221
			if ( class_exists( 'WC_Subscriptions_Order' ) && function_exists( 'wcs_create_renewal_order' ) ) {
222
				$methods[] = 'WC_Stripe_Subs_Compat';
223
				$methods[] = 'WC_Stripe_Sepa_Subs_Compat';
224
			} else {
225
				$methods[] = 'WC_Gateway_Stripe';
226
				$methods[] = 'WC_Gateway_Stripe_Sepa';
227
			}
228
229
			$methods[] = 'WC_Gateway_Stripe_Bancontact';
230
			$methods[] = 'WC_Gateway_Stripe_Sofort';
231
			$methods[] = 'WC_Gateway_Stripe_Giropay';
232
			$methods[] = 'WC_Gateway_Stripe_Eps';
233
			$methods[] = 'WC_Gateway_Stripe_Ideal';
234
			$methods[] = 'WC_Gateway_Stripe_P24';
235
			$methods[] = 'WC_Gateway_Stripe_Alipay';
236
			$methods[] = 'WC_Gateway_Stripe_Bitcoin';
237
			$methods[] = 'WC_Gateway_Stripe_Multibanco';
238
239
			return $methods;
240
		}
241
242
		/**
243
		 * Modifies the order of the gateways displayed in admin.
244
		 *
245
		 * @since 4.0.0
246
		 * @version 4.0.0
247
		 */
248
		public function filter_gateway_order_admin( $sections ) {
249
			unset( $sections['stripe'] );
250
			unset( $sections['stripe_bancontact'] );
251
			unset( $sections['stripe_sofort'] );
252
			unset( $sections['stripe_giropay'] );
253
			unset( $sections['stripe_eps'] );
254
			unset( $sections['stripe_ideal'] );
255
			unset( $sections['stripe_p24'] );
256
			unset( $sections['stripe_alipay'] );
257
			unset( $sections['stripe_sepa'] );
258
			unset( $sections['stripe_bitcoin'] );
259
			unset( $sections['stripe_multibanco'] );
260
261
			$sections['stripe']            = 'Stripe';
262
			$sections['stripe_bancontact'] = __( 'Stripe Bancontact', 'woocommerce-gateway-stripe' );
263
			$sections['stripe_sofort']     = __( 'Stripe SOFORT', 'woocommerce-gateway-stripe' );
264
			$sections['stripe_giropay']    = __( 'Stripe Giropay', 'woocommerce-gateway-stripe' );
265
			$sections['stripe_eps']        = __( 'Stripe EPS', 'woocommerce-gateway-stripe' );
266
			$sections['stripe_ideal']      = __( 'Stripe iDeal', 'woocommerce-gateway-stripe' );
267
			$sections['stripe_p24']        = __( 'Stripe P24', 'woocommerce-gateway-stripe' );
268
			$sections['stripe_alipay']     = __( 'Stripe Alipay', 'woocommerce-gateway-stripe' );
269
			$sections['stripe_sepa']       = __( 'Stripe SEPA Direct Debit', 'woocommerce-gateway-stripe' );
270
			$sections['stripe_bitcoin']    = __( 'Stripe Bitcoin', 'woocommerce-gateway-stripe' );
271
			$sections['stripe_multibanco'] = __( 'Stripe Multibanco', 'woocommerce-gateway-stripe' );
272
273
			return $sections;
274
		}
275
	}
276
277
	WC_Stripe::get_instance();
278
279
endif;
280