From 72b851c45cbe4e4508ee990b65e427acb44f88ad Mon Sep 17 00:00:00 2001 From: Ron Lucke <lucke@elan-ev.de> Date: Wed, 10 May 2023 13:40:08 +0000 Subject: [PATCH] fix #2161 Closes #2161 Merge request studip/studip!1771 --- lib/models/Course.class.php | 7 +++-- lib/models/Courseware/Instance.php | 41 -------------------------- lib/models/User.class.php | 7 +++-- lib/modules/CoursewareModule.class.php | 19 +++++++++--- 4 files changed, 23 insertions(+), 51 deletions(-) diff --git a/lib/models/Course.class.php b/lib/models/Course.class.php index 315b52ede14..2d485490fc2 100644 --- a/lib/models/Course.class.php +++ b/lib/models/Course.class.php @@ -214,9 +214,10 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe 'on_delete' => 'delete', ]; - $config['has_one']['courseware'] = [ - 'class_name' => \Courseware\StructuralElement::class, - 'assoc_func' => 'getCoursewareCourse', + $config['has_many']['courseware_units'] = [ + 'class_name' => \Courseware\Unit::class, + 'assoc_foreign_key' => 'range_id', + 'on_delete' => 'delete', ]; $config['default_values']['lesezugriff'] = 1; diff --git a/lib/models/Courseware/Instance.php b/lib/models/Courseware/Instance.php index 66c024c1906..b200f33ca78 100644 --- a/lib/models/Courseware/Instance.php +++ b/lib/models/Courseware/Instance.php @@ -13,47 +13,6 @@ namespace Courseware; */ class Instance { - public static function deleteForRange(\Range $range): void - { - $root = null; - switch ($range->getRangeType()) { - case 'course': - $root = StructuralElement::getCoursewareCourse($range->getRangeId()); - break; - case 'user': - $root = StructuralElement::getCoursewareUser($range->getRangeId()); - break; - default: - throw new \InvalidArgumentException('Only ranges of type "user" and "course" are currently supported.'); - } - - // there is no courseware for this course - if (!$root) { - return; - } - - $instance = new self($root); - - $last_element_configs = \ConfigValue::findBySQL('field = ? AND value LIKE ?', [ - 'COURSEWARE_LAST_ELEMENT', - '%' . $range->getRangeId() . '%', - ]); - foreach ($last_element_configs as $config) { - $arr = json_decode($config->value, true); - $arr = array_filter( - $arr, - function ($key) use ($range) { - return $key !== $range->id; - }, - ARRAY_FILTER_USE_KEY - ); - \UserConfig::get($config->range_id)->unsetValue('COURSEWARE_LAST_ELEMENT'); - \UserConfig::get($config->range_id)->store('COURSEWARE_LAST_ELEMENT', $arr); - } - - $root->delete(); - } - /** * @param \Range $range * @return ?static diff --git a/lib/models/User.class.php b/lib/models/User.class.php index 8219fa7dafc..4510e013017 100644 --- a/lib/models/User.class.php +++ b/lib/models/User.class.php @@ -182,9 +182,10 @@ class User extends AuthUserMd5 implements Range, PrivacyObject 'order_by' => 'ORDER BY name', ]; - $config['has_one']['courseware'] = [ - 'class_name' => \Courseware\StructuralElement::class, - 'assoc_func' => 'getCoursewareUser' + $config['has_one']['courseware_units'] = [ + 'class_name' => \Courseware\Unit::class, + 'assoc_foreign_key' => 'range_id', + 'on_delete' => 'delete', ]; $config['has_many']['course_notifications'] = [ diff --git a/lib/modules/CoursewareModule.class.php b/lib/modules/CoursewareModule.class.php index 7b96c55a5f0..2a9161ac727 100644 --- a/lib/modules/CoursewareModule.class.php +++ b/lib/modules/CoursewareModule.class.php @@ -12,11 +12,22 @@ class CoursewareModule extends CorePlugin implements SystemPlugin, StudipModule, { parent::__construct(); - NotificationCenter::on('UserDidDelete', function ($event, $user) { - Instance::deleteForRange($user); - }); NotificationCenter::on('CourseDidDelete', function ($event, $course) { - Instance::deleteForRange($course); + $last_element_configs = \ConfigValue::findBySQL('field = ? AND value LIKE ?', [ + 'COURSEWARE_LAST_ELEMENT', + '%' . $course->id . '%', + ]); + foreach ($last_element_configs as $config) { + $arr = json_decode($config->value, true); + $arr = array_filter( + $arr, + function ($key) use ($course) { + return $key !== $course->id; + }, + ARRAY_FILTER_USE_KEY + ); + \UserConfig::get($config->range_id)->store('COURSEWARE_LAST_ELEMENT', $arr); + } }); } -- GitLab