35 lines
1.2 KiB
PHP
35 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace Modules\Core\Services;
|
|
|
|
use Modules\Core\Contracts\ModuleRegistry;
|
|
|
|
final class LaravelModuleRegistry implements ModuleRegistry
|
|
{
|
|
public function all(): array
|
|
{
|
|
$statuses = json_decode((string) @file_get_contents(base_path('modules_statuses.json')), true) ?: [];
|
|
$modules = [];
|
|
foreach (glob(base_path('Modules/*/module.json')) ?: [] as $manifest) {
|
|
$data = json_decode((string) file_get_contents($manifest), true) ?: [];
|
|
$name = (string) ($data['name'] ?? basename(dirname($manifest)));
|
|
$modules[] = [
|
|
'name' => $name,
|
|
'alias' => (string) ($data['alias'] ?? strtolower($name)),
|
|
'version' => (string) ($data['version'] ?? '0.0.0'),
|
|
'enabled' => (bool) ($statuses[$name] ?? false),
|
|
];
|
|
}
|
|
usort($modules, fn (array $a, array $b): int => $a['name'] <=> $b['name']);
|
|
return $modules;
|
|
}
|
|
|
|
public function enabled(string $name): bool
|
|
{
|
|
foreach ($this->all() as $module) {
|
|
if (strcasecmp($module['name'], $name) === 0) return $module['enabled'];
|
|
}
|
|
return false;
|
|
}
|
|
}
|