aboutsummaryrefslogtreecommitdiff
path: root/lib/models/Courseware/StructuralElement.php
diff options
context:
space:
mode:
authorRon Lucke <lucke@elan-ev.de>2022-06-10 07:37:43 +0000
committerDavid Siegfried <david.siegfried@uni-vechta.de>2022-06-10 07:37:43 +0000
commitbb5570a73ae46c42d8b0d4123a6f0e6ca5aeaa56 (patch)
tree04756815f11f8ab76027d311435f25ea76a7ce73 /lib/models/Courseware/StructuralElement.php
parent29e1459b8d9346bb91f903ced07e76bba39b8f79 (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-xlib/models/Courseware/StructuralElement.php45
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);