diff options
| author | Ron Lucke <lucke@elan-ev.de> | 2024-01-10 14:20:49 +0000 |
|---|---|---|
| committer | Ron Lucke <lucke@elan-ev.de> | 2024-01-10 14:20:49 +0000 |
| commit | 7293abbad9c1a149cfffd99c9ab5060fe945b773 (patch) | |
| tree | 6e80b665c4cda71829570e6f0925f4d876e25fde /lib/models/Courseware/Unit.php | |
| parent | 874bd358f5ecc2e148a6ad36bcf155fe738c107a (diff) | |
StEP #2472
Merge request studip/studip!2296
Diffstat (limited to 'lib/models/Courseware/Unit.php')
| -rw-r--r-- | lib/models/Courseware/Unit.php | 50 |
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] + ); + } } |
