diff options
| author | Ron Lucke <lucke@elan-ev.de> | 2023-12-15 08:25:47 +0000 |
|---|---|---|
| committer | Ron Lucke <lucke@elan-ev.de> | 2023-12-15 08:25:47 +0000 |
| commit | 0e1abc0c9d1bafeb392011b1dedc609b3de6e46f (patch) | |
| tree | c24daeb218afc294724692d720eb158bd2635ade | |
| parent | 9da159cf2cb977e13eb9760a3bfa66eec33eeab3 (diff) | |
fix #1694
Closes #1694
Merge request studip/studip!2459
| -rw-r--r-- | app/controllers/admin/user.php | 15 | ||||
| -rw-r--r-- | app/views/admin/user/_delete.php | 6 | ||||
| -rw-r--r-- | lib/classes/UserManagement.class.php | 21 | ||||
| -rw-r--r-- | lib/models/User.class.php | 6 |
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', |
