Passed
Push — add/multiplan ( a781ed...bfed9f )
by Warwick
04:45
created

Settings   B

Complexity

Total Complexity 44

Size/Duplication

Total Lines 685
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 377
dl 0
loc 685
rs 8.8798
c 0
b 0
f 0
wmc 44

14 Methods

Rating   Name   Duplication   Size   Complexity  
A exercise_translations() 0 27 5
A get_settings_tabs() 0 32 4
A load_classes() 0 13 2
A endpoint_translations() 0 29 3
A global_downloads() 0 37 3
A get_instance() 0 6 2
A register_settings_page() 0 13 1
A __construct() 0 12 1
B set_vars() 0 121 5
B post_type_toggles() 0 59 6
A general_settings() 0 55 4
A generate_tabs() 0 23 2
A global_defaults() 0 44 5
A stat_disable() 0 50 1

How to fix   Complexity   

Complex Class

Complex classes like Settings often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.

Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.

While breaking up the class, it is a good idea to analyze how other classes use Settings, and based on these observations, apply Extract Interface, too.

1
<?php
2
/**
3
 * Contains the settings class for LSX
4
 *
5
 * @package lsx-health-plan
6
 */
7
8
namespace lsx_health_plan\classes\admin;
9
10
/**
11
 * Contains the settings for each post type \lsx_health_plan\classes\admin\Settings().
12
 */
13
class Settings {
14
15
	/**
16
	 * Holds class instance
17
	 *
18
	 * @since 1.0.0
19
	 *
20
	 * @var      object \lsx_health_plan\classes\admin\Settings()
21
	 */
22
	protected static $instance = null;
23
24
	/**
25
	 * Option key, and option page slug
26
	 *
27
	 * @var string
28
	 */
29
	protected $screen_id = 'lsx_health_plan_settings';
30
31
	/**
32
	 * An array of the post types for the Global Downloads field.
33
	 *
34
	 * @var array
35
	 */
36
	public $download_types = array();
37
38
	/**
39
	 * An array of the post types for the Global Defaults field.
40
	 *
41
	 * @var array
42
	 */
43
	public $default_types = array();
44
45
	/**
46
	 * An array of the endpoints for the Endpoint Translation field.
47
	 *
48
	 * @var array
49
	 */
50
	public $endpoints = array();
51
52
	/**
53
	 * Contructor
54
	 */
55
	public function __construct() {
56
		$this->load_classes();
57
		add_action( 'cmb2_admin_init', array( $this, 'register_settings_page' ) );
58
		add_action( 'lsx_hp_settings_page', array( $this, 'generate_tabs' ), 1, 1 );
59
60
		add_action( 'lsx_hp_settings_page_general_top', array( $this, 'general_settings' ), 1, 1 );
61
		add_action( 'lsx_hp_settings_page', array( $this, 'global_defaults' ), 3, 1 );
62
		add_action( 'lsx_hp_settings_page', array( $this, 'global_downloads' ), 5, 1 );
63
		add_action( 'lsx_hp_settings_page', array( $this, 'stat_disable' ), 6, 1 );
64
		add_action( 'lsx_hp_settings_page', array( $this, 'endpoint_translations' ), 7, 1 );
65
		add_action( 'lsx_hp_settings_page', array( $this, 'exercise_translations' ), 7, 1 );
66
		add_action( 'lsx_hp_settings_page', array( $this, 'post_type_toggles' ), 9, 1 );
67
	}
68
69
	/**
70
	 * Return an instance of this class.
71
	 *
72
	 * @since 1.0.0
73
	 *
74
	 * @return    object \lsx_health_plan\classes\admin\Settings()    A single instance of this class.
75
	 */
76
	public static function get_instance() {
77
		// If the single instance hasn't been set, set it now.
78
		if ( null === self::$instance ) {
79
			self::$instance = new self();
80
		}
81
		return self::$instance;
82
	}
83
84
	/**
85
	 * Loads the variable classes and the static classes.
86
	 */
87
	private function load_classes() {
88
89
		$this->post_types = array(
0 ignored issues
show
Bug Best Practice introduced by
The property post_types does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
90
			'plan',
91
			//'workout',
92
			//'exercise',
93
			//'meal',
94
			//'recipe',
95
			//'tip',
96
		);
97
98
		foreach ( $this->post_types as $post_type ) {
99
			$this->$post_type = require_once LSX_HEALTH_PLAN_PATH . 'classes/admin/settings/class-' . $post_type . '.php';
100
		}
101
	}
102
103
	/**
104
	 * Sets the variables needed for the fields.
105
	 *
106
	 * @return void
107
	 */
108
	public function set_vars() {
109
110
		$this->default_types  = array(
111
			'page' => array(
112
				'title'       => __( 'Warm Up', 'lsx-health-plan' ),
113
				'description' => __( 'Set a default warm up routine.', 'lsx-health-plan' ),
114
				'limit'       => 1,
115
				'id'          => 'plan_warmup',
116
			),
117
		);
118
		$this->download_types = array(
119
			'page' => array(
120
				'title'       => __( 'Warm Up', 'lsx-health-plan' ),
121
				'description' => __( 'Set a default warm up routine.', 'lsx-health-plan' ),
122
				'limit'       => 1,
123
			),
124
		);
125
		$this->endpoints      = array(
126
			'endpoint_warm_up' => array(
127
				'title'       => __( 'Warm Up Endpoint', 'lsx-health-plan' ),
128
				'default'     => 'warm-up',
129
			),
130
		);
131
132
		if ( post_type_exists( 'meal' ) ) {
133
			$this->download_types['meal']     = array(
134
				'title'       => __( 'Meal Plan', 'lsx-health-plan' ),
135
				'description' => __( 'Set a default meal plan.', 'lsx-health-plan' ),
136
			);
137
			$this->default_types['meal']      = array(
138
				'title'       => __( 'Meal Plan', 'lsx-health-plan' ),
139
				'description' => __( 'Set a default meal plan.', 'lsx-health-plan' ),
140
				'id'          => 'connected_meals',
141
			);
142
			$this->endpoints['endpoint_meal'] = array(
143
				'title'       => __( 'Meal Endpoint', 'lsx-health-plan' ),
144
				'default'     => 'meal',
145
				'description' => __( 'Define the tab slug which shows on the single plan page.', 'lsx-health-plan' ),
146
			);
147
			$this->endpoints['endpoint_meal_archive'] = array(
148
				'title'   => __( 'Meals Archive Endpoint', 'lsx-health-plan' ),
149
				'default' => 'meals',
150
			);
151
			$this->endpoints['meal_single_slug'] = array(
152
				'title'   => __( 'Single Meal Slug', 'lsx-health-plan' ),
153
				'default' => 'meal',
154
			);
155
		}
156
		if ( post_type_exists( 'recipe' ) ) {
157
			$this->download_types['recipe'] = array(
158
				'title'       => __( 'Recipe', 'lsx-health-plan' ),
159
				'description' => __( 'Set a default recipe.', 'lsx-health-plan' ),
160
			);
161
			$this->default_types['recipe'] = array(
162
				'title'       => __( 'Recipe', 'lsx-health-plan' ),
163
				'description' => __( 'Set a default recipe.', 'lsx-health-plan' ),
164
				'id'          => 'connected_recipes',
165
			);
166
			$this->endpoints['endpoint_recipe'] = array(
167
				'title'   => __( 'Recipes Endpoint', 'lsx-health-plan' ),
168
				'default' => 'recipe',
169
			);
170
		}
171
		if ( post_type_exists( 'workout' ) ) {
172
			$this->download_types['workout'] = array(
173
				'title'       => __( 'Workout', 'lsx-health-plan' ),
174
				'description' => __( 'Set a default workout routine PDF.', 'lsx-health-plan' ),
175
			);
176
			$this->default_types['workout'] = array(
177
				'title'       => __( 'Workout', 'lsx-health-plan' ),
178
				'description' => __( 'Set a default workout routine.', 'lsx-health-plan' ),
179
				'id'          => 'connected_workouts',
180
			);
181
			$this->endpoints['endpoint_workout_archive'] = array(
182
				'title'   => __( 'Workouts Archive Endpoint', 'lsx-health-plan' ),
183
				'default' => '',
184
			);
185
			$this->endpoints['endpoint_workout'] = array(
186
				'title'   => __( 'Single Workout Endpoint', 'lsx-health-plan' ),
187
				'default' => 'workout',
188
			);
189
		}
190
191
		$this->endpoints['login_slug'] = array(
192
			'title'   => __( 'Login Slug', 'lsx-health-plan' ),
193
			'default' => 'login',
194
		);
195
		$this->endpoints['my_plan_slug'] = array(
196
			'title'   => __( 'My Plan Slug', 'lsx-health-plan' ),
197
			'default' => 'my-plan',
198
		);
199
		$this->endpoints['plan_single_slug'] = array(
200
			'title'   => __( 'Single Plan Slug', 'lsx-health-plan' ),
201
			'default' => 'plan',
202
		);
203
		$this->endpoints['endpoint_plan_archive'] = array(
204
			'title'   => __( 'Plans Archive Endpoint', 'lsx-health-plan' ),
205
			'default' => 'plans',
206
		);
207
208
		if ( false !== \lsx_health_plan\functions\get_option( 'exercise_enabled', false ) ) {
209
			$this->endpoints['exercise'] = array(
210
				'exercise_single' => array(
211
					'title'   => __( 'Single Exercise Slug', 'lsx-health-plan' ),
212
					'default' => 'exercise',
213
				),
214
				'exercise_archive' => array(
215
					'title'   => __( 'Archive Exercise Slug', 'lsx-health-plan' ),
216
					'default' => 'exercises',
217
				),
218
				'exercise_type' => array(
219
					'title'   => __( 'Exercise Type Slug', 'lsx-health-plan' ),
220
					'default' => 'exercise-type',
221
				),
222
				'exercise_equipment' => array(
223
					'title'   => __( 'Equipment Slug', 'lsx-health-plan' ),
224
					'default' => 'equipment',
225
				),
226
				'exercise_musclegroup' => array(
227
					'title'   => __( 'Muscle Group Slug', 'lsx-health-plan' ),
228
					'default' => 'muscle-group',
229
				),
230
			);
231
		}
232
	}
233
234
	/**
235
	 * Hook in and register a submenu options page for the Page post-type menu.
236
	 */
237
	public function register_settings_page() {
238
		$this->set_vars();
239
		$cmb = new_cmb2_box(
240
			array(
241
				'id'           => $this->screen_id,
242
				'title'        => esc_html__( 'Settings', 'lsx-health-plan' ),
243
				'object_types' => array( 'options-page' ),
244
				'option_key'   => 'lsx_health_plan_options', // The option key and admin menu page slug.
245
				'parent_slug'  => 'edit.php?post_type=plan', // Make options page a submenu item of the themes menu.
246
				'capability'   => 'manage_options', // Cap required to view options-page.
247
			)
248
		);
249
		do_action( 'lsx_hp_settings_page', $cmb );
250
	}
251
252
	/**
253
	 * Registers the general settings.
254
	 *
255
	 * @param object $cmb new_cmb2_box().
256
	 * @return void
257
	 */
258
	public function general_settings( $cmb ) {
259
		$cmb->add_field(
260
			array(
261
				'name'       => __( 'Membership Product', 'lsx-health-plan' ),
262
				'id'         => 'membership_product',
263
				'type'       => 'post_search_ajax',
264
				'limit'      => 1,
265
				'sortable'   => false,
266
				'query_args' => array(
267
					'post_type'      => array( 'product' ),
268
					'post_status'    => array( 'publish' ),
269
					'posts_per_page' => -1,
270
				),
271
			)
272
		);
273
274
		$cmb->add_field(
275
			array(
276
				'name'    => __( 'Your Warm-up Intro', 'lsx-health-plan' ),
277
				'id'      => 'warmup_intro',
278
				'type'    => 'textarea_small',
279
				'value'   => '',
280
				'default' => __( "Don't forget your warm-up! It's a vital part of your daily workout routine.", 'lsx-health-plan' ),
281
			)
282
		);
283
		if ( post_type_exists( 'workout' ) ) {
284
			$cmb->add_field(
285
				array(
286
					'name'    => __( 'Your Workout Intro', 'lsx-health-plan' ),
287
					'id'      => 'workout_intro',
288
					'type'    => 'textarea_small',
289
					'value'   => '',
290
					'default' => __( "Let's do this! Smash your daily workout and reach your fitness goals.", 'lsx-health-plan' ),
291
				)
292
			);
293
		}
294
		if ( post_type_exists( 'meal' ) ) {
295
			$cmb->add_field(
296
				array(
297
					'name'    => __( 'Your Meal Plan Intro', 'lsx-health-plan' ),
298
					'id'      => 'meal_plan_intro',
299
					'type'    => 'textarea_small',
300
					'value'   => '',
301
					'default' => __( 'Get the right mix of nutrients to keep muscles strong & healthy.', 'lsx-health-plan' ),
302
				)
303
			);
304
		}
305
		if ( post_type_exists( 'recipe' ) ) {
306
			$cmb->add_field(
307
				array(
308
					'name'    => __( 'Recipes Intro', 'lsx-health-plan' ),
309
					'id'      => 'recipes_intro',
310
					'type'    => 'textarea_small',
311
					'value'   => '',
312
					'default' => __( "Let's get cooking! Delicious and easy to follow recipes.", 'lsx-health-plan' ),
313
				)
314
			);
315
		}
316
	}
317
318
	/**
319
	 * Registers the global default settings.
320
	 *
321
	 * @param object $cmb new_cmb2_box().
322
	 * @return void
323
	 */
324
	public function global_defaults( $cmb ) {
325
		$cmb->add_field(
326
			array(
327
				'id'      => 'global_defaults_title',
328
				'type'    => 'title',
329
				'name'    => __( 'Global Defaults', 'lsx-health-plan' ),
330
				'default' => __( 'Global Defaults', 'lsx-health-plan' ),
331
				'description' => __( 'If you have not connected a specific post to your day plan, set a default option below.', 'lsx-health-plan' ),
332
			)
333
		);
334
335
		foreach ( $this->default_types as $type => $default_type ) {
336
			$limit    = 5;
337
			$sortable = false;
338
			if ( isset( $default_type['limit'] ) ) {
339
				$limit    = $default_type['limit'];
340
				$sortable = true;
341
			}
342
343
			if ( 'page' === $type && false !== \lsx_health_plan\functions\get_option( 'exercise_enabled', false ) ) {
344
				$type = array( 'page', 'workout' );
345
			}
346
347
			$cmb->add_field(
348
				array(
349
					'name'       => $default_type['title'],
350
					'desc'       => $default_type['description'],
351
					'id'         => $default_type['id'],
352
					'type'       => 'post_search_ajax',
353
					'limit'      => $limit,
354
					'sortable'   => $sortable,
355
					'query_args' => array(
356
						'post_type'      => $type,
357
						'post_status'    => array( 'publish' ),
358
						'posts_per_page' => -1,
359
					),
360
				)
361
			);
362
		}
363
364
		$cmb->add_field(
365
			array(
366
				'id'   => 'settings_global_defaults_closing',
367
				'type' => 'tab_closing',
368
			)
369
		);
370
	}
371
372
	/**
373
	 * Registers the global dowloads settings
374
	 *
375
	 * @param object $cmb new_cmb2_box().
376
	 * @return void
377
	 */
378
	public function global_downloads( $cmb ) {
379
		$cmb->add_field(
380
			array(
381
				'id'      => 'global_downloads_title',
382
				'type'    => 'title',
383
				'name'    => __( 'Global Downloads', 'lsx-health-plan' ),
384
				'default' => __( 'Global Downloads', 'lsx-health-plan' ),
385
			)
386
		);
387
388
		foreach ( $this->download_types as $type => $download_type ) {
389
			$limit    = 5;
390
			$sortable = false;
391
			if ( isset( $download_type['limit'] ) ) {
392
				$limit    = $download_type['limit'];
393
				$sortable = true;
394
			}
395
396
			$cmb->add_field(
397
				array(
398
					'name'       => $download_type['title'],
399
					'id'         => 'download_' . $type,
400
					'type'       => 'post_search_ajax',
401
					'limit'      => $limit,
402
					'sortable'   => $sortable,
403
					'query_args' => array(
404
						'post_type'      => array( 'dlm_download' ),
405
						'post_status'    => array( 'publish' ),
406
						'posts_per_page' => -1,
407
					),
408
				)
409
			);
410
		}
411
		$cmb->add_field(
412
			array(
413
				'id'   => 'settings_global_downloads_closing',
414
				'type' => 'tab_closing',
415
			)
416
		);
417
	}
418
419
	/**
420
	 * Registers the endpoint translation settings.
421
	 *
422
	 * @param object $cmb new_cmb2_box().
423
	 * @return void
424
	 */
425
	public function endpoint_translations( $cmb ) {
426
		$cmb->add_field(
427
			array(
428
				'id'          => 'endpoints_title',
429
				'type'        => 'title',
430
				'name'        => __( 'Set Endpoint Translations', 'lsx-health-plan' ),
431
				'default'     => __( 'Set Endpoint Translations', 'lsx-health-plan' ),
432
				'description' => __( 'Endpoint is a web address (URL) at which the user can gain access to it. You need to resave your permalinks after changing the endpoint settings.', 'lsx-health-plan' ),
433
			)
434
		);
435
		foreach ( $this->endpoints as $slug => $endpoint_vars ) {
436
			if ( 'exercise' === $slug ) {
437
				continue;
438
			}
439
440
			$cmb->add_field(
441
				array(
442
					'name'    => $endpoint_vars['title'],
443
					'id'      => $slug,
444
					'type'    => 'input',
445
					'value'   => '',
446
					'default' => $endpoint_vars['default'],
447
				)
448
			);
449
		}
450
		$cmb->add_field(
451
			array(
452
				'id'   => 'settings_endpoints_closing',
453
				'type' => 'tab_closing',
454
			)
455
		);
456
	}
457
458
	/**
459
	 * Registers the endpoint translation settings.
460
	 *
461
	 * @param object $cmb new_cmb2_box().
462
	 * @return void
463
	 */
464
	public function exercise_translations( $cmb ) {
465
		if ( isset( $this->endpoints['exercise'] ) && '' !== $this->endpoints['exercise'] && ! empty( $this->endpoints['exercise'] ) ) {
466
			$cmb->add_field(
467
				array(
468
					'id'          => 'exercise_endpoints_title',
469
					'type'        => 'title',
470
					'name'        => __( 'Set Exercise Translations', 'lsx-health-plan' ),
471
					'default'     => __( 'Set Exercise Translations', 'lsx-health-plan' ),
472
					'description' => __( 'You need to resave your permalinks after changing the endpoint settings.', 'lsx-health-plan' ),
473
				)
474
			);
475
476
			foreach ( $this->endpoints['exercise'] as $slug => $endpoint_vars ) {
477
				$cmb->add_field(
478
					array(
479
						'name'    => $endpoint_vars['title'],
480
						'id'      => 'endpoint_' . $slug,
481
						'type'    => 'input',
482
						'value'   => '',
483
						'default' => $endpoint_vars['default'],
484
					)
485
				);
486
			}
487
			$cmb->add_field(
488
				array(
489
					'id'   => 'settings_exercise_closing',
490
					'type' => 'tab_closing',
491
				)
492
			);
493
		}
494
	}
495
496
	/**
497
	 * Registers the post type toggle settings
498
	 *
499
	 * @param object $cmb new_cmb2_box().
500
	 * @return void
501
	 */
502
	public function post_type_toggles( $cmb ) {
503
		$post_types = apply_filters( 'lsx_health_plan_post_types', isset( $this->post_types ) );
504
505
		$cmb->add_field(
506
			array(
507
				'id'          => 'post_type_toggles_title',
508
				'type'        => 'title',
509
				'name'        => __( 'Disable Post Types', 'lsx-health-plan' ),
510
				'default'     => __( 'Disable Post Types', 'lsx-health-plan' ),
511
				'description' => __( 'Disable post types if you are wanting a minimal site.', 'lsx-health-plan' ),
512
			)
513
		);
514
515
		foreach ( $post_types as $post_type ) {
516
			if ( 'plan' === $post_type || 'exercise' === $post_type || ( 'video' === $post_type && false !== \lsx_health_plan\functions\get_option( 'exercise_enabled', false ) ) ) {
517
				continue;
518
			}
519
520
			$cmb->add_field(
521
				array(
522
					'name'    => ucwords( $post_type ),
523
					'id'      => $post_type . '_disabled',
524
					'type'    => 'checkbox',
525
					'value'   => 1,
526
					'default' => 0,
527
				)
528
			);
529
		}
530
531
		$cmb->add_field(
532
			array(
533
				'id'   => 'settings_post_type_toggles_closing',
534
				'type' => 'tab_closing',
535
			)
536
		);
537
538
		$cmb->add_field(
539
			array(
540
				'id'          => 'post_type_toggles_enable_title',
541
				'type'        => 'title',
542
				'name'        => __( 'Enable Post Types', 'lsx-health-plan' ),
543
				'default'     => __( 'Enable Post Types', 'lsx-health-plan' ),
544
				'description' => __( 'Enable new functionailty like the "exercise" post type.', 'lsx-health-plan' ),
545
			)
546
		);
547
		$cmb->add_field(
548
			array(
549
				'name'        => __( 'Exercises', 'lsx-health-plan' ),
550
				'id'          => 'exercise_enabled',
551
				'type'        => 'checkbox',
552
				'value'       => 1,
553
				'default'     => 0,
554
				'description' => __( 'Enabling the exercise post type will automatically replace the Video post type.', 'lsx-health-plan' ),
555
			)
556
		);
557
		$cmb->add_field(
558
			array(
559
				'id'   => 'settings_post_type_toggles_enable_closing',
560
				'type' => 'tab_closing',
561
			)
562
		);
563
	}
564
	/**
565
	 * Registers the Profile Stat Toggle settings
566
	 *
567
	 * @param object $cmb new_cmb2_box().
568
	 * @return void
569
	 */
570
571
	public function stat_disable( $cmb ) {
572
		$cmb->add_field(
573
			array(
574
				'id'      => 'stat_disable_title',
575
				'type'    => 'title',
576
				'name'    => __( 'Disable Profile Stats', 'lsx-health-plan' ),
577
				'default' => __( 'Disable Profile Stats', 'lsx-health-plan' ),
578
			)
579
		);
580
		$cmb->add_field(
581
			array(
582
				'name'    => __( 'Disable All Stats', 'lsx-health-plan' ),
583
				'desc'    => 'Disable All Stats',
584
				'id'      => 'disable_all_stats',
585
				'type'    => 'checkbox',
586
				'value'   => 1,
587
				'default' => 0,
588
			)
589
		);
590
		$cmb->add_field(
591
			array(
592
				'name'    => __( 'Disable Weight', 'lsx-health-plan' ),
593
				'id'      => 'disable_weight_checkbox',
594
				'type'    => 'checkbox',
595
				'value'   => 1,
596
				'default' => 0,
597
			)
598
		);
599
		$cmb->add_field(
600
			array(
601
				'name'    => __( 'Disable Waist', 'lsx-health-plan' ),
602
				'id'      => 'disable_waist_checkbox',
603
				'type'    => 'checkbox',
604
				'value'   => 1,
605
				'default' => 0,
606
			)
607
		);
608
		$cmb->add_field(
609
			array(
610
				'name'    => __( 'Disable Fitness', 'lsx-health-plan' ),
611
				'id'      => 'disable_fitness_checkbox',
612
				'type'    => 'checkbox',
613
				'value'   => 1,
614
				'default' => 0,
615
			)
616
		);
617
		$cmb->add_field(
618
			array(
619
				'id'   => 'settings_stat_disable_closing',
620
				'type' => 'tab_closing',
621
			)
622
		);
623
	}
624
625
	/**
626
	 * Enable Business Directory Search settings only if LSX Search plugin is enabled.
627
	 *
628
	 * @param object $cmb The CMB2() class.
629
	 * @param string $section either engine,archive or single.
630
	 * @return void
631
	 */
632
	public function generate_tabs( $cmb ) {
633
		$tabs = $this->get_settings_tabs();
634
635
		foreach ( $tabs as $tab_key => $tab ) {
636
			$cmb->add_field(
637
				array(
638
					'id'          => 'settings_' . $tab_key . '_title',
639
					'type'        => 'title',
640
					'name'        => $tab['title'],
641
					'default'     => $tab['title'],
642
					'description' => $tab['desc'],
643
				)
644
			);
645
			do_action( 'lsx_hp_settings_page_' . $tab_key . '_top', $cmb );
646
647
			do_action( 'lsx_hp_settings_page_' . $tab_key . '_middle', $cmb );
648
649
			do_action( 'lsx_hp_settings_page_' . $tab_key . '_bottom', $cmb );
650
651
			$cmb->add_field(
652
				array(
653
					'id'   => 'settings_' . $tab_key . '_closing',
654
					'type' => 'tab_closing',
655
				)
656
			);
657
		}
658
	}
659
660
661
	/**
662
	 * Returns the tabs and their descriptions.
663
	 *
664
	 * @return array
665
	 */
666
	public function get_settings_tabs() {
667
		$tabs = array(
668
			'general' => array(
669
				'title' => __( 'General', 'lsx-health-plan' ),
670
				'desc'  => __( 'Control the sitewide settings for the LSX HP site.', 'lsx-health-plan' ),
671
			),
672
		);
673
674
		foreach ( $this->post_types as $post_type ) {
675
			switch ( $post_type ) {
676
				default:
677
					if ( ! in_array( $post_type, \lsx\search\includes\get_restricted_post_types() ) ) {
0 ignored issues
show
Bug introduced by
The function get_restricted_post_types was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

677
					if ( ! in_array( $post_type, /** @scrutinizer ignore-call */ \lsx\search\includes\get_restricted_post_types() ) ) {
Loading history...
678
						$temp_post_type = get_post_type_object( $post_type );
679
						if ( ! is_wp_error( $temp_post_type ) ) {
680
							$page_url    = get_post_type_archive_link( $temp_post_type->name );
681
							$description = sprintf(
682
								/* translators: %s: The subscription info */
683
								__( 'Control the settings for your <a target="_blank" href="%1$s">%2$s</a> archive.', 'lsx-search' ),
684
								$page_url,
0 ignored issues
show
Bug introduced by
It seems like $page_url can also be of type false; however, parameter $args of sprintf() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

684
								/** @scrutinizer ignore-type */ $page_url,
Loading history...
685
								$temp_post_type->label
686
							);
687
688
							$tabs[ $post_type ] = array(
689
								'title' => $temp_post_type->label,
690
								'desc'  => $description,
691
							);
692
						}
693
					}
694
					break;
695
			}
696
		}
697
		return $tabs;
698
	}
699
}
700