Completed
Push — develop ( cff5aa...0a558b )
by Zack
20s queued 11s
created

GravityView_Admin_Installer::render_section()   B

Complexity

Conditions 6
Paths 8

Size

Total Lines 25

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 42

Importance

Changes 0
Metric Value
cc 6
nc 8
nop 4
dl 0
loc 25
ccs 0
cts 3
cp 0
crap 42
rs 8.8977
c 0
b 0
f 0
1
<?php
2
3
// Exit if accessed directly
4
5
if ( ! defined( 'ABSPATH' ) ) {
6
	exit;
7
}
8
9
/**
10
 * GravityView_Admin_Installer Class
11
 *
12
 * A general class for About page.
13
 *
14
 * @since 2.1
15
 */
16
class GravityView_Admin_Installer {
17
18
	const EDD_API_URL = 'https://gravityview.co/edd-api/products/';
19
20
	const EDD_API_KEY = 'e4c7321c4dcf342c9cb078e27bf4ba97';
21
22
	const EDD_API_TOKEN = 'e031fd350b03bc223b10f04d8b5dde42';
23
24
	const DOWNLOADS_DATA_TRANSIENT = 'gv_downloads_data';
25
26
	const DOWNLOADS_DATA_TRANSIENT_EXPIRY = DAY_IN_SECONDS;
27
28
	/**
29
	 * @var string
30
	 */
31
	public $minimum_capability = 'install_plugins';
32
33
	public function __construct() {
34
35
		$this->add_downloads_data_filters();
36
37
		add_action( 'admin_menu', array( $this, 'add_admin_menu' ), 200 );
38
		add_action( 'gravityview/admin_installer/delete_downloads_data', array( $this, 'delete_downloads_data' ) );
39
		add_action( 'wp_ajax_gravityview_admin_installer_activate', array( $this, 'activate_download' ) );
40
		add_action( 'wp_ajax_gravityview_admin_installer_deactivate', array( $this, 'deactivate_download' ) );
41
		add_action( 'admin_enqueue_scripts', array( $this, 'maybe_enqueue_scripts_and_styles' ) );
42
		add_filter( 'gravityview_noconflict_scripts', array( $this, 'register_noconflict' ) );
43
		add_filter( 'gravityview_noconflict_styles', array( $this, 'register_noconflict' ) );
44
		add_filter( 'gravityview/settings/license-key-notice', array( $this, 'maybe_modify_license_notice' ) );
45
	}
46
47
	/**
48
	 * Let us operate when GF no-conflict is enabled
49
	 *
50
	 * @param array $items Scripts or styles to exclude from no-conflict
51
	 *
52
	 * @return array
53
	 */
54
	public function register_noconflict( $items ) {
55
56
		$items[] = 'gravityview-admin-installer';
57
58
		return $items;
59
	}
60
61
62
	/**
63
	 * Modify plugins data with custom GV extension info
64
	 *
65
	 * @return void
66
	 */
67
	public function add_downloads_data_filters() {
68
69
	    $downloads_data = get_site_transient( self::DOWNLOADS_DATA_TRANSIENT );
70
71
	    if ( ! $downloads_data && ! isset( $_GET['cache'] ) ) {
72
			return;
73
		}
74
75
		add_filter( 'plugins_api', function ( $data, $action, $args ) use ( $downloads_data ) {
76
			foreach ( $downloads_data as $extension ) {
77
				if ( empty( $extension['info'] ) || empty( $args->slug ) || $args->slug !== $extension['info']['slug'] ) {
78
					continue;
79
				}
80
81
				return (object) array(
82
					'slug'          => $extension['info']['slug'],
83
					'name'          => $extension['info']['title'],
84
					'version'       => $extension['licensing']['version'],
85
					'download_link' => $extension['files'][0]['file'],
86
				);
87
			}
88
89
			return $data;
90
		}, 10, 3 );
91
	}
92
93
	/**
94
	 * Add new admin menu
95
	 *
96
	 * @return void
97
	 */
98
	public function add_admin_menu() {
99
100
	    $menu_text = _x( 'Manage Add-Ons', 'Extensions are WordPress plugins that add functionality to GravityView and Gravity Forms', 'gravityview' );
101
102
		$menu_text = sprintf( '<span title="%s" style="margin: 0">%s</span>', esc_attr__( 'Plugins that extend GravityView and Gravity Forms functionality.', 'gravityview' ), $menu_text );
103
104
		add_submenu_page(
105
			'edit.php?post_type=gravityview',
106
			__( 'GravityView Extensions and Plugins', 'gravityview' ),
107
			$menu_text,
108
			$this->minimum_capability,
109
			'gv-admin-installer',
110
			array( $this, 'render_screen' )
111
		);
112
	}
113
114
	/**
115
     * When on the Installer page, show a different notice than on the Settings page
116
     *
117
	 * @param array $notice
118
	 *
119
	 * @return string License notice
120
	 */
121
	public function maybe_modify_license_notice( $notice = '' ) {
122
123
		if ( ! gravityview()->request->is_admin( '', 'downloads' ) ) {
0 ignored issues
show
Unused Code introduced by
The call to Request::is_admin() has too many arguments starting with ''.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
Unused Code introduced by
The call to Frontend_Request::is_admin() has too many arguments starting with ''.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
124
            return $notice;
125
        }
126
127
        return esc_html__( 'Your license %s. Do you want access to these plugins? %sActivate your license%s or %sget a license here%s.', 'gravityview' );
128
	}
129
130
	/**
131
	 * Get an array of plugins with textdomains as keys
132
	 *
133
	 * @since 2.1
134
	 * @since 2.10 Added $textdomain argument. Converted to static method. Made method public (from protected).
135
	 *
136
	 * @param string $textdomain If set, only return plugins that have a matching textdomain.
137
	 *
138
	 * @return array {
139
	 * @type string $path Path to the plugin.
140
	 * @type string $version What version is the plugin.
141
	 * @type bool $activated Is the plugin activated.
142
	 * }
143
	 */
144
	static public function get_wp_plugins_data( $textdomain = null ) {
145
146
		$wp_plugins = array();
147
148
		$all_plugins = get_plugins();
149
150
		foreach ( $all_plugins as $path => $plugin ) {
151
152
			if ( empty( $plugin['TextDomain'] ) ) {
153
				continue;
154
			}
155
156
			$wp_plugins[ $plugin['TextDomain'] ] = array(
157
				'path'      => $path,
158
				'version'   => $plugin['Version'],
159
				'activated' => is_plugin_active( $path )
160
			);
161
		}
162
163
		return is_null( $textdomain ) ? $wp_plugins : \GV\Utils::get( $wp_plugins, $textdomain, array() );
164
	}
165
166
	/**
167
	 * Get downloads data from transient or from API; save transient after getting data from API
168
	 *
169
	 * @return WP_Error|array If error, returns WP_Error. If not valid JSON, empty array. Otherwise, this structure: {
170
     *   @type array  $info {
171
     *       @type string $id int 17
172
     *       @type string $slug Extension slug
173
     *       @type string $title Extension title
174
     *       @type string $create_date in '2018-07-19 20:03:10' format
175
     *       @type string $modified_date
176
     *       @type string $status
177
     *       @type string $link URL to public plugin page
178
     *       @type string $content
179
     *       @type string $excerpt
180
     *       @type string $thumbnail URL to thumbnail
181
     *       @type array  $category Taxonomy details for the plugin's category {
182
     *         @type int $term_id => int 30
183
     *         @type string $name => string 'Plugins' (length=7)
184
     *         @type string $slug => string 'plugins' (length=7)
185
     *         @type int $term_group => int 0
186
     *         @type int $term_taxonomy_id => int 30
187
     *         @type string $taxonomy => string 'download_category' (length=17)
188
     *         @type string $description => string '' (length=0)
189
     *         @type int $parent => int 0
190
     *         @type int $count => int 4
191
     *         @type string $filter => string 'raw' (length=3)
192
     *       }
193
     *       @type array $tags {see $category above}
194
     *       @type string $textdomain string 'gravityview' (length=11)
195
     *   }
196
     *   @type array $pricing array of `price_name_slugs` => '00.00' values, if price options exist
197
     *   @type array $licensing {
198
     *       @type bool   $enabled Is licensing enabled for the extension
199
     *       @type string $version Version number
200
     *       @type string $exp_unit Expiration unit ('years')
201
     *       @type string $exp_length Expiration length ('1')
202
     *   }
203
     *   @type array $files Array of files. Empty if user has no access to the file. {
204
     *       @type string $file string URL of the file download
205
     *   }
206
     * }
207
	 */
208
	public function get_downloads_data() {
209
210
		$downloads_data = get_site_transient( self::DOWNLOADS_DATA_TRANSIENT );
211
212
		if ( $downloads_data && ! isset( $_GET['cache'] ) ) {
213
			return $downloads_data;
214
		}
215
216
		if( \GV\Plugin::is_network_activated() ) {
217
			$home_url = network_home_url();
218
		} else {
219
			$home_url = home_url();
220
		}
221
222
		$api_url = add_query_arg(
223
			array(
224
				'key'         => self::EDD_API_KEY,
225
				'token'       => self::EDD_API_TOKEN,
226
				'url'         => $home_url,
227
				'license_key' => gravityview()->plugin->settings->get( 'license_key' )
228
			),
229
			self::EDD_API_URL
230
		);
231
232
		$response = wp_remote_get( $api_url, array(
233
			'sslverify' => false,
234
			'timeout'   => 5,
235
		) );
236
237
		if ( is_wp_error( $response ) ) {
238
		    gravityview()->log->error( "Extension data response is an error", array( 'data' => $response ) );
239
			return $response;
240
		}
241
242
		$downloads_data = json_decode( wp_remote_retrieve_body( $response ), true );
243
244
		if ( empty( $downloads_data['products'] ) ) {
245
			return array();
246
		}
247
248
		$this->set_downloads_data( $downloads_data['products'] );
249
250
		return $downloads_data['products'];
251
	}
252
253
	/**
254
	 * Save downloads data in a time-bound transient
255
	 *
256
	 * @param array $data
257
	 *
258
	 * @return true if successful, false otherwise
259
	 */
260
	public function set_downloads_data( $data ) {
261
		return set_site_transient( self::DOWNLOADS_DATA_TRANSIENT, $data, self::DOWNLOADS_DATA_TRANSIENT_EXPIRY );
262
	}
263
264
	/**
265
	 * Delete downloads data transient
266
	 *
267
	 * @return bool true if successful, false otherwise
268
	 */
269
	public function delete_downloads_data() {
270
		return delete_site_transient( self::DOWNLOADS_DATA_TRANSIENT );
271
	}
272
273
	/**
274
	 * Display a grid of available downloads and controls to install/activate/deactivate them
275
	 *
276
	 * @since 2.1
277
	 *
278
	 * @return void
279
	 */
280
	public function render_screen() {
281
282
		$downloads_data = $this->get_downloads_data();
283
284
		if ( is_wp_error( $downloads_data ) || empty( $downloads_data ) ) {
285
			?>
286
            <div class="wrap">
287
                <h1><?php esc_html_e( 'GravityView Extensions and Plugins', 'gravityview' ); ?></h1>
288
                <div class="gv-admin-installer-notice notice inline error">
289
                    <h3><?php esc_html_e( 'Extensions and plugins data cannot be loaded at the moment. Please try again later.', 'gravityview' ); ?></h3>
290
                    <?php
291
                    if ( is_wp_error( $downloads_data ) ) {
292
	                    echo wpautop( '<pre>' . esc_html( $downloads_data->get_error_message() ) . '</pre>' );
293
                    }
294
                    ?>
295
                </div>
296
            </div>
297
			<?php
298
299
			return;
300
		}
301
302
		?>
303
        <div class="wrap">
304
305
306
            <h1><?php esc_html_e( 'GravityView Extensions and Plugins', 'gravityview' ); ?></h1>
307
308
            <h2><?php esc_html_e( 'The following plugins extend GravityView and Gravity Forms functionality:', 'gravityview' ); ?></h2>
309
310
            <div class="wp-header-end"></div>
311
312
            <div class="gv-admin-installer-notice notice inline error hidden is-dismissible">
313
                <p><!-- Contents will be replaced by JavaScript if there is an error --></p>
314
            </div>
315
316
            <div class="gv-admin-installer-container">
317
				<?php
318
319
				$wp_plugins = self::get_wp_plugins_data();
320
321
				$this->render_section( 'views', esc_html__( 'GravityView Layouts', 'gravityview' ), $downloads_data, $wp_plugins );
322
323
				$this->render_section( 'extensions', esc_html__( 'GravityView Extensions', 'gravityview' ), $downloads_data, $wp_plugins );
324
325
				$this->render_section(  'plugins', esc_html__( 'Gravity Forms Add-Ons', 'gravityview' ), $downloads_data, $wp_plugins );
326
327
				$this->render_section(  'friends', esc_html__( 'Friends of GravityView', 'gravityview' ), $downloads_data, $wp_plugins );
328
				?>
329
            </div>
330
        </div>
331
		<?php
332
	}
333
334
	private function render_section( $section_slug, $heading, $downloads_data, $wp_plugins = array() ) {
335
336
		ob_start();
337
338
		foreach ( $downloads_data as $download ) {
339
340
			if ( $section_slug !== \GV\Utils::get( $download, 'info/category/0/slug' ) && $section_slug !== \GV\Utils::get( $download, 'info/category/1/slug' ) ) {
341
				continue;
342
			}
343
344
			if ( empty( $download['info'] ) ) {
345
				continue;
346
			}
347
348
			$this->render_download( $download, $wp_plugins );
349
		}
350
351
		$output = ob_get_clean();
352
		$output = trim( $output );
353
354
		if ( ! empty( $output ) ) {
355
			echo '<div class="clearfix" style="width:100%;"><h3 style="font-size: 1.5em;">' . esc_html( $heading ) . '</h3></div>';
356
			echo $output;
357
		}
358
	}
359
360
	/**
361
	 * Outputs the HTML of a single download
362
	 *
363
	 * @param array $download Download data, as returned from EDD API
364
	 * @param array $wp_plugins
365
	 *
366
	 * @return void
367
	 */
368
	protected function render_download( $download, $wp_plugins ) {
369
370
        $details = $this->get_download_display_details( $download, $wp_plugins );
371
372
        $download_info = $details['download_info'];
373
374
		?>
375
        <div class="item <?php echo esc_attr( $details['item_class'] ); ?>">
376
            <div class="addon-inner">
377
                <a href="<?php echo esc_url( $download_info['link'] ); ?>" rel="external noreferrer noopener" title="<?php esc_html_e( 'Visit the plugin page', 'gravityview' ); ?>"><img class="thumbnail" src="<?php echo esc_attr( $download_info['thumbnail'] ); ?>" alt="" /></a>
378
                <h3><?php echo esc_html( \GV\Utils::get( $download_info, 'installer_title', $download_info['title'] ) ); ?></h3>
379
                <div>
380
                    <?php if( ! empty( $details['status_label'] ) ) { ?>
381
                    <div class="status <?php echo esc_attr( $details['status'] ); ?>" title="<?php printf( esc_attr__( 'Plugin status: %s', 'gravityview' ), esc_html( $details['status_label'] ) ); ?>">
382
                        <span class="dashicons dashicons-admin-plugins"></span> <span class="status-label"><?php echo esc_html( $details['status_label'] ); ?></span>
383
                    </div>
384
			        <?php } ?>
385
386
                    <a data-status="<?php echo esc_attr( $details['status'] ); ?>" data-plugin-path="<?php echo esc_attr( $details['plugin_path'] ); ?>" href="<?php echo esc_url( $details['href'] ); ?>" class="button <?php echo esc_attr( $details['button_class'] ); ?>" title="<?php echo esc_attr( $details['button_title'] ); ?>">
387
                        <span class="title"><?php echo esc_html( $details['button_label'] ); ?></span>
388
                        <?php if( $details['spinner'] ) { ?><span class="spinner"></span><?php } ?>
389
                    </a>
390
                </div>
391
392
                <div class="addon-excerpt"><?php
393
394
                    $excerpt = \GV\Utils::get( $download_info, 'installer_excerpt', $download_info['excerpt'] );
395
396
                    // Allow some pure HTML tags, but remove everything else from the excerpt.
397
                    $tags = array( '<strong>', '</strong>', '<em>', '</em>', '<code>', '</code>' );
398
                    $replacements = array( '[b]', '[/b]', '[i]', '[/i]', '[code]', '[/code]' );
399
400
                    $excerpt = str_replace( $tags, $replacements, $excerpt );
401
                    $excerpt = esc_html( strip_tags( $excerpt ) );
402
					$excerpt = str_replace( $replacements, $tags, $excerpt );
403
404
					echo wpautop( $excerpt );
405
                ?></div>
406
            </div>
407
        </div>
408
		<?php
409
	}
410
411
	/**
412
     * Generates details array for the download to keep the render_download() method a bit tidier
413
     *
414
	 * @param array $download Single download, as returned by {@see get_downloads_data}
415
	 * @param array $wp_plugins All active plugins, as returned by {@see get_plugins()}
416
	 *
417
	 * @return array {
418
     *   @type array $download_info
419
     *   @type string $plugin_path
420
     *   @type string $status License status returned by Easy Digital Downloads ("active", "inactive", "expired", "revoked", etc)
421
     *   @type string $status_label
422
     *   @type string $button_title Title attribute to show when hovering over the download's button
423
     *   @type string $button_class CSS class to use for the button
424
     *   @type string $button_label Text to use for the download's anchor link
425
     *   @type string $href URL for the download's button
426
     *   @type bool   $spinner Whether to show the spinner icon
427
     *   @type string $item_class CSS class for the download container
428
     *   @type string $required_license The name of the required license for the download ("All Access" or "Core + Extensions")
429
     *   @type bool   $is_active Is the current GravityView license (as entered in Settings) active?
430
     * }
431
	 */
432
	private function get_download_display_details( $download, $wp_plugins ) {
433
434
		$download_info = wp_parse_args( (array) $download['info'], array(
435
			'thumbnail' => '',
436
			'title' => '',
437
			'textdomain' => '',
438
			'slug' => '',
439
			'excerpt' => '',
440
			'link' => '',
441
            'coming_soon' => false,
442
			'installer_title' => null, // May not be defined
443
			'installer_excerpt' => null, // May not be defined
444
		) );
445
446
		$wp_plugin = \GV\Utils::get( $wp_plugins, $download_info['textdomain'], false );
447
448
		$has_access = ! empty( $download['files'] );
449
		$spinner = true;
450
		$href = $plugin_path = '#';
451
		$status = $item_class = $button_title = $button_class = '';
452
		$base_price = $this->get_download_base_price( $download );
453
		$is_active = in_array( gravityview()->plugin->settings->get( 'license_key_response/license' ), array( 'active', 'valid' ), true );
454
		$galactic_only = in_array( \GV\Utils::get( $download, 'info/category/0/slug' ), array( 'plugins', 'views' ) );
455
		$required_license = $galactic_only ? __( 'All Access', 'gravityview' ) : __( 'Core + Extensions', 'gravityview' );
456
457
		// The license is not active - no matter what level, this should not work
458
		if( ! $is_active  && empty( $base_price ) ) {
459
			$spinner      = false;
460
			$status_label = '';
461
			$button_class = 'disabled disabled-license';
462
			$button_label = sprintf( __( 'Active %s License is Required.', 'gravityview' ), $required_license );
463
		}
464
465
		// No access with the current license level, and the download is available to purchase
466
		elseif ( ! $has_access && ! empty( $base_price ) ) {
467
			$spinner      = false;
468
			$status_label = '';
469
			$button_label = sprintf( __( 'Purchase Now for %s', 'gravityview' ), '$' . $base_price );
470
			$button_class = 'button-primary button-large';
471
			$href         = $download_info['link'];
472
			$item_class   = 'featured';
473
		}
474
475
		// No access with the current license level, and the download is not sold separately
476
		elseif ( ! $has_access && $is_active ) {
477
			$spinner      = false;
478
			$status_label = '';
479
			$button_label = sprintf( __( 'Upgrade to %s for Access', 'gravityview' ), $required_license );
480
			$button_class = 'button-primary button-large';
481
			$href         = 'https://gravityview.co/pricing/?utm_source=admin-installer&utm_medium=admin&utm_campaign=Admin%20Notice&utm_content=' . $required_license;
482
		}
483
484
        elseif ( ! empty( $download_info['coming_soon'] ) ) {
485
	        $spinner      = false;
486
	        $status       = 'notinstalled';
487
	        $status_label = __( 'Coming Soon', 'gravityview' );
488
	        $button_label = __( 'Learn More', 'gravityview' );
489
	        $button_class = 'button-primary button-large';
490
	        $href         = \GV\Utils::get( $download_info, 'link', 'https://gravityview.co/extensions/' );
491
        }
492
493
		// Access but the plugin is not installed
494
		elseif ( ! $wp_plugin ) {
495
496
			$href = add_query_arg(
497
				array(
498
					'action'   => 'install-plugin',
499
					'plugin'   => $download_info['slug'],
500
					'_wpnonce' => wp_create_nonce( 'install-plugin_' . $download_info['slug'] ),
501
				),
502
				self_admin_url( 'update.php' )
503
			);
504
505
			$status = 'notinstalled';
506
			$status_label = __( 'Not Installed', 'gravityview' );
507
			$button_label = __( 'Install', 'gravityview' );
508
509
		}
510
511
		// Access and the plugin is installed but not active
512
		elseif ( false === $wp_plugin['activated'] ) {
513
			$status = 'inactive';
514
			$status_label = __( 'Inactive', 'gravityview' );
515
			$button_label = __( 'Activate', 'gravityview' );
516
			$plugin_path = $wp_plugin['path'];
517
518
		}
519
520
		// Access and the plugin is installed and active
521
		else {
522
523
			$plugin_path = $wp_plugin['path'];
524
			$status = 'active';
525
			$status_label = __( 'Active', 'gravityview' );
526
			$button_label = __( 'Deactivate', 'gravityview' );
527
528
		}
529
530
		return compact( 'download_info','plugin_path', 'status', 'status_label', 'button_title', 'button_class', 'button_label', 'href', 'spinner', 'item_class', 'required_license', 'is_active' );
531
    }
532
533
	/**
534
     * Returns the base price for an extension
535
     *
536
	 * @param array $download
537
	 *
538
	 * @return float Base price for an extension. If not for sale separately, returns 0
539
	 */
540
	private function get_download_base_price( $download ) {
541
542
	    $base_price = \GV\Utils::get( $download, 'pricing/amount', 0 );
543
		$base_price = \GFCommon::to_number( $base_price );
544
545
		unset( $download['pricing']['amount'] );
546
547
		// Price options array, not single price
548
		if ( ! $base_price && ! empty( $download['pricing'] ) ) {
549
			$base_price = array_shift( $download['pricing'] );
550
		}
551
552
		return floatval( $base_price );
553
    }
554
555
	/**
556
	 * Handle AJAX request to activate extension
557
	 *
558
	 * @return void Exits with JSON response
559
	 */
560
	public function activate_download() {
561
		$data = \GV\Utils::_POST( 'data', array() );
562
563
		if ( empty( $data['path'] ) ) {
564
			return;
565
		}
566
567
		$result = activate_plugin( $data['path'] );
568
569
		if ( is_wp_error( $result ) || ! is_plugin_active( $data['path'] ) ) {
570
			wp_send_json_error( array(
571
                'error' => sprintf( __( 'Plugin activation failed: %s', 'gravityview' ), $result->get_error_message() )
572
            ) );
573
		}
574
575
		wp_send_json_success();
576
	}
577
578
	/**
579
	 * Handle AJAX request to deactivate extension
580
	 *
581
	 * @return void Send JSON response status and error message
582
	 */
583
	public function deactivate_download() {
584
		$data = \GV\Utils::_POST( 'data', array() );
585
586
		if ( empty( $data['path'] ) ) {
587
			return;
588
		}
589
590
		deactivate_plugins( $data['path'] );
591
592
		if( is_plugin_active( $data['path'] ) ) {
593
            wp_send_json_error( array(
594
                'error' => sprintf( __( 'Plugin deactivation failed.', 'gravityview' ) )
595
            ) );
596
        }
597
598
		wp_send_json_success();
599
	}
600
601
	/**
602
	 * Register and enqueue assets; localize script
603
	 *
604
	 * @return void
605
	 */
606
	public function maybe_enqueue_scripts_and_styles() {
607
608
		if ( ! gravityview()->request->is_admin( '', 'downloads' ) ) {
0 ignored issues
show
Unused Code introduced by
The call to Frontend_Request::is_admin() has too many arguments starting with ''.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
Unused Code introduced by
The call to Request::is_admin() has too many arguments starting with ''.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
609
			return;
610
		}
611
612
		$script_debug = ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ? '' : '.min';
613
614
		wp_enqueue_style( 'gravityview-admin-installer', GRAVITYVIEW_URL . 'assets/css/admin-installer.css', array(), \GV\Plugin::$version );
615
616
		wp_enqueue_script( 'gravityview-admin-installer', GRAVITYVIEW_URL . 'assets/js/admin-installer' . $script_debug . '.js', array( 'jquery' ), \GV\Plugin::$version, true );
617
618
		wp_localize_script( 'gravityview-admin-installer', 'gvAdminInstaller', array(
619
			'activateErrorLabel'    => __( 'Plugin activation failed.', 'gravityview' ),
620
			'deactivateErrorLabel'  => __( 'Plugin deactivation failed.', 'gravityview' ),
621
			'activeStatusLabel'     => __( 'Active', 'gravityview' ),
622
			'inactiveStatusLabel'   => __( 'Inactive', 'gravityview' ),
623
			'activateActionLabel'   => __( 'Activate', 'gravityview' ),
624
			'deactivateActionLabel' => __( 'Deactivate', 'gravityview' )
625
		) );
626
	}
627
}
628
629
new GravityView_Admin_Installer;
630