Completed
Push — master ( d8dd8c...25eaad )
by Radoslav
02:49
created

WC_Stripe   A

Complexity

Total Complexity 20

Size/Duplication

Total Lines 204
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 0
Metric Value
dl 0
loc 204
rs 10
c 0
b 0
f 0
wmc 20
lcom 1
cbo 0
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.2.0
9
 * Requires at least: 4.4
10
 * Tested up to: 5.2.1
11
 * WC requires at least: 2.6
12
 * WC tested up to: 3.6.4
13
 * Text Domain: woocommerce-gateway-stripe
14
 * Domain Path: /languages
15
 *
16
 */
17
18
if ( ! defined( 'ABSPATH' ) ) {
19
	exit;
20
}
21
22
// phpcs:disable WordPress.Files.FileName
23
24
/**
25
 * WooCommerce fallback notice.
26
 *
27
 * @since 4.1.2
28
 * @return string
29
 */
30
function woocommerce_stripe_missing_wc_notice() {
31
	/* translators: 1. URL link. */
32
	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>';
33
}
34
35
add_action( 'plugins_loaded', 'woocommerce_gateway_stripe_init' );
36
37
function woocommerce_gateway_stripe_init() {
38
	load_plugin_textdomain( 'woocommerce-gateway-stripe', false, plugin_basename( dirname( __FILE__ ) ) . '/languages' );
39
40
	if ( ! class_exists( 'WooCommerce' ) ) {
41
		add_action( 'admin_notices', 'woocommerce_stripe_missing_wc_notice' );
42
		return;
43
	}
44
45
	if ( ! class_exists( 'WC_Stripe' ) ) :
46
		/**
47
		 * Required minimums and constants
48
		 */
49
		define( 'WC_STRIPE_VERSION', '4.2.0' );
50
		define( 'WC_STRIPE_MIN_PHP_VER', '5.6.0' );
51
		define( 'WC_STRIPE_MIN_WC_VER', '2.6.0' );
52
		define( 'WC_STRIPE_MAIN_FILE', __FILE__ );
53
		define( 'WC_STRIPE_PLUGIN_URL', untrailingslashit( plugins_url( basename( plugin_dir_path( __FILE__ ) ), basename( __FILE__ ) ) ) );
54
		define( 'WC_STRIPE_PLUGIN_PATH', untrailingslashit( plugin_dir_path( __FILE__ ) ) );
55
56
		class WC_Stripe {
57
58
			/**
59
			 * @var Singleton The reference the *Singleton* instance of this class
60
			 */
61
			private static $instance;
62
63
			/**
64
			 * Returns the *Singleton* instance of this class.
65
			 *
66
			 * @return Singleton The *Singleton* instance.
67
			 */
68
			public static function get_instance() {
69
				if ( null === self::$instance ) {
70
					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...
71
				}
72
				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 72 which is incompatible with the return type documented by WC_Stripe::get_instance of type Singleton.
Loading history...
73
			}
74
75
			/**
76
			 * Private clone method to prevent cloning of the instance of the
77
			 * *Singleton* instance.
78
			 *
79
			 * @return void
80
			 */
81
			private function __clone() {}
82
83
			/**
84
			 * Private unserialize method to prevent unserializing of the *Singleton*
85
			 * instance.
86
			 *
87
			 * @return void
88
			 */
89
			private function __wakeup() {}
90
91
			/**
92
			 * Protected constructor to prevent creating a new instance of the
93
			 * *Singleton* via the `new` operator from outside of this class.
94
			 */
95
			private function __construct() {
96
				add_action( 'admin_init', array( $this, 'install' ) );
97
				$this->init();
98
			}
99
100
			/**
101
			 * Init the plugin after plugins_loaded so environment variables are set.
102
			 *
103
			 * @since 1.0.0
104
			 * @version 4.0.0
105
			 */
106
			public function init() {
107
				if ( is_admin() ) {
108
					require_once dirname( __FILE__ ) . '/includes/admin/class-wc-stripe-privacy.php';
109
				}
110
111
				require_once dirname( __FILE__ ) . '/includes/class-wc-stripe-exception.php';
112
				require_once dirname( __FILE__ ) . '/includes/class-wc-stripe-logger.php';
113
				require_once dirname( __FILE__ ) . '/includes/class-wc-stripe-helper.php';
114
				include_once dirname( __FILE__ ) . '/includes/class-wc-stripe-api.php';
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-multibanco.php';
130
				require_once dirname( __FILE__ ) . '/includes/payment-methods/class-wc-stripe-payment-request.php';
131
				require_once dirname( __FILE__ ) . '/includes/compat/class-wc-stripe-subs-compat.php';
132
				require_once dirname( __FILE__ ) . '/includes/compat/class-wc-stripe-sepa-subs-compat.php';
133
				require_once dirname( __FILE__ ) . '/includes/class-wc-stripe-order-handler.php';
134
				require_once dirname( __FILE__ ) . '/includes/class-wc-stripe-payment-tokens.php';
135
				require_once dirname( __FILE__ ) . '/includes/class-wc-stripe-customer.php';
136
				require_once dirname( __FILE__ ) . '/includes/class-wc-stripe-intent-controller.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
148
				if ( version_compare( WC_VERSION, '3.4', '<' ) ) {
149
					add_filter( 'woocommerce_get_sections_checkout', array( $this, 'filter_gateway_order_admin' ) );
150
				}
151
			}
152
153
			/**
154
			 * Updates the plugin version in db
155
			 *
156
			 * @since 3.1.0
157
			 * @version 4.0.0
158
			 */
159
			public function update_plugin_version() {
160
				delete_option( 'wc_stripe_version' );
161
				update_option( 'wc_stripe_version', WC_STRIPE_VERSION );
162
			}
163
164
			/**
165
			 * Handles upgrade routines.
166
			 *
167
			 * @since 3.1.0
168
			 * @version 3.1.0
169
			 */
170
			public function install() {
171
				if ( ! is_plugin_active( plugin_basename( __FILE__ ) ) ) {
172
					return;
173
				}
174
175
				if ( ! defined( 'IFRAME_REQUEST' ) && ( WC_STRIPE_VERSION !== get_option( 'wc_stripe_version' ) ) ) {
176
					do_action( 'woocommerce_stripe_updated' );
177
178
					if ( ! defined( 'WC_STRIPE_INSTALLING' ) ) {
179
						define( 'WC_STRIPE_INSTALLING', true );
180
					}
181
182
					$this->update_plugin_version();
183
				}
184
			}
185
186
			/**
187
			 * Adds plugin action links.
188
			 *
189
			 * @since 1.0.0
190
			 * @version 4.0.0
191
			 */
192
			public function plugin_action_links( $links ) {
193
				$plugin_links = array(
194
					'<a href="admin.php?page=wc-settings&tab=checkout&section=stripe">' . esc_html__( 'Settings', 'woocommerce-gateway-stripe' ) . '</a>',
195
					'<a href="https://docs.woocommerce.com/document/stripe/">' . esc_html__( 'Docs', 'woocommerce-gateway-stripe' ) . '</a>',
196
					'<a href="https://woocommerce.com/my-account/create-a-ticket?broken=primary&select=18627">' . esc_html__( 'Support', 'woocommerce-gateway-stripe' ) . '</a>',
197
				);
198
				return array_merge( $plugin_links, $links );
199
			}
200
201
			/**
202
			 * Add the gateways to WooCommerce.
203
			 *
204
			 * @since 1.0.0
205
			 * @version 4.0.0
206
			 */
207
			public function add_gateways( $methods ) {
208
				if ( class_exists( 'WC_Subscriptions_Order' ) && function_exists( 'wcs_create_renewal_order' ) ) {
209
					$methods[] = 'WC_Stripe_Subs_Compat';
210
					$methods[] = 'WC_Stripe_Sepa_Subs_Compat';
211
				} else {
212
					$methods[] = 'WC_Gateway_Stripe';
213
					$methods[] = 'WC_Gateway_Stripe_Sepa';
214
				}
215
216
				$methods[] = 'WC_Gateway_Stripe_Bancontact';
217
				$methods[] = 'WC_Gateway_Stripe_Sofort';
218
				$methods[] = 'WC_Gateway_Stripe_Giropay';
219
				$methods[] = 'WC_Gateway_Stripe_Eps';
220
				$methods[] = 'WC_Gateway_Stripe_Ideal';
221
				$methods[] = 'WC_Gateway_Stripe_P24';
222
				$methods[] = 'WC_Gateway_Stripe_Alipay';
223
				$methods[] = 'WC_Gateway_Stripe_Multibanco';
224
225
				return $methods;
226
			}
227
228
			/**
229
			 * Modifies the order of the gateways displayed in admin.
230
			 *
231
			 * @since 4.0.0
232
			 * @version 4.0.0
233
			 */
234
			public function filter_gateway_order_admin( $sections ) {
235
				unset( $sections['stripe'] );
236
				unset( $sections['stripe_bancontact'] );
237
				unset( $sections['stripe_sofort'] );
238
				unset( $sections['stripe_giropay'] );
239
				unset( $sections['stripe_eps'] );
240
				unset( $sections['stripe_ideal'] );
241
				unset( $sections['stripe_p24'] );
242
				unset( $sections['stripe_alipay'] );
243
				unset( $sections['stripe_sepa'] );
244
				unset( $sections['stripe_multibanco'] );
245
246
				$sections['stripe']            = 'Stripe';
247
				$sections['stripe_bancontact'] = __( 'Stripe Bancontact', 'woocommerce-gateway-stripe' );
248
				$sections['stripe_sofort']     = __( 'Stripe SOFORT', 'woocommerce-gateway-stripe' );
249
				$sections['stripe_giropay']    = __( 'Stripe Giropay', 'woocommerce-gateway-stripe' );
250
				$sections['stripe_eps']        = __( 'Stripe EPS', 'woocommerce-gateway-stripe' );
251
				$sections['stripe_ideal']      = __( 'Stripe iDeal', 'woocommerce-gateway-stripe' );
252
				$sections['stripe_p24']        = __( 'Stripe P24', 'woocommerce-gateway-stripe' );
253
				$sections['stripe_alipay']     = __( 'Stripe Alipay', 'woocommerce-gateway-stripe' );
254
				$sections['stripe_sepa']       = __( 'Stripe SEPA Direct Debit', '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
}
264