Passed
Push — master ( 78040a...1bbc9c )
by smiley
01:26
created

getProviders()   A

Complexity

Conditions 6
Paths 4

Size

Total Lines 21
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 10
nc 4
nop 0
dl 0
loc 21
rs 9.2222
c 0
b 0
f 0
1
<?php
2
/**
3
 * @filesource   functions.php
4
 * @created      31.07.2019
5
 * @author       smiley <[email protected]>
6
 * @copyright    2019 smiley
7
 * @license      MIT
8
 */
9
10
namespace chillerlan\OAuth\Providers;
11
12
use chillerlan\OAuth\Core\OAuthInterface;
13
use FilesystemIterator, RecursiveDirectoryIterator, RecursiveIteratorIterator, ReflectionClass;
14
15
if(!\function_exists(__NAMESPACE__.'\\getProviders')){
16
17
	function getProviders():array{
18
		$providers = [];
19
20
		/** @var \SplFileInfo $e */
21
		foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator(__DIR__, FilesystemIterator::SKIP_DOTS)) as $e){
22
23
			if($e->getExtension() !== 'php' || \realpath($e->getPath()) === __DIR__){
24
				continue;
25
			}
26
27
			$class = __NAMESPACE__.\str_replace('/', '\\', \substr($e->getPathname(), \strlen(__DIR__), -4));
28
			$r     = new ReflectionClass($class);
29
30
			if(!$r->implementsInterface(OAuthInterface::class) || $r->isAbstract()){
31
				continue;
32
			}
33
34
			$providers[\hash('crc32b', $r->getShortName())] = [$r->getShortName(), $class];
35
		}
36
37
		return $providers;
38
	}
39
40
}
41