2021-07-30 19:26:02 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
|
|
|
|
use Illuminate\Foundation\Bus\DispatchesJobs;
|
|
|
|
use Illuminate\Foundation\Validation\ValidatesRequests;
|
2021-12-14 19:22:51 +01:00
|
|
|
use Illuminate\Http\JsonResponse;
|
|
|
|
use Illuminate\Http\Request;
|
2021-07-30 19:26:02 +02:00
|
|
|
use Illuminate\Routing\Controller as BaseController;
|
2021-12-14 19:22:51 +01:00
|
|
|
use Illuminate\Support\Collection;
|
|
|
|
use Illuminate\Support\Facades\File;
|
|
|
|
use Nette\Utils\Json;
|
2021-07-30 19:26:02 +02:00
|
|
|
|
|
|
|
class Controller extends BaseController
|
|
|
|
{
|
2021-11-12 16:59:04 +01:00
|
|
|
use AuthorizesRequests;
|
|
|
|
use DispatchesJobs;
|
|
|
|
use ValidatesRequests;
|
2021-12-14 19:22:51 +01:00
|
|
|
|
2022-02-01 16:14:59 +01:00
|
|
|
public function getModules(?Request $request = null, ?array $filter = null): JsonResponse|Collection
|
2021-12-14 19:22:51 +01:00
|
|
|
{
|
|
|
|
$packages = collect(Json::decode(File::get(base_path('vendor/composer/installed.json')))->packages);
|
|
|
|
|
2022-02-01 16:14:59 +01:00
|
|
|
$modules = $packages->filter(fn($package) => $package->type === 'openstamanager-module');
|
2021-12-14 19:22:51 +01:00
|
|
|
|
|
|
|
$modules->transform(function ($module) {
|
2022-01-25 12:49:51 +01:00
|
|
|
$osm_modules = collect($module->extra->{'osm-modules'});
|
2021-12-28 19:39:58 +01:00
|
|
|
|
2022-02-01 15:55:48 +01:00
|
|
|
$module->config = $osm_modules
|
2022-02-02 00:33:14 +01:00
|
|
|
->mapWithKeys(fn($item, $name) => config($name) ?? include base_path("vendor/$module->name/config/{$name}.php"))
|
|
|
|
->reject(null)
|
2022-01-25 12:49:51 +01:00
|
|
|
->all();
|
2021-12-14 19:22:51 +01:00
|
|
|
|
2022-01-25 12:49:51 +01:00
|
|
|
// Modules (for Frontend)
|
2022-01-28 16:26:31 +01:00
|
|
|
$module->modules = $osm_modules->map(function ($item) use ($module) {
|
|
|
|
$split = explode('/', $module->name);
|
|
|
|
$item->moduleFullName = $module->name;
|
|
|
|
$item->moduleVendor = $split[0];
|
|
|
|
$item->moduleName = $split[1];
|
2022-02-02 00:33:14 +01:00
|
|
|
|
2022-01-28 16:26:31 +01:00
|
|
|
return $item;
|
|
|
|
});
|
2021-12-14 19:22:51 +01:00
|
|
|
|
|
|
|
return $module;
|
|
|
|
});
|
|
|
|
|
|
|
|
$filtered = $modules->only($filter);
|
|
|
|
|
2022-02-01 16:14:59 +01:00
|
|
|
return ($request && $request->wantsJson()) ? response()->json($filtered) : $filtered;
|
2021-12-14 19:22:51 +01:00
|
|
|
}
|
2021-07-30 19:26:02 +02:00
|
|
|
}
|