From b46502011104f9c550890bc6db53842d30df8c1a Mon Sep 17 00:00:00 2001 From: stasbilay02 Date: Wed, 20 Nov 2024 16:48:13 +0300 Subject: [PATCH] some --- kernel/EntityRelation.php | 93 ++++++++++++++++++++++--- kernel/controllers/ModuleController.php | 1 + kernel/modules/post/manifest.json | 1 + kernel/modules/post/views/form.php | 3 + kernel/modules/user/manifest.json | 1 + 5 files changed, 90 insertions(+), 9 deletions(-) diff --git a/kernel/EntityRelation.php b/kernel/EntityRelation.php index 58506a0..82e1323 100644 --- a/kernel/EntityRelation.php +++ b/kernel/EntityRelation.php @@ -4,23 +4,70 @@ namespace kernel; use kernel\helpers\Debug; use kernel\models\Option; +use kernel\modules\option\service\OptionService; +use kernel\services\ModuleService; class EntityRelation { + protected ModuleService $moduleService; + + public function __construct() + { + $this->moduleService = new ModuleService(); + } + + public function getEntityList(): array { - $entity_relations = Option::where("key", "entity_relations")->first(); - if ($entity_relations) { - $entity_relations = json_decode($entity_relations->value, true); - $entities = []; - foreach ($entity_relations as $entity => $relation) { - $entities[] = $entity; + $list = []; + $activeModules = $this->moduleService->getActiveModules(); + foreach ($activeModules as $module) { + if (isset($module['type']) and $module['type'] === "entity") { + $list[] = $module['slug']; } - - return $entities; } - return []; + 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 function removeFromEntityRelations(string $entity, string $property) + { + + } + + public function getEntityRelationsBySlug(string $slug) + { + $entityRelations = $this->getEntitiesRelations(); + if ($entityRelations) { + if (isset($entityRelations[$slug])){ + return $entityRelations[$slug]; + } + } + + return false; } public function addEntityRelation(array $data): bool @@ -40,4 +87,32 @@ class EntityRelation 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); + } + } + } } \ No newline at end of file diff --git a/kernel/controllers/ModuleController.php b/kernel/controllers/ModuleController.php index 3e2bb18..ea08cd4 100644 --- a/kernel/controllers/ModuleController.php +++ b/kernel/controllers/ModuleController.php @@ -6,6 +6,7 @@ use DirectoryIterator; use JetBrains\PhpStorm\NoReturn; use Josantonius\Session\Facades\Session; use kernel\AdminController; +use kernel\EntityRelation; use kernel\helpers\Debug; use kernel\models\Option; use kernel\modules\module_shop_client\services\ModuleShopClientService; diff --git a/kernel/modules/post/manifest.json b/kernel/modules/post/manifest.json index 7ff222b..35d04c9 100644 --- a/kernel/modules/post/manifest.json +++ b/kernel/modules/post/manifest.json @@ -3,6 +3,7 @@ "version": "0.2", "author": "ITGuild", "slug": "post", + "type": "entity", "description": "Post module", "module_class": "kernel\\modules\\post\\PostModule", "module_class_file": "{KERNEL_MODULES}/post/PostModule.php", diff --git a/kernel/modules/post/views/form.php b/kernel/modules/post/views/form.php index ed898ea..1d5f16a 100644 --- a/kernel/modules/post/views/form.php +++ b/kernel/modules/post/views/form.php @@ -33,6 +33,9 @@ $form->field(class: \itguild\forms\inputs\Select::class, name: "user_id", params ->setOptions(\kernel\modules\user\service\UserService::createUsernameArr()) ->render(); +$entityRelations = new \kernel\EntityRelation(); +$entityRelations->renderEntityAdditionalPropertyFormBySlug("post"); + ?>
diff --git a/kernel/modules/user/manifest.json b/kernel/modules/user/manifest.json index 72e1b80..1892127 100644 --- a/kernel/modules/user/manifest.json +++ b/kernel/modules/user/manifest.json @@ -3,6 +3,7 @@ "version": "0.1", "author": "ITGuild", "slug": "user", + "type": "entity", "description": "User module", "module_class": "kernel\\modules\\user\\UserModule", "module_class_file": "{KERNEL_MODULES}/user/UserModule.php",