diff options
| author | Ron Lucke <lucke@elan-ev.de> | 2021-10-04 17:01:06 +0000 |
|---|---|---|
| committer | Elmar Ludwig <elmar.ludwig@uni-osnabrueck.de> | 2021-10-04 17:01:06 +0000 |
| commit | 0061c6be014723dc0e3d8df7056d905e19273790 (patch) | |
| tree | f369ce67af3b3502177a66ec5f42ba1d15254387 /lib/models/Courseware/StructuralElement.php | |
| parent | ce90b8f1be72906386ee38f0774a1d04ed6e2ff3 (diff) | |
fixes #253
Diffstat (limited to 'lib/models/Courseware/StructuralElement.php')
| -rwxr-xr-x | lib/models/Courseware/StructuralElement.php | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/models/Courseware/StructuralElement.php b/lib/models/Courseware/StructuralElement.php index a2698e1..0637bd7 100755 --- a/lib/models/Courseware/StructuralElement.php +++ b/lib/models/Courseware/StructuralElement.php @@ -238,6 +238,10 @@ class StructuralElement extends \SimpleORMap return true; } + if (!$this->releasedForReaders($this)) { + return false; + } + if (!count($this->read_approval)) { return $this->canReadSequential($user); } @@ -283,6 +287,30 @@ class StructuralElement extends \SimpleORMap } /** + * @return bool true if the user may read this instance in time interval + * + * @SuppressWarnings(PHPMD.Superglobals) + */ + private function releasedForReaders(StructuralElement $element): bool + { + $released = false; + if (!$element->release_date || $element->release_date <= time()) { + $released = true; + } + + if ($element->withdraw_date && $element->withdraw_date <= time()) { + $released = false; + } + + $parent_released = true; + if (!$element->isRootNode()) { + $parent_released = $this->releasedForReaders($element->parent); + } + + return $released && $parent_released; + } + + /** * @param mixed $user the user to validate * * @return bool true if the user has achieved previous elements |
