diff --git a/INSTALL/clean.sql b/INSTALL/clean.sql index 40cd9ef..f7cc20e 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 sgo; 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..9f888dc 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 `sgo` ( `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..5b6fd66 100644 --- a/src/Model/Table/SharingGroupsTable.php +++ b/src/Model/Table/SharingGroupsTable.php @@ -24,8 +24,8 @@ class SharingGroupsTable extends AppTable 'SharingGroupOrgs', [ 'className' => 'Organisations', - 'joinTable' => 'sgo', 'foreignKey' => 'sharing_group_id', + 'joinTable' => 'sgo', 'targetForeignKey' => 'organisation_id' ] ); diff --git a/templates/SharingGroups/add_org.php b/templates/SharingGroups/add_org.php index 24b89c2..79ce801 100644 --- a/templates/SharingGroups/add_org.php +++ b/templates/SharingGroups/add_org.php @@ -12,7 +12,7 @@ ], 'submit' => [ 'action' => $this->request->getParam('action') - ] + ], ] ]); ?> diff --git a/templates/element/genericElements/Form/genericForm.php b/templates/element/genericElements/Form/genericForm.php index a0167a6..ed73cf1 100644 --- a/templates/element/genericElements/Form/genericForm.php +++ b/templates/element/genericElements/Form/genericForm.php @@ -15,6 +15,7 @@ $modelForForm = empty($data['model']) ? h(\Cake\Utility\Inflector::singularize(\Cake\Utility\Inflector::classify($this->request->getParam('controller')))) : h($data['model']); + $entity = isset($entity) ? $entity : null; $fieldsString = ''; $simpleFieldWhitelist = [ 'default', 'type', 'placeholder', 'label', 'empty', 'rows', 'div', 'required'