Test Failed
Pull Request — master (#2054)
by Devin
05:04
created

Give_License::__construct()   C

Complexity

Conditions 8
Paths 32

Size

Total Lines 28
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 72

Importance

Changes 0
Metric Value
cc 8
eloc 20
nc 32
nop 8
dl 0
loc 28
rs 5.3846
c 0
b 0
f 0
ccs 0
cts 7
cp 0
crap 72

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
/**
3
 * Give License handler
4
 *
5
 * @package     Give
6
 * @subpackage  Admin/License
7
 * @copyright   Copyright (c) 2016, WordImpress
8
 * @license     https://opensource.org/licenses/gpl-license GNU Public License
9
 * @since       1.0
10
 */
11
12
// Exit if accessed directly.
13
if ( ! defined( 'ABSPATH' ) ) {
14
	exit;
15
}
16
17
if ( ! class_exists( 'Give_License' ) ) :
18
19
	/**
20
	 * Give_License Class
21
	 *
22
	 * This class simplifies the process of adding license information
23
	 * to new Give add-ons.
24
	 *
25
	 * @since 1.0
26
	 */
27
	class Give_License {
28
29
		/**
30
		 * File
31
		 *
32
		 * @access private
33
		 * @since  1.0
34
		 *
35
		 * @var    string
36
		 */
37
		private $file;
38
39
		/**
40
		 * License
41
		 *
42
		 * @access private
43
		 * @since  1.0
44
		 *
45
		 * @var    string
46
		 */
47
		private $license;
48
49
		/**
50
		 * Item name
51
		 *
52
		 * @access private
53
		 * @since  1.0
54
		 *
55
		 * @var    string
56
		 */
57
		private $item_name;
58
59
		/**
60
		 * License Information object.
61
		 *
62
		 * @access private
63
		 * @since  1.7
64
		 *
65
		 * @var    object
66
		 */
67
		private $license_data;
68
69
		/**
70
		 * Item shortname
71
		 *
72
		 * @access private
73
		 * @since  1.0
74
		 *
75
		 * @var    string
76
		 */
77
		private $item_shortname;
78
79
		/**
80
		 * Version
81
		 *
82
		 * @access private
83
		 * @since  1.0
84
		 *
85
		 * @var    string
86
		 */
87
		private $version;
88
89
		/**
90
		 * Author
91
		 *
92
		 * @access private
93
		 * @since  1.0
94
		 *
95
		 * @var    string
96
		 */
97
		private $author;
98
99
		/**
100
		 * API URL
101
		 *
102
		 * @access private
103
		 * @since  1.0
104
		 *
105
		 * @var    string
106
		 */
107
		private $api_url = 'https://givewp.com/edd-sl-api/';
108
109
		/**
110
		 * Account URL
111
		 *
112
		 * @access private
113
		 * @since  1.7
114
		 *
115
		 * @var null|string
116
		 */
117
		private $account_url = 'https://givewp.com/my-account/';
118
119
		/**
120
		 * Checkout URL
121
		 *
122
		 * @access private
123
		 * @since  1.7
124
		 *
125
		 * @var null|string
126
		 */
127
		private $checkout_url = 'https://givewp.com/checkout/';
128
129
		/**
130
		 * Class Constructor
131
		 *
132
		 * Set up the Give License Class.
133
		 *
134
		 * @access public
135
		 * @since  1.0
136
		 *
137
		 * @param string $_file
138
		 * @param string $_item_name
139
		 * @param string $_version
140
		 * @param string $_author
141
		 * @param string $_optname
142
		 * @param string $_api_url
143
		 * @param string $_checkout_url
144
		 * @param string $_account_url
145
		 */
146
		public function __construct( $_file, $_item_name, $_version, $_author, $_optname = null, $_api_url = null, $_checkout_url = null, $_account_url = null ) {
0 ignored issues
show
Unused Code introduced by
The parameter $_optname 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...
147
148
			$give_options = give_get_settings();
149
150
			$this->file             = $_file;
151
			$this->item_name        = $_item_name;
152
			$this->item_shortname   = 'give_' . preg_replace( '/[^a-zA-Z0-9_\s]/', '', str_replace( ' ', '_', strtolower( $this->item_name ) ) );
153
			$this->version          = $_version;
154
			$this->license          = isset( $give_options[ $this->item_shortname . '_license_key' ] ) ? trim( $give_options[ $this->item_shortname . '_license_key' ] ) : '';
155
			$this->license_data     = get_option( $this->item_shortname . '_license_active' );
156
			$this->author           = $_author;
157
			$this->api_url          = is_null( $_api_url ) ? $this->api_url : $_api_url;
158
			$this->checkout_url     = is_null( $_checkout_url ) ? $this->checkout_url : $_checkout_url;
159
			$this->account_url      = is_null( $_account_url ) ? $this->account_url : $_account_url;
160
			$this->auto_updater_obj = null;
161
162
			// Add Setting for Give Add-on activation status.
163
			$is_addon_activated = get_option( 'give_is_addon_activated' );
164
			if( ! $is_addon_activated && is_object( $this ) && sizeof( $this ) > 0 ) {
0 ignored issues
show
introduced by
Space after opening control structure is required
Loading history...
introduced by
No space before opening parenthesis is prohibited
Loading history...
165
				update_option( 'give_is_addon_activated', true );
166
				Give_Cache::set( 'give_cache_hide_license_notice_after_activation', true, DAY_IN_SECONDS );
167
			}
168
169
			// Setup hooks
170
			$this->includes();
171
			$this->hooks();
172
			$this->auto_updater();
173
		}
174
175
		/**
176
		 * Includes
177
		 *
178
		 * Include the updater class.
179
		 *
180
		 * @access private
181
		 * @since  1.0
182
		 *
183
		 * @return void
184
		 */
185
		private function includes() {
186
187
			if ( ! class_exists( 'EDD_SL_Plugin_Updater' ) ) {
188
				require_once 'admin/EDD_SL_Plugin_Updater.php';
189
			}
190
		}
191
192
		/**
193
		 * Hooks
194
		 *
195
		 * Setup license hooks.
196
		 *
197
		 * @access private
198
		 * @since  1.0
199
		 *
200
		 * @return void
201
		 */
202
		private function hooks() {
203
204
			// Register settings.
205
			add_filter( 'give_settings_licenses', array( $this, 'settings' ), 1 );
206
207
			// Activate license key on settings save.
208
			add_action( 'admin_init', array( $this, 'activate_license' ) );
209
210
			// Deactivate license key.
211
			add_action( 'admin_init', array( $this, 'deactivate_license' ) );
212
213
			// Updater.
214
			add_action( 'admin_init', array( $this, 'auto_updater' ), 0 );
215
			add_action( 'admin_notices', array( $this, 'notices' ) );
216
217
			// Check license weekly.
218
			Give_Cron::add_weekly_event( array( $this, 'weekly_license_check' ) );
219
			add_action( 'give_validate_license_when_site_migrated', array( $this, 'weekly_license_check' ) );
220
221
			// Check subscription weekly.
222
			Give_Cron::add_weekly_event( array( $this, 'weekly_subscription_check' ) );
223
			add_action( 'give_validate_license_when_site_migrated', array( $this, 'weekly_subscription_check' ) );
224
225
			// Show addon notice on plugin page.
226
			$plugin_name = explode( 'plugins/', $this->file );
227
			$plugin_name = end( $plugin_name );
228
			add_action( "after_plugin_row_{$plugin_name}", array( $this, 'plugin_page_notices' ), 10, 3 );
229
230
		}
231
232
233
		/**
234
		 * Auto Updater
235
		 *
236
		 * @access private
237
		 * @since  1.0
238
		 *
239
		 * @return void
240
		 */
241
		public function auto_updater() {
242
243
			// Setup the updater.
244
			$this->auto_updater_obj = new EDD_SL_Plugin_Updater(
245
				$this->api_url,
246
				$this->file,
247
				array(
248
					'version'   => $this->version,
249
					'license'   => $this->license,
250
					'item_name' => $this->item_name,
251
					'author'    => $this->author,
252
				)
253
			);
254
		}
255
256
		/**
257
		 * License Settings
258
		 *
259
		 * Add license field to settings.
260
		 *
261
		 * @access public
262
		 * @since  1.0
263
		 *
264
		 * @param  array $settings License settings.
265
		 *
266
		 * @return array           License settings.
267
		 */
268
		public function settings( $settings ) {
269
270
			$give_license_settings = array(
271
				array(
272
					'name'    => $this->item_name,
273
					'id'      => $this->item_shortname . '_license_key',
274
					'desc'    => '',
275
					'type'    => 'license_key',
276
					'options' => array(
277
						'license'      => get_option( $this->item_shortname . '_license_active' ),
278
						'shortname'    => $this->item_shortname,
279
						'item_name'    => $this->item_name,
280
						'api_url'      => $this->api_url,
281
						'checkout_url' => $this->checkout_url,
282
						'account_url'  => $this->account_url,
283
					),
284
					'size'    => 'regular',
285
				),
286
			);
287
288
			return array_merge( $settings, $give_license_settings );
289
		}
290
291
		/**
292
		 * License Settings Content
293
		 *
294
		 * Add Some Content to the Licensing Settings.
295
		 *
296
		 * @access public
297
		 * @since  1.0
298
		 *
299
		 * @param  array $settings License settings content.
300
		 *
301
		 * @return array           License settings content.
302
		 */
303
		public function license_settings_content( $settings ) {
304
305
			$give_license_settings = array(
306
				array(
307
					'name' => __( 'Add-on Licenses', 'give' ),
308
					'desc' => '<hr>',
309
					'type' => 'give_title',
310
					'id'   => 'give_title',
311
				),
312
			);
313
314
			return array_merge( $settings, $give_license_settings );
315
		}
316
317
		/**
318
		 * Activate License
319
		 *
320
		 * Activate the license key.
321
		 *
322
		 * @access public
323
		 * @since  1.0
324
		 *
325
		 * @return void
326
		 */
327
		public function activate_license() {
328
			// Bailout.
329
			if( ! $this->__is_user_can_edit_license() ) {
0 ignored issues
show
introduced by
Space after opening control structure is required
Loading history...
introduced by
No space before opening parenthesis is prohibited
Loading history...
330
				return;
331
			}
332
333
			// Allow third party addon developers to handle license activation.
334
			if ( $this->__is_third_party_addon() ) {
335
				do_action( 'give_activate_license', $this );
336
337
				return;
338
			}
339
340
			// Delete previous license setting if a empty license key submitted.
341
			if ( empty( $_POST[ $this->item_shortname . '_license_key' ] ) ) {
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
342
				delete_option( $this->item_shortname . '_license_active' );
343
344
				return;
345
			}
346
347
			// Do not simultaneously activate add-ons if the user want to deactivate a specific add-on.
348
			foreach ( $_POST as $key => $value ) {
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
349
				if ( false !== strpos( $key, 'license_key_deactivate' ) ) {
350
					// Don't activate a key when deactivating a different key
351
					return;
352
				}
353
			}
354
355
			// Check if plugin previously installed.
356
			if ( $this->is_valid_license() ) {
357
				return;
358
			}
359
360
			// Get license key.
361
			$this->license = sanitize_text_field( $_POST[ $this->item_shortname . '_license_key' ] );
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
362
363
			// Delete previous license key from subscription if previously added.
364
			$this->__remove_license_key_from_subscriptions();
365
366
			// Make sure there are no api errors.
367
			if ( ! ( $license_data = $this->get_license_info( 'activate_license' ) ) ) {
368
				return;
369
			}
370
371
			// Tell WordPress to look for updates.
372
			set_site_transient( 'update_plugins', null );
373
374
			// Add license data.
375
			update_option( $this->item_shortname . '_license_active', $license_data );
376
377
			// Add license key.
378
			give_update_option( "{$this->item_shortname}_license_key", $this->license );
379
380
			// Check subscription for license key and store this to db (if any).
381
			$this->__single_subscription_check();
382
		}
383
384
		/**
385
		 * Deactivate License
386
		 *
387
		 * Deactivate the license key.
388
		 *
389
		 * @access public
390
		 * @since  1.0
391
		 *
392
		 * @return void
393
		 */
394
		public function deactivate_license() {
395
			// Bailout.
396
			if( ! $this->__is_user_can_edit_license() ) {
0 ignored issues
show
introduced by
Space after opening control structure is required
Loading history...
introduced by
No space before opening parenthesis is prohibited
Loading history...
397
				return;
398
			}
399
400
			// Allow third party add-on developers to handle license deactivation.
401
			if ( $this->__is_third_party_addon() ) {
402
				do_action( 'give_deactivate_license', $this );
403
404
				return;
405
			}
406
407
			// Run on deactivate button press.
408
			if ( isset( $_POST[ $this->item_shortname . '_license_key_deactivate' ] ) ) {
409
410
				// Make sure there are no api errors.
411
				if ( ! ( $license_data = $this->get_license_info( 'deactivate_license' ) ) ) {
412
					return;
413
				}
414
415
				// Ensure deactivated successfully.
416
				if ( isset( $license_data->success ) ) {
417
418
					// Remove license data.
419
					delete_option( $this->item_shortname . '_license_active' );
420
421
					// Delete licence data.
422
					give_delete_option( $this->item_shortname . '_license_key' );
423
424
					// Remove license key from subscriptions if exist.
425
					$this->__remove_license_key_from_subscriptions();
426
427
				}
428
			}// End if().
429
		}
430
431
		/**
432
		 * Check if license key is valid once per week.
433
		 *
434
		 * @access public
435
		 * @since  1.7
436
		 *
437
		 * @return void
438
		 */
439
		public function weekly_license_check() {
440
441
			if (
442
				! empty( $_POST['give_settings'] ) ||
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
443
				empty( $this->license )
444
			) {
445
				return;
446
			}
447
448
			// Allow third party add-on developers to handle their license check.
449
			if ( $this->__is_third_party_addon() ) {
450
				do_action( 'give_weekly_license_check', $this );
451
452
				return;
453
			}
454
455
			// Make sure there are no api errors.
456
			if ( ! ( $license_data = $this->get_license_info( 'check_license' ) ) ) {
457
				return;
458
			}
459
460
			update_option( $this->item_shortname . '_license_active', $license_data );
461
462
			return;
463
		}
464
465
		/**
466
		 * Check subscription validation once per week
467
		 *
468
		 * @access public
469
		 * @since  1.7
470
		 *
471
		 * @return void
472
		 */
473
		public function weekly_subscription_check() {
474
			// Bailout.
475
			if (
476
				! empty( $_POST['give_settings'] ) ||
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
477
				empty( $this->license )
478
			) {
479
				return;
480
			}
481
482
			// Remove old subscription data.
483
			if ( absint( get_option( '_give_subscriptions_edit_last', true ) ) < current_time( 'timestamp', 1 ) ) {
484
				delete_option( 'give_subscriptions' );
485
				update_option( '_give_subscriptions_edit_last', strtotime( '+ 1 day', current_time( 'timestamp', 1 ) ) );
486
			}
487
488
			// Allow third party add-on developers to handle their subscription check.
489
			if ( $this->__is_third_party_addon() ) {
490
				do_action( 'give_weekly_subscription_check', $this );
491
492
				return;
493
			}
494
495
			$this->__single_subscription_check();
496
		}
497
498
		/**
499
		 * Check if license key is part of subscription or not
500
		 *
501
		 * @access private
502
		 * @since  1.7
503
		 *
504
		 * @return void
505
		 */
506
		private function __single_subscription_check() {
0 ignored issues
show
Coding Style introduced by
Method name "Give_License::__single_subscription_check" is invalid; only PHP magic methods should be prefixed with a double underscore
Loading history...
507
			if ( empty( $this->license ) ) {
508
				return;
509
			}
510
511
			// Make sure there are no api errors.
512
			// Do not get confused with edd_action check_subscription.
513
			// By default edd software licensing api does not have api to check subscription.
514
			// This is a custom feature to check subscriptions.
515
			if ( ! ( $subscription_data = $this->get_license_info( 'check_subscription', true ) ) ) {
516
				return;
517
			}
518
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
519
520
			if ( ! empty( $subscription_data['success'] ) && absint( $subscription_data['success'] ) ) {
521
				$subscriptions = get_option( 'give_subscriptions', array() );
522
523
				// Update subscription data only if subscription does not exist already.
524
				$subscriptions[ $subscription_data['id'] ]            = $subscription_data;
525
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
526
527
				// Initiate default set of license for subscription.
528
				if( ! isset( $subscriptions[ $subscription_data['id'] ]['licenses'] ) ) {
0 ignored issues
show
introduced by
Space after opening control structure is required
Loading history...
introduced by
No space before opening parenthesis is prohibited
Loading history...
529
					$subscriptions[ $subscription_data['id']]['licenses'] = array();
0 ignored issues
show
introduced by
Array keys should be surrounded by spaces unless they contain a string or an integer.
Loading history...
530
				}
531
532
				// Store licenses for subscription.
533
				if ( ! in_array( $this->license, $subscriptions[ $subscription_data['id'] ]['licenses'] ) ) {
534
					$subscriptions[ $subscription_data['id']]['licenses'][] = $this->license;
0 ignored issues
show
introduced by
Array keys should be surrounded by spaces unless they contain a string or an integer.
Loading history...
535
				}
536
537
				update_option( 'give_subscriptions', $subscriptions );
538
			}
539
		}
540
541
		/**
542
		 * Admin notices for errors
543
		 *
544
		 * @access public
545
		 * @since  1.0
546
		 *
547
		 * @return void
548
		 */
549
		public function notices() {
550
551
			if ( ! current_user_can( 'manage_give_settings' ) ) {
552
				return;
553
			}
554
555
			// Do not show licenses notices on license tab.
556
			if ( 'licenses' === give_get_current_setting_tab() ) {
557
				return;
558
			}
559
560
			static $showed_invalid_message;
561
			static $showed_subscriptions_message;
562
			static $addon_license_key_in_subscriptions;
563
564
			// Set default value.
565
			$addon_license_key_in_subscriptions = ! empty( $addon_license_key_in_subscriptions ) ? $addon_license_key_in_subscriptions : array();
566
			$messages                           = array();
567
568
			// Check whether admin has Give Add-on activated since 24 hours?
569
			$is_license_notice_hidden = Give_Cache::get( 'give_cache_hide_license_notice_after_activation' );
570
571
			// Display Invalid License notice, if its more than 24 hours since first Give Add-on activation.
572
			if (
573
				empty( $this->license )
574
				&& empty( $showed_invalid_message )
575
				&& ( false === $is_license_notice_hidden )
576
			) {
577
578
				Give()->notices->register_notice( array(
579
					'id'               => 'give-invalid-license',
580
					'type'             => 'error',
581
					'description'      => sprintf(
582
						__( 'You have invalid or expired license keys for one or more Give Add-ons. Please go to the <a href="%s">licenses page</a> to correct this issue.', 'give' ),
583
						admin_url( 'edit.php?post_type=give_forms&page=give-settings&tab=licenses' )
584
					),
585
					'dismissible_type' => 'user',
586
					'dismiss_interval' => 'shortly',
587
				) );
588
589
				$showed_invalid_message = true;
590
591
			}
592
593
			// Get subscriptions.
594
			$subscriptions = get_option( 'give_subscriptions' );
595
596
			// Show subscription messages.
597
			if ( ! empty( $subscriptions ) && ! $showed_subscriptions_message ) {
598
599
				foreach ( $subscriptions as $subscription ) {
600
					// Subscription expires timestamp.
601
					$subscription_expires = strtotime( $subscription['expires'] );
602
603
					// Start showing subscriptions message before one week of renewal date.
604
					if ( strtotime( '- 7 days', $subscription_expires ) > current_time( 'timestamp', 1 ) ) {
605
						continue;
606
					}
607
608
					// Check if subscription message already exist in messages.
609
					if ( array_key_exists( $subscription['id'], $messages ) ) {
610
						continue;
611
					}
612
613
					// Check if license already expired.
614
					if ( strtotime( $subscription['expires'] ) < current_time( 'timestamp', 1 ) ) {
615
						Give()->notices->register_notice( array(
616
							'id'               => "give-expired-subscription-{$subscription['id']}",
617
							'type'             => 'error',
618
							'description'      => sprintf(
619
								__( 'Your Give add-on license expired for payment <a href="%1$s" target="_blank">#%2$d</a>. <a href="%3$s" target="_blank">Click to renew an existing license</a> or %4$s.', 'give' ),
620
								urldecode( $subscription['invoice_url'] ),
621
								$subscription['payment_id'],
622
								"{$this->checkout_url}?edd_license_key={$subscription['license_key']}&utm_campaign=admin&utm_source=licenses&utm_medium=expired",
623
								Give()->notices->get_dismiss_link(array(
624
									'title' => __( 'Click here if already renewed', 'give' ),
625
									'dismissible_type'      => 'user',
626
									'dismiss_interval'      => 'permanent',
627
								))
628
							),
629
							'dismissible_type' => 'user',
630
							'dismiss_interval' => 'shortly',
631
						) );
632
					} else {
633
						Give()->notices->register_notice( array(
634
							'id'               => "give-expires-subscription-{$subscription['id']}",
635
							'type'             => 'error',
636
							'description'      => sprintf(
637
								__( 'Your Give add-on license will expire in %1$s for payment <a href="%2$s" target="_blank">#%3$d</a>. <a href="%4$s" target="_blank">Click to renew an existing license</a> or %5$s.', 'give' ),
638
								human_time_diff( current_time( 'timestamp', 1 ), strtotime( $subscription['expires'] ) ),
639
								urldecode( $subscription['invoice_url'] ),
640
								$subscription['payment_id'],
641
								"{$this->checkout_url}?edd_license_key={$subscription['license_key']}&utm_campaign=admin&utm_source=licenses&utm_medium=expired",
642
								Give()->notices->get_dismiss_link(array(
643
									'title' => __( 'Click here if already renewed', 'give' ),
644
									'dismissible_type'      => 'user',
645
									'dismiss_interval'      => 'permanent',
646
								))
647
							),
648
							'dismissible_type' => 'user',
649
							'dismiss_interval' => 'shortly',
650
						) );
651
					}
652
653
					// Stop validation for these license keys.
654
					$addon_license_key_in_subscriptions = array_merge( $addon_license_key_in_subscriptions, $subscription['licenses'] );
655
				}// End foreach().
656
				$showed_subscriptions_message = true;
657
			}// End if().
658
659
			// Show Non Subscription Give Add-on messages.
660
			if (
661
				! in_array( $this->license, $addon_license_key_in_subscriptions )
662
				&& ! empty( $this->license )
663
				&& empty( $showed_invalid_message )
664
				&& ! $this->is_valid_license()
665
			) {
666
667
				Give()->notices->register_notice( array(
668
					'id'               => 'give-invalid-license',
669
					'type'             => 'error',
670
					'description'      => sprintf(
671
						__( 'You have invalid or expired license keys for one or more Give Add-ons. Please go to the <a href="%s">licenses page</a> to correct this issue.', 'give' ),
672
						admin_url( 'edit.php?post_type=give_forms&page=give-settings&tab=licenses' )
673
					),
674
					'dismissible_type' => 'user',
675
					'dismiss_interval' => 'shortly',
676
				) );
677
678
				$showed_invalid_message = true;
679
680
			}
681
		}
682
683
		/**
684
		 * Check if license is valid or not.
685
		 *
686
		 * @access public
687
		 * @since  1.7
688
		 *
689
		 * @return bool
690
		 */
691
		public function is_valid_license() {
692
			if ( apply_filters( 'give_is_valid_license', ( is_object( $this->license_data ) && ! empty( $this->license_data ) && property_exists( $this->license_data, 'license' ) && 'valid' === $this->license_data->license ) ) ) {
693
				return true;
694
			}
695
696
			return false;
697
		}
698
699
		/**
700
		 * Check if license is valid or not.
701
		 *
702
		 * @access private
703
		 * @since  1.7
704
		 *
705
		 * @return bool
706
		 */
707
		private function __is_third_party_addon() {
0 ignored issues
show
Coding Style introduced by
Method name "Give_License::__is_third_party_addon" is invalid; only PHP magic methods should be prefixed with a double underscore
Loading history...
708
			return ( false === strpos( $this->api_url, 'givewp.com/' ) );
709
		}
710
711
		/**
712
		 * Remove license key from subscription.
713
		 *
714
		 * This function mainly uses when admin user deactivate license key,
715
		 * then we do not need subscription information for that license key.
716
		 *
717
		 * @access private
718
		 * @since  1.7
719
		 *
720
		 * @return bool
721
		 */
722
		private function __remove_license_key_from_subscriptions() {
0 ignored issues
show
Coding Style introduced by
Method name "Give_License::__remove_license_key_from_subscriptions" is invalid; only PHP magic methods should be prefixed with a double underscore
Loading history...
723
			$subscriptions = get_option( 'give_subscriptions', array() );
724
725
			// Bailout.
726
			if ( empty( $this->license ) ) {
727
				return false;
728
			}
729
730
			if ( ! empty( $subscriptions ) ) {
731
				foreach ( $subscriptions as $subscription_id => $subscription ) {
732
					$license_index = array_search( $this->license, $subscription['licenses'] );
733
					if ( false !== $license_index ) {
734
						// Remove license key.
735
						unset( $subscriptions[ $subscription_id ]['licenses'][ $license_index ] );
736
737
						// Rearrange license keys.
738
						$subscriptions[ $subscription_id ]['licenses'] = array_values( $subscriptions[ $subscription_id ]['licenses'] );
739
740
						// Update subscription information.
741
						update_option( 'give_subscriptions', $subscriptions );
742
						break;
743
					}
744
				}
745
			}
746
		}
747
748
		/**
749
		 * @param $plugin_file
750
		 * @param $plugin_data
751
		 * @param $status
752
		 *
753
		 * @return bool
754
		 */
755
		public function plugin_page_notices( $plugin_file, $plugin_data, $status ) {
0 ignored issues
show
Unused Code introduced by
The parameter $plugin_file 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...
Unused Code introduced by
The parameter $plugin_data 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...
Unused Code introduced by
The parameter $status 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...
756
			// Bailout.
757
			if ( $this->is_valid_license() ) {
758
				return false;
759
			}
760
761
			$update_notice_wrap = '<tr class="give-addon-notice-tr active"><td colspan="3" class="colspanchange"><div class="notice inline notice-warning notice-alt give-invalid-license"><p><span class="dashicons dashicons-info"></span> %s</p></div></td></tr>';
762
			$message            = $this->license_state_message();
763
764
			if ( ! empty( $message['message'] ) ) {
765
				echo sprintf( $update_notice_wrap, $message['message'] );
0 ignored issues
show
introduced by
Expected a sanitizing function (see Codex for 'Data Validation'), but instead saw 'sprintf'
Loading history...
766
			}
767
		}
768
769
770
		/**
771
		 * Get message related to license state.
772
		 *
773
		 * @since  1.8.7
774
		 * @access public
775
		 * @return array
776
		 */
777
		public function license_state_message() {
778
			$message_data = array();
779
780
			if ( ! $this->is_valid_license() ) {
781
782
				$message_data['message'] = sprintf(
783
					'Please <a href="%1$s">activate your license</a> to receive updates and support for the %2$s add-on.',
784
					esc_url( admin_url( 'edit.php?post_type=give_forms&page=give-settings&tab=licenses' ) ),
785
					$this->item_name
786
				);
787
			}
788
789
			return $message_data;
790
		}
791
792
793
		/**
794
		 * Check if admin can edit license or not,
795
		 *
796
		 * @since 1.8.9
797
		 * @access private
798
		 */
799
		private function __is_user_can_edit_license(){
0 ignored issues
show
Coding Style introduced by
Method name "Give_License::__is_user_can_edit_license" is invalid; only PHP magic methods should be prefixed with a double underscore
Loading history...
800
			// Bailout.
801
			if (
802
				empty( $_POST[ $this->item_shortname . '_license_key' ] ) ||
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
803
				! current_user_can( 'manage_give_settings' )
804
			) {
805
				return false;
806
			}
807
808
			// Security check.
809
			if ( ! wp_verify_nonce( $_REQUEST[ $this->item_shortname . '_license_key-nonce' ], $this->item_shortname . '_license_key-nonce' ) ) {
0 ignored issues
show
introduced by
Detected access of super global var $_REQUEST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-validated input variable: $_REQUEST
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_REQUEST
Loading history...
810
				wp_die( __( 'Nonce verification failed.', 'give' ), __( 'Error', 'give' ), array( 'response' => 403 ) );
811
			}
812
813
			return true;
814
		}
815
816
817
		/**
818
		 * Get license information.
819
		 *
820
		 * @since  1.8.9
821
		 * @access public
822
		 *
823
		 * @param string $edd_action
824
		 * @param bool   $response_in_array
825
		 *
826
		 * @return mixed
827
		 */
828
		public function get_license_info( $edd_action = '', $response_in_array = false ) {
829
			if( empty( $edd_action ) ) {
0 ignored issues
show
introduced by
Space after opening control structure is required
Loading history...
introduced by
No space before opening parenthesis is prohibited
Loading history...
830
				return false;
831
			}
832
833
			// Data to send to the API.
834
			$api_params = array(
835
				'edd_action' => $edd_action, // never change from "edd_" to "give_"!
836
				'license'    => $this->license,
837
				'item_name'  => urlencode( $this->item_name ),
838
				'url'        => home_url(),
839
			);
840
841
			// Call the API.
842
			$response = wp_remote_post(
843
				$this->api_url,
844
				array(
845
					'timeout'   => 15,
846
					'sslverify' => false,
847
					'body'      => $api_params,
848
				)
849
			);
850
851
			// Make sure there are no errors.
852
			if ( is_wp_error( $response ) ) {
853
				return false;
854
			}
855
856
			return json_decode( wp_remote_retrieve_body( $response ), $response_in_array );
857
		}
858
	}
859
860
endif; // end class_exists check.
861