Completed
Push — develop ( 32f12c...df82b0 )
by Zack
53:29 queued 33:28
created

GravityView_Lightbox::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
nc 1
nop 0
dl 0
loc 10
rs 9.9332
c 0
b 0
f 0
1
<?php
2
3
/**
4
 * Manage lightbox scripts for GravityView
5
 *
6
 * TODO: Add a global setting for lightbox providers
7
 * TODO: Add per-field settings
8
 *
9
 * @internal
10
 */
11
class GravityView_Lightbox {
12
13
	private static $providers = array();
14
15
	private static $active_provider = null;
16
17
	/**
18
	 * GravityView_Lightbox_Provider constructor.
19
	 */
20
	public function __construct() {
21
22
		require_once gravityview()->plugin->dir( 'includes/extensions/lightbox/class-gravityview-lightbox-provider.php' );
23
		require_once gravityview()->plugin->dir( 'includes/extensions/lightbox/fancybox/class-gravityview-lightbox-provider-fancybox.php' );
24
25
		// Using plugins_loaded instead of gravityview/loaded because Addon_Settings waits for all plugins to load.
26
		add_action( 'plugins_loaded', array( $this, 'set_provider' ), 11 );
27
28
		add_action( 'gravityview/lightbox/provider', array( $this, 'set_provider' ) );
29
	}
30
31
	/**
32
	 * Activate the lightbox provider chosen in settings
33
	 *
34
	 * @param string|null $provider GravityView_Lightbox_Provider::$slug of provider
35
	 *
36
	 * @internal
37
	 *
38
	 */
39
	public function set_provider( $provider = null ) {
40
41
		if( gravityview()->request->is_admin() ) {
42
			return;
43
		}
44
45
		if ( empty( $provider ) ) {
46
			$provider = gravityview()->plugin->settings->get( 'lightbox' );
47
		}
48
49
		if ( empty( self::$providers[ $provider ] ) || ! class_exists( self::$providers[ $provider ] ) ) {
50
			gravityview()->log->error( 'Lightbox provider {provider} not registered.', array( 'provider' => $provider ) );
51
			return;
52
		}
53
54
		// Already set up.
55
		if ( self::$active_provider && self::$active_provider instanceof self::$providers[ $provider ] ) {
56
			return;
57
		}
58
59
		// We're switching providers; remove the hooks that were added.
60
		if( self::$active_provider ) {
61
			self::$active_provider->remove_hooks();
62
		}
63
64
		self::$active_provider = new self::$providers[ $provider ];
65
66
		self::$active_provider->add_hooks();
67
	}
68
69
	/**
70
	 * Register lightbox providers
71
	 *
72
	 * @param $provider
73
	 */
74
	public static function register( $provider ) {
75
		self::$providers[ $provider::$slug ] = $provider;
76
	}
77
78
}
79
80
new GravityView_Lightbox();
81