diff options
| author | Ron Lucke <lucke@elan-ev.de> | 2022-06-10 07:37:43 +0000 |
|---|---|---|
| committer | David Siegfried <david.siegfried@uni-vechta.de> | 2022-06-10 07:37:43 +0000 |
| commit | bb5570a73ae46c42d8b0d4123a6f0e6ca5aeaa56 (patch) | |
| tree | 04756815f11f8ab76027d311435f25ea76a7ce73 /lib/models/Courseware/StructuralElement.php | |
| parent | 29e1459b8d9346bb91f903ced07e76bba39b8f79 (diff) | |
StEP00364: Verknüpfen / Zuweisen von Lernmaterialien zu Veranstaltungen
Closes #917
Merge request studip/studip!637
Diffstat (limited to 'lib/models/Courseware/StructuralElement.php')
| -rwxr-xr-x | lib/models/Courseware/StructuralElement.php | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/lib/models/Courseware/StructuralElement.php b/lib/models/Courseware/StructuralElement.php index ac6116f..7a127db 100755 --- a/lib/models/Courseware/StructuralElement.php +++ b/lib/models/Courseware/StructuralElement.php @@ -16,6 +16,8 @@ use User; * * @property int $id database column * @property int $parent_id database column + * @property int $is_link database column + * @property int $target_id database column * @property string $range_id database column * @property string $range_type database column * @property string $owner_id database column @@ -269,8 +271,16 @@ class StructuralElement extends \SimpleORMap switch ($this->range_type) { case 'user': // Kontext "user": Nutzende können nur ihre eigenen Strukturknoten sehen. - return $this->range_id === $user->id; + if ($this->range_id === $user->id) { + return true; + } + $link = StructuralElement::findOneBySQL('target_id = ?', [$this->id]); + if ($link) { + return true; + } + + return false; case 'course': if (!$GLOBALS['perm']->have_studip_perm('user', $this->range_id, $user->id)) { return false; @@ -776,6 +786,39 @@ SQL; } } + public function link(User $user, StructuralElement $parent): StructuralElement + { + $element = self::build([ + 'parent_id' => $parent->id, + 'is_link' => 1, + 'target_id' => $this->id, + 'range_id' => $parent->range_id, + 'range_type' => $parent->range_type, + 'owner_id' => $user->id, + 'editor_id' => $user->id, + 'edit_blocker_id' => null, + 'title' => $this->title, + 'purpose' => $this->purpose, + 'position' => $parent->countChildren(), + 'payload' => $this->payload, + ]); + + $element->store(); + + $this->linkChildren($user, $element); + + return $element; + } + + private function linkChildren(User $user, StructuralElement $newElement): void + { + $children = self::findBySQL('parent_id = ?', [$this->id]); + + foreach ($children as $child) { + $child->link($user, $newElement); + } + } + public function pdfExport($user, bool $with_children = false) { $doc = new \ExportPDF('P', 'mm', 'A4', true, 'UTF-8', false); |
