Hooks   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 7

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 9
lcom 0
cbo 7
dl 0
loc 71
rs 10
c 0
b 0
f 0
ccs 0
cts 26
cp 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
B prepareLoader() 0 44 6
A loadExtensionTables() 0 3 1
A loadExtensionConfiguration() 0 6 2
1
<?php
2
3
/**
4
 * Loading Hooks.
5
 */
6
declare(strict_types = 1);
7
8
namespace HDNET\Autoloader\Loader;
9
10
use Doctrine\Common\Annotations\AnnotationReader;
11
use HDNET\Autoloader\Annotation\Hook;
12
use HDNET\Autoloader\Loader;
13
use HDNET\Autoloader\LoaderInterface;
14
use HDNET\Autoloader\Utility\ClassNamingUtility;
15
use HDNET\Autoloader\Utility\ExtendedUtility;
16
use HDNET\Autoloader\Utility\FileUtility;
17
use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
18
use TYPO3\CMS\Core\Utility\GeneralUtility;
19
20
/**
21
 * Loading Hooks.
22
 */
23
class Hooks implements LoaderInterface
24
{
25
    /**
26
     * Get all the complex data for the loader.
27
     * This return value will be cached and stored in the database
28
     * There is no file monitoring for this cache.
29
     */
30
    public function prepareLoader(Loader $loader, int $type): array
31
    {
32
        $hooks = [];
33
        $folder = ExtensionManagementUtility::extPath($loader->getExtensionKey()) . 'Classes/Hooks/';
34
        $files = FileUtility::getBaseFilesInDir($folder, 'php');
35
36
        /** @var AnnotationReader $annotationReader */
37
        $annotationReader = GeneralUtility::makeInstance(AnnotationReader::class);
38
39
        foreach ($files as $hookFile) {
40
            $hookClass = ClassNamingUtility::getFqnByPath(
41
                $loader->getVendorName(),
42
                $loader->getExtensionKey(),
43
                'Hooks/' . $hookFile
44
            );
45
            if (!$loader->isInstantiableClass($hookClass)) {
46
                continue;
47
            }
48
49
            $reflectionClass = new \ReflectionClass($hookClass);
50
51
            // add class hook
52
            $classHook = $annotationReader->getClassAnnotation($reflectionClass, Hook::class);
53
            if (null !== $classHook) {
54
                $hooks[] = [
55
                    'locations' => $classHook->locations,
56
                    'configuration' => $hookClass,
57
                ];
58
            }
59
60
            // add method hooks
61
            foreach ($reflectionClass->getMethods() as $method) {
62
                $methodHook = $annotationReader->getMethodAnnotation($method, Hook::class);
63
                if (null !== $methodHook) {
64
                    $hooks[] = [
65
                        'locations' => $classHook->locations,
66
                        'configuration' => $hookClass . '->' . $method->getName(),
0 ignored issues
show
Bug introduced by
Consider using $method->name. There is an issue with getName() and APC-enabled PHP versions.
Loading history...
67
                    ];
68
                }
69
            }
70
        }
71
72
        return $hooks;
73
    }
74
75
    /**
76
     * Run the loading process for the ext_tables.php file.
77
     */
78
    public function loadExtensionTables(Loader $loader, array $loaderInformation): void
79
    {
80
    }
81
82
    /**
83
     * Run the loading process for the ext_localconf.php file.
84
     *
85
     * @internal param \HDNET\Autoloader\Loader $autoLoader
86
     */
87
    public function loadExtensionConfiguration(Loader $loader, array $loaderInformation): void
88
    {
89
        foreach ($loaderInformation as $hook) {
90
            ExtendedUtility::addHooks($hook['locations'], $hook['configuration']);
91
        }
92
    }
93
}
94