From 54c513613e206d47e7fc688fa58a80ce97251492 Mon Sep 17 00:00:00 2001 From: mokaddem Date: Wed, 25 Nov 2020 16:06:31 +0100 Subject: [PATCH] fix: [sharingGroup] Various fixes for sharing groups - Renamed sharingGroupsOrgs table to follow cake4's recommendation - Fix case if logged user doesn't have an organisation - Provide all orgs if user is admin - Fix issue with model associated with sharingGroupOrgs - Fix addOrg missing entity for genericForm helper --- INSTALL/clean.sql | 2 ++ INSTALL/mysql.sql | 2 +- src/Controller/SharingGroupsController.php | 30 +++++++++++++--------- src/Model/Table/SharingGroupsTable.php | 1 - templates/SharingGroups/add_org.php | 5 ++-- 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/INSTALL/clean.sql b/INSTALL/clean.sql index 40cd9ef..a7e8f80 100644 --- a/INSTALL/clean.sql +++ b/INSTALL/clean.sql @@ -8,6 +8,8 @@ DROP TABLE IF EXISTS encryption_keys; DROP TABLE IF EXISTS organisation_encryption_keys; DROP TABLE IF EXISTS organisations; DROP TABLE IF EXISTS roles; +DROP TABLE IF EXISTS sharing_groups; +DROP TABLE IF EXISTS organisations_sharing_groups; DROP TABLE IF EXISTS tags; DROP TABLE IF EXISTS user_keys; DROP TABLE IF EXISTS users; diff --git a/INSTALL/mysql.sql b/INSTALL/mysql.sql index 4566f4c..0a744fc 100644 --- a/INSTALL/mysql.sql +++ b/INSTALL/mysql.sql @@ -309,7 +309,7 @@ CREATE TABLE `sharing_groups` ( KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -CREATE TABLE `sharing_group_orgs` ( +CREATE TABLE `organisations_sharing_groups` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `sharing_group_id` int(10) unsigned NOT NULL, `organisation_id` int(10) unsigned NOT NULL, diff --git a/src/Controller/SharingGroupsController.php b/src/Controller/SharingGroupsController.php index 969e1b0..a37701c 100644 --- a/src/Controller/SharingGroupsController.php +++ b/src/Controller/SharingGroupsController.php @@ -29,12 +29,7 @@ class SharingGroupsController extends AppController ] ]); $dropdownData = [ - 'organisation' => $this->SharingGroups->Organisations->find('list', [ - 'sort' => ['name' => 'asc'], - 'conditions' => [ - 'id IN' => array_values(\Cake\Utility\Hash::extract($this->ACL->getUser(), 'individual.organisations.{n}.id')) - ] - ]) + 'organisation' => $this->getAvailableOrgForSg($this->ACL->getUser()) ]; if ($this->ParamHandler->isRest()) { return $this->restResponsePayload; @@ -61,12 +56,7 @@ class SharingGroupsController extends AppController return $this->restResponsePayload; } $dropdownData = [ - 'organisation' => $this->SharingGroups->Organisations->find('list', [ - 'sort' => ['name' => 'asc'], - 'conditions' => [ - 'id IN' => array_values(\Cake\Utility\Hash::extract($this->ACL->getUser(), 'individual.organisations.{n}.id')) - ] - ]) + 'organisation' => $this->getAvailableOrgForSg($this->ACL->getUser()) ]; $this->set(compact('dropdownData')); $this->set('metaGroup', 'Trust Circles'); @@ -160,4 +150,20 @@ class SharingGroupsController extends AppController $this->set('sharing_group_id', $id); $this->set('sharing_group_orgs', $sharingGroup['sharing_group_orgs']); } + + private function getAvailableOrgForSg($user) + { + $organisations = []; + if (!empty($user['role']['perm_admin'])) { + $organisations = $this->SharingGroups->Organisations->find('list')->order(['name' => 'ASC'])->toArray(); + } else if (!empty($user['individual']['organisations'])) { + $organisations = $this->SharingGroups->Organisations->find('list', [ + 'sort' => ['name' => 'asc'], + 'conditions' => [ + 'id IN' => array_values(\Cake\Utility\Hash::extract($user, 'individual.organisations.{n}.id')) + ] + ]); + } + return $organisations; + } } diff --git a/src/Model/Table/SharingGroupsTable.php b/src/Model/Table/SharingGroupsTable.php index 7204dec..5e73131 100644 --- a/src/Model/Table/SharingGroupsTable.php +++ b/src/Model/Table/SharingGroupsTable.php @@ -24,7 +24,6 @@ class SharingGroupsTable extends AppTable 'SharingGroupOrgs', [ 'className' => 'Organisations', - 'joinTable' => 'sgo', 'foreignKey' => 'sharing_group_id', 'targetForeignKey' => 'organisation_id' ] diff --git a/templates/SharingGroups/add_org.php b/templates/SharingGroups/add_org.php index 24b89c2..f4f11d5 100644 --- a/templates/SharingGroups/add_org.php +++ b/templates/SharingGroups/add_org.php @@ -12,8 +12,9 @@ ], 'submit' => [ 'action' => $this->request->getParam('action') - ] - ] + ], + ], + 'entity' => null, ]); ?>