MDL-16824 messaging - move unread messages from deleted users to message_read.

Pending to commit changes to uploaduser.php. Credit goes to Anthony Borrow. Thanks!
Merged from 19_STABLE
This commit is contained in:
stronk7 2009-04-26 22:56:56 +00:00
parent becf869c6b
commit 6bdf4c99b3
5 changed files with 60 additions and 1 deletions

View File

@ -1651,6 +1651,22 @@ WHERE gradeitemid IS NOT NULL AND grademax IS NOT NULL");
upgrade_main_savepoint($result, 2009041700);
}
if ($result && $oldversion < 2009042600) {
/// 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 = $DB->get_records_sql('SELECT DISTINCT u.id
FROM {user} u
JOIN {message} m ON m.useridfrom = u.id
WHERE u.deleted = ?', array(1))) {
foreach ($deletedusers as $deleteduser) {
message_move_userfrom_unread2read($deleteduser->id); // move messages
}
}
/// Main savepoint reached
upgrade_main_savepoint($result, 2009042600);
}
return $result;
}

View File

@ -2989,6 +2989,7 @@ function delete_user($user) {
global $CFG, $DB;
require_once($CFG->libdir.'/grouplib.php');
require_once($CFG->libdir.'/gradelib.php');
require_once($CFG->dirroot.'/message/lib.php');
// TODO: decide if this transaction is really needed
$DB->begin_sql();
@ -3001,6 +3002,9 @@ function delete_user($user) {
}
}
//move unread messages from this user to read
message_move_userfrom_unread2read($user->id);
// remove from all groups
$DB->delete_records('groups_members', array('userid'=>$user->id));

View File

@ -20,11 +20,24 @@
print_error('invaliduserid');
}
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 = $DB->get_record("user", array("id"=>$userid2))) { // Check
print_error('invaliduserid');
}
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;

View File

@ -1023,6 +1023,32 @@ function message_print_contactlist_user($contact, $incontactlist = true){
echo '</tr>';
}
/**
* 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) {
global $DB;
// move all unread messages from message table to messasge_read
if ($messages = $DB->get_records_select('message', 'useridfrom = ?', array($userid), 'timecreated')) {
foreach ($messages as $message) {
$message->timeread = 0; //the message was never read
$messageid = $message->id;
unset($message->id);
if ($DB->insert_record('message_read', $message)) {
$DB->delete_records('message', array('id' => $messageid));
$DB->delete_records('message_working', array('unreadmessageid' => $messageid));
} else {
return false;
}
}
}
return true;
}
function message_get_popup_messages($destuserid, $fromuserid=NULL){
global $DB;

View File

@ -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 = 2009041700; // YYYYMMDD = date of the last version bump
$version = 2009042600; // YYYYMMDD = date of the last version bump
// XX = daily increments
$release = '2.0 dev (Build: 20090426)'; // Human-friendly version name