new CollectionSchema( name: $schemaArr["name"], label: $schemaArr["label"], visible: $schemaArr["visible"] ?? [], groups: $schemaArr["groups"] ?? [], fields: (new Collection($schemaArr["fields"]))->map([$this, 'mapFields']), isEntry: $schemaArr["isEntry"] ?? false, color: $schemaArr["color"] ?? "", titleTemplate: $schemaArr["titleTemplate"] ?? "", ), "files" => new FilesSchema( name: $schemaArr["name"], label: $schemaArr["label"], fields: (new Collection($schemaArr["fields"]))->map([$this, 'mapFields']), path: $schemaArr["path"] ?? $schemaArr["name"], groups: $schemaArr["groups"] ?? [], isEntry: $schemaArr["isEntry"] ?? false, color: $schemaArr["color"] ?? "", titleTemplate: $schemaArr["titleTemplate"] ?? "", ) }; } public function mapFields(array $field): FieldInterface { $className = "\\Lucent\Schema\Ui\\" . ucfirst($field["ui"]); unset($field["ui"]); return new $className(...$field); } // // /** // * @param array $visible // * @throws LucentException // */ // public function create( // string $name, // string $label, // string $type, // bool $isEntry, // int $revisionRetentionDays, // int $revisionRetentionNumber, // int $trashedRetentionDays, // array $fields, // string $titleTemplate = "", // array $visible = [], // string $path = "" // ): Schema // { // if (empty($name) || empty($label)) { // throw new LucentException("Name and Label are required"); // } // // $newFields = []; // if (!empty($fields)) { // $newFields = array_map([Field::class, 'fromArray'], $fields); // } // // $schema = new Schema( // name: new SchemaName($name), // label: $label, // type: Type::from($type), // visible: new Collection($visible), // fields: new Collection($newFields), // isEntry: $isEntry, // color: "", // titleTemplate: $titleTemplate, // views: new Collection(), // revisionRetentionDays: $revisionRetentionDays, // revisionRetentionNumber: $revisionRetentionNumber, // trashedRetentionDays: $trashedRetentionDays, // path: $path, // ); // // $this->schemaRepo->insert($schema); // return $schema; // // } // // /** // * @param array $visible // * @throws LucentException // */ // public function update( // string $name, // string $label, // bool $isEntry, // string $color, // array $visible, // string $titleTemplate, // int $revisionRetentionDays, // int $revisionRetentionNumber, // int $trashedRetentionDays, // string $path = "" // ): Schema // { // if (empty($name) || empty($label)) { // throw new LucentException("Name and Label are required"); // } // // // $channel = ChannelRepo::current(); // $schema = $channel->schemas->firstWhere("name", $name); // $schema->label = $label; // $schema->isEntry = $isEntry; // $schema->color = $color; // $schema->visible = new Collection($visible); // $schema->titleTemplate = $titleTemplate; // $schema->revisionRetentionDays = $revisionRetentionDays; // $schema->revisionRetentionNumber = $revisionRetentionNumber; // $schema->trashedRetentionDays = $trashedRetentionDays; // $schema->path = $path; // $this->schemaRepo->update($schema); // return $schema; // } // // public function delete(string $name): void // { // $channel = ChannelRepo::current(); // $schema = $channel->schemas->firstWhere("name", $name); // if ($schema) { // $this->schemaRepo->delete($schema); // } // // } }