Completed
Push — master ( 29ee89...16fdff )
by Roy
02:20
created

woocommerce-gateway-stripe.php (3 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.1
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 ( ! function_exists( 'woothemes_queue_update' ) ) {
23
	require_once( 'woo-includes/woo-functions.php' );
24
}
25
26
/**
27
 * WooCommerce fallback notice.
28
 *
29
 * @since 4.1.2
30
 * @return string
31
 */
32
function woocommerce_stripe_missing_wc_notice() {
33
	echo '<div class="error"><p><strong>' . sprintf( esc_html__( 'Stripe requires WooCommerce to be installed and active. You can download %s here.', 'woocommerce-gateway-stripe' ), '<a href="https://woocommerce.com/" target="_blank">WooCommerce</a>' ) . '</strong></p></div>';
34
}
35
36
if ( ! is_woocommerce_active() ) {
37
	add_action( 'admin_notices', 'woocommerce_stripe_missing_wc_notice' );
38
	return;
39
}
40
41
if ( ! class_exists( 'WC_Stripe' ) ) :
42
	/**
43
	 * Required minimums and constants
44
	 */
45
	define( 'WC_STRIPE_VERSION', '4.1.1' );
46
	define( 'WC_STRIPE_MIN_PHP_VER', '5.6.0' );
47
	define( 'WC_STRIPE_MIN_WC_VER', '2.6.0' );
48
	define( 'WC_STRIPE_MAIN_FILE', __FILE__ );
49
	define( 'WC_STRIPE_PLUGIN_URL', untrailingslashit( plugins_url( basename( plugin_dir_path( __FILE__ ) ), basename( __FILE__ ) ) ) );
50
	define( 'WC_STRIPE_PLUGIN_PATH', untrailingslashit( plugin_dir_path( __FILE__ ) ) );
51
52
	class WC_Stripe {
53
54
		/**
55
		 * @var Singleton The reference the *Singleton* instance of this class
56
		 */
57
		private static $instance;
58
59
		/**
60
		 * @var Reference to logging class.
61
		 */
62
		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...
63
64
		/**
65
		 * Returns the *Singleton* instance of this class.
66
		 *
67
		 * @return Singleton The *Singleton* instance.
68
		 */
69
		public static function get_instance() {
70
			if ( null === self::$instance ) {
71
				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...
72
			}
73
			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 73 which is incompatible with the return type documented by WC_Stripe::get_instance of type Singleton.
Loading history...
74
		}
75
76
		/**
77
		 * Private clone method to prevent cloning of the instance of the
78
		 * *Singleton* instance.
79
		 *
80
		 * @return void
81
		 */
82
		private function __clone() {}
83
84
		/**
85
		 * Private unserialize method to prevent unserializing of the *Singleton*
86
		 * instance.
87
		 *
88
		 * @return void
89
		 */
90
		private function __wakeup() {}
91
92
		/**
93
		 * Protected constructor to prevent creating a new instance of the
94
		 * *Singleton* via the `new` operator from outside of this class.
95
		 */
96
		private function __construct() {
97
			add_action( 'admin_init', array( $this, 'install' ) );
98
			add_action( 'plugins_loaded', array( $this, 'init' ) );
99
		}
100
101
		/**
102
		 * Init the plugin after plugins_loaded so environment variables are set.
103
		 *
104
		 * @since 1.0.0
105
		 * @version 4.0.0
106
		 */
107
		public function init() {
108
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-exception.php' );
109
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-logger.php' );
110
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-helper.php' );
111
			include_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-api.php' );
112
113
			load_plugin_textdomain( 'woocommerce-gateway-stripe', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
114
115
			require_once( dirname( __FILE__ ) . '/includes/abstracts/abstract-wc-stripe-payment-gateway.php' );
116
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-webhook-handler.php' );
117
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-sepa-payment-token.php' );
118
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-apple-pay-registration.php' );
119
			require_once( dirname( __FILE__ ) . '/includes/compat/class-wc-stripe-pre-orders-compat.php' );
120
			require_once( dirname( __FILE__ ) . '/includes/class-wc-gateway-stripe.php' );
121
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-bancontact.php' );
122
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-sofort.php' );
123
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-giropay.php' );
124
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-eps.php' );
125
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-ideal.php' );
126
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-p24.php' );
127
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-alipay.php' );
128
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-sepa.php' );
129
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-bitcoin.php' );
130
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-gateway-stripe-multibanco.php' );
131
			require_once( dirname( __FILE__ ) . '/includes/payment-methods/class-wc-stripe-payment-request.php' );
132
			require_once( dirname( __FILE__ ) . '/includes/compat/class-wc-stripe-subs-compat.php' );
133
			require_once( dirname( __FILE__ ) . '/includes/compat/class-wc-stripe-sepa-subs-compat.php' );
134
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-order-handler.php' );
135
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-payment-tokens.php' );
136
			require_once( dirname( __FILE__ ) . '/includes/class-wc-stripe-customer.php' );
137
138
			if ( is_admin() ) {
139
				require_once( dirname( __FILE__ ) . '/includes/admin/class-wc-stripe-admin-notices.php' );
140
			}
141
142
			// REMOVE IN THE FUTURE.
143
			require_once( dirname( __FILE__ ) . '/includes/deprecated/class-wc-stripe-apple-pay.php' );
144
145
			add_filter( 'woocommerce_payment_gateways', array( $this, 'add_gateways' ) );
146
			add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), array( $this, 'plugin_action_links' ) );
147
			add_filter( 'woocommerce_get_sections_checkout', array( $this, 'filter_gateway_order_admin' ) );
148
		}
149
150
		/**
151
		 * Updates the plugin version in db
152
		 *
153
		 * @since 3.1.0
154
		 * @version 4.0.0
155
		 */
156
		public function update_plugin_version() {
157
			delete_option( 'wc_stripe_version' );
158
			update_option( 'wc_stripe_version', WC_STRIPE_VERSION );
159
		}
160
161
		/**
162
		 * Handles upgrade routines.
163
		 *
164
		 * @since 3.1.0
165
		 * @version 3.1.0
166
		 */
167
		public function install() {
168
			if ( ! is_plugin_active( plugin_basename( __FILE__ ) ) ) {
169
				return;
170
			}
171
172
			if ( ! defined( 'IFRAME_REQUEST' ) && ( WC_STRIPE_VERSION !== get_option( 'wc_stripe_version' ) ) ) {
173
				do_action( 'woocommerce_stripe_updated' );
174
175
				if ( ! defined( 'WC_STRIPE_INSTALLING' ) ) {
176
					define( 'WC_STRIPE_INSTALLING', true );
177
				}
178
179
				$this->update_plugin_version();
180
			}
181
		}
182
183
		/**
184
		 * Adds plugin action links.
185
		 *
186
		 * @since 1.0.0
187
		 * @version 4.0.0
188
		 */
189
		public function plugin_action_links( $links ) {
190
			$plugin_links = array(
191
				'<a href="admin.php?page=wc-settings&tab=checkout&section=stripe">' . esc_html__( 'Settings', 'woocommerce-gateway-stripe' ) . '</a>',
192
				'<a href="https://docs.woocommerce.com/document/stripe/">' . esc_html__( 'Docs', 'woocommerce-gateway-stripe' ) . '</a>',
193
				'<a href="https://woocommerce.com/contact-us/">' . esc_html__( 'Support', 'woocommerce-gateway-stripe' ) . '</a>',
194
			);
195
			return array_merge( $plugin_links, $links );
196
		}
197
198
		/**
199
		 * Add the gateways to WooCommerce.
200
		 *
201
		 * @since 1.0.0
202
		 * @version 4.0.0
203
		 */
204
		public function add_gateways( $methods ) {
205
			if ( class_exists( 'WC_Subscriptions_Order' ) && function_exists( 'wcs_create_renewal_order' ) ) {
206
				$methods[] = 'WC_Stripe_Subs_Compat';
207
				$methods[] = 'WC_Stripe_Sepa_Subs_Compat';
208
			} else {
209
				$methods[] = 'WC_Gateway_Stripe';
210
				$methods[] = 'WC_Gateway_Stripe_Sepa';
211
			}
212
213
			$methods[] = 'WC_Gateway_Stripe_Bancontact';
214
			$methods[] = 'WC_Gateway_Stripe_Sofort';
215
			$methods[] = 'WC_Gateway_Stripe_Giropay';
216
			$methods[] = 'WC_Gateway_Stripe_Eps';
217
			$methods[] = 'WC_Gateway_Stripe_Ideal';
218
			$methods[] = 'WC_Gateway_Stripe_P24';
219
			$methods[] = 'WC_Gateway_Stripe_Alipay';
220
			$methods[] = 'WC_Gateway_Stripe_Bitcoin';
221
			$methods[] = 'WC_Gateway_Stripe_Multibanco';
222
223
			return $methods;
224
		}
225
226
		/**
227
		 * Modifies the order of the gateways displayed in admin.
228
		 *
229
		 * @since 4.0.0
230
		 * @version 4.0.0
231
		 */
232
		public function filter_gateway_order_admin( $sections ) {
233
			unset( $sections['stripe'] );
234
			unset( $sections['stripe_bancontact'] );
235
			unset( $sections['stripe_sofort'] );
236
			unset( $sections['stripe_giropay'] );
237
			unset( $sections['stripe_eps'] );
238
			unset( $sections['stripe_ideal'] );
239
			unset( $sections['stripe_p24'] );
240
			unset( $sections['stripe_alipay'] );
241
			unset( $sections['stripe_sepa'] );
242
			unset( $sections['stripe_bitcoin'] );
243
			unset( $sections['stripe_multibanco'] );
244
245
			$sections['stripe']            = 'Stripe';
246
			$sections['stripe_bancontact'] = __( 'Stripe Bancontact', 'woocommerce-gateway-stripe' );
247
			$sections['stripe_sofort']     = __( 'Stripe SOFORT', 'woocommerce-gateway-stripe' );
248
			$sections['stripe_giropay']    = __( 'Stripe Giropay', 'woocommerce-gateway-stripe' );
249
			$sections['stripe_eps']        = __( 'Stripe EPS', 'woocommerce-gateway-stripe' );
250
			$sections['stripe_ideal']      = __( 'Stripe iDeal', 'woocommerce-gateway-stripe' );
251
			$sections['stripe_p24']        = __( 'Stripe P24', 'woocommerce-gateway-stripe' );
252
			$sections['stripe_alipay']     = __( 'Stripe Alipay', 'woocommerce-gateway-stripe' );
253
			$sections['stripe_sepa']       = __( 'Stripe SEPA Direct Debit', 'woocommerce-gateway-stripe' );
254
			$sections['stripe_bitcoin']    = __( 'Stripe Bitcoin', 'woocommerce-gateway-stripe' );
255
			$sections['stripe_multibanco'] = __( 'Stripe Multibanco', 'woocommerce-gateway-stripe' );
256
257
			return $sections;
258
		}
259
	}
260
261
	WC_Stripe::get_instance();
262
endif;
263