Skip to content
Snippets Groups Projects
Commit 72b851c4 authored by Ron Lucke's avatar Ron Lucke Committed by Elmar Ludwig
Browse files

fix #2161

Closes #2161

Merge request studip/studip!1771
parent 376f5be1
No related branches found
No related tags found
No related merge requests found
...@@ -214,9 +214,10 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe ...@@ -214,9 +214,10 @@ class Course extends SimpleORMap implements Range, PrivacyObject, StudipItem, Fe
'on_delete' => 'delete', 'on_delete' => 'delete',
]; ];
$config['has_one']['courseware'] = [ $config['has_many']['courseware_units'] = [
'class_name' => \Courseware\StructuralElement::class, 'class_name' => \Courseware\Unit::class,
'assoc_func' => 'getCoursewareCourse', 'assoc_foreign_key' => 'range_id',
'on_delete' => 'delete',
]; ];
$config['default_values']['lesezugriff'] = 1; $config['default_values']['lesezugriff'] = 1;
......
...@@ -13,47 +13,6 @@ namespace Courseware; ...@@ -13,47 +13,6 @@ namespace Courseware;
*/ */
class Instance 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 * @param \Range $range
* @return ?static * @return ?static
......
...@@ -182,9 +182,10 @@ class User extends AuthUserMd5 implements Range, PrivacyObject ...@@ -182,9 +182,10 @@ class User extends AuthUserMd5 implements Range, PrivacyObject
'order_by' => 'ORDER BY name', 'order_by' => 'ORDER BY name',
]; ];
$config['has_one']['courseware'] = [ $config['has_one']['courseware_units'] = [
'class_name' => \Courseware\StructuralElement::class, 'class_name' => \Courseware\Unit::class,
'assoc_func' => 'getCoursewareUser' 'assoc_foreign_key' => 'range_id',
'on_delete' => 'delete',
]; ];
$config['has_many']['course_notifications'] = [ $config['has_many']['course_notifications'] = [
......
...@@ -12,11 +12,22 @@ class CoursewareModule extends CorePlugin implements SystemPlugin, StudipModule, ...@@ -12,11 +12,22 @@ class CoursewareModule extends CorePlugin implements SystemPlugin, StudipModule,
{ {
parent::__construct(); parent::__construct();
NotificationCenter::on('UserDidDelete', function ($event, $user) {
Instance::deleteForRange($user);
});
NotificationCenter::on('CourseDidDelete', function ($event, $course) { 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);
}
}); });
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment