Passed
Push — master ( 11c67b...955441 )
by Atanas
02:20
created

View::compose()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 13
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 8
nc 2
nop 1
dl 0
loc 13
ccs 10
cts 10
cp 1
crap 2
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace WPEmerge\View;
4
5
use Closure;
6
use WPEmerge\Helpers\Handler;
7
use WPEmerge\Helpers\Mixed;
8
use WPEmerge\Helpers\Path;
9
use WPEmerge\Support\Arr;
10
11
/**
12
 * Render view files with php
13
 */
14
class View {
15
	/**
16
	 * Global variables
17
	 *
18
	 * @var array
19
	 */
20
	protected $globals = [];
21
22
	/**
23
	 * View composers
24
	 *
25
	 * @var array
26
	 */
27
	protected $composers = [];
28
29
	/**
30
	 * Get global variables
31
	 *
32
	 * @return array
33
	 */
34 2
	public function getGlobals() {
35 2
		return $this->globals;
36
	}
37
38
	/**
39
	 * Set a global variable
40
	 *
41
	 * @param  string $key
42
	 * @param  mixed  $value
43
	 * @return void
44
	 */
45 1
	public function addGlobal( $key, $value ) {
46 1
		$this->globals[ $key ] = $value;
47 1
	}
48
49
	/**
50
	 * Set an array of global variables
51
	 *
52
	 * @param  array $globals
53
	 * @return void
54
	 */
55 1
	public function addGlobals( $globals ) {
56 1
		foreach ( $globals as $key => $value ) {
57 1
			$this->addGlobal( $key, $value );
58 1
		}
59 1
	}
60
61
	/**
62
	 * Get view composer
63
	 *
64
	 * @return array
65
	 */
66
	public function getComposers() {
67
		return $this->composers;
68
	}
69
70
	/**
71
	 * Get view composer
72
	 *
73
	 * @param  string|null $view
74
	 * @return Handler[]
75
	 */
76
	public function getComposersForView( $view = null ) {
77
		$composers = [];
78
79
		foreach ( $this->composers as $composer ) {
80
			if ( in_array( $view, $composer['views'] ) ) {
81
				$composers[] = $composer['composer'];
82
			}
83
		}
84
85
		return $composers;
86
	}
87
88
	/**
89
	 * Add view composer
90
	 *
91
	 * @param string|string[] $views
92
	 * @param string|Closure  $composer
93
	 * @return void
94
	 */
95 1
	public function addComposer( $views, $composer ) {
96 1
		$views = Mixed::toArray( $views );
97 1
		$handler = new Handler( $composer );
98
99 1
		$this->composers[] = [
100 1
			'views' => $views,
101 1
			'composer' => $handler,
102
		];
103 1
	}
104
105
	/**
106
	 * Get the composed context for a view.
107
	 * Passes all arguments to the composer.
108
	 *
109
	 * @param  string $view
110
	 * @return array
111
	 */
112 2
	public function compose( $view ) {
113 2
		$context = [];
114 2
		$composers = $this->getComposersForView( $view );
115
116 2
		foreach ( $composers as $composer ) {
117 1
			$context = array_merge(
118 1
				$context,
119 1
				call_user_func_array( [$composer, 'execute'], [$view] )
120 1
			);
121 2
		}
122
123 2
		return $context;
124
	}
125
}
126