diff options
| -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.'); } |
