schemas as a tree replacing the isEntry behavior
This commit is contained in:
@@ -21,33 +21,20 @@ class CompileSchemas extends Command
|
||||
|
||||
$configDir = base_path(config('lucent.schemas_path'));
|
||||
$schemasDirIterator = new DirectoryIterator($configDir);
|
||||
$schemas = [];
|
||||
$schemas = $this->scanDir([], $schemasDirIterator);
|
||||
|
||||
foreach ($schemasDirIterator as $file) {
|
||||
if ($file->getExtension() !== "json") {
|
||||
continue;
|
||||
}
|
||||
|
||||
$schemaJson = file_get_contents($configDir . "/" . $file->getFilename());
|
||||
$schema = json_decode($schemaJson, true);
|
||||
if (empty($schema)) {
|
||||
$this->error("Invalid JSON " . $file->getFilename());
|
||||
return 0;
|
||||
}
|
||||
$schemas[] = $schema;
|
||||
|
||||
}
|
||||
|
||||
$schemas = collect($schemas)->sortBy("label")->values();
|
||||
|
||||
$roles = $schemas
|
||||
->map([$schemaService, 'fromArray'])
|
||||
->whereIn("type", [Type::COLLECTION, Type::FILES])
|
||||
->reduce(fn($carry, Schema $schema) => array_merge(
|
||||
$carry,
|
||||
$schema->read,
|
||||
$schema->write,
|
||||
config("lucent.canInvite") ?? [],
|
||||
config("lucent.canBuild") ?? [],
|
||||
$carry,
|
||||
$schema->read,
|
||||
$schema->write,
|
||||
config("lucent.canInvite") ?? [],
|
||||
config("lucent.canBuild") ?? [],
|
||||
), []);
|
||||
|
||||
$json = [
|
||||
@@ -64,4 +51,36 @@ class CompileSchemas extends Command
|
||||
$this->info("Lucent Schemas were updated");
|
||||
}
|
||||
|
||||
private function scanDir(array $schemas, DirectoryIterator $directoryIterator, $dirName = ""): array
|
||||
{
|
||||
foreach ($directoryIterator as $file) {
|
||||
if ($file->isDir()) {
|
||||
if ($file->isDot()) {
|
||||
continue;
|
||||
}
|
||||
$newDirName = $dirName.'.'.$file->getBasename();
|
||||
$schemas = $this->scanDir($schemas, new DirectoryIterator($file->getPathname()), $newDirName);
|
||||
continue;
|
||||
}
|
||||
if ($file->getExtension() !== "json") {
|
||||
continue;
|
||||
}
|
||||
|
||||
$schemaJson = file_get_contents($file->getPathname());
|
||||
|
||||
|
||||
$schema = json_decode($schemaJson, true);
|
||||
|
||||
if (empty($schema)) {
|
||||
$this->error("Invalid JSON " . $file->getFilename());
|
||||
die;
|
||||
}
|
||||
$schema["folder"] = trim($dirName,".");
|
||||
$schemas[] = $schema;
|
||||
|
||||
}
|
||||
|
||||
return $schemas;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user