moduleService = new ModuleService(); } public function getEntityList(): array { $list = []; $activeModules = $this->moduleService->getActiveModules(); foreach ($activeModules as $module) { if (isset($module['type']) and $module['type'] === "entity") { $list[] = $module['slug']; } } return $list; } public function getAdditionalPropertyList(): array { $list = []; $activeModules = $this->moduleService->getActiveModules(); foreach ($activeModules as $module) { if (isset($module['type']) and $module['type'] === "additional_property") { $list[] = $module['slug']; } } return $list; } public function getEntitiesRelations(): array|bool { $entity_relations = OptionService::getItem("entity_relations"); if ($entity_relations) { return json_decode($entity_relations, true); } return false; } public static function removePropertyFromEntityRelations(string $entity, string $property): bool { $entity_relations_info = Option::where("key", "entity_relations")->first(); if ($entity_relations_info) { $entity_relations = json_decode($entity_relations_info->value, true); if ($entity_relations[$entity]) { if ($entity_relations[$entity][$property]) { unset($entity_relations[$entity][$property]); $entity_relations_info->value = json_encode($entity_relations, JSON_UNESCAPED_UNICODE); $entity_relations_info->save(); return true; } } } return false; } public static function removePropertyRelation(string $property): bool { $entity_relations_info = Option::where("key", "entity_relations")->first(); if ($entity_relations_info) { $entity_relations = json_decode($entity_relations_info->value, true); foreach ($entity_relations as $entity => $entity_relation){ if (in_array($property, $entity_relation)) { $index = array_search($property, $entity_relation); unset($entity_relations[$entity][$index]); } } $entity_relations_info->value = json_encode($entity_relations, JSON_UNESCAPED_UNICODE); $entity_relations_info->save(); return true; } return false; } public static function removeEntityRelation(string $entity): bool { $entity_relations_info = Option::where("key", "entity_relations")->first(); if ($entity_relations_info) { $entity_relations = json_decode($entity_relations_info->value, true); if (isset($entity_relations[$entity])) { unset($entity_relations[$entity]); $entity_relations_info->value = json_encode($entity_relations, JSON_UNESCAPED_UNICODE); $entity_relations_info->save(); return true; } } return false; } public function getEntityRelationsBySlug(string $slug) { $entityRelations = $this->getEntitiesRelations(); if ($entityRelations) { if (isset($entityRelations[$slug])){ return $entityRelations[$slug]; } } return false; } public function addEntityRelation(string $entity, string $property): bool { $entity_relations_info = Option::where("key", "entity_relations")->first(); if ($entity_relations_info) { $entity_relations = json_decode($entity_relations_info->value, true); if (isset($entity_relations[$entity])) { $entity_relations[$entity][] = $property; } else { $entity_relations[$entity] = $property; } $entity_relations_info->value = json_encode($entity_relations, JSON_UNESCAPED_UNICODE); $entity_relations_info->save(); return true; } return false; } public function getAdditionalPropertyClassBySlug(string $slug) { $module = $this->moduleService->getModuleInfoBySlug($slug); if (isset($module['module_class'])) { return new $module['module_class'](); } return false; } public function renderFormInputsBySlug(string $slug): void { $moduleClass = $this->getAdditionalPropertyClassBySlug($slug); if ($moduleClass and method_exists($moduleClass, "formInputs")) { $moduleClass->formInputs(); } } public function renderEntityAdditionalPropertyFormBySlug(string $slug): void { $relations = $this->getEntityRelationsBySlug($slug); if ($relations){ foreach ($relations as $relation){ $this->renderFormInputsBySlug($relation); } } } public function saveEntityRelationBySlug(string $slug, string $entity, Request $request): void { $moduleClass = $this->getAdditionalPropertyClassBySlug($slug); if ($moduleClass and method_exists($moduleClass, "saveInputs")) { $moduleClass->saveInputs($entity, $request); } } public function saveEntityRelation(string $entity, Request $request): void { $relations = $this->getEntityRelationsBySlug($entity); if ($relations){ foreach ($relations as $relation){ $this->saveEntityRelationBySlug($relation, $entity, $request); } } } }