Passed
Branch refactor/kernels (a21eb4)
by Atanas
02:05
created

expandMiddlewareGroup()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 1
dl 0
loc 6
ccs 4
cts 4
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * @package   WPEmerge
4
 * @author    Atanas Angelov <[email protected]>
5
 * @copyright 2018 Atanas Angelov
6
 * @license   https://www.gnu.org/licenses/gpl-2.0.html GPL-2.0
7
 * @link      https://wpemerge.com/
8
 */
9
10
namespace WPEmerge\Routing;
11
12
use WPEmerge\Exceptions\ConfigurationException;
13
use WPEmerge\Middleware\MiddlewareInterface;
14
15
/**
16
 * Provide middleware sorting.
17
 */
18
trait HasMiddlewareDefinitionsTrait {
19
	/**
20
	 * Middleware available to the application.
21
	 *
22
	 * @var array<string, string>
23
	 */
24
	protected $middleware = [];
25
26
	/**
27
	 * Middleware groups.
28
	 *
29
	 * @var array<string, array<string>>
30
	 */
31
	protected $middleware_groups = [];
32
33
	/**
34
	 * Global middleware that will be applied to all routes.
35
	 *
36
	 * @var array<string>
37
	 */
38
	protected $global_middleware = [];
39
40
	/**
41
	 * Register middleware.
42
	 *
43
	 * @codeCoverageIgnore
44
	 * @param  array<string, string> $middleware
45
	 * @return void
46
	 */
47
	public function setMiddleware( $middleware ) {
48
		$this->middleware = $middleware;
49
	}
50
51
	/**
52
	 * Register middleware groups.
53
	 *
54
	 * @codeCoverageIgnore
55
	 * @param  array<string, array<string>> $middleware_groups
56
	 * @return void
57
	 */
58
	public function setMiddlewareGroups( $middleware_groups ) {
59
		$this->middleware_groups = $middleware_groups;
60
	}
61
62
	/**
63
	 * Register global middleware.
64
	 *
65
	 * @codeCoverageIgnore
66
	 * @param  array<string> $middleware
67
	 * @return void
68
	 */
69
	public function setGlobalMiddleware( $middleware ) {
70
		$this->global_middleware = $middleware;
71
	}
72
73
	/**
74
	 * Expand array of middleware into an array of fully qualified class names.
75
	 *
76
	 * @param  array<string> $middleware
77
	 * @return array<string>
78
	 */
79 1
	public function expandMiddleware( $middleware ) {
80 1
		$classes = [];
81
82 1
		foreach ( $middleware as $item ) {
83 1
			if ( isset( $this->middleware_groups[ $item ] ) ) {
84 1
				$classes = array_merge(
85 1
					$classes,
86 1
					$this->expandMiddlewareGroup( $item )
87
				);
88 1
				continue;
89
			}
90
91 1
			$classes[] = $this->expandMiddlewareItem( $item );
92
		}
93
94 1
		return $classes;
95
	}
96
97
	/**
98
	 * Expand a middleware group into an array of fully qualified class names.
99
	 *
100
	 * @param  string        $group
101
	 * @return array<string>
102
	 */
103 2
	public function expandMiddlewareGroup( $group ) {
104 2
		if ( ! isset( $this->middleware_groups[ $group ] ) ) {
105 1
			throw new ConfigurationException( 'Unknown middleware group "' . $group . '" used.' );
106
		}
107
108 1
		return array_map( [$this, 'expandMiddlewareItem'], $this->middleware_groups[ $group ] );
109
	}
110
111
	/**
112
	 * Expand a middleware into a fully qualified class name.
113
	 *
114
	 * @param  string $middleware
115
	 * @return string
116
	 */
117 3
	public function expandMiddlewareItem( $middleware ) {
118 3
		if ( is_subclass_of( $middleware, MiddlewareInterface::class ) ) {
119 1
			return $middleware;
120
		}
121
122 2
		if ( ! isset( $this->middleware[ $middleware ] ) ) {
123 1
			throw new ConfigurationException( 'Unknown middleware "' . $middleware . '" used.' );
124
		}
125
126 1
		return $this->middleware[ $middleware ];
127
	}
128
}
129