Passed
Push — master ( e448bf...51995c )
by Paul
07:24 queued 04:56
created

SiteMetaManager   A

Complexity

Total Complexity 17

Size/Duplication

Total Lines 86
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
wmc 17
lcom 1
cbo 1
dl 0
loc 86
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A __call() 0 9 2
A __get() 0 12 4
B get() 0 16 5
A getDefaultGroup() 0 4 1
A getValue() 0 9 4
1
<?php
2
3
namespace GeminiLabs\Pollux\MetaBox;
4
5
use GeminiLabs\Pollux\Settings\Settings;
6
7
/**
8
 * SiteMeta::all();
9
 * SiteMeta::group();
10
 * SiteMeta::group('option','fallback');
11
 * SiteMeta::get('group');
12
 * SiteMeta::get('group','option','fallback');
13
 *
14
 * @property object all
15
 */
16
class SiteMetaManager
17
{
18
	protected $options;
19
20
	public function __construct()
21
	{
22
		$this->options = get_option( Settings::id(), [] );
23
	}
24
25
	/**
26
	 * @param string $group
27
	 * @return object|array|null
28
	 */
29
	public function __call( $group, $args )
30
	{
31
		$args = array_pad( $args, 2, null );
32
		$group = $this->$group;
33
		if( is_object( $group )) {
34
			return $group;
35
		}
36
		return $this->get( $group, $args[0], $args[1] );
37
	}
38
39
	/**
40
	 * @param string $group
41
	 * @return object|array|null
42
	 */
43
	public function __get( $group )
44
	{
45
		if( $group == 'all' ) {
46
			return (object) $this->options;
47
		}
48
		if( empty( $group )) {
49
			$group = $this->getDefaultGroup();
50
		}
51
		return isset( $this->options[$group] )
52
			? $this->options[$group]
53
			: null;
54
	}
55
56
	/**
57
	 * @param string $group
58
	 * @param string|null $key
59
	 * @param mixed $fallback
60
	 * @return mixed
61
	 */
62
	public function get( $group = '', $key = '', $fallback = null )
63
	{
64
		if( func_num_args() < 1 ) {
65
			return $this->all;
66
		}
67
		if( is_string( $group )) {
68
			$group = $this->$group;
69
		}
70
		if( !is_array( $group )) {
71
			return $fallback;
72
		}
73
		if( is_null( $key )) {
74
			return $group;
75
		}
76
		return $this->getValue( $group, $key, $fallback );
77
	}
78
79
	/**
80
	 * @return string
81
	 */
82
	protected function getDefaultGroup()
83
	{
84
		return '';
85
	}
86
87
	/**
88
	 * @param string $key
89
	 * @param mixed $fallback
90
	 * @return mixed
91
	 */
92
	protected function getValue( array $group, $key, $fallback )
93
	{
94
		if( !array_key_exists( $key, $group )) {
95
			return $fallback;
96
		}
97
		return empty( $group[$key] ) && !is_null( $fallback )
98
			? $fallback
99
			: $group[$key];
100
	}
101
}
102