MDL-16824 messaging - move unread messages from deleted users to message_read.
authorstronk7 <stronk7>
Sun, 26 Apr 2009 22:56:56 +0000 (22:56 +0000)
committerstronk7 <stronk7>
Sun, 26 Apr 2009 22:56:56 +0000 (22:56 +0000)
Pending to commit changes to uploaduser.php. Credit goes to Anthony Borrow. Thanks!
Merged from 19_STABLE

lib/db/upgrade.php
lib/moodlelib.php
message/history.php
message/lib.php
version.php

index 83939ae05a9071074af72f3849b984820a20dc86..8e5cc3d2e7770ac30a3e0e8c61973d7ac5f15593 100644 (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;
 }
 
index 948a2765ee1f621f603c85ed14f5dcfae26ab273..eeacb62ad2ce8b8486f3e8dd01a36f3633b0ca49 100644 (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));
 
index ceef16619d80582ea73d29f975b9ab64751f2dbb..c955af49854e6575f2094a22a5bb0a4137542534 100644 (file)
         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; 
index e8e16046a3c5807edffbe069bf7dbd7fe1225535..1f05da1bea441551b0860fddf18d2f9a7bf12c2c 100644 (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;
     
index 486cdad48cdec001d3e80aa49cc5f9c6a48ef99c..c14f77d4f3c17bb7bcd04462a0687c865e4c2a91 100644 (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