PluginProbe
Depicter — Popup & Slider Builder / 1.2.0
Depicter — Popup & Slider Builder v1.2.0
4.8.1 trunk 1.0.0 1.1.0 1.1.2 1.1.4 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.3.0 1.3.1 1.3.2 1.3.3 1.3.5 1.3.8 1.5.0 1.5.1 1.5.2 1.5.5 1.6.0 1.6.1 1.6.2 1.7.0 All 76 releases
depicter / vendor / htmlburger / wpemerge / src / Middleware / HasMiddlewareDefinitionsTrait.php

HasMiddlewareDefinitionsTrait.php in Depicter — Popup & Slider Builder 1.2.0, at vendor/htmlburger/wpemerge/src/Middleware/HasMiddlewareDefinitionsTrait.php

152 lines 3.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package WPEmerge
4 * @author Atanas Angelov <hi@atanas.dev>
5 * @copyright 2017-2019 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\Middleware;
11
12 use WPEmerge\Exceptions\ConfigurationException;
13
14 /**
15 * Provide middleware definitions.
16 */
17 trait HasMiddlewareDefinitionsTrait {
18 /**
19 * Middleware available to the application.
20 *
21 * @var array<string, string>
22 */
23 protected $middleware = [];
24
25 /**
26 * Middleware groups.
27 *
28 * @var array<string, string[]>
29 */
30 protected $middleware_groups = [];
31
32 /**
33 * Middleware groups that should have the 'wpemerge' and 'global' groups prepended to them.
34 *
35 * @var string[]
36 */
37 protected $prepend_special_groups_to = [
38 'web',
39 'admin',
40 'ajax',
41 ];
42
43 /**
44 * Register middleware.
45 *
46 * @codeCoverageIgnore
47 * @param array<string, string> $middleware
48 * @return void
49 */
50 public function setMiddleware( $middleware ) {
51 $this->middleware = $middleware;
52 }
53
54 /**
55 * Register middleware groups.
56 *
57 * @codeCoverageIgnore
58 * @param array<string, string[]> $middleware_groups
59 * @return void
60 */
61 public function setMiddlewareGroups( $middleware_groups ) {
62 $this->middleware_groups = $middleware_groups;
63 }
64
65 /**
66 * Filter array of middleware into a unique set.
67 *
68 * @param array[] $middleware
69 * @return string[]
70 */
71 public function uniqueMiddleware( $middleware ) {
72 return array_values( array_unique( $middleware, SORT_REGULAR ) );
73 }
74
75 /**
76 * Expand array of middleware into an array of fully qualified class names.
77 *
78 * @param string[] $middleware
79 * @return array[]
80 */
81 public function expandMiddleware( $middleware ) {
82 $classes = [];
83
84 foreach ( $middleware as $item ) {
85 $classes = array_merge(
86 $classes,
87 $this->expandMiddlewareMolecule( $item )
88 );
89 }
90
91 return $classes;
92 }
93
94 /**
95 * Expand a middleware group into an array of fully qualified class names.
96 *
97 * @param string $group
98 * @return array[]
99 */
100 public function expandMiddlewareGroup( $group ) {
101 if ( ! isset( $this->middleware_groups[ $group ] ) ) {
102 throw new ConfigurationException( 'Unknown middleware group "' . $group . '" used.' );
103 }
104
105 $middleware = $this->middleware_groups[ $group ];
106
107 if ( in_array( $group, $this->prepend_special_groups_to, true ) ) {
108 $middleware = array_merge( ['wpemerge', 'global'], $middleware );
109 }
110
111 return $this->expandMiddleware( $middleware );
112 }
113
114 /**
115 * Expand middleware into an array of fully qualified class names and any companion arguments.
116 *
117 * @param string $middleware
118 * @return array[]
119 */
120 public function expandMiddlewareMolecule( $middleware ) {
121 $pieces = explode( ':', $middleware, 2 );
122
123 if ( count( $pieces ) > 1 ) {
124 return [array_merge( [$this->expandMiddlewareAtom( $pieces[0] )], explode( ',', $pieces[1] ) )];
125 }
126
127 if ( isset( $this->middleware_groups[ $middleware ] ) ) {
128 return $this->expandMiddlewareGroup( $middleware );
129 }
130
131 return [[$this->expandMiddlewareAtom( $middleware )]];
132 }
133
134 /**
135 * Expand a single middleware a fully qualified class name.
136 *
137 * @param string $middleware
138 * @return string
139 */
140 public function expandMiddlewareAtom( $middleware ) {
141 if ( isset( $this->middleware[ $middleware ] ) ) {
142 return $this->middleware[ $middleware ];
143 }
144
145 if ( class_exists( $middleware ) ) {
146 return $middleware;
147 }
148
149 throw new ConfigurationException( 'Unknown middleware "' . $middleware . '" used.' );
150 }
151 }
152