fix: [analyst-data] Fixed sharing group associations

notes
Sami Mokaddem 2024-01-30 08:57:14 +01:00
parent 0bbd5bf05e
commit f15429e444
No known key found for this signature in database
GPG Key ID: 164C473F627A06FA
2 changed files with 75 additions and 15 deletions

View File

@ -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) {

View File

@ -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'],
]);
}