Index: message/output/lib.php =================================================================== --- message/output/lib.php (revision 16169) +++ message/output/lib.php (revision ) @@ -55,7 +55,20 @@ return true; } + /** + * Notify the message processor that a message that it was working with + * has been read. + * + * @see message_mark_message_read() + * @param int $messageid The original unread message ID from the message table + * @param int $messagereadid The new read message ID from the message_read table + * @param stdClass $message The message object, but the id IS NOT SET! + * @return void + */ + public function message_read($messageid, $messagereadid, $message) { + // Nothing by default -} + } +} Index: message/lib.php =================================================================== --- message/lib.php (revision 16169) +++ message/lib.php (revision ) @@ -2225,11 +2225,23 @@ $messageid = $message->id; unset($message->id);//unset because it will get a new id on insert into message_read - //If any processors have pending actions abort them + $messagereadid = $DB->insert_record('message_read', $message); + + // If any processors have pending actions abort them (but let them know!) if (!$messageworkingempty) { + if ($working = $DB->get_records('message_working', array('unreadmessageid' => $messageid))) { + $processors = get_message_processors(true); + foreach ($working as $work) { + foreach ($processors as $processor) { + if ($processor->id == $work->processorid) { + $processor->object->message_read($messageid, $messagereadid, $message); + break; + } + } + } - $DB->delete_records('message_working', array('unreadmessageid' => $messageid)); - } + $DB->delete_records('message_working', array('unreadmessageid' => $messageid)); + } - $messagereadid = $DB->insert_record('message_read', $message); + } $DB->delete_records('message', array('id' => $messageid)); return $messagereadid; }