From f15429e4444b782821d2b4889654f17fb9237dcc Mon Sep 17 00:00:00 2001 From: Sami Mokaddem Date: Tue, 30 Jan 2024 08:57:14 +0100 Subject: [PATCH] fix: [analyst-data] Fixed sharing group associations --- app/Model/AnalystData.php | 79 +++++++++++++++++++--- app/Model/Behavior/AnalystDataBehavior.php | 11 +-- 2 files changed, 75 insertions(+), 15 deletions(-) diff --git a/app/Model/AnalystData.php b/app/Model/AnalystData.php index 7e6307442..96b5ef2a6 100644 --- a/app/Model/AnalystData.php +++ b/app/Model/AnalystData.php @@ -33,9 +33,22 @@ class AnalystData extends AppModel protected $Opinion; /** @var object|null */ protected $ObjectRelationship; + /** @var object|null */ + protected $User; + /** @var object|null */ + public $Organisation; + /** @var object|null */ + public $SharingGroup; public $current_user = null; + public $belongsTo = [ + 'SharingGroup' => [ + 'className' => 'SharingGroup', + 'foreignKey' => 'sharing_group_id' + ] + ]; + public function __construct($id = false, $table = null, $ds = null) { parent::__construct($id, $table, $ds); @@ -47,7 +60,14 @@ class AnalystData extends AppModel 'conditions' => [ sprintf('%s.orgc_uuid = Organisation.uuid', $this->alias) ], - ] + ], + 'SharingGroup' => [ + 'className' => 'SharingGroup', + 'foreignKey' => false, + 'conditions' => [ + sprintf('%s.sharing_group_id = SharingGroup.id', $this->alias) + ], + ], ] ]); } @@ -55,18 +75,16 @@ class AnalystData extends AppModel public function afterFind($results, $primary = false) { parent::afterFind($results, $primary); + + $this->setUser(); + foreach ($results as $i => $v) { $results[$i][$this->alias]['note_type'] = $this->current_type_id; $results[$i][$this->alias]['note_type_name'] = $this->current_type; - if (!empty($v[$this->alias]['orgc_uuid'])) { - if (!isset($v['Organisation'])) { - $this->Organisation = ClassRegistry::init('Organisation'); - $results[$i][$this->alias]['Organisation'] = $this->Organisation->find('first', ['condition' => ['uuid' => $v[$this->alias]['orgc_uuid']]])['Organisation']; - } else { - $results[$i][$this->alias]['Organisation'] = $v['Organisation']; - } - unset($results[$i]['Organisation']); - } + + $results[$i] = $this->rearrangeOrganisation($results[$i], $this->current_user); + $results[$i] = $this->rearrangeSharingGroup($results[$i], $this->current_user); + if (!empty($results[$i][$this->alias]['uuid'])) { $results[$i][$this->alias] = $this->fetchChildNotesAndOpinions($results[$i][$this->alias]); } @@ -90,6 +108,47 @@ class AnalystData extends AppModel return true; } + protected function setUser() + { + if (empty($this->current_user)) { + $user_id = Configure::read('CurrentUserId'); + $this->User = ClassRegistry::init('User'); + if ($user_id) { + $this->current_user = $this->User->getAuthUser($user_id); + } + } + } + + private function rearrangeOrganisation(array $analystData): array + { + if (!empty($analystData[$this->alias]['orgc_uuid'])) { + if (!isset($analystData['Organisation'])) { + $this->Organisation = ClassRegistry::init('Organisation'); + $analystData[$this->alias]['Organisation'] = $this->Organisation->find('first', ['condition' => ['uuid' => $analystData[$this->alias]['orgc_uuid']]])['Organisation']; + } else { + $analystData[$this->alias]['Organisation'] = $analystData['Organisation']; + } + unset($analystData['Organisation']); + } + return $analystData; + } + + private function rearrangeSharingGroup(array $analystData, array $user): array + { + if ($analystData[$this->alias]['distribution'] == 4) { + if (!isset($analystData['SharingGroup'])) { + $this->SharingGroup = ClassRegistry::init('SharingGroup'); + $sg = $this->SharingGroup->fetchSG($analystData[$this->alias]['sharing_group_id'], $user, true); + $analystData[$this->alias]['SharingGroup'] = $sg['SharingGroup']; + } else { + $analystData[$this->alias]['SharingGroup'] = $analystData['SharingGroup']; + } + } else { + unset($analystData['SharingGroup']); + } + return $analystData; + } + public function deduceType(string $uuid) { foreach ($this->valid_targets as $valid_target) { diff --git a/app/Model/Behavior/AnalystDataBehavior.php b/app/Model/Behavior/AnalystDataBehavior.php index 4977debbb..99fd5ccd7 100644 --- a/app/Model/Behavior/AnalystDataBehavior.php +++ b/app/Model/Behavior/AnalystDataBehavior.php @@ -22,12 +22,13 @@ class AnalystDataBehavior extends ModelBehavior ]; $type = $this->__current_type; if (empty($user['Role']['perm_site_admin'])) { - $this->SharingGroup = ClassRegistry::init('SharingGroup'); - $validSharingGroups = $this->SharingGroup->authorizedIds($user, true); + // $this->SharingGroup = ClassRegistry::init('SharingGroup'); + // $validSharingGroups = $this->SharingGroup->authorizedIds($user, true); + $validSharingGroups = $Model->SharingGroup->authorizedIds($user, true); $conditions['AND'][] = [ 'OR' => [ - $type . '.orgc_id' => $user['org_id'], - $type . '.org_id' => $user['org_id'], + $type . '.orgc_uuid' => $user['Organisation']['uuid'], + $type . '.org_uuid' => $user['Organisation']['uuid'], $type . '.distribution IN' => [1, 2, 3], 'AND' => [ $type . '.distribution' => 4, @@ -39,7 +40,7 @@ class AnalystDataBehavior extends ModelBehavior return $Model->find('all', [ 'recursive' => -1, 'conditions' => $conditions, - 'contain' => ['Organisation'], + 'contain' => ['Organisation', 'SharingGroup'], ]); }