79 lines
1.5 KiB
PHP
79 lines
1.5 KiB
PHP
<?php
|
|
|
|
use App\Modules\EmptyModule;
|
|
use App\Modules\ModuleContract;
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\File;
|
|
use Illuminate\Support\Str;
|
|
|
|
/**
|
|
* Application locales
|
|
*
|
|
* @return array<string, string>
|
|
*/
|
|
function appLocales(): array
|
|
{
|
|
return config()->array('app.locales');
|
|
}
|
|
|
|
/**
|
|
* Get module
|
|
*/
|
|
function module(string $moduleName): ModuleContract
|
|
{
|
|
$moduleClass = 'App\\Modules\\'.$moduleName.'\\'.$moduleName.'Module';
|
|
|
|
return class_exists($moduleClass) ? (new $moduleClass) : emptyModule();
|
|
}
|
|
|
|
/**
|
|
* Empty module
|
|
*/
|
|
function emptyModule(): ModuleContract
|
|
{
|
|
return new EmptyModule;
|
|
}
|
|
|
|
/**
|
|
* Modules directory path
|
|
*/
|
|
function modules_path(string $path = ''): string
|
|
{
|
|
return app_path('Modules/'.$path);
|
|
}
|
|
|
|
/**
|
|
* Modules
|
|
*
|
|
* @return Collection<array-key, string>
|
|
*/
|
|
function modules(bool $withDisabled = false): Collection
|
|
{
|
|
/** @var array<int, string> */
|
|
$modulesDir = File::directories(modules_path());
|
|
$modules = collect();
|
|
|
|
foreach ($modulesDir as $modulePath) {
|
|
$moduleName = Str::afterLast($modulePath, '/');
|
|
|
|
$moduleOptions = [
|
|
'path' => $modulePath,
|
|
'name' => $moduleName.'Module',
|
|
'enabled' => module($moduleName)->isEnabled(),
|
|
];
|
|
|
|
$modules->push($moduleOptions);
|
|
|
|
// Include all
|
|
if ($withDisabled) {
|
|
continue;
|
|
}
|
|
|
|
if ($moduleOptions['enabled']) {
|
|
$modules->push($moduleOptions);
|
|
}
|
|
}
|
|
|
|
return $modules;
|
|
}
|