MDL-47162 core_message: Add course id to message eventdata

This commit is contained in:
Amanda Doughty 2016-07-20 12:40:34 +01:00 committed by Eloy Lafuente (stronk7)
parent 577bd70d38
commit cc350fd9c8
34 changed files with 345 additions and 76 deletions

View file

@ -920,7 +920,7 @@ class manager {
$addressmanager->set_handler('\tool_messageinbound\message\inbound\invalid_recipient_handler'); $addressmanager->set_handler('\tool_messageinbound\message\inbound\invalid_recipient_handler');
$addressmanager->set_data($record->id); $addressmanager->set_data($record->id);
$eventdata = new \stdClass(); $eventdata = new \core\message\message();
$eventdata->component = 'tool_messageinbound'; $eventdata->component = 'tool_messageinbound';
$eventdata->name = 'invalidrecipienthandler'; $eventdata->name = 'invalidrecipienthandler';
@ -970,7 +970,7 @@ class manager {
$messagedata->subject = $this->currentmessagedata->envelope->subject; $messagedata->subject = $this->currentmessagedata->envelope->subject;
$messagedata->error = $error; $messagedata->error = $error;
$eventdata = new \stdClass(); $eventdata = new \core\message\message();
$eventdata->component = 'tool_messageinbound'; $eventdata->component = 'tool_messageinbound';
$eventdata->name = 'messageprocessingerror'; $eventdata->name = 'messageprocessingerror';
$eventdata->userfrom = $userfrom; $eventdata->userfrom = $userfrom;
@ -1029,7 +1029,7 @@ class manager {
$messagedata = new \stdClass(); $messagedata = new \stdClass();
$messagedata->subject = $this->currentmessagedata->envelope->subject; $messagedata->subject = $this->currentmessagedata->envelope->subject;
$eventdata = new \stdClass(); $eventdata = new \core\message\message();
$eventdata->component = 'tool_messageinbound'; $eventdata->component = 'tool_messageinbound';
$eventdata->name = 'messageprocessingsuccess'; $eventdata->name = 'messageprocessingsuccess';
$eventdata->userfrom = $userfrom; $eventdata->userfrom = $userfrom;

View file

@ -83,7 +83,7 @@ class notification_task extends \core\task\adhoc_task {
$template = $subscription->template; $template = $subscription->template;
$template = $this->replace_placeholders($template, $subscription, $eventobj, $context); $template = $this->replace_placeholders($template, $subscription, $eventobj, $context);
$htmlmessage = format_text($template, $subscription->templateformat, array('context' => $context)); $htmlmessage = format_text($template, $subscription->templateformat, array('context' => $context));
$msgdata = new \stdClass(); $msgdata = new \core\message\message();
$msgdata->component = 'tool_monitor'; // Your component name. $msgdata->component = 'tool_monitor'; // Your component name.
$msgdata->name = 'notification'; // This is the message name from messages.php. $msgdata->name = 'notification'; // This is the message name from messages.php.
$msgdata->userfrom = \core_user::get_noreply_user(); $msgdata->userfrom = \core_user::get_noreply_user();

View file

@ -264,7 +264,7 @@ abstract class backup_cron_automated_helper {
$subject = $prefix.get_string('automatedbackupstatus', 'backup'); $subject = $prefix.get_string('automatedbackupstatus', 'backup');
//Send the message //Send the message
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->modulename = 'moodle'; $eventdata->modulename = 'moodle';
$eventdata->userfrom = $admin; $eventdata->userfrom = $admin;
$eventdata->userto = $admin; $eventdata->userto = $admin;

View file

@ -140,7 +140,7 @@ function badge_assemble_notification(stdClass $badge) {
} }
// Create a message object. // Create a message object.
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->component = 'moodle'; $eventdata->component = 'moodle';
$eventdata->name = 'badgecreatornotice'; $eventdata->name = 'badgecreatornotice';
$eventdata->userfrom = $userfrom; $eventdata->userfrom = $userfrom;

View file

@ -116,6 +116,7 @@ function core_competency_comment_add($comment, $params) {
} }
$message = new \core\message\message(); $message = new \core\message\message();
$message->courseid = SITEID;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'competencyusercompcomment'; $message->name = 'competencyusercompcomment';
$message->notification = 1; $message->notification = 1;
@ -184,6 +185,7 @@ function core_competency_comment_add($comment, $params) {
} }
$message = new \core\message\message(); $message = new \core\message\message();
$message->courseid = SITEID;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'competencyplancomment'; $message->name = 'competencyplancomment';
$message->notification = 1; $message->notification = 1;

View file

@ -2674,7 +2674,7 @@ class course_request {
* @param string $message * @param string $message
*/ */
protected function notify($touser, $fromuser, $name='courserequested', $subject, $message) { protected function notify($touser, $fromuser, $name='courserequested', $subject, $message) {
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->component = 'moodle'; $eventdata->component = 'moodle';
$eventdata->name = $name; $eventdata->name = $name;
$eventdata->userfrom = $fromuser; $eventdata->userfrom = $fromuser;

View file

@ -186,7 +186,7 @@ class enrol_flatfile_plugin extends enrol_plugin {
if ($processed and $mailadmins) { if ($processed and $mailadmins) {
if ($log = $buffer->get_buffer()) { if ($log = $buffer->get_buffer()) {
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->modulename = 'moodle'; $eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_flatfile'; $eventdata->component = 'enrol_flatfile';
$eventdata->name = 'flatfile_enrolment'; $eventdata->name = 'flatfile_enrolment';
@ -340,7 +340,7 @@ class enrol_flatfile_plugin extends enrol_plugin {
} }
if (!unlink($filelocation)) { if (!unlink($filelocation)) {
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->modulename = 'moodle'; $eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_flatfile'; $eventdata->component = 'enrol_flatfile';
$eventdata->name = 'flatfile_enrolment'; $eventdata->name = 'flatfile_enrolment';
@ -463,7 +463,7 @@ class enrol_flatfile_plugin extends enrol_plugin {
$a->profileurl = "$CFG->wwwroot/user/view.php?id=$user->id&course=$course->id"; $a->profileurl = "$CFG->wwwroot/user/view.php?id=$user->id&course=$course->id";
$subject = get_string('enrolmentnew', 'enrol', format_string($course->shortname, true, array('context' => $context))); $subject = get_string('enrolmentnew', 'enrol', format_string($course->shortname, true, array('context' => $context)));
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->modulename = 'moodle'; $eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_flatfile'; $eventdata->component = 'enrol_flatfile';
$eventdata->name = 'flatfile_enrolment'; $eventdata->name = 'flatfile_enrolment';
@ -494,7 +494,7 @@ class enrol_flatfile_plugin extends enrol_plugin {
$a->user = fullname($user); $a->user = fullname($user);
$subject = get_string('enrolmentnew', 'enrol', format_string($course->shortname, true, array('context' => $context))); $subject = get_string('enrolmentnew', 'enrol', format_string($course->shortname, true, array('context' => $context)));
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->modulename = 'moodle'; $eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_flatfile'; $eventdata->component = 'enrol_flatfile';
$eventdata->name = 'flatfile_enrolment'; $eventdata->name = 'flatfile_enrolment';

View file

@ -222,7 +222,7 @@ class enrol_imsenterprise_plugin extends enrol_plugin {
$msg .= "Logging is currently not active."; $msg .= "Logging is currently not active.";
} }
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->modulename = 'moodle'; $eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_imsenterprise'; $eventdata->component = 'enrol_imsenterprise';
$eventdata->name = 'imsenterprise_enrolment'; $eventdata->name = 'imsenterprise_enrolment';

View file

@ -152,7 +152,7 @@ if (strlen($result) > 0) {
// Email user to let them know. Email admin. // Email user to let them know. Email admin.
if ($data->payment_status == "Pending" and $data->pending_reason != "echeck") { if ($data->payment_status == "Pending" and $data->pending_reason != "echeck") {
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->modulename = 'moodle'; $eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_paypal'; $eventdata->component = 'enrol_paypal';
$eventdata->name = 'paypal_enrolment'; $eventdata->name = 'paypal_enrolment';
@ -259,7 +259,7 @@ if (strlen($result) > 0) {
$a->coursename = format_string($course->fullname, true, array('context' => $coursecontext)); $a->coursename = format_string($course->fullname, true, array('context' => $coursecontext));
$a->profileurl = "$CFG->wwwroot/user/view.php?id=$user->id"; $a->profileurl = "$CFG->wwwroot/user/view.php?id=$user->id";
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->modulename = 'moodle'; $eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_paypal'; $eventdata->component = 'enrol_paypal';
$eventdata->name = 'paypal_enrolment'; $eventdata->name = 'paypal_enrolment';
@ -278,7 +278,7 @@ if (strlen($result) > 0) {
$a->course = format_string($course->fullname, true, array('context' => $coursecontext)); $a->course = format_string($course->fullname, true, array('context' => $coursecontext));
$a->user = fullname($user); $a->user = fullname($user);
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->modulename = 'moodle'; $eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_paypal'; $eventdata->component = 'enrol_paypal';
$eventdata->name = 'paypal_enrolment'; $eventdata->name = 'paypal_enrolment';
@ -297,7 +297,7 @@ if (strlen($result) > 0) {
$a->user = fullname($user); $a->user = fullname($user);
$admins = get_admins(); $admins = get_admins();
foreach ($admins as $admin) { foreach ($admins as $admin) {
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->modulename = 'moodle'; $eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_paypal'; $eventdata->component = 'enrol_paypal';
$eventdata->name = 'paypal_enrolment'; $eventdata->name = 'paypal_enrolment';
@ -320,3 +320,49 @@ if (strlen($result) > 0) {
exit; exit;
//--- HELPER FUNCTIONS --------------------------------------------------------------------------------------
function message_paypal_error_to_admin($subject, $data) {
echo $subject;
$admin = get_admin();
$site = get_site();
$message = "$site->fullname: Transaction failed.\n\n$subject\n\n";
foreach ($data as $key => $value) {
$message .= "$key => $value\n";
}
$eventdata = new \core\message\message();
$eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_paypal';
$eventdata->name = 'paypal_enrolment';
$eventdata->userfrom = $admin;
$eventdata->userto = $admin;
$eventdata->subject = "PAYPAL ERROR: ".$subject;
$eventdata->fullmessage = $message;
$eventdata->fullmessageformat = FORMAT_PLAIN;
$eventdata->fullmessagehtml = '';
$eventdata->smallmessage = '';
message_send($eventdata);
}
/**
* Silent exception handler.
*
* @param Exception $ex
* @return void - does not return. Terminates execution!
*/
function enrol_paypal_ipn_exception_handler($ex) {
$info = get_exception_info($ex);
$logerrmsg = "enrol_paypal IPN exception handler: ".$info->message;
if (debugging('', DEBUG_NORMAL)) {
$logerrmsg .= ' Debug: '.$info->debuginfo."\n".format_backtrace($info->backtrace, true);
}
error_log($logerrmsg);
exit(0);
}

View file

@ -722,7 +722,8 @@ function badges_notify_badge_award(badge $badge, $userid, $issued, $filepathhash
$plaintext = html_to_text($message); $plaintext = html_to_text($message);
// Notify recipient. // Notify recipient.
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = $badge->courseid;
$eventdata->component = 'moodle'; $eventdata->component = 'moodle';
$eventdata->name = 'badgerecipientnotice'; $eventdata->name = 'badgerecipientnotice';
$eventdata->userfrom = $userfrom; $eventdata->userfrom = $userfrom;
@ -758,7 +759,8 @@ function badges_notify_badge_award(badge $badge, $userid, $issued, $filepathhash
$creatormessage = get_string('creatorbody', 'badges', $a); $creatormessage = get_string('creatorbody', 'badges', $a);
$creatorsubject = get_string('creatorsubject', 'badges', $badge->name); $creatorsubject = get_string('creatorsubject', 'badges', $badge->name);
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = $badge->courseid;
$eventdata->component = 'moodle'; $eventdata->component = 'moodle';
$eventdata->name = 'badgecreatornotice'; $eventdata->name = 'badgecreatornotice';
$eventdata->userfrom = $userfrom; $eventdata->userfrom = $userfrom;

View file

@ -122,7 +122,7 @@ abstract class scanner {
$subject = get_string('emailsubject', 'antivirus', format_string($site->fullname)); $subject = get_string('emailsubject', 'antivirus', format_string($site->fullname));
$admins = get_admins(); $admins = get_admins();
foreach ($admins as $admin) { foreach ($admins as $admin) {
$eventdata = new \stdClass(); $eventdata = new \core\message\message();
$eventdata->component = 'moodle'; $eventdata->component = 'moodle';
$eventdata->name = 'errors'; $eventdata->name = 'errors';
$eventdata->userfrom = get_admin(); $eventdata->userfrom = get_admin();

View file

@ -33,6 +33,7 @@ defined('MOODLE_INTERNAL') || die();
* Extra information about event. * Extra information about event.
* *
* - int messageid: the id of the message. * - int messageid: the id of the message.
* - int courseid: the id of the related course.
* } * }
* *
* @package core * @package core
@ -46,9 +47,10 @@ class message_sent extends base {
* @param int $userfromid * @param int $userfromid
* @param int $usertoid * @param int $usertoid
* @param int $messageid * @param int $messageid
* @param int|null $courseid
* @return message_sent * @return message_sent
*/ */
public static function create_from_ids($userfromid, $usertoid, $messageid) { public static function create_from_ids($userfromid, $usertoid, $messageid, $courseid = null) {
// We may be sending a message from the 'noreply' address, which means we are not actually sending a // We may be sending a message from the 'noreply' address, which means we are not actually sending a
// message from a valid user. In this case, we will set the userid to 0. // message from a valid user. In this case, we will set the userid to 0.
// Check if the userid is valid. // Check if the userid is valid.
@ -56,6 +58,10 @@ class message_sent extends base {
$userfromid = 0; $userfromid = 0;
} }
if (is_null($courseid)) {
$courseid = SITEID;
}
$event = self::create(array( $event = self::create(array(
'userid' => $userfromid, 'userid' => $userfromid,
'context' => \context_system::instance(), 'context' => \context_system::instance(),
@ -64,7 +70,8 @@ class message_sent extends base {
// In earlier versions it can either be the id in the 'message_read' or 'message' table. // In earlier versions it can either be the id in the 'message_read' or 'message' table.
// Now it is always the id from 'message' table. Please note that the record is still moved // Now it is always the id from 'message' table. Please note that the record is still moved
// to the 'message_read' table later when message marked as read. // to the 'message_read' table later when message marked as read.
'messageid' => $messageid 'messageid' => $messageid,
'courseid' => $courseid
) )
)); ));
@ -143,6 +150,10 @@ class message_sent extends base {
if (!isset($this->other['messageid'])) { if (!isset($this->other['messageid'])) {
throw new \coding_exception('The \'messageid\' value must be set in other.'); throw new \coding_exception('The \'messageid\' value must be set in other.');
} }
if (!isset($this->other['courseid'])) {
debugging('The \'courseid\' value must be set in other.', DEBUG_DEVELOPER);
}
} }
public static function get_objectid_mapping() { public static function get_objectid_mapping() {
@ -155,6 +166,7 @@ class message_sent extends base {
$othermapped = array(); $othermapped = array();
// The messages table could vary for older events - so cannot be mapped. // The messages table could vary for older events - so cannot be mapped.
$othermapped['messageid'] = array('db' => base::NOT_MAPPED, 'restore' => base::NOT_MAPPED); $othermapped['messageid'] = array('db' => base::NOT_MAPPED, 'restore' => base::NOT_MAPPED);
$othermapped['courseid'] = array('db' => base::NOT_MAPPED, 'restore' => base::NOT_MAPPED);
return $othermapped; return $othermapped;
} }
} }

View file

@ -50,7 +50,7 @@ class manager {
* *
* NOTE: to be used from message_send() only. * NOTE: to be used from message_send() only.
* *
* @param \stdClass|\core\message\message $eventdata fully prepared event data for processors * @param \core\message\message $eventdata fully prepared event data for processors
* @param \stdClass $savemessage the message saved in 'message' table * @param \stdClass $savemessage the message saved in 'message' table
* @param array $processorlist list of processors for target user * @param array $processorlist list of processors for target user
* @return int $messageid the id from 'message' or 'message_read' table (false is not returned) * @return int $messageid the id from 'message' or 'message_read' table (false is not returned)
@ -63,11 +63,24 @@ class manager {
throw new \coding_exception('Message should be of type stdClass or \core\message\message'); throw new \coding_exception('Message should be of type stdClass or \core\message\message');
} }
if ($eventdata instanceof \stdClass) {
if (!isset($eventdata->courseid)) {
$eventdata->courseid = null;
}
debugging('eventdata as \stdClass is deprecated. Please use core\message\message instead.', DEBUG_DEVELOPER);
}
require_once($CFG->dirroot.'/message/lib.php'); // This is most probably already included from messagelib.php file. require_once($CFG->dirroot.'/message/lib.php'); // This is most probably already included from messagelib.php file.
if (empty($processorlist)) { if (empty($processorlist)) {
// Trigger event for sending a message - we need to do this before marking as read! // Trigger event for sending a message - we need to do this before marking as read!
\core\event\message_sent::create_from_ids($eventdata->userfrom->id, $eventdata->userto->id, $savemessage->id)->trigger(); \core\event\message_sent::create_from_ids(
$eventdata->userfrom->id,
$eventdata->userto->id,
$savemessage->id,
$eventdata->courseid
)->trigger();
if ($savemessage->notification or empty($CFG->messaging)) { if ($savemessage->notification or empty($CFG->messaging)) {
// If they have deselected all processors and its a notification mark it read. The user doesn't want to be bothered. // If they have deselected all processors and its a notification mark it read. The user doesn't want to be bothered.
@ -132,7 +145,12 @@ class manager {
} }
// Trigger event for sending a message - must be done before marking as read. // Trigger event for sending a message - must be done before marking as read.
\core\event\message_sent::create_from_ids($eventdata->userfrom->id, $eventdata->userto->id, $savemessage->id)->trigger(); \core\event\message_sent::create_from_ids(
$eventdata->userfrom->id,
$eventdata->userto->id,
$savemessage->id,
$eventdata->courseid
)->trigger();
if (empty($CFG->messaging)) { if (empty($CFG->messaging)) {
// If messaging is disabled and they previously had forum notifications handled by the popup processor // If messaging is disabled and they previously had forum notifications handled by the popup processor

View file

@ -56,6 +56,12 @@ defined('MOODLE_INTERNAL') || die();
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/ */
class message { class message {
/** @var int Course id. */
private $courseid;
/** @var string Module name. */
private $modulename;
/** @var string Component name. */ /** @var string Component name. */
private $component; private $component;
@ -104,10 +110,31 @@ class message {
/** @var string Name of the attachment. Note:- not all processors support this.*/ /** @var string Name of the attachment. Note:- not all processors support this.*/
private $attachname; private $attachname;
/** @var int The time the message was created.*/
private $timecreated;
/** @var array a list of properties that is allowed for each message. */ /** @var array a list of properties that is allowed for each message. */
private $properties = array('component', 'name', 'userfrom', 'userto', 'subject', 'fullmessage', 'fullmessageformat', private $properties = array(
'fullmessagehtml', 'smallmessage', 'notification', 'contexturl', 'contexturlname', 'savedmessageid', 'courseid',
'replyto', 'attachment', 'attachname'); 'modulename',
'component',
'name',
'userfrom',
'userto',
'subject',
'fullmessage',
'fullmessageformat',
'fullmessagehtml',
'smallmessage',
'notification',
'contexturl',
'contexturlname',
'replyto',
'savedmessageid',
'attachment',
'attachname',
'timecreated'
);
/** @var array property to store any additional message processor specific content */ /** @var array property to store any additional message processor specific content */
private $additionalcontent = array(); private $additionalcontent = array();

View file

@ -798,7 +798,7 @@ class checker {
array('style' => 'font-size:smaller; color:#333;'))); array('style' => 'font-size:smaller; color:#333;')));
foreach ($admins as $admin) { foreach ($admins as $admin) {
$message = new \stdClass(); $message = new \core\message\message();
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'availableupdate'; $message->name = 'availableupdate';
$message->userfrom = get_admin(); $message->userfrom = get_admin();

View file

@ -2655,7 +2655,7 @@ abstract class enrol_plugin {
$subject = get_string('expirymessageenrolledsubject', 'enrol_'.$name, $a); $subject = get_string('expirymessageenrolledsubject', 'enrol_'.$name, $a);
$body = get_string('expirymessageenrolledbody', 'enrol_'.$name, $a); $body = get_string('expirymessageenrolledbody', 'enrol_'.$name, $a);
$message = new stdClass(); $message = new \core\message\message();
$message->notification = 1; $message->notification = 1;
$message->component = 'enrol_'.$name; $message->component = 'enrol_'.$name;
$message->name = 'expiry_notification'; $message->name = 'expiry_notification';
@ -2716,7 +2716,7 @@ abstract class enrol_plugin {
$subject = get_string('expirymessageenrollersubject', 'enrol_'.$name, $a); $subject = get_string('expirymessageenrollersubject', 'enrol_'.$name, $a);
$body = get_string('expirymessageenrollerbody', 'enrol_'.$name, $a); $body = get_string('expirymessageenrollerbody', 'enrol_'.$name, $a);
$message = new stdClass(); $message = new \core\message\message();
$message->notification = 1; $message->notification = 1;
$message->component = 'enrol_'.$name; $message->component = 'enrol_'.$name;
$message->name = 'expiry_notification'; $message->name = 'expiry_notification';

View file

@ -51,12 +51,20 @@ require_once(__DIR__ . '/../message/lib.php');
* earlier versions did not do it consistently either. * earlier versions did not do it consistently either.
* *
* @category message * @category message
* @param stdClass|\core\message\message $eventdata information about the message (component, userfrom, userto, ...) * @param \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 * @return mixed the integer ID of the new message or false if there was a problem with submitted data
*/ */
function message_send($eventdata) { function message_send($eventdata) {
global $CFG, $DB; global $CFG, $DB;
if ($eventdata instanceof \stdClass) {
if (!isset($eventdata->courseid)) {
$eventdata->courseid = null;
}
debugging('eventdata as \stdClass is deprecated. Please use core\message\message instead.', DEBUG_DEVELOPER);
}
//new message ID to return //new message ID to return
$messageid = false; $messageid = false;
@ -119,6 +127,7 @@ function message_send($eventdata) {
// Create the message object // Create the message object
$savemessage = new stdClass(); $savemessage = new stdClass();
$savemessage->courseid = $eventdata->courseid;
$savemessage->useridfrom = $eventdata->userfrom->id; $savemessage->useridfrom = $eventdata->userfrom->id;
$savemessage->useridto = $eventdata->userto->id; $savemessage->useridto = $eventdata->userto->id;
$savemessage->subject = $eventdata->subject; $savemessage->subject = $eventdata->subject;

View file

@ -424,7 +424,8 @@ class core_phpunit_advanced_testcase extends advanced_testcase {
$user2 = $this->getDataGenerator()->create_user(); $user2 = $this->getDataGenerator()->create_user();
// Any core message will do here. // Any core message will do here.
$message1 = new stdClass(); $message1 = new \core\message\message();
$message1->courseid = 1;
$message1->component = 'moodle'; $message1->component = 'moodle';
$message1->name = 'instantmessage'; $message1->name = 'instantmessage';
$message1->userfrom = $user1; $message1->userfrom = $user1;
@ -436,7 +437,8 @@ class core_phpunit_advanced_testcase extends advanced_testcase {
$message1->smallmessage = 'small message'; $message1->smallmessage = 'small message';
$message1->notification = 0; $message1->notification = 0;
$message2 = new stdClass(); $message2 = new \core\message\message();
$message2->courseid = 1;
$message2->component = 'moodle'; $message2->component = 'moodle';
$message2->name = 'instantmessage'; $message2->name = 'instantmessage';
$message2->userfrom = $user2; $message2->userfrom = $user2;
@ -501,7 +503,8 @@ class core_phpunit_advanced_testcase extends advanced_testcase {
$sink = $this->redirectMessages(); $sink = $this->redirectMessages();
$message3 = new stdClass(); $message3 = new \core\message\message();
$message3->courseid = 1;
$message3->component = 'xxxx_yyyyy'; $message3->component = 'xxxx_yyyyy';
$message3->name = 'instantmessage'; $message3->name = 'instantmessage';
$message3->userfrom = $user2; $message3->userfrom = $user2;
@ -547,7 +550,8 @@ class core_phpunit_advanced_testcase extends advanced_testcase {
$this->assertTrue(phpunit_util::is_redirecting_messages()); $this->assertTrue(phpunit_util::is_redirecting_messages());
$this->assertEquals(1, $sink->count()); $this->assertEquals(1, $sink->count());
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = get_admin(); $message->userfrom = get_admin();

View file

@ -1109,7 +1109,7 @@ function portfolio_insane_notify_admins($insane, $instances=false) {
$smallbody = get_string('insanebodysmall', 'portfolio', $a); $smallbody = get_string('insanebodysmall', 'portfolio', $a);
foreach ($admins as $admin) { foreach ($admins as $admin) {
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->modulename = 'portfolio'; $eventdata->modulename = 'portfolio';
$eventdata->component = 'portfolio'; $eventdata->component = 'portfolio';
$eventdata->name = 'notices'; $eventdata->name = 'notices';

View file

@ -48,6 +48,7 @@ class core_message_testcase extends advanced_testcase {
$user = $this->getDataGenerator()->create_user(); $user = $this->getDataGenerator()->create_user();
$message = new \core\message\message(); $message = new \core\message\message();
$message->courseid = SITEID;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $USER; $message->userfrom = $USER;
@ -82,6 +83,7 @@ class core_message_testcase extends advanced_testcase {
$stdclass = $message->get_eventobject_for_processor('test'); $stdclass = $message->get_eventobject_for_processor('test');
$this->assertSame($message->courseid, $stdclass->courseid);
$this->assertSame($message->component, $stdclass->component); $this->assertSame($message->component, $stdclass->component);
$this->assertSame($message->name, $stdclass->name); $this->assertSame($message->name, $stdclass->name);
$this->assertSame($message->userfrom, $stdclass->userfrom); $this->assertSame($message->userfrom, $stdclass->userfrom);
@ -143,6 +145,7 @@ class core_message_testcase extends advanced_testcase {
// Extra content for all types of messages. // Extra content for all types of messages.
$message = new \core\message\message(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -171,9 +174,19 @@ class core_message_testcase extends advanced_testcase {
$this->assertRegExp('/test message body test/', $email->body); $this->assertRegExp('/test message body test/', $email->body);
$sink->clear(); $sink->clear();
// Test that event fired includes the courseid.
$eventsink = $this->redirectEvents();
$messageid = message_send($message);
$events = $eventsink->get_events();
$event = reset($events);
$this->assertEquals($message->courseid, $event->other['courseid']);
$eventsink->clear();
$sink->clear();
// Extra content for small message only. Shouldn't show up in emails as we sent fullmessage and fullmessagehtml only in // Extra content for small message only. Shouldn't show up in emails as we sent fullmessage and fullmessagehtml only in
// the emails. // the emails.
$message = new \core\message\message(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -199,6 +212,14 @@ class core_message_testcase extends advanced_testcase {
$this->assertNotEmpty($email->header); $this->assertNotEmpty($email->header);
$this->assertNotEmpty($email->body); $this->assertNotEmpty($email->body);
$this->assertNotRegExp('/test message body test/', $email->body); $this->assertNotRegExp('/test message body test/', $email->body);
// Test that event fired includes the courseid.
$eventsink = $this->redirectEvents();
$messageid = message_send($message);
$events = $eventsink->get_events();
$event = reset($events);
$this->assertEquals($message->courseid, $event->other['courseid']);
$eventsink->close();
$sink->close(); $sink->close();
} }
} }

View file

@ -37,7 +37,8 @@ class core_messagelib_testcase extends advanced_testcase {
$preferences = get_message_output_default_preferences(); $preferences = get_message_output_default_preferences();
$this->assertTrue($preferences->$disableprovidersetting == 1); $this->assertTrue($preferences->$disableprovidersetting == 1);
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = get_admin(); $message->userfrom = get_admin();
@ -189,7 +190,8 @@ class core_messagelib_testcase extends advanced_testcase {
$user2 = $this->getDataGenerator()->create_user(); $user2 = $this->getDataGenerator()->create_user();
// Test basic message redirection. // Test basic message redirection.
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -225,7 +227,8 @@ class core_messagelib_testcase extends advanced_testcase {
$this->assertFalse($DB->record_exists('message', array())); $this->assertFalse($DB->record_exists('message', array()));
$DB->delete_records('message_read', array()); $DB->delete_records('message_read', array());
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1->id; $message->userfrom = $user1->id;
@ -263,7 +266,8 @@ class core_messagelib_testcase extends advanced_testcase {
// Test phpunit problem detection. // Test phpunit problem detection.
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'xxxxx'; $message->component = 'xxxxx';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -298,7 +302,8 @@ class core_messagelib_testcase extends advanced_testcase {
// Invalid users. // Invalid users.
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -314,7 +319,8 @@ class core_messagelib_testcase extends advanced_testcase {
$this->assertFalse($messageid); $this->assertFalse($messageid);
$this->assertDebuggingCalled('Attempt to send msg to unknown user'); $this->assertDebuggingCalled('Attempt to send msg to unknown user');
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = -1; $message->userfrom = -1;
@ -330,7 +336,8 @@ class core_messagelib_testcase extends advanced_testcase {
$this->assertFalse($messageid); $this->assertFalse($messageid);
$this->assertDebuggingCalled('Attempt to send msg from unknown user'); $this->assertDebuggingCalled('Attempt to send msg from unknown user');
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -349,7 +356,8 @@ class core_messagelib_testcase extends advanced_testcase {
// Some debugging hints for devs. // Some debugging hints for devs.
unset($user2->emailstop); unset($user2->emailstop);
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -393,7 +401,8 @@ class core_messagelib_testcase extends advanced_testcase {
set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'none', $user2); set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'none', $user2);
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -420,7 +429,8 @@ class core_messagelib_testcase extends advanced_testcase {
$CFG->messaging = 0; $CFG->messaging = 0;
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -447,7 +457,8 @@ class core_messagelib_testcase extends advanced_testcase {
$CFG->messaging = 1; $CFG->messaging = 1;
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -474,7 +485,8 @@ class core_messagelib_testcase extends advanced_testcase {
set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'email', $user2); set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'email', $user2);
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -504,7 +516,8 @@ class core_messagelib_testcase extends advanced_testcase {
set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'email', $user2); set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'email', $user2);
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -537,7 +550,8 @@ class core_messagelib_testcase extends advanced_testcase {
set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'email,popup', $user2); set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'email,popup', $user2);
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -570,7 +584,8 @@ class core_messagelib_testcase extends advanced_testcase {
set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'popup', $user2); set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'popup', $user2);
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -604,7 +619,8 @@ class core_messagelib_testcase extends advanced_testcase {
set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'none', $user2); set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'none', $user2);
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -635,7 +651,8 @@ class core_messagelib_testcase extends advanced_testcase {
set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'email', $user2); set_user_preference('message_provider_moodle_instantmessage_loggedoff', 'email', $user2);
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -716,7 +733,8 @@ class core_messagelib_testcase extends advanced_testcase {
$user1 = $this->getDataGenerator()->create_user(); $user1 = $this->getDataGenerator()->create_user();
$user2 = $this->getDataGenerator()->create_user(); $user2 = $this->getDataGenerator()->create_user();
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -778,7 +796,8 @@ class core_messagelib_testcase extends advanced_testcase {
$user1 = $this->getDataGenerator()->create_user(); $user1 = $this->getDataGenerator()->create_user();
$user2 = $this->getDataGenerator()->create_user(); $user2 = $this->getDataGenerator()->create_user();
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = $user1; $message->userfrom = $user1;
@ -835,7 +854,8 @@ class core_messagelib_testcase extends advanced_testcase {
); );
$file = $fs->create_file_from_string($filerecord, 'Test content'); $file = $fs->create_file_from_string($filerecord, 'Test content');
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = 1;
$message->component = 'moodle'; $message->component = 'moodle';
$message->name = 'instantmessage'; $message->name = 'instantmessage';
$message->userfrom = get_admin(); $message->userfrom = get_admin();

View file

@ -119,6 +119,8 @@ information provided here is intended especially for developers.
* Webservice function mod_assign_get_submissions returns a new field 'gradingstatus' from each submission. * Webservice function mod_assign_get_submissions returns a new field 'gradingstatus' from each submission.
* The return signature for the antivirus::scan_file() function has changed. * The return signature for the antivirus::scan_file() function has changed.
The calling function will now handle removal of infected files from Moodle based on the new integer return value. The calling function will now handle removal of infected files from Moodle based on the new integer return value.
* The first parameter $eventdata of \core\manager::send_message() should be \core\message. usage of \stdClass is depecated.
* message_sent::create_from_ids has an additional required parameter $courseid with a default value of SITEID.
=== 3.1 === === 3.1 ===

View file

@ -830,7 +830,8 @@ function message_format_contexturl($message) {
function message_post_message($userfrom, $userto, $message, $format) { function message_post_message($userfrom, $userto, $message, $format) {
global $SITE, $CFG, $USER; global $SITE, $CFG, $USER;
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = 1;
$eventdata->component = 'moodle'; $eventdata->component = 'moodle';
$eventdata->name = 'instantmessage'; $eventdata->name = 'instantmessage';
$eventdata->userfrom = $userfrom; $eventdata->userfrom = $userfrom;

View file

@ -201,7 +201,8 @@ class core_message_events_testcase extends advanced_testcase {
'context' => context_system::instance(), 'context' => context_system::instance(),
'relateduserid' => 2, 'relateduserid' => 2,
'other' => array( 'other' => array(
'messageid' => 3 'messageid' => 3,
'courseid' => 1
) )
)); ));

View file

@ -492,7 +492,8 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
// We are creating fake notifications but based on real ones. // We are creating fake notifications but based on real ones.
// This one omits notification = 1. // This one omits notification = 1.
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = $course->id;
$eventdata->modulename = 'moodle'; $eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_paypal'; $eventdata->component = 'enrol_paypal';
$eventdata->name = 'paypal_enrolment'; $eventdata->name = 'paypal_enrolment';
@ -505,7 +506,8 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
$eventdata->smallmessage = ''; $eventdata->smallmessage = '';
message_send($eventdata); message_send($eventdata);
$message = new stdClass(); $message = new \core\message\message();
$message->courseid = $course->id;
$message->notification = 1; $message->notification = 1;
$message->component = 'enrol_manual'; $message->component = 'enrol_manual';
$message->name = 'expiry_notification'; $message->name = 'expiry_notification';
@ -522,7 +524,6 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
$userfrom = core_user::get_noreply_user(); $userfrom = core_user::get_noreply_user();
$userfrom->maildisplay = true; $userfrom->maildisplay = true;
$eventdata = new stdClass();
$eventdata->component = 'moodle'; $eventdata->component = 'moodle';
$eventdata->name = 'badgecreatornotice'; $eventdata->name = 'badgecreatornotice';
$eventdata->userfrom = $userfrom; $eventdata->userfrom = $userfrom;
@ -535,7 +536,8 @@ class core_message_externallib_testcase extends externallib_advanced_testcase {
$eventdata->smallmessage = $eventdata->subject; $eventdata->smallmessage = $eventdata->subject;
message_send($eventdata); message_send($eventdata);
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = $course->id;
$eventdata->name = 'submission'; $eventdata->name = 'submission';
$eventdata->component = 'mod_feedback'; $eventdata->component = 'mod_feedback';
$eventdata->userfrom = $user1; $eventdata->userfrom = $user1;

View file

@ -5475,7 +5475,8 @@ class assign {
$assignmentname); $assignmentname);
} }
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = $course->id;
$eventdata->modulename = 'assign'; $eventdata->modulename = 'assign';
$eventdata->userfrom = $userfrom; $eventdata->userfrom = $userfrom;
$eventdata->userto = $userto; $eventdata->userto = $userto;

View file

@ -1246,6 +1246,39 @@ class mod_assign_locallib_testcase extends mod_assign_base_testcase {
$this->assertEquals($assign->get_instance()->name, $messages[0]->contexturlname); $this->assertEquals($assign->get_instance()->name, $messages[0]->contexturlname);
} }
public function test_cron_message_includes_courseid() {
// First run cron so there are no messages waiting to be sent (from other tests).
cron_setup_user();
assign::cron();
// Now create an assignment.
$this->setUser($this->editingteachers[0]);
$assign = $this->create_instance(array('sendstudentnotifications' => 1));
// Simulate adding a grade.
$this->setUser($this->teachers[0]);
$data = new stdClass();
$data->grade = '50.0';
$assign->testable_apply_grade_to_user($data, $this->students[0]->id, 0);
$this->preventResetByRollback();
$sink = $this->redirectEvents();
assign::cron();
$events = $sink->get_events();
// Two messages are sent, one to student and one to teacher. This generates
// four events:
// core\event\message_sent
// core\event\message_viewed
// core\event\message_sent
// core\event\message_viewed.
$event = reset($events);
$this->assertInstanceOf('\core\event\message_sent', $event);
$this->assertEquals($assign->get_course()->id, $event->other['courseid']);
$sink->close();
}
public function test_is_graded() { public function test_is_graded() {
$this->setUser($this->editingteachers[0]); $this->setUser($this->editingteachers[0]);
$assign = $this->create_instance(); $assign = $this->create_instance();

View file

@ -3027,7 +3027,8 @@ function feedback_send_email($cm, $feedback, $course, $user) {
} }
if ($feedback->anonymous == FEEDBACK_ANONYMOUS_NO) { if ($feedback->anonymous == FEEDBACK_ANONYMOUS_NO) {
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = $course->id;
$eventdata->name = 'submission'; $eventdata->name = 'submission';
$eventdata->component = 'mod_feedback'; $eventdata->component = 'mod_feedback';
$eventdata->userfrom = $user; $eventdata->userfrom = $user;
@ -3036,10 +3037,14 @@ function feedback_send_email($cm, $feedback, $course, $user) {
$eventdata->fullmessage = $posttext; $eventdata->fullmessage = $posttext;
$eventdata->fullmessageformat = FORMAT_PLAIN; $eventdata->fullmessageformat = FORMAT_PLAIN;
$eventdata->fullmessagehtml = $posthtml; $eventdata->fullmessagehtml = $posthtml;
$eventdata->smallmessage = ''; $eventdata->smallmessage = $postsubject;
$eventdata->courseid = $course->id;
$eventdata->contexturl = $info->url;
$eventdata->contexturlname = $info->feedback;
message_send($eventdata); message_send($eventdata);
} else { } else {
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = $course->id;
$eventdata->name = 'submission'; $eventdata->name = 'submission';
$eventdata->component = 'mod_feedback'; $eventdata->component = 'mod_feedback';
$eventdata->userfrom = $teacher; $eventdata->userfrom = $teacher;
@ -3048,7 +3053,10 @@ function feedback_send_email($cm, $feedback, $course, $user) {
$eventdata->fullmessage = $posttext; $eventdata->fullmessage = $posttext;
$eventdata->fullmessageformat = FORMAT_PLAIN; $eventdata->fullmessageformat = FORMAT_PLAIN;
$eventdata->fullmessagehtml = $posthtml; $eventdata->fullmessagehtml = $posthtml;
$eventdata->smallmessage = ''; $eventdata->smallmessage = $postsubject;
$eventdata->courseid = $course->id;
$eventdata->contexturl = $info->url;
$eventdata->contexturlname = $info->feedback;
message_send($eventdata); message_send($eventdata);
} }
} }
@ -3097,7 +3105,8 @@ function feedback_send_email_anonym($cm, $feedback, $course) {
$posthtml = ''; $posthtml = '';
} }
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = $course->id;
$eventdata->name = 'submission'; $eventdata->name = 'submission';
$eventdata->component = 'mod_feedback'; $eventdata->component = 'mod_feedback';
$eventdata->userfrom = $teacher; $eventdata->userfrom = $teacher;
@ -3106,7 +3115,10 @@ function feedback_send_email_anonym($cm, $feedback, $course) {
$eventdata->fullmessage = $posttext; $eventdata->fullmessage = $posttext;
$eventdata->fullmessageformat = FORMAT_PLAIN; $eventdata->fullmessageformat = FORMAT_PLAIN;
$eventdata->fullmessagehtml = $posthtml; $eventdata->fullmessagehtml = $posthtml;
$eventdata->smallmessage = ''; $eventdata->smallmessage = $postsubject;
$eventdata->courseid = $course->id;
$eventdata->contexturl = $info->url;
$eventdata->contexturlname = $info->feedback;
message_send($eventdata); message_send($eventdata);
} }
} }

View file

@ -97,7 +97,8 @@ if ($action == 'sendmessage' AND has_capability('moodle/course:bulkmessaging', $
if (is_array($messageuser)) { if (is_array($messageuser)) {
foreach ($messageuser as $userid) { foreach ($messageuser as $userid) {
$senduser = $DB->get_record('user', array('id'=>$userid)); $senduser = $DB->get_record('user', array('id'=>$userid));
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = $course->id;
$eventdata->name = 'message'; $eventdata->name = 'message';
$eventdata->component = 'mod_feedback'; $eventdata->component = 'mod_feedback';
$eventdata->userfrom = $USER; $eventdata->userfrom = $USER;
@ -106,7 +107,10 @@ if ($action == 'sendmessage' AND has_capability('moodle/course:bulkmessaging', $
$eventdata->fullmessage = html_to_text($htmlmessage); $eventdata->fullmessage = html_to_text($htmlmessage);
$eventdata->fullmessageformat = FORMAT_PLAIN; $eventdata->fullmessageformat = FORMAT_PLAIN;
$eventdata->fullmessagehtml = $htmlmessage; $eventdata->fullmessagehtml = $htmlmessage;
$eventdata->smallmessage = ''; $eventdata->smallmessage = $subject;
$eventdata->courseid = $course->id;
$eventdata->contexturl = $link3;
$eventdata->contexturlname = $feedback->name;
$good = $good && message_send($eventdata); $good = $good && message_send($eventdata);
} }
if (!empty($good)) { if (!empty($good)) {

View file

@ -834,6 +834,7 @@ function forum_cron() {
mtrace('Sending ', ''); mtrace('Sending ', '');
$eventdata = new \core\message\message(); $eventdata = new \core\message\message();
$eventdata->courseid = $course->id;
$eventdata->component = 'mod_forum'; $eventdata->component = 'mod_forum';
$eventdata->name = 'posts'; $eventdata->name = 'posts';
$eventdata->userfrom = $userfrom; $eventdata->userfrom = $userfrom;

View file

@ -252,6 +252,42 @@ class mod_forum_mail_testcase extends advanced_testcase {
return $messages; return $messages;
} }
public function test_cron_message_includes_courseid() {
$this->resetAfterTest(true);
// Create a course, with a forum.
$course = $this->getDataGenerator()->create_course();
$options = array('course' => $course->id, 'forcesubscribe' => FORUM_FORCESUBSCRIBE);
$forum = $this->getDataGenerator()->create_module('forum', $options);
// Create two users enrolled in the course as students.
list($author, $recipient) = $this->helper_create_users($course, 2);
// Post a discussion to the forum.
list($discussion, $post) = $this->helper_post_to_forum($forum, $author);
// Run cron and check that \core\event\message_sent contains the course id.
// Close the message sink so that message_send is run.
$this->helper->messagesink->close();
// Catch just the cron events. For each message sent two events are fired:
// core\event\message_sent
// core\event\message_viewed.
$this->helper->eventsink = $this->redirectEvents();
forum_cron();
// Get the events and close the sink so that remaining events can be triggered.
$events = $this->helper->eventsink->get_events();
$this->helper->eventsink->close();
// Reset the message sink for other tests.
$this->helper->messagesink = $this->redirectMessages();
$event = reset($events);
$this->assertEquals($course->id, $event->other['courseid']);
}
public function test_forced_subscription() { public function test_forced_subscription() {
$this->resetAfterTest(true); $this->resetAfterTest(true);

View file

@ -257,13 +257,21 @@ switch ($mode) {
$a->lesson = format_string($lesson->name, true); $a->lesson = format_string($lesson->name, true);
// Fetch message HTML and plain text formats // Fetch message HTML and plain text formats
$b = new stdClass();
$b->essay = format_string($pages[$attempt->pageid]->title, true);
$b->lesson = $lesson->properties()->name;
$b->course = $course->idnumber ? $course->idnumber : $course->fullname;
$message = get_string('essayemailmessage2', 'lesson', $a); $message = get_string('essayemailmessage2', 'lesson', $a);
$plaintext = format_text_email($message, FORMAT_HTML); $plaintext = format_text_email($message, FORMAT_HTML);
// Subject // Subject
$subject = get_string('essayemailsubject', 'lesson'); $subject = get_string('essayemailsubject', 'lesson');
$eventdata = new stdClass(); // Context url.
$contexturl = new moodle_url('/grade/report/user/index.php', array('id' => $course->id));
$eventdata = new \core\message\message();
$eventdata->courseid = $course->id;
$eventdata->modulename = 'lesson'; $eventdata->modulename = 'lesson';
$eventdata->userfrom = $USER; $eventdata->userfrom = $USER;
$eventdata->userto = $users[$attempt->userid]; $eventdata->userto = $users[$attempt->userid];
@ -271,7 +279,8 @@ switch ($mode) {
$eventdata->fullmessage = $plaintext; $eventdata->fullmessage = $plaintext;
$eventdata->fullmessageformat = FORMAT_PLAIN; $eventdata->fullmessageformat = FORMAT_PLAIN;
$eventdata->fullmessagehtml = $message; $eventdata->fullmessagehtml = $message;
$eventdata->smallmessage = ''; $eventdata->smallmessage = $smallmessage;
$eventdata->contexturl = $contexturl;
// Required for messaging framework // Required for messaging framework
$eventdata->component = 'mod_lesson'; $eventdata->component = 'mod_lesson';

View file

@ -178,6 +178,7 @@ $string['eolstudentoutoftime'] = 'Attention: You ran out of time for this lesso
$string['eolstudentoutoftimenoanswers'] = 'You did not answer any questions. You have received a 0 for this lesson.'; $string['eolstudentoutoftimenoanswers'] = 'You did not answer any questions. You have received a 0 for this lesson.';
$string['essay'] = 'Essay'; $string['essay'] = 'Essay';
$string['essayemailmessage2'] = '<p>Essay prompt: {$a->question}</p><p>Your response: <em>{$a->response}</em></p><p>Grader\'s comments: <em>{$a->comment}</em></p><p>You have received {$a->earned} out of {$a->outof} for this essay question.</p><p>Your grade for the {$a->lesson} lesson has been changed to {$a->newgrade}&#37;.</p>'; $string['essayemailmessage2'] = '<p>Essay prompt: {$a->question}</p><p>Your response: <em>{$a->response}</em></p><p>Grader\'s comments: <em>{$a->comment}</em></p><p>You have received {$a->earned} out of {$a->outof} for this essay question.</p><p>Your grade for the {$a->lesson} lesson has been changed to {$a->newgrade}&#37;.</p>';
$string['essayemailmessage3'] = 'Your submission to {$a->lesson} essay {$a->essay} in {$a->course} has been graded.';
$string['essayemailsubject'] = 'Grade available for lesson question'; $string['essayemailsubject'] = 'Grade available for lesson question';
$string['essayresponses'] = 'Essay responses'; $string['essayresponses'] = 'Essay responses';
$string['essays'] = 'Essays'; $string['essays'] = 'Essays';

View file

@ -1487,7 +1487,8 @@ function quiz_send_confirmation($recipient, $a) {
$a->userusername = $recipient->username; $a->userusername = $recipient->username;
// Prepare the message. // Prepare the message.
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = $a->courseid;
$eventdata->component = 'mod_quiz'; $eventdata->component = 'mod_quiz';
$eventdata->name = 'confirmation'; $eventdata->name = 'confirmation';
$eventdata->notification = 1; $eventdata->notification = 1;
@ -1523,7 +1524,8 @@ function quiz_send_notification($recipient, $submitter, $a) {
$a->userusername = $recipient->username; $a->userusername = $recipient->username;
// Prepare the message. // Prepare the message.
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = $a->courseid;
$eventdata->component = 'mod_quiz'; $eventdata->component = 'mod_quiz';
$eventdata->name = 'submission'; $eventdata->name = 'submission';
$eventdata->notification = 1; $eventdata->notification = 1;
@ -1596,6 +1598,7 @@ function quiz_send_notification_messages($course, $quiz, $attempt, $context, $cm
$a = new stdClass(); $a = new stdClass();
// Course info. // Course info.
$a->courseid = $course->id;
$a->coursename = $course->fullname; $a->coursename = $course->fullname;
$a->courseshortname = $course->shortname; $a->courseshortname = $course->shortname;
// Quiz info. // Quiz info.
@ -1670,6 +1673,7 @@ function quiz_send_overdue_message($attemptobj) {
$a = new stdClass(); $a = new stdClass();
// Course info. // Course info.
$a->courseid = $attemptobj->get_course()->id;
$a->coursename = format_string($attemptobj->get_course()->fullname); $a->coursename = format_string($attemptobj->get_course()->fullname);
$a->courseshortname = format_string($attemptobj->get_course()->shortname); $a->courseshortname = format_string($attemptobj->get_course()->shortname);
// Quiz info. // Quiz info.
@ -1687,7 +1691,8 @@ function quiz_send_overdue_message($attemptobj) {
$a->studentusername = $submitter->username; $a->studentusername = $submitter->username;
// Prepare the message. // Prepare the message.
$eventdata = new stdClass(); $eventdata = new \core\message\message();
$eventdata->courseid = $a->courseid;
$eventdata->component = 'mod_quiz'; $eventdata->component = 'mod_quiz';
$eventdata->name = 'attempt_overdue'; $eventdata->name = 'attempt_overdue';
$eventdata->notification = 1; $eventdata->notification = 1;