aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Lucke <lucke@elan-ev.de>2023-12-15 08:25:47 +0000
committerRon Lucke <lucke@elan-ev.de>2023-12-15 08:25:47 +0000
commit0e1abc0c9d1bafeb392011b1dedc609b3de6e46f (patch)
treec24daeb218afc294724692d720eb158bd2635ade
parent9da159cf2cb977e13eb9760a3bfa66eec33eeab3 (diff)
fix #1694
Closes #1694 Merge request studip/studip!2459
-rw-r--r--app/controllers/admin/user.php15
-rw-r--r--app/views/admin/user/_delete.php6
-rw-r--r--lib/classes/UserManagement.class.php21
-rw-r--r--lib/models/User.class.php6
4 files changed, 34 insertions, 14 deletions
diff --git a/app/controllers/admin/user.php b/app/controllers/admin/user.php
index ad9f054..74daee1 100644
--- a/app/controllers/admin/user.php
+++ b/app/controllers/admin/user.php
@@ -273,12 +273,13 @@ class Admin_UserController extends AuthenticatedController
*/
public function delete_action($user_id = null, $parent = '')
{
- $delete_documents = (bool) Request::int('documents');
- $delete_content_from_course = (bool) Request::int('coursecontent');
- $delete_personal_documents = (bool) Request::int('personaldocuments');
- $delete_personal_content = (bool) Request::int('personalcontent');
- $delete_names = (bool) Request::int('personalnames');
- $delete_memberships = (bool) Request::int('memberships');
+ $delete_documents = Request::bool('documents');
+ $delete_courseware = Request::bool('courseware');
+ $delete_content_from_course = Request::bool('coursecontent');
+ $delete_personal_documents = Request::bool('personaldocuments');
+ $delete_personal_content = Request::bool('personalcontent');
+ $delete_names = Request::bool('personalnames');
+ $delete_memberships = Request::bool('memberships');
//deleting one user
if (!is_null($user_id)) {
@@ -299,7 +300,7 @@ class Admin_UserController extends AuthenticatedController
$umanager->getFromDatabase($user_id);
//delete
- if ($umanager->deleteUser($delete_documents, $delete_content_from_course, $delete_personal_documents, $delete_personal_content, $delete_names, $delete_memberships, !Request::bool('mail'))) {
+ if ($umanager->deleteUser($delete_documents, $delete_content_from_course, $delete_personal_documents, $delete_personal_content, $delete_names, $delete_memberships, !Request::bool('mail'), $delete_courseware)) {
$details = explode('§', str_replace(['msg§', 'info§', 'error§'], '', mb_substr($umanager->msg, 0, -1)));
PageLayout::postSuccess(htmlReady(sprintf(_('"%s (%s)" wurde erfolgreich gelöscht.'), $user->getFullName(), $user->username)), $details);
} else {
diff --git a/app/views/admin/user/_delete.php b/app/views/admin/user/_delete.php
index 59c5fc1..d0e89aa 100644
--- a/app/views/admin/user/_delete.php
+++ b/app/views/admin/user/_delete.php
@@ -52,6 +52,12 @@
</label>
<label>
+ <input type="checkbox" id="courseware" name="courseware" value="1" checked>
+ <?= _('Lernmaterialien löschen?') ?>
+ <?= tooltipHtmlIcon(_('Courseware Lernmaterialien, Seiten, Abschnitte und Blöcke')) ?>
+ </label>
+
+ <label>
<input type="checkbox" id="coursecontent" name="coursecontent" value="1" checked>
<?= _('Andere Inhalte löschen?') ?>
<?= tooltipHtmlIcon(_('veranstaltungsbezogene Inhalte, bis auf Wiki und Forum Einträge')) ?>
diff --git a/lib/classes/UserManagement.class.php b/lib/classes/UserManagement.class.php
index 5684126..1a92a95 100644
--- a/lib/classes/UserManagement.class.php
+++ b/lib/classes/UserManagement.class.php
@@ -800,7 +800,8 @@ class UserManagement
bool $delete_personal_content = true,
bool $delete_names = true,
bool $delete_memberships = true,
- bool $send_email_notification = true
+ bool $send_email_notification = true,
+ bool $delete_courseware = true
): bool {
global $perm;
@@ -983,6 +984,24 @@ class UserManagement
NotificationCenter::postNotification('UserDataDidRemove', $this->user_data['auth_user_md5.user_id'], 'course_documents');
}
+ // always delete personal courseware elements of this user
+ \Courseware\Unit::deleteBySQL('range_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+ \Courseware\UserDataField::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+ \Courseware\UserProgress::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+ \Courseware\Bookmark::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+
+ // delete courseware elements in courses of this user
+ if ($delete_courseware) {
+ \Courseware\Unit::deleteBySQL('creator_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+ \Courseware\StructuralElement::deleteBySQL('owner_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+ \Courseware\StructuralElementFeedback::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+ \Courseware\StructuralElementComment::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+ \Courseware\Container::deleteBySQL('owner_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+ \Courseware\Block::deleteBySQL('owner_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+ \Courseware\BlockFeedback::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+ \Courseware\BlockComment::deleteBySQL('user_id = ?', [$this->user_data['auth_user_md5.user_id']]);
+ }
+
// delete all remaining user data in course context if option selected
if ($delete_content_from_course) {
$queries = [
diff --git a/lib/models/User.class.php b/lib/models/User.class.php
index dd3ccd7..4928ed8 100644
--- a/lib/models/User.class.php
+++ b/lib/models/User.class.php
@@ -196,12 +196,6 @@ class User extends AuthUserMd5 implements Range, PrivacyObject
'order_by' => 'ORDER BY name',
];
- $config['has_one']['courseware_units'] = [
- 'class_name' => \Courseware\Unit::class,
- 'assoc_foreign_key' => 'range_id',
- 'on_delete' => 'delete',
- ];
-
$config['has_many']['course_notifications'] = [
'class_name' => CourseMemberNotification::class,
'on_delete' => 'delete',