aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRon Lucke <lucke@elan-ev.de>2023-05-10 13:40:08 +0000
committerElmar Ludwig <elmar.ludwig@uni-osnabrueck.de>2023-05-10 13:40:08 +0000
commit72b851c45cbe4e4508ee990b65e427acb44f88ad (patch)
treebf2f58b86acbafa1aee0aee892b2d97e6fac0212 /lib
parent376f5be1b6a2a4fbc69a5d6c7f0805c230c9e554 (diff)
fix #2161
Closes #2161 Merge request studip/studip!1771
Diffstat (limited to 'lib')
-rw-r--r--lib/models/Course.class.php7
-rw-r--r--lib/models/Courseware/Instance.php41
-rw-r--r--lib/models/User.class.php7
-rw-r--r--lib/modules/CoursewareModule.class.php19
4 files changed, 23 insertions, 51 deletions
diff --git a/lib/models/Course.class.php b/lib/models/Course.class.php
index 315b52e..2d48549 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 66c024c..b200f33 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 8219fa7..4510e01 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 7b96c55..2a9161a 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);
+ }
});
}