diff options
| author | Ron Lucke <lucke@elan-ev.de> | 2025-10-29 14:10:12 +0100 |
|---|---|---|
| committer | David Siegfried <david.siegfried@uni-vechta.de> | 2025-10-29 13:10:12 +0000 |
| commit | 41674dbcba78e9f6c505c0ff37fb5fcafcee9073 (patch) | |
| tree | 886f4d3b70e5d437804870c0f195d7a13032f3a4 /lib | |
| parent | a3963eb4d38a3c8cad9d3cb74bcec11acdf778cc (diff) | |
fix structural element canVisit
Closes #5996
Merge request studip/studip!4586
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/models/Courseware/StructuralElement.php | 59 |
1 files changed, 32 insertions, 27 deletions
diff --git a/lib/models/Courseware/StructuralElement.php b/lib/models/Courseware/StructuralElement.php index 807bc47..58b01e2 100644 --- a/lib/models/Courseware/StructuralElement.php +++ b/lib/models/Courseware/StructuralElement.php @@ -394,47 +394,52 @@ class StructuralElement extends \SimpleORMap implements \PrivacyObject, \Feedbac return $this->hasReadContentApproval($user); case 'course': - if (!$user || !$GLOBALS['perm']->have_studip_perm('user', $this->range_id, $user->id)) { - return false; - } + $unit = $this->findUnit(); + if ($unit->permission_scope === 'unit') { + return $unit->canRead($user); + } else { + if (!$user || !$GLOBALS['perm']->have_studip_perm('user', $this->range_id, $user->id)) { + return false; + } - if ($this->isTask()) { - $task = $this->task; - if (!$task) { - $task = $this->findParentTask(); + if ($this->isTask()) { + $task = $this->task; if (!$task) { - return false; + $task = $this->findParentTask(); + if (!$task) { + return false; + } } - } - if ($task->isSubmitted() && $this->hasEditingPermission($user)) { - return true; - } - - if ($task->isSubmitted()) { - if ($task->visible) { + if ($task->isSubmitted() && $this->hasEditingPermission($user)) { return true; } - $solvers = $task->getTaskGroup()->getSolvers(); - foreach ($solvers as $solver) { - if ($solver->id === $user->id) { + + if ($task->isSubmitted()) { + if ($task->visible) { return true; } + $solvers = $task->getTaskGroup()->getSolvers(); + foreach ($solvers as $solver) { + if ($solver->id === $user->id) { + return true; + } + } + return false; } - return false; + + return $task->userIsASolver($user); + // TODO (mel): Das ist die ursprüngliche Variante, die aber jetzt kompliziert ist. Mit Nico sprechen! + // return $task->userIsASolver($user) || $task->userIsAPeerReviewer($user); } - return $task->userIsASolver($user); - // TODO (mel): Das ist die ursprüngliche Variante, die aber jetzt kompliziert ist. Mit Nico sprechen! - // return $task->userIsASolver($user) || $task->userIsAPeerReviewer($user); - } + if ($this->canEdit($user)) { + return true; + } - if ($this->canEdit($user)) { - return true; + return $this->hasReadApproval($user) && $this->canReadSequential($user); } - return $this->hasReadApproval($user) && $this->canReadSequential($user); - default: throw new \InvalidArgumentException('Unknown range type.'); } |
