From e3aff78e89f80882bd27a5785ef768ff80a79b53 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Thu, 19 May 2022 10:19:08 +0300 Subject: [PATCH] link manager hook assigned users --- .../Resources/metadata/app/linkManager.json | 3 +- .../Link/Hooks/AssignedUsersCreate.php | 101 ++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 application/Espo/Tools/EntityManager/Link/Hooks/AssignedUsersCreate.php diff --git a/application/Espo/Resources/metadata/app/linkManager.json b/application/Espo/Resources/metadata/app/linkManager.json index 49abc8705e..9bf2b5a21d 100644 --- a/application/Espo/Resources/metadata/app/linkManager.json +++ b/application/Espo/Resources/metadata/app/linkManager.json @@ -1,6 +1,7 @@ { "createHookClassNameList": [ - "Espo\\Tools\\EntityManager\\Link\\Hooks\\TargetListCreate" + "Espo\\Tools\\EntityManager\\Link\\Hooks\\TargetListCreate", + "Espo\\Tools\\EntityManager\\Link\\Hooks\\AssignedUsersCreate" ], "deleteHookClassNameList": [ "Espo\\Tools\\EntityManager\\Link\\Hooks\\TargetListDelete", diff --git a/application/Espo/Tools/EntityManager/Link/Hooks/AssignedUsersCreate.php b/application/Espo/Tools/EntityManager/Link/Hooks/AssignedUsersCreate.php new file mode 100644 index 0000000000..744f2a62e0 --- /dev/null +++ b/application/Espo/Tools/EntityManager/Link/Hooks/AssignedUsersCreate.php @@ -0,0 +1,101 @@ +metadata = $metadata; + } + + public function process(Params $params): void + { + if ($params->getType() !== Type::MANY_TO_MANY) { + return; + } + + $foreignEntityType = $params->getForeignEntityType(); + $entityType = $params->getEntityType(); + + if (!$foreignEntityType || !$entityType) { + return; + } + + if ( + $params->getEntityType() === User::ENTITY_TYPE && + $params->getForeignLink() === self::LINK_NAME + ) { + $this->processInternal($foreignEntityType); + + return; + } + + if ( + $params->getForeignEntityType() === User::ENTITY_TYPE && + $params->getLink() === self::LINK_NAME + ) { + $this->processInternal($entityType); + + return; + } + } + + private function processInternal(string $entityType): void + { + $fieldType = $this->metadata->get(['entityDefs', $entityType, 'fields', self::LINK_NAME, 'type']); + + if ($fieldType !== 'linkMultiple') { + return; + } + + $this->metadata->set('entityDefs', $entityType, [ + 'fields' => [ + self::LINK_NAME => [ + 'view' => 'views/fields/assigned-users', + ], + ] + ]); + + $this->metadata->save(); + } +}