diff --git a/application/Espo/Controllers/EntityManager.php b/application/Espo/Controllers/EntityManager.php index 66e5b23576..1a2f7fac38 100644 --- a/application/Espo/Controllers/EntityManager.php +++ b/application/Espo/Controllers/EntityManager.php @@ -166,7 +166,7 @@ class EntityManager extends \Espo\Core\Controllers\Base ]; $additionalParamList = [ - 'relationName' + 'relationName', ]; $params = array(); @@ -182,6 +182,13 @@ class EntityManager extends \Espo\Core\Controllers\Base $params[$item] = filter_var($data[$item], \FILTER_SANITIZE_STRING); } + if (array_key_exists('linkMultipleField', $data)) { + $params['linkMultipleField'] = $data['linkMultipleField']; + } + if (array_key_exists('linkMultipleFieldForeign', $data)) { + $params['linkMultipleFieldForeign'] = $data['linkMultipleFieldForeign']; + } + $result = $this->getContainer()->get('entityManagerUtil')->createLink($params); if ($result) { @@ -208,12 +215,25 @@ class EntityManager extends \Espo\Core\Controllers\Base 'labelForeign' ]; - $d = array(); + $additionalParamList = []; + + $params = array(); foreach ($paramList as $item) { - $d[$item] = filter_var($data[$item], \FILTER_SANITIZE_STRING); + $params[$item] = filter_var($data[$item], \FILTER_SANITIZE_STRING); } - $result = $this->getContainer()->get('entityManagerUtil')->updateLink($d); + foreach ($additionalParamList as $item) { + $params[$item] = filter_var($data[$item], \FILTER_SANITIZE_STRING); + } + + if (array_key_exists('linkMultipleField', $data)) { + $params['linkMultipleField'] = $data['linkMultipleField']; + } + if (array_key_exists('linkMultipleFieldForeign', $data)) { + $params['linkMultipleFieldForeign'] = $data['linkMultipleFieldForeign']; + } + + $result = $this->getContainer()->get('entityManagerUtil')->updateLink($params); if ($result) { $this->getContainer()->get('dataManager')->clearCache(); diff --git a/application/Espo/Core/Utils/EntityManager.php b/application/Espo/Core/Utils/EntityManager.php index 3c7788ee37..bbd897d872 100644 --- a/application/Espo/Core/Utils/EntityManager.php +++ b/application/Espo/Core/Utils/EntityManager.php @@ -276,6 +276,16 @@ class EntityManager } } + $linkMultipleField = false; + if (!empty($params['linkMultipleField'])) { + $linkMultipleField = true; + } + + $linkMultipleFieldForeign = false; + if (!empty($params['linkMultipleFieldForeign'])) { + $linkMultipleFieldForeign = true; + } + if (empty($linkType)) { throw new Error(); } @@ -308,11 +318,11 @@ class EntityManager 'fields' => array( $link => array( "type" => "linkMultiple", - "layoutDetailDisabled" => true, + "layoutDetailDisabled" => !$linkMultipleField, "layoutListDisabled" => true, - "layoutMassUpdateDisabled" => true, - "noLoad" => true, - "importDisabled" => true, + "layoutMassUpdateDisabled" => !$linkMultipleField, + "noLoad" => !$linkMultipleField, + "importDisabled" => !$linkMultipleField, 'isCustom' => true ) ), @@ -364,11 +374,11 @@ class EntityManager 'fields' => array( $linkForeign => array( "type" => "linkMultiple", - "layoutDetailDisabled" => true, + "layoutDetailDisabled" => !$linkMultipleFieldForeign, "layoutListDisabled" => true, - "layoutMassUpdateDisabled" => true, - "noLoad" => true, - "importDisabled" => true, + "layoutMassUpdateDisabled" => !$linkMultipleFieldForeign, + "noLoad" => !$linkMultipleFieldForeign, + "importDisabled" => !$linkMultipleFieldForeign, 'isCustom' => true ) ), @@ -387,11 +397,11 @@ class EntityManager 'fields' => array( $link => array( "type" => "linkMultiple", - "layoutDetailDisabled" => true, + "layoutDetailDisabled" => !$linkMultipleField, "layoutListDisabled" => true, - "layoutMassUpdateDisabled" => true, - "importDisabled" => true, - "noLoad" => true, + "layoutMassUpdateDisabled" => !$linkMultipleField, + "importDisabled" => !$linkMultipleField, + "noLoad" => !$linkMultipleField, 'isCustom' => true ) ), @@ -409,11 +419,11 @@ class EntityManager 'fields' => array( $linkForeign => array( "type" => "linkMultiple", - "layoutDetailDisabled" => true, + "layoutDetailDisabled" => !$linkMultipleFieldForeign, "layoutListDisabled" => true, - "layoutMassUpdateDisabled" => true, - "importDisabled" => true, - "noLoad" => true, + "layoutMassUpdateDisabled" => !$linkMultipleFieldForeign, + "importDisabled" => !$linkMultipleFieldForeign, + "noLoad" => !$linkMultipleFieldForeign, 'isCustom' => true ) ), @@ -465,6 +475,48 @@ class EntityManager throw new Error(); } + if ($this->getMetadata()->get("entityDefs.{$entity}.links.{$link}.type") == 'hasMany') { + if (array_key_exists('linkMultipleField', $params)) { + $linkMultipleField = $params['linkMultipleField']; + $dataLeft = array( + 'fields' => array( + $link => array( + "type" => "linkMultiple", + "layoutDetailDisabled" => !$linkMultipleField, + "layoutListDisabled" => true, + "layoutMassUpdateDisabled" => !$linkMultipleField, + "noLoad" => !$linkMultipleField, + "importDisabled" => !$linkMultipleField, + 'isCustom' => true + ) + ) + ); + $this->getMetadata()->set('entityDefs', $entity, $dataLeft); + $this->getMetadata()->save(); + } + } + + if ($this->getMetadata()->get("entityDefs.{$entityForeign}.links.{$linkForeign}.type") == 'hasMany') { + if (array_key_exists('linkMultipleFieldForeign', $params)) { + $linkMultipleFieldForeign = $params['linkMultipleFieldForeign']; + $dataRight = array( + 'fields' => array( + $linkForeign => array( + "type" => "linkMultiple", + "layoutDetailDisabled" => !$linkMultipleFieldForeign, + "layoutListDisabled" => true, + "layoutMassUpdateDisabled" => !$linkMultipleFieldForeign, + "noLoad" => !$linkMultipleFieldForeign, + "importDisabled" => !$linkMultipleFieldForeign, + 'isCustom' => true + ) + ) + ); + $this->getMetadata()->set('entityDefs', $entityForeign, $dataRight); + $this->getMetadata()->save(); + } + } + $this->getLanguage()->set($entity, 'fields', $link, $label); $this->getLanguage()->set($entity, 'links', $link, $label); $this->getLanguage()->set($entityForeign, 'fields', $linkForeign, $labelForeign); diff --git a/application/Espo/Resources/i18n/en_US/EntityManager.json b/application/Espo/Resources/i18n/en_US/EntityManager.json index 26201afb1a..75a3cfeec1 100644 --- a/application/Espo/Resources/i18n/en_US/EntityManager.json +++ b/application/Espo/Resources/i18n/en_US/EntityManager.json @@ -17,7 +17,9 @@ "labelForeign": "Foreign Label", "sortBy": "Default Order (field)", "sortDirection": "Default Order (direction)", - "relationName": "Middle Table Name" + "relationName": "Middle Table Name", + "linkMultipleField": "Link Multiple Field", + "linkMultipleFieldForeign": "Foreign Link Multiple Field" }, "options": { "type": { diff --git a/frontend/client/res/templates/admin/link-manager/modals/edit.tpl b/frontend/client/res/templates/admin/link-manager/modals/edit.tpl index e570c4fb03..58840cb3f3 100644 --- a/frontend/client/res/templates/admin/link-manager/modals/edit.tpl +++ b/frontend/client/res/templates/admin/link-manager/modals/edit.tpl @@ -51,4 +51,19 @@ +