diff options
| author | Ron Lucke <lucke@elan-ev.de> | 2025-10-29 14:10:12 +0100 |
|---|---|---|
| committer | Till Glöggler <till@gundk.it> | 2026-02-27 13:47:55 +0100 |
| commit | f8860fc2bd306b6eb57c541d26d220ec0b5b8cb2 (patch) | |
| tree | 186bcf4f9e285a81ae75515415db044dfa0cf928 | |
| parent | c48f318432da960c1f7f834788cac100235d0cb6 (diff) | |
fix structural element canVisit
Closes #5996
Merge request studip/studip!4586
| -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 51b6c3a..53efe6e 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.'); } |
