diff --git a/lib/classes/message/manager.php b/lib/classes/message/manager.php index c016bd530c6..234cc93ab51 100644 --- a/lib/classes/message/manager.php +++ b/lib/classes/message/manager.php @@ -50,13 +50,19 @@ class manager { * * NOTE: to be used from message_send() only. * - * @param \stdClass $eventdata fully prepared event data for processors + * @param \stdClass|\core\message\message $eventdata fully prepared event data for processors * @param \stdClass $savemessage the message saved in 'message' table * @param array $processorlist list of processors for target user * @return int $messageid the id from 'message' or 'message_read' table (false is not returned) */ - public static function send_message(\stdClass $eventdata, \stdClass $savemessage, array $processorlist) { + public static function send_message($eventdata, \stdClass $savemessage, array $processorlist) { global $CFG; + + if (!($eventdata instanceof \stdClass) && !($eventdata instanceof message)) { + // Not a valid object. + throw new \coding_exception('Message should be of type stdClass or \core\message\message'); + } + require_once($CFG->dirroot.'/message/lib.php'); // This is most probably already included from messagelib.php file. if (empty($processorlist)) { @@ -85,12 +91,13 @@ class manager { /** * Send message to message processors. * - * @param \stdClass $eventdata + * @param \stdClass|\core\message\message $eventdata * @param \stdClass $savemessage * @param array $processorlist * @return int $messageid */ - protected static function send_message_to_processors(\stdClass $eventdata, \stdClass $savemessage, array $processorlist) { + protected static function send_message_to_processors($eventdata, \stdClass $savemessage, array + $processorlist) { global $CFG, $DB; // We cannot communicate with external systems in DB transactions, @@ -114,7 +121,9 @@ class manager { $failed = false; foreach ($processorlist as $procname) { - if (!$processors[$procname]->object->send_message($eventdata)) { + // Let new messaging class add custom content based on the processor. + $proceventdata = ($eventdata instanceof message) ? $eventdata->get_eventobject_for_processor($procname) : $eventdata; + if (!$processors[$procname]->object->send_message($proceventdata)) { debugging('Error calling message processor ' . $procname); $failed = true; // Previously the $messageid = false here was overridden diff --git a/lib/messagelib.php b/lib/messagelib.php index 8f9ee6a25a5..d700bcabac7 100644 --- a/lib/messagelib.php +++ b/lib/messagelib.php @@ -51,7 +51,7 @@ require_once(dirname(dirname(__FILE__)) . '/message/lib.php'); * earlier versions did not do it consistently either. * * @category message - * @param stdClass $eventdata information about the message (component, userfrom, userto, ...) + * @param stdClass|\core\message\message $eventdata information about the message (component, userfrom, userto, ...) * @return mixed the integer ID of the new message or false if there was a problem with submitted data */ function message_send($eventdata) {