LaravelModulesRepository::getCachedEnabled()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
c 0
b 0
f 0
dl 0
loc 8
rs 10
cc 2
nc 2
nop 0
1
<?php
2
3
namespace Gameap\Repositories\Modules;
4
5
use Gameap\Exceptions\GameapException;
6
use Gameap\Models\Modules\LaravelModule;
7
use Illuminate\Contracts\Foundation\Application;
8
use Nwidart\Modules\Contracts\RepositoryInterface;
9
use Nwidart\Modules\Module;
10
11
class LaravelModulesRepository
12
{
13
    /** @var Application */
14
    private $laravel;
15
16
    public function __construct(Application $laravel)
17
    {
18
        $this->laravel = $laravel;
19
    }
20
21
    public function getModulesVersions(): array
22
    {
23
        $modules = [];
24
        /** @var Module $module */
25
        foreach ($this->getNvidardRepository()->all() as $module) {
26
            $attributes                       = $module->json()->getAttributes();
27
            $modules[$module->getLowerName()] = $attributes['version'] ?? '';
28
        }
29
30
        return $modules;
31
    }
32
33
    public function getCached(): array
34
    {
35
        $modules    = [];
36
        $repository = $this->getNvidardRepository();
37
        foreach ($repository->getCached() as $module) {
38
            $modules[] = $this->denormalizeLaravelModule($module, $repository->isEnabled($module['name']));
39
        }
40
        return $modules;
41
    }
42
43
    public function getCachedEnabled(): array
44
    {
45
        $modules    = [];
46
        $repository = $this->getNvidardRepository();
47
        foreach ($repository->allEnabled() as $module) {
48
            $modules[] = $this->convertNwidardModuleToLaravelModule($module);
49
        }
50
        return $modules;
51
    }
52
53
    public function delete(string $module): bool
54
    {
55
        return $this->getNvidardRepository()->delete($module);
56
    }
57
58
    private function getNvidardRepository(): RepositoryInterface
59
    {
60
        if (!$this->laravel->has('modules')) {
61
            throw new GameapException('Unable to find modules container');
62
        }
63
64
        return $this->laravel->get('modules');
65
    }
66
67
    private function convertNwidardModuleToLaravelModule(Module $module): LaravelModule
68
    {
69
        $moduleJson = $module->json();
70
71
        $laravelModule = new LaravelModule();
72
73
        $laravelModule->id          = $module->getAlias();
74
        $laravelModule->name        = $module->getName();
75
        $laravelModule->description = $module->getDescription();
76
        $laravelModule->tags        = $moduleJson->get('keywords', []);
77
        $laravelModule->isEnabled   = $module->isEnabled();
78
        $laravelModule->icon        = $moduleJson->get('icon');
79
        $laravelModule->mainRoute   = $moduleJson->get('main-route');
80
81
        return $laravelModule;
82
    }
83
84
    private function denormalizeLaravelModule(array $module, bool $isEnabled): LaravelModule
85
    {
86
        $laravelModule = new LaravelModule();
87
88
        $laravelModule->id          = $module['alias'] ?? '';
89
        $laravelModule->name        = $module['name'] ?? '';
90
        $laravelModule->description = $module['description'] ?? '';
91
        $laravelModule->tags        = $module['keywords'] ?? [];
92
        $laravelModule->isEnabled   = $isEnabled;
93
        $laravelModule->icon        = $module['icon'] ?? null;
94
        $laravelModule->mainRoute   = $module['main-route'] ?? null;
95
96
        return $laravelModule;
97
    }
98
}
99