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 / Routing / SortsMiddlewareTrait.php

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

87 lines 2.1 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\Routing;
11
12 /**
13 * Provide middleware sorting.
14 */
15 trait SortsMiddlewareTrait {
16 /**
17 * Middleware sorted in order of execution.
18 *
19 * @var string[]
20 */
21 protected $middleware_priority = [];
22
23 /**
24 * Get middleware execution priority.
25 *
26 * @codeCoverageIgnore
27 * @return string[]
28 */
29 public function getMiddlewarePriority() {
30 return $this->middleware_priority;
31 }
32
33 /**
34 * Set middleware execution priority.
35 *
36 * @codeCoverageIgnore
37 * @param string[] $middleware_priority
38 * @return void
39 */
40 public function setMiddlewarePriority( $middleware_priority ) {
41 $this->middleware_priority = $middleware_priority;
42 }
43
44 /**
45 * Get priority for a specific middleware.
46 * This is in reverse compared to definition order.
47 * Middleware with unspecified priority will yield -1.
48 *
49 * @param string|array $middleware
50 * @return integer
51 */
52 public function getMiddlewarePriorityForMiddleware( $middleware ) {
53 if ( is_array( $middleware ) ) {
54 $middleware = $middleware[0];
55 }
56
57 $increasing_priority = array_reverse( $this->getMiddlewarePriority() );
58 $priority = array_search( $middleware, $increasing_priority );
59 return $priority !== false ? (int) $priority : -1;
60 }
61
62 /**
63 * Sort array of fully qualified middleware class names by priority in ascending order.
64 *
65 * @param string[] $middleware
66 * @return array
67 */
68 public function sortMiddleware( $middleware ) {
69 $sorted = $middleware;
70
71 usort( $sorted, function ( $a, $b ) use ( $middleware ) {
72 $a_priority = $this->getMiddlewarePriorityForMiddleware( $a );
73 $b_priority = $this->getMiddlewarePriorityForMiddleware( $b );
74 $priority = $b_priority - $a_priority;
75
76 if ( $priority !== 0 ) {
77 return $priority;
78 }
79
80 // Keep relative order from original array.
81 return array_search( $a, $middleware ) - array_search( $b, $middleware );
82 } );
83
84 return array_values( $sorted );
85 }
86 }
87