Completed
Pull Request — master (#1147)
by Zack
22:38 queued 18:35
created

Addon_Settings::all()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
0 ignored issues
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 18 and the first side effect is on line 6.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
namespace GV;
3
4
/** If this file is called directly, abort. */
5
if ( ! defined( 'GRAVITYVIEW_DIR' ) ) {
6
	die();
7
}
8
9
if ( ! class_exists( '\GFAddOn' ) ) {
10
	return;
11
}
12
13
/**
14
 * The Addon Settings class.
15
 *
16
 * Uses internal GFAddOn APIs.
17
 */
18
class Addon_Settings extends \GFAddOn {
19
	/**
20
	 * @var string Title of the plugin to be used on the settings page, form settings and plugins page. Example: 'Gravity Forms MailChimp Add-On'
21
	 */
22
	protected $_title = 'GravityView';
23
24
	/**
25
	 * @var string Short version of the plugin title to be used on menus and other places where a less verbose string is useful. Example: 'MailChimp'
26
	 */
27
	protected  $_short_title = 'GravityView';
28
29
	/**
30
	 * @var string URL-friendly identifier used for form settings, add-on settings, text domain localization...
31
	 */
32
	protected $_slug = 'gravityview';
33
34
	/**
35
	 * @var string|array A string or an array of capabilities or roles that can uninstall the plugin
36
	 */
37
	protected $_capabilities_uninstall = 'gravityview_uninstall';
38
39
	/**
40
	 * @var string|array A string or an array of capabilities or roles that have access to the settings page
41
	 */
42
	protected $_capabilities_app_settings = 'gravityview_view_settings';
43
44
	/**
45
	 * @var string|array A string or an array of capabilities or roles that have access to the settings page
46
	 */
47
	protected $_capabilities_app_menu = 'gravityview_view_settings';
48
49
	/**
50
	 * @var string The hook suffix for the app menu
51
	 */
52
	public $app_hook_suffix = 'gravityview';
53
54
	/**
55
	 * @var \GV\License_Handler Process license validation
56
	 */
57
	private $License_Handler;
58
59
	/**
60
	 * @var bool Whether we have initialized already or not.
61
	 */
62
	private static $initialized = false;
63
64 2
	public function __construct() {
65 2
		$this->_version = Plugin::$version;
66 2
		$this->_min_gravityforms_version = Plugin::$min_gf_version;
67
68
		/**
69
		 * Hook everywhere, but only once.
70
		 */
71 2
		if ( ! self::$initialized ) {
72
			parent::__construct();
73
			self::$initialized = true;
74
		}
75 2
	}
76
77
	/**
78
	 * Run actions when initializing admin.
79
	 *
80
	 * Triggers the license key notice, et.c
81
	 *
82
	 * @return void
83
	 */
84 1
	public function init_admin() {
85 1
		$this->_load_license_handler();
86
87 1
		add_action( 'admin_head', array( $this, 'license_key_notice' ) );
88
89 1
		add_filter( 'gform_addon_app_settings_menu_gravityview', array( $this, 'modify_app_settings_menu_title' ) );
90
91
		/** @since 1.7.6 */
92 1
		add_action( 'network_admin_menu', array( $this, 'add_network_menu' ) );
93
94 1
		parent::init_admin();
95 1
	}
96
97
	/**
98
	 * Change the settings page header title to "GravityView"
99
	 *
100
	 * @param $setting_tabs
101
	 *
102
	 * @return array
103
	 */
104 1
	public function modify_app_settings_menu_title( $setting_tabs ) {
105 1
		$setting_tabs[0]['label'] = __( 'GravityView Settings', 'gravityview' );
106 1
		return $setting_tabs;
107
	}
108
109
	/**
110
	 * Load license handler in admin-ajax.php
111
	 *
112
	 * @return void
113
	 */
114 1
	public function init_ajax() {
115 1
		$this->_load_license_handler();
116 1
	}
117
118
	/**
119
	 * Make sure the license handler is available
120
	 *
121
	 * @return void
122
	 */
123 1
	private function _load_license_handler() {
124 1
		if ( ! empty( $this->License_Handler ) ) {
125 1
			return;
126
		}
127 1
		$this->License_Handler = License_Handler::get( $this );
128 1
	}
129
130
	/**
131
	 * Add global Settings page for Multisite
132
	 * @since 1.7.6
133
	 * @return void
134
	 */
135 1
	public function add_network_menu() {
136
137 1
	    if ( ! gravityview()->plugin->is_network_activated() ) {
138 1
			return;
139
		}
140
141
        add_menu_page( __( 'Settings', 'gravityview' ), __( 'GravityView', 'gravityview' ), $this->_capabilities_app_settings, "{$this->_slug}_settings", array( $this, 'app_tab_page' ), 'none' );
142
	}
143
144
	/**
145
     * Uninstall all traces of GravityView
146
     *
147
     * Note: method is public because parent method is public
148
     *
149
	 * @return bool
150
	 */
151 1
	public function uninstall() {
152 1
		gravityview()->plugin->uninstall();
153
154
		/**
155
         * Set the path so that Gravity Forms can de-activate GravityView
156
         * @see GFAddOn::uninstall_addon
157
         * @uses deactivate_plugins()
158
         */
159 1
		$this->_path = GRAVITYVIEW_FILE;
160
161 1
		return true;
162
	}
163
164
	/**
165
	 * Prevent uninstall tab from being shown by returning false for the uninstall capability check. Otherwise:
166
	 * @inheritDoc
167
	 *
168
	 * @hack
169
	 *
170
	 * @param array|string $caps
171
	 *
172
	 * @return bool
173
	 */
174 1
	public function current_user_can_any( $caps ) {
175 1
		if ( empty( $caps ) ) {
176
			$caps = array( 'gravityview_full_access' );
177
		}
178 1
		return \GVCommon::has_cap( $caps );
179
	}
180
181 1
	public function uninstall_warning_message() {
182 1
		$heading = esc_html__( 'If you delete then re-install GravityView, it will be like installing GravityView for the first time.', 'gravityview' );
183 1
		$message = esc_html__( 'Delete all Views, GravityView entry approval status, GravityView-generated entry notes (including approval and entry creator changes), and GravityView plugin settings.', 'gravityview' );
184 1
		return sprintf( '<h4>%s</h4><p>%s</p>', $heading, $message );
185
	}
186
187
	/**
188
     * Get an array of reasons why the plugin might be uninstalled
189
     *
190
     * @since 1.17.5
191
     *
192
	 * @return array Array of reasons with the label and followup questions for each uninstall reason
193
	 */
194 1
	private function get_uninstall_reasons() {
195
		$reasons = array(
196
			'will-continue' => array(
197 1
                'label' => esc_html__( 'I am going to continue using GravityView', 'gravityview' ),
198
            ),
199
			'no-longer-need' => array(
200 1
                'label' => esc_html__( 'I no longer need GravityView', 'gravityview' ),
201
            ),
202
			'doesnt-work' => array(
203 1
                'label' => esc_html__( 'The plugin doesn\'t work', 'gravityview' ),
204
            ),
205
			'found-other' => array(
206 1
                'label' => esc_html__( 'I found a better plugin', 'gravityview' ),
207 1
                'followup' => esc_attr__( 'What plugin you are using, and why?', 'gravityview' ),
208
            ),
209
			'other' => array(
210 1
                'label' => esc_html__( 'Other', 'gravityview' ),
211
            ),
212
		);
213
214 1
		shuffle( $reasons );
215
216 1
		return $reasons;
217
    }
218
219
	/**
220
     * Display a feedback form when the plugin is uninstalled
221
     *
222
     * @since 1.17.5
223
     *
224
	 * @return string HTML of the uninstallation form
225
	 */
226 1
	public function uninstall_form() {
227 1
		ob_start();
228
229 1
		$user = wp_get_current_user();
230
		?>
231 1
    <style>
232
        #gv-reason-details {
233
            min-height: 100px;
234
        }
235
        .number-scale label {
236
            border: 1px solid #cccccc;
237
            padding: .5em .75em;
238
            margin: .1em;
239
        }
240
        #gv-uninstall-thanks p {
241
            font-size: 1.2em;
242
        }
243
        .scale-description ul {
244
            margin-bottom: 0;
245
            padding-bottom: 0;
246
        }
247
        .scale-description p.description {
248
            margin-top: 0!important;
249
            padding-top: 0!important;
250
        }
251
        .gv-form-field-wrapper {
252
            margin-top: 30px;
253
        }
254
    </style>
255
256
    <div class="gv-uninstall-form-wrapper" style="font-size: 110%; padding: 15px 0;">
257
        <script>
258
            jQuery( function( $ ) {
259
                $( '#gv-uninstall-feedback' ).on( 'change', function( e ) {
260
261
                    if ( ! $( e.target ).is( ':input' ) ) {
262
                        return;
263
                    }
264
                    var $textarea = $( '.gv-followup' ).find( 'textarea' );
265
                    var followup_text = $( e.target ).attr( 'data-followup' );
266
                    if( ! followup_text ) {
267
                        followup_text = $textarea.attr( 'data-default' );
268
                    }
269
270
                    $textarea.attr( 'placeholder', followup_text );
271
272
                } ).on( 'submit', function( e ) {
273
                    e.preventDefault();
274
275
                    $.post( $( this ).attr( 'action' ), $( this ).serialize() )
276
                        .done( function( data ) {
277
                            if ( 'success' !== data.status ) {
278
                                gv_feedback_append_error_message();
279
                            } else {
280
                                $( '#gv-uninstall-thanks' ).fadeIn();
281
                            }
282
                        })
283
                        .fail( function( data ) {
284
                            gv_feedback_append_error_message();
285
                        } )
286
                        .always( function() {
287
                            $( e.target ).remove();
288
                        } );
289
290
                    return false;
291
                });
292
293
                function gv_feedback_append_error_message() {
294
                    $( '#gv-uninstall-thanks' ).append( '<div class="notice error">' + <?php echo json_encode( esc_html( __( 'There was an error sharing your feedback. Sorry! Please email us at [email protected]', 'gravityview' ) ) ) ?> + '</div>' );
295
                }
296
            });
297
        </script>
298
299
        <form id="gv-uninstall-feedback" method="post" action="https://hooks.zapier.com/hooks/catch/28670/6haevn/">
300
            <h2><?php esc_html_e( 'Why did you uninstall GravityView?', 'gravityview' ); ?></h2>
301
            <ul>
302
				<?php
303 1
                $reasons = $this->get_uninstall_reasons();
304 1
				foreach ( $reasons as $reason ) {
305 1
					printf( '<li><label><input name="reason" type="radio" value="other" data-followup="%s"> %s</label></li>', Utils::get( $reason, 'followup' ), Utils::get( $reason, 'label' ) );
306
				}
307
				?>
308 1
            </ul>
309
            <div class="gv-followup widefat">
310
                <p><strong><label for="gv-reason-details"><?php esc_html_e( 'Comments', 'gravityview' ); ?></label></strong></p>
311
                <textarea id="gv-reason-details" name="reason_details" data-default="<?php esc_attr_e('Please share your thoughts about GravityView', 'gravityview') ?>" placeholder="<?php esc_attr_e('Please share your thoughts about GravityView', 'gravityview'); ?>" class="large-text"></textarea>
0 ignored issues
show
Coding Style introduced by
Expected 1 spaces after opening bracket; 0 found
Loading history...
Coding Style introduced by
Expected 1 spaces before closing bracket; 0 found
Loading history...
312
            </div>
313
            <div class="scale-description">
314
                <p><strong><?php esc_html_e( 'How likely are you to recommend GravityView?', 'gravityview' ); ?></strong></p>
315
                <ul class="inline">
316
					<?php
317 1
					$i = 0;
318 1
					while( $i < 11 ) {
319 1
						echo '<li class="inline number-scale"><label><input name="likely_to_refer" id="likely_to_refer_'.$i.'" value="'.$i.'" type="radio"> '.$i.'</label></li>';
0 ignored issues
show
introduced by
Expected next thing to be a escaping function, not '$i'
Loading history...
320 1
						$i++;
321
					}
322
					?>
323 1
                </ul>
324
                <p class="description"><?php printf( esc_html_x( '%s ("Not at all likely") to %s ("Extremely likely")', 'A scale from 0 (bad) to 10 (good)', 'gravityview' ), '<label for="likely_to_refer_0"><code>0</code></label>', '<label for="likely_to_refer_10"><code>10</code></label>' ); ?></p>
325
            </div>
326
327
            <div class="gv-form-field-wrapper">
328
                <label><input type="checkbox" class="checkbox" name="follow_up_with_me" value="1" /> <?php esc_html_e( 'Please follow up with me about my feedback', 'gravityview' ); ?></label>
329
            </div>
330
331
            <div class="submit">
332
                <input type="hidden" name="siteurl" value="<?php echo esc_url( get_bloginfo( 'url' ) ); ?>" />
333
                <input type="hidden" name="email" value="<?php echo esc_attr( $user->user_email ); ?>" />
334
                <input type="hidden" name="display_name" value="<?php echo esc_attr( $user->display_name ); ?>" />
335
                <input type="submit" value="<?php esc_html_e( 'Send Us Your Feedback', 'gravityview' ); ?>" class="button button-primary button-hero" />
336
            </div>
337
        </form>
338
339
        <div id="gv-uninstall-thanks" class="notice notice-large notice-updated below-h2" style="display:none;">
340
            <h3 class="notice-title"><?php esc_html_e( 'Thank you for using GravityView!', 'gravityview' ); ?></h3>
341
            <p><?php echo gravityview_get_floaty(); ?>
0 ignored issues
show
introduced by
Expected a sanitizing function (see Codex for 'Data Validation'), but instead saw 'gravityview_get_floaty'
Loading history...
342
				<?php echo make_clickable( esc_html__( 'Your feedback helps us improve GravityView. If you have any questions or comments, email us: [email protected]', 'gravityview' ) ); ?>
0 ignored issues
show
introduced by
Expected a sanitizing function (see Codex for 'Data Validation'), but instead saw 'make_clickable'
Loading history...
343 1
            </p>
344
            <div class="wp-clearfix"></div>
345
        </div>
346
    </div>
347
		<?php
348 1
		$form = ob_get_clean();
349
350 1
		return $form;
351
	}
352
353 1
	public function app_settings_uninstall_tab() {
354 1
		if ( $this->maybe_uninstall() ) {
355
			parent::app_settings_uninstall_tab();
356
			return;
357
		}
358
359 1
		if ( ! ( $this->current_user_can_any( $this->_capabilities_uninstall ) && ( ! function_exists( 'is_multisite' ) || ! is_multisite() || is_super_admin() ) ) ) {
360
			return;
361
		}
362
363
		?>
364 1
		<script>
365
			jQuery( document ).on( 'click', 'a[rel="gv-uninstall-wrapper"]', function( e ) {
366
				e.preventDefault();
367
				jQuery( '#gv-uninstall-wrapper' ).slideToggle();
368
			} );
369
		</script>
370
371
		<a rel="gv-uninstall-wrapper" href="#gv-uninstall-wrapper" class="button button-large alignright button-danger">Uninstall GravityView</a>
372
373
		<div id="gv-uninstall-wrapper">
374
			<form action="" method="post">
375
				<?php wp_nonce_field( 'uninstall', 'gf_addon_uninstall' ) ?>
376 1
				<div class="delete-alert alert_red">
377
378
					<h3>
379
						<i class="fa fa-exclamation-triangle gf_invalid"></i> <?php esc_html_e( 'Delete all GravityView content and settings', 'gravityview' ); ?>
380 1
					</h3>
381
382
					<div class="gf_delete_notice">
383
						<?php echo $this->uninstall_warning_message() ?>
0 ignored issues
show
introduced by
Expected next thing to be a escaping function, not '$this'
Loading history...
384 1
					</div>
385
386
					<?php
387 1
					echo '<input type="submit" name="uninstall" value="' . sprintf( esc_attr__( 'Uninstall %s', 'gravityview' ), $this->get_short_title() ) . '" class="button button-hero" onclick="return confirm( ' . json_encode( $this->uninstall_confirm_message() ) . ' );" onkeypress="return confirm( ' . json_encode( $this->uninstall_confirm_message() ) . ' );"/>';
0 ignored issues
show
introduced by
Expected a sanitizing function (see Codex for 'Data Validation'), but instead saw 'sprintf'
Loading history...
388
					?>
389
390
				</div>
391
			</form>
392
		</div>
393
	<?php
394 1
	}
395
396 1
	public function app_settings_tab() {
397 1
	    parent::app_settings_tab();
398
399 1
		if ( $this->maybe_uninstall() ) {
400
            echo $this->uninstall_form();
0 ignored issues
show
introduced by
Expected next thing to be a escaping function, not '$this'
Loading history...
401
		}
402 1
    }
403
404
	/**
405
	 * The Settings title
406
	 *
407
	 * @return string
408
	 */
409 1
	public function app_settings_title() {
410 1
		return null;
411
	}
412
413
	/**
414
	 * Prevent displaying of any icon
415
	 *
416
	 * @return string
417
	 */
418 1
	public function app_settings_icon() {
419 1
		return '&nbsp;';
420
	}
421
422
	/**
423
	 * Retrieve a setting.
424
	 *
425
	 * @deprecated Use \GV\Addon_Settings::get
426
	 * @param string $setting_name The setting key.
427
	 *
428
	 * @return mixed The setting or null
429
	 */
430 1
	public function get_app_setting( $setting_name ) {
431 1
		return $this->get( $setting_name );
432
	}
433
434
	/**
435
	 * Retrieve a setting.
436
	 *
437
	 * @param string $key The setting key.
438
	 * @param string $default A default if not found.
439
	 *
440
	 * @return mixed The setting value.
441
	 */
442 89
	public function get( $key, $default = null ) {
443
		/**
444
		 * Backward compatibility with Redux
445
		 */
446 89
		if ( $key === 'license' ) {
0 ignored issues
show
introduced by
Found "=== '". Use Yoda Condition checks, you must
Loading history...
447
			return array(
448 2
				'license' => $this->get( 'license_key' ),
449 2
				'status' => $this->get( 'license_key_status' ),
450 2
				'response' => $this->get( 'license_key_response' ),
451
			);
452
		}
453 89
		return Utils::get( $this->all(), $key, $default );
454
	}
455
456
	/**
457
	 * Get the setting for GravityView by name
458
	 *
459
	 * @deprecated Use gravityview()->plugin->settings->get()
460
	 * @param  string $key     Option key to fetch
461
	 *
462
	 * @return mixed
463
	 */
464 1
	static public function getSetting( $key ) {
0 ignored issues
show
Coding Style introduced by
As per PSR2, the static declaration should come after the visibility declaration.
Loading history...
Coding Style introduced by
The function name getSetting is in camel caps, but expected get_setting instead as per the coding standard.
Loading history...
465 1
		if ( gravityview()->plugin->settings instanceof Addon_Settings ) {
466 1
			return gravityview()->plugin->settings->get( $key );
467
		}
468
	}
469
470
	/**
471
	 * Get all settings.
472
	 *
473
	 * @deprecated Use \GV\Addon_Settings::all() or \GV\Addon_Settings::get()
474
	 *
475
	 * @return array The settings.
476
	 */
477 1
	public function get_app_settings() {
478 1
		return $this->all();
479
	}
480
481
	/**
482
	 * Get all the settings.
483
	 *
484
	 * @return array The settings.
485
	 */
486 89
	public function all() {
487 89
	    return wp_parse_args( get_option( 'gravityformsaddon_' . $this->_slug . '_app_settings', array() ), $this->defaults() );
488
	}
489
490
	/**
491
	 * Default settings.
492
	 *
493
	 * @deprecated Use \GV\Addon_Settings::defaults()
494
	 *
495
	 * @return array The defaults.
496
	 */
497 1
	public function get_default_settings() {
498 1
		return $this->defaults();
499
	}
500
501
	/**
502
	 * Default settings.
503
	 *
504
	 * @return array The defaults.
505
	 */
506 89
	private function defaults() {
507
		$defaults = array(
508
			// Set the default license in wp-config.php
509 89
			'license_key'          => defined( 'GRAVITYVIEW_LICENSE_KEY' ) ? GRAVITYVIEW_LICENSE_KEY : '',
510 89
			'license_key_response' => '',
511 89
			'license_key_status'   => '',
512 89
			'support-email'        => get_bloginfo( 'admin_email' ),
513 89
			'no-conflict-mode'     => '1',
514 89
			'support_port'         => '1',
515 89
			'flexbox_search'       => '1',
516 89
			'rest_api'             => '0',
517 89
			'beta'                 => '0',
518
		);
519
520
		/**
521
		 * @filter `gravityview/settings/default` Filter default global settings.
522
		 * @param[in,out] array The defaults.
523
		 */
524 89
		return apply_filters( 'gravityview/settings/defaults', $defaults );
525
	}
526
527
	/***
528
	 * Renders the save button for settings pages
529
	 *
530
	 * @param array $field - Field array containing the configuration options of this field
531
	 * @param bool  $echo  = true - true to echo the output to the screen, false to simply return the contents as a string
532
	 *
533
	 * @return string The HTML
534
	 */
535 2
	public function as_html( $field, $echo = true ) {
536 2
		$field['type']  = ( isset( $field['type'] ) && in_array( $field['type'], array( 'submit','reset','button' ) ) ) ? $field['type'] : 'submit';
0 ignored issues
show
introduced by
Expected 1 space between comma and "'reset'"; 0 found
Loading history...
introduced by
Expected 1 space between comma and "'button'"; 0 found
Loading history...
537
538 2
		$attributes    = $this->get_field_attributes( $field );
539 2
		$default_value = Utils::get( $field, 'value', Utils::get( $field, 'default_value' ) );
540 2
		$value         = $this->get( $field['name'], $default_value );
541
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
542
543 2
		$attributes['class'] = isset( $attributes['class'] ) ? esc_attr( $attributes['class'] ) : 'button-primary gfbutton';
544 2
		$name    = ( $field['name'] === 'gform-settings-save' ) ? $field['name'] : '_gaddon_setting_' . $field['name'];
545
546 2
		if ( empty( $value ) ) {
547 2
			$value = __( 'Update Settings', 'gravityview' );
548
		}
549
550 2
		$attributes = $this->get_field_attributes( $field );
551
552
		$html = '<input
553 2
                    type="' . $field['type'] . '"
554 2
                    name="' . esc_attr( $name ) . '"
555 2
                    value="' . $value . '" ' .
556 2
		        implode( ' ', $attributes ) .
557 2
		        ' />';
558
559 2
		if ( $echo ) {
560
			echo $html;
0 ignored issues
show
introduced by
Expected next thing to be a escaping function, not '$html'
Loading history...
561
		}
562
563 2
		return $html;
564
	}
565
566
	/**
567
	 * @deprecated Use \GV\Addon_Settings::as_html
568
	 */
569 1
	public function settings_submit( $field, $echo = true ) {
570 1
		gravityview()->log->warning( '\GV\Addon_Settings::settings_submit has been deprecated for \GV\Addon_Settings::as_html' );
571 1
		return $this->as_html( $field, $echo );
572
	}
573
574
	/**
575
     * Check whether GravityView is being saved
576
     *
577
     * The generic is_save_postback() is true for all addons
578
     *
579
     * @since 2.0.8
580
     *
581
	 * @return bool
582
	 */
583 1
	public function is_save_postback() {
584 1
		return isset( $_POST['gform-settings-save'] ) && isset( $_POST['_gravityview_save_settings_nonce'] );
0 ignored issues
show
introduced by
Detected access of super global var $_POST, probably need manual inspection.
Loading history...
585
	}
586
587
	/**
588
	 * Display a notice if the plugin is inactive.
589
	 *
590
	 * @return void
591
	 */
592
	public function license_key_notice() {
593
594
	    if( $this->is_save_postback() ) {
595
		    $settings = $this->get_posted_settings();
596
		    $license_key = \GV\Utils::get( $settings, 'license_key' );
597
		    $license_status = \GV\Utils::get( $settings, 'license_key_status', 'inactive' );
598
        } else {
599
		    $license_status = $this->get( 'license_key_status', 'inactive' );
600
		    $license_key    = $this->get( 'license_key' );
601
	    }
602
603
	    $license_id = empty( $license_key ) ? 'license' : $license_key;
604
605
		$message = esc_html__( 'Your GravityView license %s. This means you&rsquo;re missing out on updates and support! %sActivate your license%s or %sget a license here%s.', 'gravityview' );
606
607
		/** @internal Do not use! Will change without notice (pun slightly intended). */
608
		$message = apply_filters( 'gravityview/settings/license-key-notice', $message );
609
610
		/**
611
		 * I wanted to remove the period from after the buttons in the string,
612
		 * but didn't want to mess up the translation strings for the translators.
613
		 */
614
		$message = mb_substr( $message, 0, mb_strlen( $message ) - 1 );
615
		$title = __( 'Inactive License', 'gravityview');
0 ignored issues
show
Coding Style introduced by
Expected 1 spaces before closing bracket; 0 found
Loading history...
616
		$status = '';
617
		$update_below = false;
618
		$primary_button_link = admin_url( 'edit.php?post_type=gravityview&amp;page=gravityview_settings' );
619
620
        switch ( $license_status ) {
621
			/** @since 1.17 */
622
			case 'expired':
623
				$title = __( 'Expired License', 'gravityview' );
624
				$status = 'expired';
625
				$message = $this->get_license_handler()->strings( 'expired', $this->get( 'license_key_response' ) );
626
				break;
627
			case 'invalid':
628
				$title = __( 'Invalid License', 'gravityview' );
629
				$status = __( 'is invalid', 'gravityview' );
630
				break;
631
			case 'deactivated':
632
				$status = __( 'is inactive', 'gravityview' );
633
				$update_below = __( 'Activate your license key below.', 'gravityview' );
634
				break;
635
			/** @noinspection PhpMissingBreakStatementInspection */
636
			case '':
637
				$license_status = 'site_inactive';
638
				// break intentionally left blank
639
			case 'inactive':
640
			case 'site_inactive':
641
				$status = __( 'has not been activated', 'gravityview' );
642
				$update_below = __( 'Activate your license key below.', 'gravityview' );
643
				break;
644
		}
645
		$url = 'https://gravityview.co/pricing/?utm_source=admin_notice&utm_medium=admin&utm_content='.$license_status.'&utm_campaign=Admin%20Notice';
646
647
		// Show a different notice on settings page for inactive licenses (hide the buttons)
648
		if ( $update_below && gravityview_is_admin_page( '', 'settings' ) ) {
0 ignored issues
show
Deprecated Code introduced by
The function gravityview_is_admin_page() has been deprecated with message: See `gravityview()->request->is_admin` or `\GV\Request::is_admin`

This function has been deprecated. The supplier of the file has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed from the class and what other function to use instead.

Loading history...
649
			$message = sprintf( $message, $status, '<div class="hidden">', '', '', '</div><a href="#" onclick="jQuery(\'#license_key\').focus(); return false;">' . $update_below . '</a>' );
650
		} else {
651
			$message = sprintf( $message, $status, "\n\n" . '<a href="' . esc_url( $primary_button_link ) . '" class="button button-primary">', '</a>', '<a href="' . esc_url( $url ) . '" class="button button-secondary">', '</a>' );
652
		}
653
654
		if ( empty( $status ) ) {
655
			return;
656
		}
657
658
        \GravityView_Admin_Notices::add_notice( array(
659
            'message' => $message,
660
            'class'   => 'notice notice-warning',
661
            'title'   => $title,
662
            'cap'     => 'gravityview_edit_settings',
663
            'dismiss' => sha1( $license_status . '_' . $license_id . '_' . date( 'z' ) ), // Show every day, instead of every 8 weeks (which is the default)
664
        ) );
665
	}
666
667
	/**
668
	 * Allow public access to the GV\License_Handler class
669
	 * @since 1.7.4
670
	 *
671
	 * @return \GV\License_Handler
672
	 */
673 1
	public function get_license_handler() {
674 1
		return $this->License_Handler;
675
	}
676
677
	/**
678
     * Add tooltip script to app settings page. Not enqueued by Gravity Forms for some reason.
679
     *
680
     * @since 1.21.5
681
     *
682
     * @see GFAddOn::scripts()
683
     *
684
	 * @return array Array of scripts
685
	 */
686 5
	public function scripts() {
687 5
		$scripts = parent::scripts();
688
689 5
		$scripts[] = array(
690
			'handle'  => 'gform_tooltip_init',
691
			'enqueue' => array(
692
                array(
693
			        'admin_page' => array( 'app_settings' )
694
                )
0 ignored issues
show
introduced by
Comma required after last value in array declaration
Loading history...
695
            )
696
		);
697
698 5
		return $scripts;
699
	}
700
701
	/**
702
	 * Register styles in the app admin page
703
	 * @return array
704
	 */
705 5
	public function styles() {
706 5
		$styles = parent::styles();
707
708 5
		$styles[] = array(
709 5
			'handle'  => 'gravityview_settings',
710 5
			'src'     => plugins_url( 'assets/css/admin-settings.css', GRAVITYVIEW_FILE ),
711 5
			'version' => Plugin::$version,
712
			'deps' => array(
713
                'gform_admin',
714
				'gaddon_form_settings_css',
715
                'gform_tooltip',
716
                'gform_font_awesome',
717
			),
718
			'enqueue' => array(
719
				array( 'admin_page' => array(
0 ignored issues
show
introduced by
The first index in a multi-value array must be on a new line
Loading history...
introduced by
The first value in a multi-value array must be on a new line
Loading history...
720
					'app_settings',
721
				) ),
722
			)
723
		);
724
725 5
		return $styles;
726
	}
727
728
	/**
729
	 * Add Settings link to GravityView menu
730
	 * @return void
731
	 */
732 1
	public function create_app_menu() {
733
		/**
734
		 * If not multisite, always show.
735
		 * If multisite and the plugin is network activated, show; we need to register the submenu page for the Network Admin settings to work.
736
		 * If multisite and not network admin, we don't want the settings to show.
737
		 * @since 1.7.6
738
		 */
739 1
		$show_submenu = ( ! is_multisite() ) ||  is_main_site() || ( ! gravityview()->plugin->is_network_activated() ) || ( is_network_admin() && gravityview()->plugin->is_network_activated() );
740
741
		/**
742
		 * Override whether to show the Settings menu on a per-blog basis.
743
		 * @since 1.7.6
744
		 * @param bool $hide_if_network_activated Default: true
745
		 */
746 1
		$show_submenu = apply_filters( 'gravityview/show-settings-menu', $show_submenu );
747
748 1
		if ( $show_submenu ) {
749 1
			add_submenu_page( 'edit.php?post_type=gravityview', __( 'Settings', 'gravityview' ), __( 'Settings', 'gravityview' ), $this->_capabilities_app_settings, $this->_slug . '_settings', array( $this, 'app_tab_page' ) );
750
		}
751 1
	}
752
753
	/**
754
	 * Gets the required indicator
755
	 * Gets the markup of the required indicator symbol to highlight fields that are required
756
	 *
757
	 * @param $field - The field meta.
758
	 *
759
	 * @return string - Returns markup of the required indicator symbol
760
	 */
761 1
	public function get_required_indicator( $field ) {
762 1
		return '<span class="required" title="' . esc_attr__( 'Required', 'gravityview' ) . '">*</span>';
763
	}
764
765
	/**
766
	 * Specify the settings fields to be rendered on the plugin settings page
767
	 *
768
	 * @return array
769
	 */
770 1
	public function app_settings_fields() {
771 1
		$default_settings = $this->defaults();
772
773 1
		$disabled_attribute = \GVCommon::has_cap( 'gravityview_edit_settings' ) ? false : 'disabled';
774
775
		$fields = array(
776
			array(
777 1
				'name' => 'gv_header',
778
				'value' => '',
779
				'type' => 'html',
780
			),
781
			array(
782 1
				'name' => 'license_key',
783
				'required' => true,
784 1
				'label' => __( 'License Key', 'gravityview' ),
785 1
				'description' => __( 'Enter the license key that was sent to you on purchase. This enables plugin updates &amp; support.', 'gravityview' ) . $this->get_license_handler()->license_details( $this->get_app_setting( 'license_key_response' ) ),
0 ignored issues
show
Deprecated Code introduced by
The method GV\Addon_Settings::get_app_setting() has been deprecated with message: Use \GV\Addon_Settings::get

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
introduced by
Expected next thing to be a escaping function, not '$this'
Loading history...
786 1
				'type' => 'edd_license',
787 1
				'disabled' => ( defined( 'GRAVITYVIEW_LICENSE_KEY' )  && GRAVITYVIEW_LICENSE_KEY ),
788 1
				'data-pending-text' => __( 'Verifying license&hellip;', 'gravityview' ),
789 1
				'default_value' => $default_settings['license_key'],
790 1
				'class' => ( '' == $this->get( 'license_key' ) ) ? 'activate code regular-text edd-license-key' : 'deactivate code regular-text edd-license-key',
791
			),
792
			array(
793 1
				'name' => 'license_key_response',
794 1
				'default_value' => $default_settings['license_key_response'],
795 1
				'type' => 'hidden',
796
			),
797
			array(
798 1
				'name' => 'license_key_status',
799 1
				'default_value' => $default_settings['license_key_status'],
800 1
				'type' => 'hidden',
801
			),
802
			array(
803 1
				'name' => 'support-email',
804 1
				'type' => 'text',
805 1
				'validate' => 'email',
806 1
				'default_value' => $default_settings['support-email'],
807 1
				'label' => __( 'Support Email', 'gravityview' ),
808 1
				'description' => __( 'In order to provide responses to your support requests, please provide your email address.', 'gravityview' ),
809 1
				'class' => 'code regular-text',
810
			),
811
			/**
812
			 * @since 1.15 Added Support Port support
813
			 */
814
			array(
815 1
				'name' => 'support_port',
816 1
				'type' => 'radio',
817 1
				'label' => __( 'Show Support Port?', 'gravityview' ),
818 1
				'default_value' => $default_settings['support_port'],
819 1
				'horizontal' => 1,
820
				'choices' => array(
821
					array(
822 1
						'label' => _x( 'Show', 'Setting: Show or Hide', 'gravityview' ),
823 1
						'value' => '1',
824
					),
825
					array(
826 1
						'label' => _x( 'Hide', 'Setting: Show or Hide', 'gravityview' ),
827 1
						'value' => '0',
828
					),
829
				),
830 1
				'tooltip' => '<p><img src="' . esc_url_raw( plugins_url( 'assets/images/beacon.png', GRAVITYVIEW_FILE ) ) . '" alt="' . esc_attr__( 'The Support Port looks like this.', 'gravityview' ) . '" class="alignright" style="max-width:40px; margin:.5em;" />' . esc_html__( 'The Support Port provides quick access to how-to articles and tutorials. For administrators, it also makes it easy to contact support.', 'gravityview' ) . '</p>',
831 1
				'description' => __( 'Show the Support Port on GravityView pages?', 'gravityview' ),
832
			),
833
			array(
834 1
				'name' => 'no-conflict-mode',
835 1
				'type' => 'radio',
836 1
				'label' => __( 'No-Conflict Mode', 'gravityview' ),
837 1
				'default_value' => $default_settings['no-conflict-mode'],
838 1
				'horizontal' => 1,
839
				'choices' => array(
840
					array(
841 1
						'label' => _x( 'On', 'Setting: On or off', 'gravityview' ),
842 1
						'value' => '1',
843
					),
844
					array(
845 1
						'label' => _x( 'Off', 'Setting: On or off', 'gravityview' ),
846 1
						'value' => '0',
847
					),
848
				),
849 1
				'description'   => __( 'Set this to ON to prevent extraneous scripts and styles from being printed on GravityView admin pages, reducing conflicts with other plugins and themes.', 'gravityview' ) . ' ' . __( 'If your Edit View tabs are ugly, enable this setting.', 'gravityview' ),
0 ignored issues
show
introduced by
Expected a sanitizing function (see Codex for 'Data Validation'), but instead saw '__'
Loading history...
850
			),
851
			/**
852
			 * @since 2.0 Added REST API
853
			 */
854 1
			gravityview()->plugin->supports( Plugin::FEATURE_REST ) ?
855
				array(
856 1
					'name' => 'rest_api',
857 1
					'type' => 'radio',
858 1
					'label' => __( 'REST API', 'gravityview' ),
859 1
					'default_value' => $default_settings['rest_api'],
860 1
					'horizontal' => 1,
861
					'choices' => array(
862
						array(
863 1
							'label' => _x( 'Enable', 'Setting: Enable or Disable', 'gravityview' ),
864 1
							'value' => '1',
865
						),
866
						array(
867 1
							'label' => _x( 'Disable', 'Setting: Enable or Disable', 'gravityview' ),
868 1
							'value' => '0',
869
						),
870
					),
871 1
					'description' => __( 'Enable View and Entry access via the REST API? Regular per-View restrictions apply (private, password protected, etc.).', 'gravityview' ),
872 1
					'tooltip' => '<p>' . esc_html__( 'If you are unsure, choose the Disable setting.', 'gravityview' ) . '</p>',
873
				) : array(),
874
			array(
875 1
				'name' => 'beta',
876 1
				'type' => 'checkbox',
877 1
				'label' => __( 'Become a Beta Tester', 'gravityview' ),
878 1
				'default_value' => $default_settings['beta'],
879 1
				'horizontal' => 1,
880
				'choices' => array(
881
					array(
882 1
						'label' => _x( 'Show me beta versions if they are available.', 'gravityview' ),
883 1
						'value' => '1',
884 1
                        'name'  => 'beta',
885
					),
886
				),
887 1
				'description'   => __( 'You will have early access to the latest GravityView features and improvements. There may be bugs! If you encounter an issue, help make GravityView better by reporting it!', 'gravityview' ),
888
			),
889
		);
890
891 1
		$fields = array_filter( $fields, 'count' );
892
893
		/**
894
		 * @filter `gravityview_settings_fields` Filter the settings fields.
895
		 * @param array $fields The fields to filter.
896
		 * @deprecated Use `gravityview/settings/fields`.
897
		 */
898 1
		$fields = apply_filters( 'gravityview_settings_fields', $fields );
899
900
		/**
901
		 * @filter `gravityview/settings/fields` Filter the settings fields.
902
		 * @param array $fields The fields to filter.
903
		 */
904 1
		$fields = apply_filters( 'gravityview/settings/fields', $fields );
905
906
		/**
907
		 * Redux backward compatibility
908
		 * @since 1.7.4
909
		 */
910 1
		foreach ( $fields as &$field ) {
911 1
			$field['name']          = isset( $field['name'] ) ? $field['name'] : Utils::get( $field, 'id' );
912 1
			$field['label']         = isset( $field['label'] ) ? $field['label'] : Utils::get( $field, 'title' );
913 1
			$field['default_value'] = isset( $field['default_value'] ) ? $field['default_value'] : Utils::get( $field, 'default' );
914 1
			$field['description']   = isset( $field['description'] ) ? $field['description'] : Utils::get( $field, 'subtitle' );
915
916 1
			if ( $disabled_attribute ) {
917
				$field['disabled']  = $disabled_attribute;
918
			}
919
920 1
			if ( empty( $field['disabled'] ) ) {
921 1
				unset( $field['disabled'] );
922
            }
923
		}
924
925
        $sections = array(
926
            array(
927 1
                'description' => sprintf( '<span class="version-info description">%s</span>', sprintf( __( 'You are running GravityView version %s', 'gravityview' ), Plugin::$version ) ),
928 1
                'fields'      => $fields,
929
            )
0 ignored issues
show
introduced by
Comma required after last value in array declaration
Loading history...
930
        );
931
932
        // custom 'update settings' button
933
        $button = array(
934 1
            'class' => 'button button-primary button-hero',
935
            'type' => 'save',
936
        );
937
938 1
		if ( $disabled_attribute ) {
939
			$button['disabled'] = $disabled_attribute;
940
		}
941
942
        /**
943
         * @filter `gravityview/settings/extension/sections` Modify the GravityView settings page
944
         * Extensions can tap in here to insert their own section and settings.
945
         * <code>
946
         *   $sections[] = array(
947
         *      'title' => __( 'GravityView My Extension Settings', 'gravityview' ),
948
         *      'fields' => $settings,
949
         *   );
950
         * </code>
951
         * @param array $extension_settings Empty array, ready for extension settings!
952
         */
953 1
        $extension_sections = apply_filters( 'gravityview/settings/extension/sections', array() );
954
955
		// If there are extensions, add a section for them
956 1
		if ( ! empty( $extension_sections ) ) {
957
958
			if( $disabled_attribute ) {
959
				foreach ( $extension_sections as &$section ) {
960
					foreach ( $section['fields'] as &$field ) {
961
						$field['disabled'] = $disabled_attribute;
962
					}
963
				}
964
			}
965
966
            $k = count( $extension_sections ) - 1 ;
967
            $extension_sections[ $k ]['fields'][] = $button;
968
			$sections = array_merge( $sections, $extension_sections );
969
		} else {
970
            // add the 'update settings' button to the general section
971 1
            $sections[0]['fields'][] = $button;
972
        }
973
974 1
		return $sections;
975
	}
976
977
	/**
978
	 * Updates app settings with the provided settings
979
	 *
980
	 * Same as the GFAddon, except it returns the value from update_option()
981
	 *
982
	 * @param array $settings - App settings to be saved
983
	 *
984
	 * @deprecated Use \GV\Addon_Settings::set or \GV\Addon_Settings::update
985
	 *
986
	 * @return boolean False if value was not updated and true if value was updated.
987
	 */
988
	public function update_app_settings( $settings ) {
989
		return $this->update( $settings );
990
	}
991
992
	/**
993
	 * Sets a subset of settings.
994
	 *
995
	 * @param array|string An array of settings to update, or string (key) and $value to update one setting.
996
	 * @param mixed $value A value if $settings is string (key). Default: null.
997
	 */
998 4
	public function set( $settings, $value = null ) {
999 4
		if ( is_string( $settings ) ) {
1000 2
			$settings = array( $settings => $value );
1001
		}
1002 4
		$settings = wp_parse_args( $settings, $this->all() );
1003 4
		return update_option( 'gravityformsaddon_' . $this->_slug . '_app_settings', $settings );
1004
	}
1005
1006
	/**
1007
	 * Updates settings.
1008
	 *
1009
	 * @param array $settings The settings array.
1010
	 *
1011
	 * @return boolean False if value was not updated and true if value was updated.
1012
	 */
1013 1
	public function update( $settings ) {
1014 1
		return update_option( 'gravityformsaddon_' . $this->_slug . '_app_settings', $settings );
1015
	}
1016
1017
	/**
1018
	 * Register the settings field for the EDD License field type
1019
	 * @param array $field
1020
	 * @param bool $echo Whether to echo the
1021
	 *
1022
	 * @return string
1023
	 */
1024 1
	protected function settings_edd_license( $field, $echo = true ) {
1025
1026 1
	    if ( defined( 'GRAVITYVIEW_LICENSE_KEY' ) && GRAVITYVIEW_LICENSE_KEY ) {
1027
		    $field['input_type'] = 'password';
1028
        }
1029
1030 1
		$text = $this->settings_text( $field, false );
1031
1032 1
		$activation = $this->License_Handler->settings_edd_license_activation( $field, false );
1033
1034 1
		$return = $text . $activation;
1035
1036 1
		if ( $echo ) {
1037 1
			echo $return;
0 ignored issues
show
introduced by
Expected next thing to be a escaping function, not '$return'
Loading history...
1038
		}
1039
1040 1
		return $return;
1041
	}
1042
1043
	/**
1044
	 * Allow pure HTML settings row
1045
     *
1046
     * @since 2.0.6
1047
     *
1048
	 * @param array $field
1049
	 * @param bool $echo Whether to echo the
1050
	 *
1051
	 * @return string
1052
	 */
1053 1
	protected function settings_html( $field, $echo = true ) {
1054
1055 1
		$return = \GV\Utils::get( $field, 'value', '' );
1056
1057 1
		if ( $echo ) {
1058 1
			echo $return;
0 ignored issues
show
introduced by
Expected next thing to be a escaping function, not '$return'
Loading history...
1059
		}
1060
1061 1
		return $return;
1062
	}
1063
1064
	/**
1065
	 * No <th> needed for pure HTML settings row
1066
	 *
1067
	 * @since 2.0.6
1068
	 *
1069
	 * @param array $field
1070
	 *
1071
	 * @return void
1072
	 */
1073 1
	public function single_setting_row_html( $field ) {
1074
		?>
1075
1076
        <tr id="gaddon-setting-row-<?php echo esc_attr( $field['name'] ); ?>">
1077
            <td colspan="2">
1078
				<?php $this->single_setting( $field ); ?>
1079 1
            </td>
1080
        </tr>
1081
1082
		<?php
1083 1
	}
1084
1085
	/**
1086
	 * Allow customizing the Save field parameters
1087
	 *
1088
	 * @param array $field
1089
	 * @param bool $echo
1090
	 *
1091
	 * @return string
1092
	 */
1093 1
	public function settings_save( $field, $echo = true ) {
1094 1
		$field['type']  = 'submit';
1095 1
		$field['name']  = 'gform-settings-save';
1096 1
		$field['class'] = isset( $field['class'] ) ? $field['class'] : 'button-primary gfbutton';
1097 1
		$field['value'] = Utils::get( $field, 'value', __( 'Update Settings', 'gravityview' ) );
1098
1099 1
		$output = $this->settings_submit( $field, false );
0 ignored issues
show
Deprecated Code introduced by
The method GV\Addon_Settings::settings_submit() has been deprecated with message: Use \GV\Addon_Settings::as_html

This method has been deprecated. The supplier of the class has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the method will be removed from the class and what other method or class to use instead.

Loading history...
1100
1101 1
		ob_start();
1102 1
		$this->app_settings_uninstall_tab();
1103 1
		$output .= ob_get_clean();
1104
1105 1
		if ( $echo ) {
1106 1
			echo $output;
0 ignored issues
show
introduced by
Expected next thing to be a escaping function, not '$output'
Loading history...
1107
		}
1108
1109 1
		return $output;
1110
	}
1111
1112
	/**
1113
     * Keep GravityView styling for `$field['description']`, even though Gravity Forms added support for it
1114
     *
1115
     * Converts `$field['description']` to `$field['gv_description']`
1116
     * Converts `$field['subtitle']` to `$field['description']`
1117
     *
1118
     * @see \GV\Addon_Settings::single_setting_label Converts `gv_description` back to `description`
1119
     * @see http://share.gravityview.co/P28uGp/2OIRKxog for image that shows subtitle vs description
1120
     *
1121
     * @since 1.21.5.2
1122
     *
1123
	 * @param array $field
1124
     *
1125
     * @return void
1126
	 */
1127 1
	public function single_setting_row( $field ) {
1128 1
		$field['gv_description'] = Utils::get( $field, 'description' );
1129 1
		$field['description']    = Utils::get( $field, 'subtitle' );
1130 1
		parent::single_setting_row( $field );
1131 1
	}
1132
1133
	/**
1134
	 * The same as the parent, except added support for field descriptions
1135
	 * @inheritDoc
1136
	 * @param $field array
1137
	 */
1138 1
	public function single_setting_label( $field ) {
1139 1
		parent::single_setting_label( $field );
1140 1
		if ( $description = Utils::get( $field, 'gv_description' ) ) {
1141 1
			echo '<span class="description">'. $description .'</span>';
0 ignored issues
show
introduced by
Expected next thing to be a escaping function, not '$description'
Loading history...
1142
		}
1143 1
	}
1144
1145
	/**
1146
	 * Check for the `gravityview_edit_settings` capability before saving plugin settings.
1147
	 * Gravity Forms says you're able to edit if you're able to view settings. GravityView allows two different permissions.
1148
	 *
1149
	 * @since 1.15
1150
	 * @return void
1151
	 */
1152 1
	public function maybe_save_app_settings() {
1153
1154 1
		if ( $this->is_save_postback() ) {
1155
			if ( ! \GVCommon::has_cap( 'gravityview_edit_settings' ) ) {
1156
				$_POST = array(); // If you don't reset the $_POST array, it *looks* like the settings were changed, but they weren't
1157
				\GFCommon::add_error_message( __( 'You don\'t have the ability to edit plugin settings.', 'gravityview' ) );
1158
				return;
1159
			}
1160
		}
1161 1
		parent::maybe_save_app_settings();
1162 1
	}
1163
1164
	/**
1165
	 * When the settings are saved, make sure the license key matches the previously activated key
1166
	 *
1167
	 * @return array settings from parent::get_posted_settings(), with `license_key_response` and `license_key_status` potentially unset
1168
	 */
1169 1
	public function get_posted_settings() {
1170 1
		$posted_settings = parent::get_posted_settings();
1171
1172 1
		$local_key = Utils::get( $posted_settings, 'license_key' );
1173 1
		$response_key = Utils::get( $posted_settings, 'license_key_response/license_key' );
1174
1175
		// If the posted key doesn't match the activated/deactivated key (set using the Activate License button, AJAX response),
1176
		// then we assume it's changed. If it's changed, unset the status and the previous response.
1177 1
		if ( $local_key !== $response_key ) {
1178
			unset( $posted_settings['license_key_response'] );
1179
			unset( $posted_settings['license_key_status'] );
1180
			\GFCommon::add_error_message( __('The license key you entered has been saved, but not activated. Please activate the license.', 'gravityview' ) );
0 ignored issues
show
Coding Style introduced by
Expected 1 spaces after opening bracket; 0 found
Loading history...
1181
		}
1182 1
		return $posted_settings;
1183
	}
1184
}
1185