aboutsummaryrefslogtreecommitdiff
path: root/lib/models/Courseware/Unit.php
diff options
context:
space:
mode:
authorRon Lucke <lucke@elan-ev.de>2024-01-10 14:20:49 +0000
committerRon Lucke <lucke@elan-ev.de>2024-01-10 14:20:49 +0000
commit7293abbad9c1a149cfffd99c9ab5060fe945b773 (patch)
tree6e80b665c4cda71829570e6f0925f4d876e25fde /lib/models/Courseware/Unit.php
parent874bd358f5ecc2e148a6ad36bcf155fe738c107a (diff)
StEP #2472
Merge request studip/studip!2296
Diffstat (limited to 'lib/models/Courseware/Unit.php')
-rw-r--r--lib/models/Courseware/Unit.php50
1 files changed, 49 insertions, 1 deletions
diff --git a/lib/models/Courseware/Unit.php b/lib/models/Courseware/Unit.php
index bf08328..2a38a29 100644
--- a/lib/models/Courseware/Unit.php
+++ b/lib/models/Courseware/Unit.php
@@ -31,7 +31,7 @@ use User;
* @property StructuralElement $structural_element has_one StructuralElement
*/
-class Unit extends \SimpleORMap implements \PrivacyObject
+class Unit extends \SimpleORMap implements \PrivacyObject, \FeedbackRange
{
protected static function configure($config = [])
{
@@ -60,10 +60,16 @@ class Unit extends \SimpleORMap implements \PrivacyObject
];
$config['registered_callbacks']['after_delete'][] = 'updatePositionsAfterDelete';
+ $config['registered_callbacks']['before_delete'][] = 'cbBeforeDelete';
parent::configure($config);
}
+ public function cbBeforeDelete()
+ {
+ \FeedbackElement::deleteBySQL('range_id = ? AND range_type = ?', [$this->id, self::class]);
+ }
+
public static function findCoursesUnits(\Course $course): array
{
return self::findBySQL('range_id = ? AND range_type = ?', [$course->id, 'course']);
@@ -201,4 +207,46 @@ class Unit extends \SimpleORMap implements \PrivacyObject
return $struct;
}
+
+ public function getRangeCourseId(): string
+ {
+ return $this->range_id;
+ }
+
+ public function getRangeName(): string
+ {
+ return $this->structural_element->title;
+ }
+
+ public function getRangeIcon($role): string
+ {
+ return \Icon::create('content2', $role);
+ }
+
+ public function getRangeUrl(): string
+ {
+ if ($this->structural_element->range_type === 'user') {
+ return 'contents/courseware/';
+ }
+
+ return 'course/courseware/' . '?cid=' . $this->range_id;
+ }
+
+ public function isRangeAccessible(string $user_id = null): bool
+ {
+ $user = \User::find($user_id);
+ if ($user) {
+ return $this->canRead($user);
+ }
+
+ return false;
+ }
+
+ public function getFeedbackElement()
+ {
+ return \FeedbackElement::findOneBySQL(
+ 'range_id = ? AND range_type = ?',
+ [$this->id, self::class]
+ );
+ }
}