Completed
Pull Request — master (#3)
by Sébastien
02:41
created
wc-satt-stt.php 1 patch
Indentation   +467 added lines, -467 removed lines patch added patch discarded remove patch
@@ -20,392 +20,392 @@  discard block
 block discarded – undo
20 20
 if ( ! defined('ABSPATH') ) exit; // Exit if accessed directly.
21 21
 
22 22
 if ( ! class_exists( 'WCSATT_STT' ) ) {
23
-	class WCSATT_STT {
24
-
25
-		/* Plugin version. */
26
-		const VERSION = '1.0.0';
27
-
28
-		/* Required WC version. */
29
-		const REQ_WC_VERSION = '2.3.0';
30
-
31
-		/* Required WCSATT version */
32
-		const REQ_WCSATT_VERSION = '1.1.1';
33
-
34
-		/* Text domain. */
35
-		const TEXT_DOMAIN = 'wc-satt-stt';
36
-
37
-		/**
38
-		 * @var WCSATT_STT - the single instance of the class.
39
-		 *
40
-		 * @since 1.0.0
41
-		 */
42
-		protected static $_instance = null;
43
-
44
-		/**
45
-		 * Main WCSATT_STT Instance.
46
-		 *
47
-		 * Ensures only one instance of WCSATT_STT is loaded or can be loaded.
48
-		 *
49
-		 * @static
50
-		 * @see WCSATT_STT()
51
-		 * @return WCSATT_STT - Main instance
52
-		 * @since 1.0.0
53
-		 */
54
-		public static function instance() {
55
-			if ( is_null( self::$_instance ) ) {
56
-				self::$_instance = new self();
57
-			}
58
-			return self::$_instance;
59
-		}
60
-
61
-		/**
62
-		 * Cloning is forbidden.
63
-		 *
64
-		 * @since 1.0.0
65
-		 */
66
-		public function __clone() {
67
-			_doing_it_wrong( __FUNCTION__, __( 'Foul!' ), '1.0.0' );
68
-		}
69
-
70
-		/**
71
-		 * Unserializing instances of this class is forbidden.
72
-		 *
73
-		 * @since 1.0.0
74
-		 */
75
-		public function __wakeup() {
76
-			_doing_it_wrong( __FUNCTION__, __( 'Foul!' ), '1.0.0' );
77
-		}
78
-
79
-		/**
80
-		 * Load the plugin.
81
-		 */
82
-		public function __construct() {
83
-			add_action( 'plugins_loaded', array( $this, 'load_plugin' ) );
84
-			add_action( 'init', array( $this, 'init_plugin' ) );
85
-			add_action( 'admin_init', array( $this, 'admin_wcsatt_stt_product_meta' ) );
86
-			add_filter( 'plugin_row_meta', array( $this, 'plugin_meta_links' ), 10, 4 );
87
-		}
88
-
89
-		public function plugin_path() {
90
-			return untrailingslashit( plugin_dir_path( __FILE__ ) );
91
-		} // END plugin_path()
92
-
93
-		/*
23
+    class WCSATT_STT {
24
+
25
+        /* Plugin version. */
26
+        const VERSION = '1.0.0';
27
+
28
+        /* Required WC version. */
29
+        const REQ_WC_VERSION = '2.3.0';
30
+
31
+        /* Required WCSATT version */
32
+        const REQ_WCSATT_VERSION = '1.1.1';
33
+
34
+        /* Text domain. */
35
+        const TEXT_DOMAIN = 'wc-satt-stt';
36
+
37
+        /**
38
+         * @var WCSATT_STT - the single instance of the class.
39
+         *
40
+         * @since 1.0.0
41
+         */
42
+        protected static $_instance = null;
43
+
44
+        /**
45
+         * Main WCSATT_STT Instance.
46
+         *
47
+         * Ensures only one instance of WCSATT_STT is loaded or can be loaded.
48
+         *
49
+         * @static
50
+         * @see WCSATT_STT()
51
+         * @return WCSATT_STT - Main instance
52
+         * @since 1.0.0
53
+         */
54
+        public static function instance() {
55
+            if ( is_null( self::$_instance ) ) {
56
+                self::$_instance = new self();
57
+            }
58
+            return self::$_instance;
59
+        }
60
+
61
+        /**
62
+         * Cloning is forbidden.
63
+         *
64
+         * @since 1.0.0
65
+         */
66
+        public function __clone() {
67
+            _doing_it_wrong( __FUNCTION__, __( 'Foul!' ), '1.0.0' );
68
+        }
69
+
70
+        /**
71
+         * Unserializing instances of this class is forbidden.
72
+         *
73
+         * @since 1.0.0
74
+         */
75
+        public function __wakeup() {
76
+            _doing_it_wrong( __FUNCTION__, __( 'Foul!' ), '1.0.0' );
77
+        }
78
+
79
+        /**
80
+         * Load the plugin.
81
+         */
82
+        public function __construct() {
83
+            add_action( 'plugins_loaded', array( $this, 'load_plugin' ) );
84
+            add_action( 'init', array( $this, 'init_plugin' ) );
85
+            add_action( 'admin_init', array( $this, 'admin_wcsatt_stt_product_meta' ) );
86
+            add_filter( 'plugin_row_meta', array( $this, 'plugin_meta_links' ), 10, 4 );
87
+        }
88
+
89
+        public function plugin_path() {
90
+            return untrailingslashit( plugin_dir_path( __FILE__ ) );
91
+        } // END plugin_path()
92
+
93
+        /*
94 94
 		 * Check requirements on activation.
95 95
 		 */
96
-		public function load_plugin() {
97
-			global $woocommerce;
98
-
99
-			// Check that the required WooCommerce is running.
100
-			if ( version_compare( $woocommerce->version, self::REQ_WC_VERSION, '<' ) ) {
101
-				add_action( 'admin_notices', array( $this, 'wcsatt_stt_wc_admin_notice' ) );
102
-				return false;
103
-			}
104
-
105
-			// Checks that WooCommerce Subscribe All the Things is running or is less than the required version.
106
-			if ( ! class_exists( 'WCS_ATT' ) || version_compare( WCS_ATT::VERSION, self::REQ_WCSATT_VERSION, '<' ) ) {
107
-				add_action( 'admin_notices', array( $this, 'wcsatt_stt_admin_notice' ) );
108
-				return false;
109
-			}
110
-		} // END load_plugin()
111
-
112
-		/**
113
-		 * Display a warning message if minimum version of WooCommerce check fails.
114
-		 *
115
-		 * @return void
116
-		 */
117
-		public function wcsatt_stt_wc_admin_notice() {
118
-			echo '<div class="error"><p>' . sprintf( __( '%1$s requires at least %2$s v%3$s in order to function. Please upgrade %2$s.', 'wc-satt-stt' ), 'Sign up and Trial Options Add-on for WCSATT', 'WooCommerce', self::REQ_WC_VERSION ) . '</p></div>';
119
-		} // END wcsatt_stt_wc_admin_notice()
120
-
121
-		/**
122
-		 * Display a warning message if minimum version of WooCommerce Subscribe to All the Things check fails.
123
-		 *
124
-		 * @return void
125
-		 */
126
-		public function wcsatt_stt_admin_notice() {
127
-			echo '<div class="error"><p>' . sprintf( __( '%1$s requires at least %2$s v%3$s in order to function. Please upgrade %2$s.', 'wc-satt-stt' ), 'Sign up and Trial Options Add-on', 'WooCommerce Subscribe to All the Things', self::REQ_WCSATT_VERSION ) . '</p></div>';
128
-		} // END wcsatt_stt_admin_notice()
129
-
130
-		/**
131
-		 * Initialize the plugin if ready.
132
-		 *
133
-		 * @return void
134
-		 */
135
-		public function init_plugin() {
136
-			// Load text domain.
137
-			load_plugin_textdomain( 'wc-satt-stt', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
138
-
139
-			// Adds the sign up fee and trial data to the price html on the 'wcsatt_overridden_subscription_prices_product' filter.
140
-			add_filter( 'wcsatt_overridden_subscription_prices_product', array( $this, 'add_sub_scheme_data_price_html' ), 10, 3 );
141
-
142
-			// Adds the extra subscription scheme data to the product object on the 'wcsatt_sub_product_scheme_option' filter.
143
-			add_filter( 'wcsatt_sub_product_scheme_option', array( $this, 'sub_product_scheme_option' ), 10, 2 );
144
-
145
-			// Filters the price string to include the sign up fee and/or trial to pass per scheme option on the 'wcsatt_get_single_product_price_string' filter.
146
-			add_filter( 'wcsatt_get_single_product_price_string', array( $this, 'get_price_string' ), 10, 2 );
147
-
148
-			// Filters the lowest price string to include the sign up fee on the 'wcsatt_get_single_product_lowest_price_string' filter.
149
-			add_filter( 'wcsatt_get_single_product_lowest_price_string', array( $this, 'get_lowest_price_string' ), 10, 2 );
150
-
151
-			// Filters the suffix price html on the 'wcsatt_suffix_price_html' filter.
152
-			//add_filter( 'wcsatt_suffix_price_html', array( $this, 'filter_suffix_price_html' ), 10, 1 );
153
-
154
-			// Filters the lowest price subscription scheme data on the 'wcsatt_get_lowest_price_sub_scheme_data' filter.
155
-			add_filter( 'wcsatt_get_lowest_price_sub_scheme_data', array( $this, 'get_lowest_price_sub_scheme_data' ), 10, 2 );
156
-
157
-			// Adds the sign-up and/or trial data to the subscription scheme prices on the 'wcsatt_subscription_scheme_prices' filter.
158
-			add_filter( 'wcsatt_subscription_scheme_prices', array( $this, 'add_subscription_scheme_prices' ), 10, 2 );
159
-
160
-			// Overrides the price of the subscription for sign up fee and/or trial on the 'wcsatt_cart_item' filter.
161
-			add_filter( 'wcsatt_cart_item', array( $this, 'update_cart_item_sub_data' ), 10, 1 );
162
-		} // END init_plugin()
163
-
164
-		/**
165
-		 * Register the product meta data fields.
166
-		 *
167
-		 * @return void
168
-		 */
169
-		public function admin_wcsatt_stt_product_meta() {
170
-			// Subscription scheme options displayed on the 'wcsatt_subscription_scheme_content' action.
171
-			//add_action( 'wcsatt_subscription_scheme_content', array( $this, 'wcsatt_stt_fields' ), 15, 3 );
172
-
173
-			// Subscription scheme options displayed on the 'wcsatt_subscription_scheme_product_content' action.
174
-			add_action( 'wcsatt_subscription_scheme_product_content', array( $this, 'wcsatt_stt_fields' ), 15, 3 );
175
-
176
-			// Filter the subscription scheme data to process the sign up and trial options on the ''wcsatt_subscription_scheme_process_scheme_data' filter.
177
-			add_filter( 'wcsatt_subscription_scheme_process_scheme_data', array( $this, 'wcsatt_stt_process_scheme_data' ), 10, 2 );
178
-		} // END admin_wcsatt_stt_product_meta()
179
-
180
-		/**
181
-		 * Show row meta on the plugin screen.
182
-		 *
183
-		 * @param mixed $links Plugin Row Meta
184
-		 * @param mixed $file  Plugin Base file
185
-		 * @return array
186
-		 */
187
-		public function plugin_meta_links( $links, $file, $data, $status ) {
188
-			if ( $file == plugin_basename( __FILE__ ) ) {
189
-				$author1 = '<a href="' . $data[ 'AuthorURI' ] . '">' . $data[ 'Author' ] . '</a>';
190
-				$links[ 1 ] = sprintf( __( 'By %s', WCSATT_STT::TEXT_DOMAIN ), $author1 );
191
-			}
192
-
193
-			return $links;
194
-		} // END plugin_meta_links()
195
-
196
-		/**
197
-		 * Adds the default values for subscriptions schemes content.
198
-		 *
199
-		 * @param  array $defaults
200
-		 * @return void
201
-		 */
202
-		public static function add_default_subscription_schemes_content( $defaults ) {
203
-			$new_defaults = array(
204
-				'subscription_sign_up_fee'  => '',
205
-				'subscription_trial_length' => '',
206
-				'subscription_trial_period' => ''
207
-			);
208
-
209
-			return array_merge( $new_defaults, $defaults );
210
-		} // END add_default_subscription_schemes_content()
211
-
212
-		/**
213
-		 * Adds the trial and sign up fields under the subscription section.
214
-		 *
215
-		 * @param  int   $index
216
-		 * @param  array $scheme_data
217
-		 * @param  int   $post_id
218
-		 * @return void
219
-		 */
220
-		public function wcsatt_stt_fields( $index, $scheme_data, $post_id ) {
221
-			if ( ! empty( $scheme_data ) ) {
222
-				$subscription_sign_up_fee = ! empty( $scheme_data[ 'subscription_sign_up_fee' ] ) ? $scheme_data[ 'subscription_sign_up_fee' ] : '';
223
-				$subscription_trial_length = isset( $scheme_data[ 'subscription_trial_length' ] ) ? $scheme_data[ 'subscription_trial_length' ] : 0;
224
-				$subscription_trial_period = isset( $scheme_data[ 'subscription_trial_period' ] ) ? $scheme_data[ 'subscription_trial_period' ] : '';
225
-			} else {
226
-				$subscription_sign_up_fee = '';
227
-				$subscription_trial_length = 0;
228
-				$subscription_trial_period = '';
229
-			}
230
-
231
-			// Sign-up Fee
232
-			woocommerce_wp_text_input( array(
233
-				'id'          => '_subscription_sign_up_fee',
234
-				'class'       => 'wc_input_subscription_intial_price',
235
-				// translators: %s is a currency symbol / code
236
-				'label'       => sprintf( __( 'Sign-up Fee (%s)', WCSATT_STT::TEXT_DOMAIN ), get_woocommerce_currency_symbol() ),
237
-				'placeholder' => _x( 'e.g. 9.90', 'example price', WCSATT_STT::TEXT_DOMAIN ),
238
-				'description' => __( 'Optionally include an amount to be charged at the outset of the subscription. The sign-up fee will be charged immediately, even if the product has a free trial or the payment dates are synced.', WCSATT_STT::TEXT_DOMAIN ),
239
-				'desc_tip'    => true,
240
-				'type'        => 'text',
241
-				'custom_attributes' => array(
242
-					'step' => 'any',
243
-					'min'  => '0',
244
-				),
245
-				'name'        => 'wcsatt_schemes[' . $index . '][subscription_sign_up_fee]',
246
-				'value'       => $subscription_sign_up_fee
247
-			) );
248
-
249
-			// Trial Length
250
-			woocommerce_wp_text_input( array(
251
-				'id'          => '_subscription_trial_length',
252
-				'class'       => 'wc_input_subscription_trial_length',
253
-				'label'       => __( 'Free Trial', WCSATT_STT::TEXT_DOMAIN ),
254
-				'name'        => 'wcsatt_schemes[' . $index . '][subscription_trial_length]',
255
-				'value'       => $subscription_trial_length
256
-			) );
257
-
258
-			// Trial Period
259
-			woocommerce_wp_select( array(
260
-				'id'          => '_subscription_trial_period',
261
-				'class'       => 'wc_input_subscription_trial_period',
262
-				'label'       => __( 'Subscription Trial Period', WCSATT_STT::TEXT_DOMAIN ),
263
-				'options'     => wcs_get_available_time_periods(),
264
-				// translators: placeholder is trial period validation message if passed an invalid value (e.g. "Trial period can not exceed 4 weeks")
265
-				'description' => sprintf( _x( 'An optional period of time to wait before charging the first recurring payment. Any sign up fee will still be charged at the outset of the subscription. %s', 'Trial period dropdown\'s description in pricing fields', WCSATT_STT::TEXT_DOMAIN ), WC_Subscriptions_Admin::get_trial_period_validation_message() ),
266
-				'desc_tip'    => true,
267
-				'value'       => WC_Subscriptions_Product::get_trial_period( $post_id ), // Explicitly set value in to ensure backward compatibility
268
-				'name'        => 'wcsatt_schemes[' . $index . '][subscription_trial_period]',
269
-				'value'       => $subscription_trial_period
270
-		) );
271
-		} // END wcsatt_stt_fields()
272
-
273
-		/**
274
-		 * Filters the subscription scheme data to pass the 
275
-		 * sign up and trial options when saving.
276
-		 *
277
-		 * @param  ini $posted_scheme
278
-		 * @param  string $product_type
279
-		 * @return void
280
-		 */
281
-		public function wcsatt_stt_process_scheme_data( $posted_scheme, $product_type ) {
282
-			// Copy variable type fields.
283
-			if ( 'variable' == $product_type ) {
284
-				if ( isset( $posted_scheme[ 'subscription_sign_up_fee_variable' ] ) ) {
285
-					$posted_scheme[ 'subscription_sign_up_fee' ] = $posted_scheme[ 'subscription_sign_up_fee_variable' ];
286
-				}
287
-				if ( isset( $posted_scheme[ 'subscription_trial_length_variable' ] ) ) {
288
-					$posted_scheme[ 'subscription_trial_length' ] = $posted_scheme[ 'subscription_trial_length_variable' ];
289
-				}
290
-				if ( isset( $posted_scheme[ 'subscription_trial_period_variable' ] ) ) {
291
-					$posted_scheme[ 'subscription_trial_period' ] = $posted_scheme[ 'subscription_trial_period_variable'];
292
-				}
293
-			}
294
-
295
-			// Format subscription sign up fee.
296
-			if ( isset( $posted_scheme[ 'subscription_sign_up_fee' ] ) ) {
297
-				$posted_scheme[ 'subscription_sign_up_fee' ] = ( $posted_scheme[ 'subscription_sign_up_fee' ] === '' ) ? '' : wc_format_decimal( $posted_scheme[ 'subscription_sign_up_fee' ] );
298
-			}
299
-
300
-			// Make sure trial period is within allowable range.
301
-			$subscription_ranges = wcs_get_subscription_ranges();
302
-			$max_trial_length = count( $subscription_ranges[ $posted_scheme[ 'subscription_trial_period' ] ] ) - 1;
303
-
304
-			// Format subscription trial length.
305
-			if ( isset( $posted_scheme[ 'subscription_trial_length' ] ) && $posted_scheme[ 'subscription_trial_length' ] > $max_trial_length ) {
306
-				$posted_scheme[ 'subscription_trial_length' ] = ( $posted_scheme[ 'subscription_trial_length' ] === '' ) ? '' : absint( $posted_scheme[ 'subscription_trial_length' ] );
307
-			}
308
-
309
-			// Format subscription trial period.
310
-			$trial_periods = apply_filters( 'wcsatt_stt_trial_periods', array( 'day', 'week', 'month', 'year' ) );
311
-			if ( isset( $posted_scheme[ 'subscription_trial_period' ] ) && in_array( $posted_scheme[ 'subscription_trial_period' ], $trial_periods ) ) {
312
-				$posted_scheme[ 'subscription_trial_period' ] = trim( $posted_scheme[ 'subscription_trial_period' ] );
313
-			}
314
-
315
-			return $posted_scheme;
316
-		} // END wcsatt_stt_process_scheme_data()
317
-
318
-		/**
319
-		 * Adds the additional subscription scheme data for products with attached subscription schemes.
320
-		 *
321
-		 * @param  object     $_product
322
-		 * @param  array      $subscription_scheme
323
-		 * @param  WC_Product $product
324
-		 * @return string
325
-		 */
326
-		public function add_sub_scheme_data_price_html( $_product, $subscription_scheme, $product ) {
327
-			if ( isset( $subscription_scheme[ 'subscription_sign_up_fee' ] ) ) {
328
-				$_product->subscription_sign_up_fee = $subscription_scheme[ 'subscription_sign_up_fee' ];
329
-			}
330
-
331
-			if ( isset( $subscription_scheme[ 'subscription_trial_length' ] ) ) {
332
-				$_product->subscription_trial_length = $subscription_scheme[ 'subscription_trial_length' ];
333
-			}
334
-
335
-			if ( isset( $subscription_scheme[ 'subscription_trial_period' ] ) ) {
336
-				$_product->subscription_trial_period = $subscription_scheme[ 'subscription_trial_period' ];
337
-			}
338
-
339
-			return $_product;
340
-		} // END add_sub_scheme_data_price_html()
341
-
342
-		/**
343
-		 * Adds the extra subscription scheme data to the product object.
344
-		 * This allows the subscription price to change the initial and
345
-		 * recurring subscriptions.
346
-		 *
347
-		 * @param  object $_cloned
348
-		 * @param  array  $subscription_scheme
349
-		 * @return object
350
-		 */
351
-		public function sub_product_scheme_option( $_cloned, $subscription_scheme ) {
352
-			if ( isset( $subscription_scheme[ 'subscription_sign_up_fee' ] ) && $subscription_scheme[ 'subscription_sign_up_fee' ] > 0 ) {
353
-				$_cloned->subscription_sign_up_fee = $subscription_scheme[ 'subscription_sign_up_fee' ];
354
-			}
355
-
356
-			if ( isset( $subscription_scheme[ 'subscription_trial_length' ] ) && 0 != $subscription_scheme[ 'subscription_trial_length' ] ) {
357
-				$_cloned->subscription_trial_length = $subscription_scheme[ 'subscription_trial_length' ];
358
-				$_cloned->subscription_trial_period = $subscription_scheme[ 'subscription_trial_period' ];
359
-			}
360
-
361
-			return $_cloned;
362
-		} // END sub_product_scheme_option()
363
-
364
-		/**
365
-		 * Filters the price string to include the sign up fee and/or trial 
366
-		 * to pass per subscription scheme option.
367
-		 *
368
-		 * @param  array $prices
369
-		 * @param  array $subscription_scheme
370
-		 * @return array
371
-		 */
372
-		public function get_price_string( $prices, $subscription_scheme ) {
373
-			if ( isset( $subscription_scheme[ 'subscription_sign_up_fee' ] ) && $subscription_scheme[ 'subscription_sign_up_fee' ] > 0 ) {
374
-				$prices[ 'sign_up_fee' ] = true;
375
-			}
376
-
377
-			if ( isset( $subscription_scheme[ 'subscription_trial_length' ] ) && 0 != $subscription_scheme[ 'subscription_trial_length' ] ) {
378
-				$prices[ 'trial_length' ] = true;
379
-			}
380
-
381
-			return $prices;
382
-		} // END get_price_string()
383
-
384
-		/**
385
-		 * Filters the price string to include the sign up 
386
-		 * fee on the lowest subscription scheme.
387
-		 *
388
-		 * @param  array $prices
389
-		 * @param  array $lowest_subscription_scheme
390
-		 * @return array
391
-		 */
392
-		public function get_lowest_price_string( $prices,  $lowest_subscription_scheme ) {
393
-			if ( isset( $lowest_subscription_scheme[ 'sign_up_fee' ] ) && $lowest_subscription_scheme[ 'sign_up_fee' ] > 0 ) {
394
-				$prices[ 'sign_up_fee' ] = $lowest_subscription_scheme[ 'sign_up_fee' ];
395
-			}
396
-
397
-			return $prices;
398
-		} // END get_lowest_price_string()
399
-
400
-		/**
401
-		 * Filter the suffix price string.
402
-		 *
403
-		 * @param object     $_product
404
-		 * @param array      $subscription_scheme
405
-		 * @param WC_Product $product
406
-		 * @return string
407
-		 */
408
-		/*public function filter_suffix_price_html( $_product, $subscription_scheme, $product ) {
96
+        public function load_plugin() {
97
+            global $woocommerce;
98
+
99
+            // Check that the required WooCommerce is running.
100
+            if ( version_compare( $woocommerce->version, self::REQ_WC_VERSION, '<' ) ) {
101
+                add_action( 'admin_notices', array( $this, 'wcsatt_stt_wc_admin_notice' ) );
102
+                return false;
103
+            }
104
+
105
+            // Checks that WooCommerce Subscribe All the Things is running or is less than the required version.
106
+            if ( ! class_exists( 'WCS_ATT' ) || version_compare( WCS_ATT::VERSION, self::REQ_WCSATT_VERSION, '<' ) ) {
107
+                add_action( 'admin_notices', array( $this, 'wcsatt_stt_admin_notice' ) );
108
+                return false;
109
+            }
110
+        } // END load_plugin()
111
+
112
+        /**
113
+         * Display a warning message if minimum version of WooCommerce check fails.
114
+         *
115
+         * @return void
116
+         */
117
+        public function wcsatt_stt_wc_admin_notice() {
118
+            echo '<div class="error"><p>' . sprintf( __( '%1$s requires at least %2$s v%3$s in order to function. Please upgrade %2$s.', 'wc-satt-stt' ), 'Sign up and Trial Options Add-on for WCSATT', 'WooCommerce', self::REQ_WC_VERSION ) . '</p></div>';
119
+        } // END wcsatt_stt_wc_admin_notice()
120
+
121
+        /**
122
+         * Display a warning message if minimum version of WooCommerce Subscribe to All the Things check fails.
123
+         *
124
+         * @return void
125
+         */
126
+        public function wcsatt_stt_admin_notice() {
127
+            echo '<div class="error"><p>' . sprintf( __( '%1$s requires at least %2$s v%3$s in order to function. Please upgrade %2$s.', 'wc-satt-stt' ), 'Sign up and Trial Options Add-on', 'WooCommerce Subscribe to All the Things', self::REQ_WCSATT_VERSION ) . '</p></div>';
128
+        } // END wcsatt_stt_admin_notice()
129
+
130
+        /**
131
+         * Initialize the plugin if ready.
132
+         *
133
+         * @return void
134
+         */
135
+        public function init_plugin() {
136
+            // Load text domain.
137
+            load_plugin_textdomain( 'wc-satt-stt', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
138
+
139
+            // Adds the sign up fee and trial data to the price html on the 'wcsatt_overridden_subscription_prices_product' filter.
140
+            add_filter( 'wcsatt_overridden_subscription_prices_product', array( $this, 'add_sub_scheme_data_price_html' ), 10, 3 );
141
+
142
+            // Adds the extra subscription scheme data to the product object on the 'wcsatt_sub_product_scheme_option' filter.
143
+            add_filter( 'wcsatt_sub_product_scheme_option', array( $this, 'sub_product_scheme_option' ), 10, 2 );
144
+
145
+            // Filters the price string to include the sign up fee and/or trial to pass per scheme option on the 'wcsatt_get_single_product_price_string' filter.
146
+            add_filter( 'wcsatt_get_single_product_price_string', array( $this, 'get_price_string' ), 10, 2 );
147
+
148
+            // Filters the lowest price string to include the sign up fee on the 'wcsatt_get_single_product_lowest_price_string' filter.
149
+            add_filter( 'wcsatt_get_single_product_lowest_price_string', array( $this, 'get_lowest_price_string' ), 10, 2 );
150
+
151
+            // Filters the suffix price html on the 'wcsatt_suffix_price_html' filter.
152
+            //add_filter( 'wcsatt_suffix_price_html', array( $this, 'filter_suffix_price_html' ), 10, 1 );
153
+
154
+            // Filters the lowest price subscription scheme data on the 'wcsatt_get_lowest_price_sub_scheme_data' filter.
155
+            add_filter( 'wcsatt_get_lowest_price_sub_scheme_data', array( $this, 'get_lowest_price_sub_scheme_data' ), 10, 2 );
156
+
157
+            // Adds the sign-up and/or trial data to the subscription scheme prices on the 'wcsatt_subscription_scheme_prices' filter.
158
+            add_filter( 'wcsatt_subscription_scheme_prices', array( $this, 'add_subscription_scheme_prices' ), 10, 2 );
159
+
160
+            // Overrides the price of the subscription for sign up fee and/or trial on the 'wcsatt_cart_item' filter.
161
+            add_filter( 'wcsatt_cart_item', array( $this, 'update_cart_item_sub_data' ), 10, 1 );
162
+        } // END init_plugin()
163
+
164
+        /**
165
+         * Register the product meta data fields.
166
+         *
167
+         * @return void
168
+         */
169
+        public function admin_wcsatt_stt_product_meta() {
170
+            // Subscription scheme options displayed on the 'wcsatt_subscription_scheme_content' action.
171
+            //add_action( 'wcsatt_subscription_scheme_content', array( $this, 'wcsatt_stt_fields' ), 15, 3 );
172
+
173
+            // Subscription scheme options displayed on the 'wcsatt_subscription_scheme_product_content' action.
174
+            add_action( 'wcsatt_subscription_scheme_product_content', array( $this, 'wcsatt_stt_fields' ), 15, 3 );
175
+
176
+            // Filter the subscription scheme data to process the sign up and trial options on the ''wcsatt_subscription_scheme_process_scheme_data' filter.
177
+            add_filter( 'wcsatt_subscription_scheme_process_scheme_data', array( $this, 'wcsatt_stt_process_scheme_data' ), 10, 2 );
178
+        } // END admin_wcsatt_stt_product_meta()
179
+
180
+        /**
181
+         * Show row meta on the plugin screen.
182
+         *
183
+         * @param mixed $links Plugin Row Meta
184
+         * @param mixed $file  Plugin Base file
185
+         * @return array
186
+         */
187
+        public function plugin_meta_links( $links, $file, $data, $status ) {
188
+            if ( $file == plugin_basename( __FILE__ ) ) {
189
+                $author1 = '<a href="' . $data[ 'AuthorURI' ] . '">' . $data[ 'Author' ] . '</a>';
190
+                $links[ 1 ] = sprintf( __( 'By %s', WCSATT_STT::TEXT_DOMAIN ), $author1 );
191
+            }
192
+
193
+            return $links;
194
+        } // END plugin_meta_links()
195
+
196
+        /**
197
+         * Adds the default values for subscriptions schemes content.
198
+         *
199
+         * @param  array $defaults
200
+         * @return void
201
+         */
202
+        public static function add_default_subscription_schemes_content( $defaults ) {
203
+            $new_defaults = array(
204
+                'subscription_sign_up_fee'  => '',
205
+                'subscription_trial_length' => '',
206
+                'subscription_trial_period' => ''
207
+            );
208
+
209
+            return array_merge( $new_defaults, $defaults );
210
+        } // END add_default_subscription_schemes_content()
211
+
212
+        /**
213
+         * Adds the trial and sign up fields under the subscription section.
214
+         *
215
+         * @param  int   $index
216
+         * @param  array $scheme_data
217
+         * @param  int   $post_id
218
+         * @return void
219
+         */
220
+        public function wcsatt_stt_fields( $index, $scheme_data, $post_id ) {
221
+            if ( ! empty( $scheme_data ) ) {
222
+                $subscription_sign_up_fee = ! empty( $scheme_data[ 'subscription_sign_up_fee' ] ) ? $scheme_data[ 'subscription_sign_up_fee' ] : '';
223
+                $subscription_trial_length = isset( $scheme_data[ 'subscription_trial_length' ] ) ? $scheme_data[ 'subscription_trial_length' ] : 0;
224
+                $subscription_trial_period = isset( $scheme_data[ 'subscription_trial_period' ] ) ? $scheme_data[ 'subscription_trial_period' ] : '';
225
+            } else {
226
+                $subscription_sign_up_fee = '';
227
+                $subscription_trial_length = 0;
228
+                $subscription_trial_period = '';
229
+            }
230
+
231
+            // Sign-up Fee
232
+            woocommerce_wp_text_input( array(
233
+                'id'          => '_subscription_sign_up_fee',
234
+                'class'       => 'wc_input_subscription_intial_price',
235
+                // translators: %s is a currency symbol / code
236
+                'label'       => sprintf( __( 'Sign-up Fee (%s)', WCSATT_STT::TEXT_DOMAIN ), get_woocommerce_currency_symbol() ),
237
+                'placeholder' => _x( 'e.g. 9.90', 'example price', WCSATT_STT::TEXT_DOMAIN ),
238
+                'description' => __( 'Optionally include an amount to be charged at the outset of the subscription. The sign-up fee will be charged immediately, even if the product has a free trial or the payment dates are synced.', WCSATT_STT::TEXT_DOMAIN ),
239
+                'desc_tip'    => true,
240
+                'type'        => 'text',
241
+                'custom_attributes' => array(
242
+                    'step' => 'any',
243
+                    'min'  => '0',
244
+                ),
245
+                'name'        => 'wcsatt_schemes[' . $index . '][subscription_sign_up_fee]',
246
+                'value'       => $subscription_sign_up_fee
247
+            ) );
248
+
249
+            // Trial Length
250
+            woocommerce_wp_text_input( array(
251
+                'id'          => '_subscription_trial_length',
252
+                'class'       => 'wc_input_subscription_trial_length',
253
+                'label'       => __( 'Free Trial', WCSATT_STT::TEXT_DOMAIN ),
254
+                'name'        => 'wcsatt_schemes[' . $index . '][subscription_trial_length]',
255
+                'value'       => $subscription_trial_length
256
+            ) );
257
+
258
+            // Trial Period
259
+            woocommerce_wp_select( array(
260
+                'id'          => '_subscription_trial_period',
261
+                'class'       => 'wc_input_subscription_trial_period',
262
+                'label'       => __( 'Subscription Trial Period', WCSATT_STT::TEXT_DOMAIN ),
263
+                'options'     => wcs_get_available_time_periods(),
264
+                // translators: placeholder is trial period validation message if passed an invalid value (e.g. "Trial period can not exceed 4 weeks")
265
+                'description' => sprintf( _x( 'An optional period of time to wait before charging the first recurring payment. Any sign up fee will still be charged at the outset of the subscription. %s', 'Trial period dropdown\'s description in pricing fields', WCSATT_STT::TEXT_DOMAIN ), WC_Subscriptions_Admin::get_trial_period_validation_message() ),
266
+                'desc_tip'    => true,
267
+                'value'       => WC_Subscriptions_Product::get_trial_period( $post_id ), // Explicitly set value in to ensure backward compatibility
268
+                'name'        => 'wcsatt_schemes[' . $index . '][subscription_trial_period]',
269
+                'value'       => $subscription_trial_period
270
+        ) );
271
+        } // END wcsatt_stt_fields()
272
+
273
+        /**
274
+         * Filters the subscription scheme data to pass the 
275
+         * sign up and trial options when saving.
276
+         *
277
+         * @param  ini $posted_scheme
278
+         * @param  string $product_type
279
+         * @return void
280
+         */
281
+        public function wcsatt_stt_process_scheme_data( $posted_scheme, $product_type ) {
282
+            // Copy variable type fields.
283
+            if ( 'variable' == $product_type ) {
284
+                if ( isset( $posted_scheme[ 'subscription_sign_up_fee_variable' ] ) ) {
285
+                    $posted_scheme[ 'subscription_sign_up_fee' ] = $posted_scheme[ 'subscription_sign_up_fee_variable' ];
286
+                }
287
+                if ( isset( $posted_scheme[ 'subscription_trial_length_variable' ] ) ) {
288
+                    $posted_scheme[ 'subscription_trial_length' ] = $posted_scheme[ 'subscription_trial_length_variable' ];
289
+                }
290
+                if ( isset( $posted_scheme[ 'subscription_trial_period_variable' ] ) ) {
291
+                    $posted_scheme[ 'subscription_trial_period' ] = $posted_scheme[ 'subscription_trial_period_variable'];
292
+                }
293
+            }
294
+
295
+            // Format subscription sign up fee.
296
+            if ( isset( $posted_scheme[ 'subscription_sign_up_fee' ] ) ) {
297
+                $posted_scheme[ 'subscription_sign_up_fee' ] = ( $posted_scheme[ 'subscription_sign_up_fee' ] === '' ) ? '' : wc_format_decimal( $posted_scheme[ 'subscription_sign_up_fee' ] );
298
+            }
299
+
300
+            // Make sure trial period is within allowable range.
301
+            $subscription_ranges = wcs_get_subscription_ranges();
302
+            $max_trial_length = count( $subscription_ranges[ $posted_scheme[ 'subscription_trial_period' ] ] ) - 1;
303
+
304
+            // Format subscription trial length.
305
+            if ( isset( $posted_scheme[ 'subscription_trial_length' ] ) && $posted_scheme[ 'subscription_trial_length' ] > $max_trial_length ) {
306
+                $posted_scheme[ 'subscription_trial_length' ] = ( $posted_scheme[ 'subscription_trial_length' ] === '' ) ? '' : absint( $posted_scheme[ 'subscription_trial_length' ] );
307
+            }
308
+
309
+            // Format subscription trial period.
310
+            $trial_periods = apply_filters( 'wcsatt_stt_trial_periods', array( 'day', 'week', 'month', 'year' ) );
311
+            if ( isset( $posted_scheme[ 'subscription_trial_period' ] ) && in_array( $posted_scheme[ 'subscription_trial_period' ], $trial_periods ) ) {
312
+                $posted_scheme[ 'subscription_trial_period' ] = trim( $posted_scheme[ 'subscription_trial_period' ] );
313
+            }
314
+
315
+            return $posted_scheme;
316
+        } // END wcsatt_stt_process_scheme_data()
317
+
318
+        /**
319
+         * Adds the additional subscription scheme data for products with attached subscription schemes.
320
+         *
321
+         * @param  object     $_product
322
+         * @param  array      $subscription_scheme
323
+         * @param  WC_Product $product
324
+         * @return string
325
+         */
326
+        public function add_sub_scheme_data_price_html( $_product, $subscription_scheme, $product ) {
327
+            if ( isset( $subscription_scheme[ 'subscription_sign_up_fee' ] ) ) {
328
+                $_product->subscription_sign_up_fee = $subscription_scheme[ 'subscription_sign_up_fee' ];
329
+            }
330
+
331
+            if ( isset( $subscription_scheme[ 'subscription_trial_length' ] ) ) {
332
+                $_product->subscription_trial_length = $subscription_scheme[ 'subscription_trial_length' ];
333
+            }
334
+
335
+            if ( isset( $subscription_scheme[ 'subscription_trial_period' ] ) ) {
336
+                $_product->subscription_trial_period = $subscription_scheme[ 'subscription_trial_period' ];
337
+            }
338
+
339
+            return $_product;
340
+        } // END add_sub_scheme_data_price_html()
341
+
342
+        /**
343
+         * Adds the extra subscription scheme data to the product object.
344
+         * This allows the subscription price to change the initial and
345
+         * recurring subscriptions.
346
+         *
347
+         * @param  object $_cloned
348
+         * @param  array  $subscription_scheme
349
+         * @return object
350
+         */
351
+        public function sub_product_scheme_option( $_cloned, $subscription_scheme ) {
352
+            if ( isset( $subscription_scheme[ 'subscription_sign_up_fee' ] ) && $subscription_scheme[ 'subscription_sign_up_fee' ] > 0 ) {
353
+                $_cloned->subscription_sign_up_fee = $subscription_scheme[ 'subscription_sign_up_fee' ];
354
+            }
355
+
356
+            if ( isset( $subscription_scheme[ 'subscription_trial_length' ] ) && 0 != $subscription_scheme[ 'subscription_trial_length' ] ) {
357
+                $_cloned->subscription_trial_length = $subscription_scheme[ 'subscription_trial_length' ];
358
+                $_cloned->subscription_trial_period = $subscription_scheme[ 'subscription_trial_period' ];
359
+            }
360
+
361
+            return $_cloned;
362
+        } // END sub_product_scheme_option()
363
+
364
+        /**
365
+         * Filters the price string to include the sign up fee and/or trial 
366
+         * to pass per subscription scheme option.
367
+         *
368
+         * @param  array $prices
369
+         * @param  array $subscription_scheme
370
+         * @return array
371
+         */
372
+        public function get_price_string( $prices, $subscription_scheme ) {
373
+            if ( isset( $subscription_scheme[ 'subscription_sign_up_fee' ] ) && $subscription_scheme[ 'subscription_sign_up_fee' ] > 0 ) {
374
+                $prices[ 'sign_up_fee' ] = true;
375
+            }
376
+
377
+            if ( isset( $subscription_scheme[ 'subscription_trial_length' ] ) && 0 != $subscription_scheme[ 'subscription_trial_length' ] ) {
378
+                $prices[ 'trial_length' ] = true;
379
+            }
380
+
381
+            return $prices;
382
+        } // END get_price_string()
383
+
384
+        /**
385
+         * Filters the price string to include the sign up 
386
+         * fee on the lowest subscription scheme.
387
+         *
388
+         * @param  array $prices
389
+         * @param  array $lowest_subscription_scheme
390
+         * @return array
391
+         */
392
+        public function get_lowest_price_string( $prices,  $lowest_subscription_scheme ) {
393
+            if ( isset( $lowest_subscription_scheme[ 'sign_up_fee' ] ) && $lowest_subscription_scheme[ 'sign_up_fee' ] > 0 ) {
394
+                $prices[ 'sign_up_fee' ] = $lowest_subscription_scheme[ 'sign_up_fee' ];
395
+            }
396
+
397
+            return $prices;
398
+        } // END get_lowest_price_string()
399
+
400
+        /**
401
+         * Filter the suffix price string.
402
+         *
403
+         * @param object     $_product
404
+         * @param array      $subscription_scheme
405
+         * @param WC_Product $product
406
+         * @return string
407
+         */
408
+        /*public function filter_suffix_price_html( $_product, $subscription_scheme, $product ) {
409 409
 			$subscription_string = '';
410 410
 
411 411
 			if ( isset( $_product->subscription_trial_length ) && 0 != $_product->subscription_trial_length ) {
@@ -428,96 +428,96 @@  discard block
 block discarded – undo
428 428
 			return $subscription_string;
429 429
 		}*/
430 430
 
431
-		/**
432
-		 * Adds the sign-up fee to the lowest subscription scheme option.
433
-		 *
434
-		 * @param array $data
435
-		 * @param array $lowest_scheme
436
-		 * @return array
437
-		 */
438
-		public function get_lowest_price_sub_scheme_data( $data, $lowest_scheme ) {
439
-			if ( isset( $lowest_scheme['subscription_sign_up_fee'] ) && $lowest_scheme['subscription_sign_up_fee'] > 0 ) {
440
-				$data['sign_up_fee'] = $lowest_scheme['subscription_sign_up_fee'];
441
-			}
442
-
443
-			return $data;
444
-		} // END get_lowest_price_sub_scheme_data()
445
-
446
-		/**
447
-		 * Adds the sign-up and/or trial data to the subscription scheme prices.
448
-		 *
449
-		 * @param  array $prices
450
-		 * @param  array $subscription_scheme
451
-		 * @return array
452
-		 */
453
-		public function add_subscription_scheme_prices( $prices, $subscription_scheme ) {
454
-			if ( isset( $subscription_scheme[ 'subscription_sign_up_fee' ] ) ) {
455
-				$prices[ 'sign_up_fee' ] = $subscription_scheme[ 'subscription_sign_up_fee' ];
456
-			}
457
-
458
-			if ( isset( $subscription_scheme[ 'subscription_trial_length' ] ) ) {
459
-				$prices[ 'trial_length' ] = $subscription_scheme[ 'subscription_trial_length' ];
460
-			}
461
-
462
-			if ( isset( $subscription_scheme[ 'subscription_trial_period' ] ) ) {
463
-				$prices[ 'trial_period' ] = $subscription_scheme[ 'subscription_trial_period' ];
464
-			}
465
-
466
-			return $prices;
467
-		} // END add_subscription_scheme_prices()
468
-
469
-		/**
470
-		 * Updates the cart item data for a subscription product that
471
-		 * has a sign-up fee and/or trial period applied.
472
-		 *
473
-		 * @param  array $cart_item
474
-		 * @return array
475
-		 */
476
-		public function update_cart_item_sub_data( $cart_item ) {
477
-			$active_scheme = WCS_ATT_Schemes::get_active_subscription_scheme( $cart_item );
478
-
479
-			$subscription_prices = WCS_ATT_Scheme_Prices::get_active_subscription_scheme_prices( $cart_item, $active_scheme );
480
-
481
-			if ( $active_scheme && $cart_item['data']->is_converted_to_sub == 'yes' ) {
482
-
483
-				// Subscription Price
484
-				$price = $cart_item['data']->subscription_price;
485
-
486
-				// Is there a sign up fee?
487
-				$sign_up_fee = isset( $subscription_prices['sign_up_fee'] ) ? $subscription_prices['sign_up_fee'] : '';
488
-
489
-				// Put them both together.
490
-				$new_price = $price + $sign_up_fee;
491
-
492
-				if ( $sign_up_fee > 0 ) {
493
-					$cart_item['data']->initial_amount = $new_price;
494
-					$cart_item['data']->subscription_sign_up_fee = $sign_up_fee;
495
-				}
496
-
497
-				$trial_length = isset( $subscription_prices['trial_length'] ) ? $subscription_prices['trial_length'] : 0;
498
-				$trial_period = isset( $subscription_prices['trial_period'] ) ? $subscription_prices['trial_period'] : '';
499
-
500
-				// If a trial length is more than zero then re-adjust the price.
501
-				if ( $trial_length > 0 ) {
502
-
503
-					/*$cart_item['data']->price = $new_price;
431
+        /**
432
+         * Adds the sign-up fee to the lowest subscription scheme option.
433
+         *
434
+         * @param array $data
435
+         * @param array $lowest_scheme
436
+         * @return array
437
+         */
438
+        public function get_lowest_price_sub_scheme_data( $data, $lowest_scheme ) {
439
+            if ( isset( $lowest_scheme['subscription_sign_up_fee'] ) && $lowest_scheme['subscription_sign_up_fee'] > 0 ) {
440
+                $data['sign_up_fee'] = $lowest_scheme['subscription_sign_up_fee'];
441
+            }
442
+
443
+            return $data;
444
+        } // END get_lowest_price_sub_scheme_data()
445
+
446
+        /**
447
+         * Adds the sign-up and/or trial data to the subscription scheme prices.
448
+         *
449
+         * @param  array $prices
450
+         * @param  array $subscription_scheme
451
+         * @return array
452
+         */
453
+        public function add_subscription_scheme_prices( $prices, $subscription_scheme ) {
454
+            if ( isset( $subscription_scheme[ 'subscription_sign_up_fee' ] ) ) {
455
+                $prices[ 'sign_up_fee' ] = $subscription_scheme[ 'subscription_sign_up_fee' ];
456
+            }
457
+
458
+            if ( isset( $subscription_scheme[ 'subscription_trial_length' ] ) ) {
459
+                $prices[ 'trial_length' ] = $subscription_scheme[ 'subscription_trial_length' ];
460
+            }
461
+
462
+            if ( isset( $subscription_scheme[ 'subscription_trial_period' ] ) ) {
463
+                $prices[ 'trial_period' ] = $subscription_scheme[ 'subscription_trial_period' ];
464
+            }
465
+
466
+            return $prices;
467
+        } // END add_subscription_scheme_prices()
468
+
469
+        /**
470
+         * Updates the cart item data for a subscription product that
471
+         * has a sign-up fee and/or trial period applied.
472
+         *
473
+         * @param  array $cart_item
474
+         * @return array
475
+         */
476
+        public function update_cart_item_sub_data( $cart_item ) {
477
+            $active_scheme = WCS_ATT_Schemes::get_active_subscription_scheme( $cart_item );
478
+
479
+            $subscription_prices = WCS_ATT_Scheme_Prices::get_active_subscription_scheme_prices( $cart_item, $active_scheme );
480
+
481
+            if ( $active_scheme && $cart_item['data']->is_converted_to_sub == 'yes' ) {
482
+
483
+                // Subscription Price
484
+                $price = $cart_item['data']->subscription_price;
485
+
486
+                // Is there a sign up fee?
487
+                $sign_up_fee = isset( $subscription_prices['sign_up_fee'] ) ? $subscription_prices['sign_up_fee'] : '';
488
+
489
+                // Put them both together.
490
+                $new_price = $price + $sign_up_fee;
491
+
492
+                if ( $sign_up_fee > 0 ) {
493
+                    $cart_item['data']->initial_amount = $new_price;
494
+                    $cart_item['data']->subscription_sign_up_fee = $sign_up_fee;
495
+                }
496
+
497
+                $trial_length = isset( $subscription_prices['trial_length'] ) ? $subscription_prices['trial_length'] : 0;
498
+                $trial_period = isset( $subscription_prices['trial_period'] ) ? $subscription_prices['trial_period'] : '';
499
+
500
+                // If a trial length is more than zero then re-adjust the price.
501
+                if ( $trial_length > 0 ) {
502
+
503
+                    /*$cart_item['data']->price = $new_price;
504 504
 					$cart_item['data']->subscription_price = $new_price;
505 505
 					$cart_item['data']->sale_price = $new_price;
506 506
 					$cart_item['data']->regular_price = $new_price;*/
507 507
 
508
-					$cart_item['data']->subscription_trial_length = $trial_length;
509
-					$cart_item['data']->subscription_trial_period = $trial_period;
510
-				} else {
511
-					$cart_item['data']->subscription_trial_length = 0;
512
-					$cart_item['data']->subscription_trial_period = '';
513
-				}
508
+                    $cart_item['data']->subscription_trial_length = $trial_length;
509
+                    $cart_item['data']->subscription_trial_period = $trial_period;
510
+                } else {
511
+                    $cart_item['data']->subscription_trial_length = 0;
512
+                    $cart_item['data']->subscription_trial_period = '';
513
+                }
514 514
 
515
-			}
515
+            }
516 516
 
517
-			return $cart_item;
518
-		} // END update_cart_item_sub_data()
517
+            return $cart_item;
518
+        } // END update_cart_item_sub_data()
519 519
 
520
-	} // END class
520
+    } // END class
521 521
 
522 522
 } // END if class exists
523 523
 
Please login to merge, or discard this patch.