132 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| 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
 | |
|     {
 | |
|         $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 function removeFromEntityRelations(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 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);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| } |