aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRon Lucke <lucke@elan-ev.de>2025-10-29 14:10:12 +0100
committerDavid Siegfried <david.siegfried@uni-vechta.de>2025-10-29 13:10:12 +0000
commit41674dbcba78e9f6c505c0ff37fb5fcafcee9073 (patch)
tree886f4d3b70e5d437804870c0f195d7a13032f3a4 /lib
parenta3963eb4d38a3c8cad9d3cb74bcec11acdf778cc (diff)
fix structural element canVisit
Closes #5996 Merge request studip/studip!4586
Diffstat (limited to 'lib')
-rw-r--r--lib/models/Courseware/StructuralElement.php59
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.');
}