Passed
Push — master ( b68a78...d29a76 )
by Jean-Christophe
16:10 queued 03:52
created

DevRouterCacheTrait::sortByPriority()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 3
c 1
b 0
f 0
dl 0
loc 5
ccs 4
cts 4
cp 1
rs 10
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Ubiquity\cache\traits;
4
5
use Ubiquity\cache\ClassUtils;
6
use Ubiquity\cache\parser\ControllerParser;
7
use Ubiquity\controllers\Startup;
8
use Ubiquity\controllers\di\DiManager;
9
use Ubiquity\utils\base\UArray;
10
11
/**
12
 * Ubiquity\cache\traits$DevRouterCacheTrait
13
 * This class is part of Ubiquity
14
 * @author jc
15
 * @version 1.0.11
16
 *
17
 */
18
trait DevRouterCacheTrait {
19
	abstract public static function getAnnotationsEngineInstance();
20
21
	private static function addControllerCache($classname) {
22
		$parser = new ControllerParser (self::getAnnotationsEngineInstance());
23
		try {
24
			$parser->parse ( $classname );
25
			return $parser->asArray ();
26
		} catch ( \Exception $e ) {
27
			// Nothing to do
28
		}
29
		return [ ];
30
	}
31
32 17
	private static function parseControllerFiles(&$config, $silent = false) {
33 17
		$routes = [ 'rest' => [ ],'default' => [ ] ];
34 17
		$files = self::getControllersFiles ( $config, $silent );
35 17
		$annotsEngine=self::getAnnotationsEngineInstance();
36 17
		foreach ( $files as $file ) {
37 17
			if (is_file ( $file )) {
38 17
				$controller = ClassUtils::getClassFullNameFromFile ( $file );
39 17
				$parser = new ControllerParser ($annotsEngine);
40
				try {
41 17
					$parser->parse ( $controller );
42 17
					$ret = $parser->asArray ();
43 17
					$key = ($parser->isRest ()) ? 'rest' : 'default';
44 17
					$routes [$key] = \array_merge ( $routes [$key], $ret );
45
				} catch ( \Exception $e ) {
46
					// Nothing to do
47
				}
48
			}
49
		}
50 17
		self::sortByPriority ( $routes ['default'] );
51 17
		self::sortByPriority ( $routes ['rest'] );
52 17
		return $routes;
53
	}
54
55 17
	protected static function sortByPriority(&$array) {
56
		\uasort ( $array, function ($item1, $item2) {
57 17
			return UArray::getRecursive ( $item2, 'priority', 0 ) <=> UArray::getRecursive ( $item1, 'priority', 0 );
58 17
		} );
59 17
			UArray::removeRecursive ( $array, 'priority' );
60 17
	}
61
62 8
	protected static function initRouterCache(&$config, $silent = false) {
63 8
		$routes = self::parseControllerFiles ( $config, $silent );
64 8
		self::$cache->store ( 'controllers/routes.default', $routes ['default'], 'controllers' );
65 8
		self::$cache->store ( 'controllers/routes.rest', $routes ['rest'], 'controllers' );
66 8
		DiManager::init ( $config );
67 8
		if (! $silent) {
68 8
			echo "Router cache reset\n";
69
		}
70 8
	}
71
72 17
	public static function getControllersFiles(&$config, $silent = false) {
73 17
		return self::_getFiles ( $config, 'controllers', $silent );
74
	}
75
76 10
	public static function getControllers($subClass = "\\Ubiquity\\controllers\\Controller", $backslash = false, $includeSubclass = false, $includeAbstract = false) {
77 10
		$result = [ ];
78 10
		if ($includeSubclass) {
79 1
			$result [] = $subClass;
80
		}
81 10
		$config = Startup::getConfig ();
82 10
		$files = self::getControllersFiles ( $config, true );
83
		try {
84 10
			$restCtrls = self::getRestCache ();
85
		} catch ( \Exception $e ) {
86
			$restCtrls = [ ];
87
		}
88 10
		foreach ( $files as $file ) {
89 10
			if (\is_file ( $file )) {
90 10
				$controllerClass = ClassUtils::getClassFullNameFromFile ( $file, $backslash );
91 10
				if (\class_exists ( $controllerClass ) && isset ( $restCtrls [$controllerClass] ) === false) {
92 10
					$r = new \ReflectionClass ( $controllerClass );
93 10
					if ($r->isSubclassOf ( $subClass ) && ($includeAbstract || ! $r->isAbstract ())) {
94 10
						$result [] = $controllerClass;
95
					}
96
				}
97
			}
98
		}
99 10
		return $result;
100
	}
101
}
102
103