Completed
Push — master ( d1a272...91e5db )
by
unknown
04:07
created

Pages::html()   D

Complexity

Conditions 16
Paths 12

Size

Total Lines 85
Code Lines 38

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 3
Metric Value
dl 0
loc 85
rs 4.8737
c 3
b 0
f 3
cc 16
eloc 38
nc 12
nop 0

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * Settings Pages
4
 *
5
 * @package SimpleCalendar/Admin
6
 */
7
namespace SimpleCalendar\Admin;
8
9
use SimpleCalendar\Abstracts\Field;
10
use SimpleCalendar\Abstracts\Admin_Page;
11
12
if ( ! defined( 'ABSPATH' ) ) {
13
	exit;
14
}
15
16
/**
17
 * Admin pages class.
18
 *
19
 * Handles settings pages and settings UI in admin dashboard.
20
 *
21
 * @since 3.0.0
22
 */
23
class Pages {
24
25
	/**
26
	 * Current settings page.
27
	 *
28
	 * @access private
29
	 * @var string
30
	 */
31
	private $page = '';
32
33
	/**
34
	 * Default tab.
35
	 *
36
	 * @access private
37
	 * @var string
38
	 */
39
	private $tab = '';
40
41
	/**
42
	 * Settings pages.
43
	 *
44
	 * @access private
45
	 * @var array
46
	 */
47
	private $settings = array();
48
49
	/**
50
	 * Constructor.
51
	 *
52
	 * @since 3.0.0
53
	 *
54
	 * @param string $page
55
	 */
56
	public function __construct( $page = 'settings' ) {
57
58
		$this->page = $page;
59
		$settings_pages = ! is_null( \SimpleCalendar\plugin()->objects ) ? simcal_get_admin_pages() : '';
60
		$settings_page_tabs = array();
61
		$tabs = isset( $settings_pages[ $page ] ) ? $settings_pages[ $page ] : false;
62
63
		if ( $tabs && is_array( $tabs ) ) {
64
			foreach ( $tabs as $tab ) {
65
66
				$settings_page = simcal_get_admin_page( $tab );
67
68
				if ( $settings_page instanceof Admin_Page ) {
69
					$settings_page_tabs[ $settings_page->id ] = $settings_page;
70
				}
71
			}
72
73
			$this->settings = $settings_page_tabs;
74
		}
75
76
		// The first tab is the default tab when opening a page.
77
		$this->tab = isset( $tabs[0] ) ? $tabs[0] : '';
78
79
		do_action( 'simcal_admin_pages', $page );
80
	}
81
82
	/**
83
	 * Get settings pages.
84
	 *
85
	 * @since  3.0.0
86
	 * @access private
87
	 *
88
	 * @return array
89
	 */
90
	public function get_settings() {
91
92
		$settings = array();
93
94
		if ( ! empty( $this->settings ) && is_array( $this->settings ) ) {
95
			foreach ( $this->settings as $id => $object ) {
96
97
				if ( $object instanceof Admin_Page ) {
98
99
					$settings_page = $object->get_settings();
100
101
					if ( isset( $settings_page[ $id ] ) ) {
102
						$settings[ $id ] = $settings_page[ $id ];
103
					}
104
				}
1 ignored issue
show
introduced by
Blank line found after control structure
Loading history...
105
106
			}
107
		}
108
109
		return $settings;
110
	}
111
112
	/**
113
	 * Register settings.
114
	 *
115
	 * Adds settings sections and fields to settings pages.
116
	 *
117
	 * @since 3.0.0
118
	 *
119
	 * @param array $settings
120
	 */
121
	public function register_settings( $settings = array() ) {
122
123
		$settings = $settings ? $settings : $this->get_settings();
124
125
		if ( ! empty( $settings ) && is_array( $settings ) ) {
126
127
			foreach ( $settings as $tab_id => $settings_page ) {
128
129
				if ( isset( $settings_page['sections'] ) ) {
130
131
					$sections = $settings_page['sections'];
132
133
					if ( ! empty( $sections ) && is_array( $sections ) ) {
134
135
						foreach ( $sections as $section_id => $section ) {
136
137
							add_settings_section(
138
								$section_id,
139
								isset( $section['title'] ) ? $section['title'] : '',
140
								isset( $section['callback'] ) ? $section['callback'] : '',
141
								'simple-calendar_' . $this->page . '_' . $tab_id
142
							);
143
144
							if ( isset( $section['fields'] ) ) {
145
146
								$fields = $section['fields'];
147
148
								if ( ! empty( $fields ) && is_array( $fields ) ) {
149
150
									foreach ( $fields as $field ) {
151
152
										if ( isset( $field['id'] ) && isset( $field['type'] ) ) {
153
154
											$field_object = simcal_get_field( $field, $field['type'] );
155
156
											if ( $field_object instanceof Field ) {
157
158
												add_settings_field(
159
													$field['id'],
160
													isset( $field['title'] ) ? $field['title'] : '',
161
													array( $field_object, 'html' ),
162
													'simple-calendar_' . $this->page . '_' . $tab_id,
163
													$section_id
164
												);
165
166
											} // add field
167
168
										} // is field valid?
169
170
									} // loop fields
171
172
								} // are fields non empty?
173
174
							} // are there fields?
175
176
							$page = simcal_get_admin_page( $tab_id );
177
178
							register_setting(
179
								'simple-calendar_' . $this->page . '_' . $tab_id,
180
								'simple-calendar_' . $this->page . '_' . $tab_id,
181
								$page instanceof Admin_Page ? array( $page, 'validate' ) : ''
182
							);
183
184
						} // loop sections
185
186
					} // are sections non empty?
187
188
				} // are there sections?
189
190
			} // loop settings
191
192
		} // are there settings?
193
194
	}
195
196
	/**
197
	 * Print Settings Pages.
198
	 *
199
	 * @since 3.0.0
200
	 */
201
	public function html() {
202
203
		global $current_tab;
204
205
		// Get current tab/section
206
		$current_tab = empty( $_GET['tab'] ) ? $this->tab : sanitize_title( $_GET['tab'] );
1 ignored issue
show
introduced by
Detected access of super global var $_GET, probably need manual inspection.
Loading history...
207
		$this->tab = $current_tab;
208
209
		?>
210
		<div class="wrap" id="simcal-settings-page">
211
			<form id="simcal-settings-page-form"
212
			      method="post"
213
			      action="options.php">
214
				<?php
215
216
				// Include settings pages
217
				$settings_pages = self::get_settings();
218
				if ( ! empty( $settings_pages ) && is_array( $settings_pages ) ) {
219
220
					echo '<h2 class="nav-tab-wrapper simcal-nav-tab-wrapper">';
221
222
					// Get tabs for the settings page
223
					if ( ! empty( $settings_pages ) && is_array( $settings_pages ) ) {
224
225
						foreach ( $settings_pages as $id => $settings ) {
226
227
							$tab_id    = isset( $id ) ? $id : '';
228
							$tab_label = isset( $settings['label'] ) ? $settings['label'] : '';
229
							$tab_link  = admin_url( 'edit.php?post_type=calendar&page=simple-calendar_' . $this->page . '&tab=' . $tab_id );
230
231
							echo '<a href="' . $tab_link . '" class="nav-tab ' . ( $current_tab == $tab_id ? 'nav-tab-active' : '' ) . '">' . $tab_label . '</a>';
3 ignored issues
show
introduced by
Expected next thing to be a escaping function, not '$tab_link'
Loading history...
introduced by
Expected next thing to be a escaping function, not '('
Loading history...
introduced by
Expected next thing to be a escaping function, not '$tab_label'
Loading history...
232
						}
1 ignored issue
show
introduced by
Blank line found after control structure
Loading history...
233
234
					}
235
236
					do_action( 'simcal_admin_page_' . $this->page . '_tabs' );
237
238
					echo '</h2>';
239
240
					settings_errors();
241
242
					foreach ( $settings_pages as $tab_id => $contents ) {
243
244
						if ( $tab_id === $current_tab ) {
245
246
							echo isset( $contents['description'] ) ? '<p>' . $contents['description'] . '</p>' : '';
2 ignored issues
show
introduced by
Expected next thing to be a escaping function, not 'isset'
Loading history...
introduced by
Expected next thing to be a escaping function, not '$contents'
Loading history...
247
248
							do_action( 'simcal_admin_page_' .  $this->page . '_' . $current_tab . '_start' );
249
250
							settings_fields( 'simple-calendar_' . $this->page . '_' . $tab_id );
251
							do_settings_sections( 'simple-calendar_' . $this->page . '_' . $tab_id );
252
253
							do_action( 'simcal_admin_page_' .  $this->page . '_' . $current_tab . '_end' );
254
255
							$submit = apply_filters( 'simcal_admin_page_' . $this->page . '_' . $current_tab . '_submit', true );
256
							if ( true === $submit ) {
257
								submit_button();
258
							}
259
						}
260
					}
261
				}
262
263
				// Add option to show we ran through default settings
264
				// We also run a check here for the main settings page option. This is to determine if this is a fresh install or if they already had
265
				// the plugin installed. The main feed settings page would give the best idea of that since user's have to enter an API key on this page to get it working.
266
				if ( false === get_option( 'simple-calendar_defaults' ) && false === get_option( 'simple-calendar_settings_feeds' ) ) {
267
268
					$default_advanced = array (
0 ignored issues
show
introduced by
There must be no space between the Array keyword and the opening parenthesis
Loading history...
269
										'assets' => array (
0 ignored issues
show
introduced by
There must be no space between the Array keyword and the opening parenthesis
Loading history...
270
												'always_enqueue' => 'yes',
271
										),
272
									);
273
274
					update_option( 'simple-calendar_settings_advanced', $default_advanced );
275
276
					add_option( 'simple-calendar_defaults', 1 );
277
				}
278
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
279
280
				?>
281
			</form>
282
		</div>
283
		<?php
284
285
	}
286
287
}
288