Completed
Push — master ( 3584cb...f1ef9b )
by Marin
02:23
created

Carbon_Breadcrumb_Admin::apply_settings()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12
Metric Value
dl 0
loc 12
ccs 0
cts 9
cp 0
rs 9.4286
cc 3
eloc 7
nc 3
nop 1
crap 12
1
<?php
2
/**
3
 * The main breadcrumb administration class.
4
 *
5
 * Includes, wraps and manages the administration functionality.
6
 */
7
final class Carbon_Breadcrumb_Admin {
8
9
	/**
10
	 * Instance container.
11
	 *
12
	 * @static
13
	 * @access private
14
	 *
15
	 * @var Carbon_Breadcrumb_Admin
16
	 */
17
	private static $instance = null;
18
19
	/**
20
	 * Settings container.
21
	 *
22
	 * @static
23
	 * @access public
24
	 *
25
	 * @var Carbon_Breadcrumb_Admin_Settings
26
	 */
27
	public static $settings = null;
28
29
	/**
30
	 * Constructor.
31
	 * Private so only the get_instance() can instantiate it.
32
	 *
33
	 * Creates the administration functionality wrapper.
34
	 *
35
	 * @access private
36
	 */
37
	private function __construct() {
38
		// include the plugin files
39
		$this->include_files();
40
41
		// if administration is enabled, initialize
42
		if ( $this->is_enabled() ) {
43
			add_action( 'init', array( $this, 'init' ) );
44
			add_action( 'admin_menu', array( $this, 'admin_init' ), 20 );
45
		}
46
	}
47
48
	/**
49
	 * Retrieve or create the Carbon_Breadcrumb_Admin instance.
50
	 *
51
	 * @static
52
	 * @access public
53
	 *
54
	 * @return Carbon_Breadcrumb_Admin $instance
55
	 */
56
	public static function get_instance() {
57
		if ( self::$instance === null ) {
58
			self::$instance = new self();
59
		}
60
		return self::$instance;
61
	}
62
63
	/**
64
	 * Include the administration files.
65
	 *
66
	 * @access public
67
	 */
68
	public function include_files() {
69
		$dir = dirname( __FILE__ );
70
71
		include_once($dir . '/Carbon_Breadcrumb_Admin_Settings.php');
72
		include_once($dir . '/Carbon_Breadcrumb_Admin_Settings_Field.php');
73
		include_once($dir . '/Carbon_Breadcrumb_Admin_Settings_Field_Text.php');
74
		include_once($dir . '/Carbon_Breadcrumb_Admin_Settings_Field_Checkbox.php');
75
	}
76
77
	/**
78
	 * Initialize breadcrumb administration.
79
	 *
80
	 * @access public
81
	 */
82
	public function admin_init() {
83
		// register settings
84
		$this->register_settings();
85
	}
86
87
	/**
88
	 * Initialize breadcrumb frontend.
89
	 *
90
	 * @access public
91
	 */
92
	public function init() {
93
		// apply the breadcrumb renderer settings
94
		add_filter( 'carbon_breadcrumbs_renderer_default_options', array( $this, 'apply_settings' ), 20 );
95
	}
96
97
	/**
98
	 * Register and setup the settings page and fields.
99
	 *
100
	 * @access public
101
	 */
102
	public function register_settings() {
103
		// register the settings page and fields
104
		self::$settings = new Carbon_Breadcrumb_Admin_Settings();
105
	}
106
107
	/**
108
	 * Apply the settings to the breadcrumb trail renderer
109
	 *
110
	 * @access public
111
	 *
112
	 * @param array $settings The default settings.
113
	 * @return array $settings The modified settings.
114
	 */
115
	public function apply_settings( $settings ) {
116
		$settings_fields = Carbon_Breadcrumb_Admin_Settings::get_field_data();
117
118
		foreach ( $settings_fields as $field_id => $field ) {
119
			$settings[ $field_id ] = get_option( 'carbon_breadcrumbs_' . $field_id );
120
			if ( 'checkbox' == $field['type'] ) {
121
				$settings[ $field_id ] = (bool) $settings[ $field_id ];
122
			}
123
		}
124
125
		return $settings;
126
	}
127
128
	/**
129
	 * Whether the administration interface should be enabled.
130
	 *
131
	 * @access public
132
	 *
133
	 * @return bool $is_enabled True if the admin interface is enabled.
134
	 */
135
	public function is_enabled() {
136
		$enabled = false;
137
138
		// enabled if this plugin is installed as a regular WordPress plugin
139
		$plugin_path = untrailingslashit( ABSPATH ) . DIRECTORY_SEPARATOR . 'wp-content' . DIRECTORY_SEPARATOR . 'plugins';
140
		$current_dir = dirname( __FILE__ );
141
		if ( false !== strpos( $current_dir, $plugin_path ) ) {
142
			$enabled = true;
143
		}
144
145
		// enabled if the CARBON_BREADCRUMB_ENABLE_ADMIN is defined as `true`
146
		if ( defined( 'CARBON_BREADCRUMB_ENABLE_ADMIN' ) && CARBON_BREADCRUMB_ENABLE_ADMIN ) {
147
			$enabled = true;
148
		}
149
150
		// allow manual enabling/disabling
151
		return apply_filters( 'carbon_breadcrumb_enable_admin', $enabled );
152
	}
153
154
	/**
155
	 * Private __clone() to prevent cloning the singleton instance.
156
	 *
157
	 * @access private
158
	 */
159
	private function __clone() {}
160
161
	/**
162
	 * Private __wakeup() to prevent singleton instance unserialization.
163
	 *
164
	 * @access private
165
	 */
166
	private function __wakeup() {}
167
168
}