From acca768961a4aaf603cc8628b0408fa33161948f Mon Sep 17 00:00:00 2001 From: Amaia Anabitarte Date: Thu, 19 Jul 2018 17:01:52 +0100 Subject: [PATCH] MDL-62920 user: Uploading deleted user and adding to a cohort --- admin/user/user_bulk_cohortadd.php | 32 ++++++++++++++------- admin/user/user_bulk_delete.php | 2 +- lang/en/bulkusers.php | 1 + lib/moodlelib.php | 7 ++++- user/tests/behat/bulk_editenrolment.feature | 29 ++++++++++++++++++- user/tests/behat/delete_users.feature | 18 ++++++++++++ 6 files changed, 76 insertions(+), 13 deletions(-) diff --git a/admin/user/user_bulk_cohortadd.php b/admin/user/user_bulk_cohortadd.php index ff84479f988..6ce1d975735 100644 --- a/admin/user/user_bulk_cohortadd.php +++ b/admin/user/user_bulk_cohortadd.php @@ -66,8 +66,8 @@ if (count($cohorts) < 2) { $countries = get_string_manager()->get_list_of_countries(true); $namefields = get_all_user_name_fields(true); foreach ($users as $key => $id) { - $user = $DB->get_record('user', array('id'=>$id, 'deleted'=>0), 'id, ' . $namefields . ', username, - email, country, lastaccess, city'); + $user = $DB->get_record('user', array('id' => $id), 'id, ' . $namefields . ', username, + email, country, lastaccess, city, deleted'); $user->fullname = fullname($user, true); $user->country = @$countries[$user->country]; unset($user->firstname); @@ -84,7 +84,7 @@ if (empty($users) or $mform->is_cancelled()) { } else if ($data = $mform->get_data()) { // process request foreach ($users as $user) { - if (!$DB->record_exists('cohort_members', array('cohortid'=>$data->cohort, 'userid'=>$user->id))) { + if (!$user->deleted && !$DB->record_exists('cohort_members', array('cohortid' => $data->cohort, 'userid' => $user->id))) { cohort_add_member($data->cohort, $user->id); } } @@ -125,13 +125,25 @@ foreach ($columns as $column) { } foreach ($users as $user) { - $table->data[] = array ( - ''.$user->fullname.'', - $user->email, - $user->city, - $user->country, - $user->lastaccess ? format_time(time() - $user->lastaccess) : $strnever - ); + if ($user->deleted) { + $table->data[] = array ( + $user->fullname, + '', + '', + '', + get_string('deleteduser', 'bulkusers') + ); + } else { + $table->data[] = array( + '' . + $user->fullname . + '', + $user->email, + $user->city, + $user->country, + $user->lastaccess ? format_time(time() - $user->lastaccess) : $strnever + ); + } } echo $OUTPUT->header(); diff --git a/admin/user/user_bulk_delete.php b/admin/user/user_bulk_delete.php index 474903a7055..29a9b5617ba 100644 --- a/admin/user/user_bulk_delete.php +++ b/admin/user/user_bulk_delete.php @@ -25,7 +25,7 @@ echo $OUTPUT->header(); if ($confirm and confirm_sesskey()) { $notifications = ''; list($in, $params) = $DB->get_in_or_equal($SESSION->bulk_users); - $rs = $DB->get_recordset_select('user', "id $in", $params); + $rs = $DB->get_recordset_select('user', "deleted = 0 and id $in", $params); foreach ($rs as $user) { if (!is_siteadmin($user) and $USER->id != $user->id and delete_user($user)) { unset($SESSION->bulk_users[$user->id]); diff --git a/lang/en/bulkusers.php b/lang/en/bulkusers.php index deb03d19ecd..02e1dea532c 100644 --- a/lang/en/bulkusers.php +++ b/lang/en/bulkusers.php @@ -30,6 +30,7 @@ $string['allselectedusers'] = 'All selected ({$a->count}/{$a->total})'; $string['allusers'] = 'All users ({$a})'; $string['available'] = 'Available'; $string['confirmmessage'] = 'Do you really want to send the message above to all these users?
{$a}'; +$string['deleteduser'] = 'Deleted user'; $string['nofilteredusers'] = 'No users found (0/{$a})'; $string['noselectedusers'] = 'No users selected'; $string['removeall'] = 'Remove all'; diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 73e1c4d0a34..5d2bb8f926e 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -4021,7 +4021,7 @@ function truncate_userinfo(array $info) { * @throws coding_exception if invalid $user parameter detected */ function delete_user(stdClass $user) { - global $CFG, $DB; + global $CFG, $DB, $SESSION; require_once($CFG->libdir.'/grouplib.php'); require_once($CFG->libdir.'/gradelib.php'); require_once($CFG->dirroot.'/message/lib.php'); @@ -4119,6 +4119,11 @@ function delete_user(stdClass $user) { // Remove users customised pages. $DB->delete_records('my_pages', array('userid' => $user->id, 'private' => 1)); + // Delete user from $SESSION->bulk_users. + if (isset($SESSION->bulk_users[$user->id])) { + unset($SESSION->bulk_users[$user->id]); + } + // Force logout - may fail if file based sessions used, sorry. \core\session\manager::kill_user_sessions($user->id); diff --git a/user/tests/behat/bulk_editenrolment.feature b/user/tests/behat/bulk_editenrolment.feature index b69391e8e6a..d7a55fde15d 100644 --- a/user/tests/behat/bulk_editenrolment.feature +++ b/user/tests/behat/bulk_editenrolment.feature @@ -18,6 +18,9 @@ Feature: Bulk enrolments | student1 | C1 | student | | student2 | C1 | student | | teacher1 | C1 | editingteacher | + And the following "cohorts" exist: + | name | idnumber | + | Cohort | cohortid1 | @javascript Scenario: Bulk edit enrolments @@ -29,7 +32,7 @@ Feature: Bulk enrolments And I set the field "Alter status" to "Suspended" And I press "Save changes" Then I should see "Suspended" in the "Teacher 1" "table_row" - Then I should see "Suspended" in the "Student 1" "table_row" + And I should see "Suspended" in the "Student 1" "table_row" And I should see "Suspended" in the "Student 2" "table_row" @javascript @@ -43,3 +46,27 @@ Feature: Bulk enrolments Then I should not see "Student 1" And I should not see "Student 2" And I should not see "Teacher 1" + + @javascript + Scenario: Bulk edit enrolment for deleted user + When I log in as "admin" + And I navigate to "Users > Accounts > Bulk user actions" in site administration + And I set the field "Available" to "Student 1" + And I press "Add to selection" + And I set the field "Available" to "Student 2" + And I press "Add to selection" + And I navigate to "Users > Accounts > Browse list of users" in site administration + And I set the following fields to these values: + | username | student1 | + And I press "Add filter" + And I click on "Delete" "link" + And I press "Delete" + And I navigate to "Users > Accounts > Bulk user actions" in site administration + And I set the field "id_action" to "Add to cohort" + And I press "Go" + And I set the field "id_cohort" to "Cohort [cohortid1]" + And I press "Add to cohort" + And I navigate to "Users > Accounts > Cohorts" in site administration + And I click on "Assign" "link" + Then the "removeselect" select box should contain "Student 2 (student2@example.com)" + And the "removeselect" select box should not contain "Student 1 (student1@example.com)" diff --git a/user/tests/behat/delete_users.feature b/user/tests/behat/delete_users.feature index d5113fb0ed9..358f4562eaf 100644 --- a/user/tests/behat/delete_users.feature +++ b/user/tests/behat/delete_users.feature @@ -78,3 +78,21 @@ Feature: Deleting users And the "Available" select box should not contain "User Three" And the "Available" select box should not contain "User One" And the "Available" select box should not contain "User Two" + + @javascript + Scenario: Deleting a bulked user + When I log in as "admin" + And I navigate to "Users > Accounts > Bulk user actions" in site administration + And I set the field "Available" to "User Two" + And I press "Add to selection" + And I set the field "Available" to "User One" + And I press "Add to selection" + Then I should see "User One" + And I navigate to "Users > Accounts > Browse list of users" in site administration + And I set the following fields to these values: + | username | user1 | + And I press "Add filter" + And I click on "Delete" "link" + And I press "Delete" + And I navigate to "Users > Accounts > Bulk user actions" in site administration + Then I should not see "User One"