Completed
Pull Request — master (#3)
by Sébastien
02:41
created

WCSATT_STT::init_plugin()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 28
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 1
Metric Value
c 3
b 0
f 1
dl 0
loc 28
rs 8.8571
cc 1
eloc 9
nc 1
nop 0
1
<?php
2
/*
3
 * Plugin Name: WooCommerce Subscribe to All the Things - Sign up and Trial Addon
4
 * Plugin URI:  https://sebastiendumont.com
5
 * Version:     1.0.0 Alpha
6
 * Description: Add a sign up fee and free trial for each subscription scheme. Requires WooCommerce Subscribe to All the Things extension v1.1.1+.
7
 * Author:      Sebastien Dumont
8
 * Author URI:  https://sebastiendumont.com
9
 *
10
 * Text Domain: wc-satt-stt
11
 * Domain Path: /languages/
12
 *
13
 * Requires at least: 4.1
14
 * Tested up to: 4.5.2
15
 *
16
 * Copyright: © 2016 Sebastien Dumont
17
 * License: GNU General Public License v3.0
18
 * License URI: http://www.gnu.org/licenses/gpl-3.0.html
19
 */
20
if ( ! defined('ABSPATH') ) exit; // Exit if accessed directly.
21
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
		/*
94
		 * Check requirements on activation.
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 );
0 ignored issues
show
Unused Code Comprehensibility introduced by
63% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
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 );
0 ignored issues
show
Unused Code Comprehensibility introduced by
63% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
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 ) {
0 ignored issues
show
Unused Code introduced by
The parameter $product is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
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 ) {
0 ignored issues
show
Unused Code Comprehensibility introduced by
44% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
409
			$subscription_string = '';
410
411
			if ( isset( $_product->subscription_trial_length ) && 0 != $_product->subscription_trial_length ) {
412
				$trial_string = wcs_get_subscription_trial_period_strings( $_product->subscription_trial_length, $_product->subscription_trial_period );
413
				// translators: 1$: subscription string (e.g. "$15 on March 15th every 3 years for 6 years"), 2$: trial length (e.g.: "with 4 months free trial")
414
				$subscription_string = sprintf( __( '%1$s with %2$s free trial', WCSATT_STT::TEXT_DOMAIN ), $subscription_string, $trial_string );
415
			}
416
417
			$sign_up_fee = $_product->subscription_sign_up_fee;
418
419
			if ( is_numeric( $sign_up_fee ) ) {
420
				$sign_up_fee = wc_price( $sign_up_fee );
421
			}
422
423
			if ( isset( $_product->subscription_sign_up_fee ) && $_product->subscription_sign_up_fee > 0 ) {
424
				// translators: 1$: subscription string (e.g. "$15 on March 15th every 3 years for 6 years with 2 months free trial"), 2$: signup fee price (e.g. "and a $30 sign-up fee")
425
				$subscription_string = sprintf( __( '%1$s and a %2$s sign-up fee', WCSATT_STT::TEXT_DOMAIN ), $subscription_string, $sign_up_fee );
426
			}
427
428
			return $subscription_string;
429
		}*/
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;
0 ignored issues
show
Unused Code Comprehensibility introduced by
60% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
504
					$cart_item['data']->subscription_price = $new_price;
505
					$cart_item['data']->sale_price = $new_price;
506
					$cart_item['data']->regular_price = $new_price;*/
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
				}
514
515
			}
516
517
			return $cart_item;
518
		} // END update_cart_item_sub_data()
519
520
	} // END class
521
522
} // END if class exists
523
524
return WCSATT_STT::instance();