diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php index e4a2b0db4e5..5a5b6649d48 100644 --- a/lib/db/upgrade.php +++ b/lib/db/upgrade.php @@ -3131,6 +3131,22 @@ function xmldb_main_upgrade($oldversion=0) { upgrade_main_savepoint($result, 2007101546.02); } + if ($result && $oldversion < 2007101546.03) { + /// Deleting orphaned messages from deleted users. + require_once($CFG->dirroot.'/message/lib.php'); + /// Detect deleted users with messages sent(useridfrom) and not read + if ($deletedusers = get_records_sql("SELECT DISTINCT u.id + FROM {$CFG->prefix}user u + JOIN {$CFG->prefix}message m ON m.useridfrom = u.id + WHERE u.deleted = 1")) { + foreach ($deletedusers as $deleteduser) { + message_move_userfrom_unread2read($deleteduser->id); // move messages + } + } + /// Main savepoint reached + upgrade_main_savepoint($result, 2007101546.03); + } + return $result; } diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 869ac0c82f2..31da3aa80af 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -3019,6 +3019,7 @@ function delete_user($user) { global $CFG; require_once($CFG->libdir.'/grouplib.php'); require_once($CFG->libdir.'/gradelib.php'); + require_once($CFG->dirroot.'/message/lib.php'); begin_sql(); @@ -3029,6 +3030,9 @@ function delete_user($user) { } } + //move unread messages from this user to read + message_move_userfrom_unread2read($user->id); + // remove from all groups delete_records('groups_members', 'userid', $user->id); diff --git a/message/history.php b/message/history.php index b97ec012d4a..42b3cc55bf5 100644 --- a/message/history.php +++ b/message/history.php @@ -20,11 +20,24 @@ error("User ID 1 was incorrect"); } + if ($user1->deleted) { + print_header(); + print_heading(get_string('userdeleted').': '.$userid1); + print_footer(); + die; + } + if (has_capability('moodle/site:readallmessages', get_context_instance(CONTEXT_SYSTEM))) { // Able to see any discussion $userid2 = optional_param('user2', $USER->id, PARAM_INT); if (! $user2 = get_record("user", "id", $userid2)) { // Check error("User ID 2 was incorrect"); } + if ($user2->deleted) { + print_header(); + print_heading(get_string('userdeleted').': '.$userid2); + print_footer(); + die; + } } else { $userid2 = $USER->id; // Can only see messages involving yourself $user2 = $USER; diff --git a/message/lib.php b/message/lib.php index 3963b896ef3..5a1a3378544 100644 --- a/message/lib.php +++ b/message/lib.php @@ -1064,4 +1064,28 @@ function message_print_contactlist_user($contact, $incontactlist = true){ echo ''; } + /** + * Moves unread messages from message table to message_read for a given from user + * @param object $userid User id + * @return boolean success + */ +function message_move_userfrom_unread2read($userid) { + + // move all unread messages from message table to messasge_read + if ($messages = get_records_select('message', "useridfrom = $userid", 'timecreated')) { + foreach ($messages as $message) { + $message->timeread = 0; //the message was never read + $message = addslashes_object($message); + $messageid = $message->id; + unset($message->id); + if (insert_record('message_read', $message)) { + delete_records('message', 'id', $messageid); + } else { + return false; + } + } + } + return true; +} + ?> diff --git a/version.php b/version.php index 84af4c0fde4..1afd1c47711 100644 --- a/version.php +++ b/version.php @@ -6,7 +6,7 @@ // This is compared against the values stored in the database to determine // whether upgrades should be performed (see lib/db/*.php) - $version = 2007101546.02; // YYYYMMDD = date of the 1.9 branch (don't change) + $version = 2007101546.03; // YYYYMMDD = date of the 1.9 branch (don't change) // X = release number 1.9.[0,1,2,3,4,5...] // Y.YY = micro-increments between releases