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 ); |
|
|
|
|
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
|
|
|
$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; |
|
|
|
|
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(); |
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.