Passed
Push — master ( f762b7...fe4615 )
by Jean-Christophe
11:36
created

DevRouterCacheTrait::initRouterCache()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

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