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

@ -5475,7 +5475,8 @@ class assign {
$assignmentname);
}
$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->courseid = $course->id;
$eventdata->modulename = 'assign';
$eventdata->userfrom = $userfrom;
$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);
}
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() {
$this->setUser($this->editingteachers[0]);
$assign = $this->create_instance();

View file

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

View file

@ -97,7 +97,8 @@ if ($action == 'sendmessage' AND has_capability('moodle/course:bulkmessaging', $
if (is_array($messageuser)) {
foreach ($messageuser as $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->component = 'mod_feedback';
$eventdata->userfrom = $USER;
@ -106,7 +107,10 @@ if ($action == 'sendmessage' AND has_capability('moodle/course:bulkmessaging', $
$eventdata->fullmessage = html_to_text($htmlmessage);
$eventdata->fullmessageformat = FORMAT_PLAIN;
$eventdata->fullmessagehtml = $htmlmessage;
$eventdata->smallmessage = '';
$eventdata->smallmessage = $subject;
$eventdata->courseid = $course->id;
$eventdata->contexturl = $link3;
$eventdata->contexturlname = $feedback->name;
$good = $good && message_send($eventdata);
}
if (!empty($good)) {

View file

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

View file

@ -252,6 +252,42 @@ class mod_forum_mail_testcase extends advanced_testcase {
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() {
$this->resetAfterTest(true);

View file

@ -257,13 +257,21 @@ switch ($mode) {
$a->lesson = format_string($lesson->name, true);
// 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);
$plaintext = format_text_email($message, FORMAT_HTML);
// Subject
$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->userfrom = $USER;
$eventdata->userto = $users[$attempt->userid];
@ -271,7 +279,8 @@ switch ($mode) {
$eventdata->fullmessage = $plaintext;
$eventdata->fullmessageformat = FORMAT_PLAIN;
$eventdata->fullmessagehtml = $message;
$eventdata->smallmessage = '';
$eventdata->smallmessage = $smallmessage;
$eventdata->contexturl = $contexturl;
// Required for messaging framework
$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['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['essayemailmessage3'] = 'Your submission to {$a->lesson} essay {$a->essay} in {$a->course} has been graded.';
$string['essayemailsubject'] = 'Grade available for lesson question';
$string['essayresponses'] = 'Essay responses';
$string['essays'] = 'Essays';

View file

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