Skip to content

Commit

Permalink
MDL-47162 core_message: Add course id to message eventdata
Browse files Browse the repository at this point in the history
  • Loading branch information
amandadoughty authored and stronk7 committed Oct 27, 2016
1 parent 577bd70 commit cc350fd
Show file tree
Hide file tree
Showing 34 changed files with 345 additions and 76 deletions.
6 changes: 3 additions & 3 deletions admin/tool/messageinbound/classes/manager.php
Expand Up @@ -920,7 +920,7 @@ private function handle_verification_failure(
$addressmanager->set_handler('\tool_messageinbound\message\inbound\invalid_recipient_handler');
$addressmanager->set_data($record->id);

$eventdata = new \stdClass();
$eventdata = new \core\message\message();
$eventdata->component = 'tool_messageinbound';
$eventdata->name = 'invalidrecipienthandler';

Expand Down Expand Up @@ -970,7 +970,7 @@ private function inform_user_of_error($error) {
$messagedata->subject = $this->currentmessagedata->envelope->subject;
$messagedata->error = $error;

$eventdata = new \stdClass();
$eventdata = new \core\message\message();
$eventdata->component = 'tool_messageinbound';
$eventdata->name = 'messageprocessingerror';
$eventdata->userfrom = $userfrom;
Expand Down Expand Up @@ -1029,7 +1029,7 @@ private function inform_user_of_success(\stdClass $messagedata, $handlerresult)
$messagedata = new \stdClass();
$messagedata->subject = $this->currentmessagedata->envelope->subject;

$eventdata = new \stdClass();
$eventdata = new \core\message\message();
$eventdata->component = 'tool_messageinbound';
$eventdata->name = 'messageprocessingsuccess';
$eventdata->userfrom = $userfrom;
Expand Down
2 changes: 1 addition & 1 deletion admin/tool/monitor/classes/notification_task.php
Expand Up @@ -83,7 +83,7 @@ protected function generate_message($subscriptionid, \stdClass $eventobj) {
$template = $subscription->template;
$template = $this->replace_placeholders($template, $subscription, $eventobj, $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->name = 'notification'; // This is the message name from messages.php.
$msgdata->userfrom = \core_user::get_noreply_user();
Expand Down
2 changes: 1 addition & 1 deletion backup/util/helper/backup_cron_helper.class.php
Expand Up @@ -264,7 +264,7 @@ public static function run_automated_backup($rundirective = self::RUN_ON_SCHEDUL
$subject = $prefix.get_string('automatedbackupstatus', 'backup');

//Send the message
$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->modulename = 'moodle';
$eventdata->userfrom = $admin;
$eventdata->userto = $admin;
Expand Down
2 changes: 1 addition & 1 deletion badges/cron.php
Expand Up @@ -140,7 +140,7 @@ function badge_assemble_notification(stdClass $badge) {
}

// Create a message object.
$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->component = 'moodle';
$eventdata->name = 'badgecreatornotice';
$eventdata->userfrom = $userfrom;
Expand Down
2 changes: 2 additions & 0 deletions competency/lib.php
Expand Up @@ -116,6 +116,7 @@ function core_competency_comment_add($comment, $params) {
}

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

$message = new \core\message\message();
$message->courseid = SITEID;
$message->component = 'moodle';
$message->name = 'competencyplancomment';
$message->notification = 1;
Expand Down
2 changes: 1 addition & 1 deletion course/lib.php
Expand Up @@ -2674,7 +2674,7 @@ public function delete() {
* @param string $message
*/
protected function notify($touser, $fromuser, $name='courserequested', $subject, $message) {
$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->component = 'moodle';
$eventdata->name = $name;
$eventdata->userfrom = $fromuser;
Expand Down
8 changes: 4 additions & 4 deletions enrol/flatfile/lib.php
Expand Up @@ -186,7 +186,7 @@ public function sync(progress_trace $trace) {

if ($processed and $mailadmins) {
if ($log = $buffer->get_buffer()) {
$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_flatfile';
$eventdata->name = 'flatfile_enrolment';
Expand Down Expand Up @@ -340,7 +340,7 @@ protected function process_file(progress_trace $trace) {
}

if (!unlink($filelocation)) {
$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_flatfile';
$eventdata->name = 'flatfile_enrolment';
Expand Down Expand Up @@ -463,7 +463,7 @@ protected function process_records(progress_trace $trace, $action, $roleid, $use
$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)));

$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_flatfile';
$eventdata->name = 'flatfile_enrolment';
Expand Down Expand Up @@ -494,7 +494,7 @@ protected function process_records(progress_trace $trace, $action, $roleid, $use
$a->user = fullname($user);
$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->component = 'enrol_flatfile';
$eventdata->name = 'flatfile_enrolment';
Expand Down
2 changes: 1 addition & 1 deletion enrol/imsenterprise/lib.php
Expand Up @@ -222,7 +222,7 @@ public function cron() {
$msg .= "Logging is currently not active.";
}

$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_imsenterprise';
$eventdata->name = 'imsenterprise_enrolment';
Expand Down
54 changes: 50 additions & 4 deletions enrol/paypal/ipn.php
Expand Up @@ -152,7 +152,7 @@
// Email user to let them know. Email admin.

if ($data->payment_status == "Pending" and $data->pending_reason != "echeck") {
$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_paypal';
$eventdata->name = 'paypal_enrolment';
Expand Down Expand Up @@ -259,7 +259,7 @@
$a->coursename = format_string($course->fullname, true, array('context' => $coursecontext));
$a->profileurl = "$CFG->wwwroot/user/view.php?id=$user->id";

$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_paypal';
$eventdata->name = 'paypal_enrolment';
Expand All @@ -278,7 +278,7 @@
$a->course = format_string($course->fullname, true, array('context' => $coursecontext));
$a->user = fullname($user);

$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_paypal';
$eventdata->name = 'paypal_enrolment';
Expand All @@ -297,7 +297,7 @@
$a->user = fullname($user);
$admins = get_admins();
foreach ($admins as $admin) {
$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->modulename = 'moodle';
$eventdata->component = 'enrol_paypal';
$eventdata->name = 'paypal_enrolment';
Expand All @@ -320,3 +320,49 @@

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);
}
6 changes: 4 additions & 2 deletions lib/badgeslib.php
Expand Up @@ -722,7 +722,8 @@ function badges_notify_badge_award(badge $badge, $userid, $issued, $filepathhash
$plaintext = html_to_text($message);

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

$eventdata = new stdClass();
$eventdata = new \core\message\message();
$eventdata->courseid = $badge->courseid;
$eventdata->component = 'moodle';
$eventdata->name = 'badgecreatornotice';
$eventdata->userfrom = $userfrom;
Expand Down
2 changes: 1 addition & 1 deletion lib/classes/antivirus/scanner.php
Expand Up @@ -122,7 +122,7 @@ public function message_admins($notice) {
$subject = get_string('emailsubject', 'antivirus', format_string($site->fullname));
$admins = get_admins();
foreach ($admins as $admin) {
$eventdata = new \stdClass();
$eventdata = new \core\message\message();
$eventdata->component = 'moodle';
$eventdata->name = 'errors';
$eventdata->userfrom = get_admin();
Expand Down
16 changes: 14 additions & 2 deletions lib/classes/event/message_sent.php
Expand Up @@ -33,6 +33,7 @@
* Extra information about event.
*
* - int messageid: the id of the message.
* - int courseid: the id of the related course.
* }
*
* @package core
Expand All @@ -46,16 +47,21 @@ class message_sent extends base {
* @param int $userfromid
* @param int $usertoid
* @param int $messageid
* @param int|null $courseid
* @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
// message from a valid user. In this case, we will set the userid to 0.
// Check if the userid is valid.
if (!\core_user::is_real_user($userfromid)) {
$userfromid = 0;
}

if (is_null($courseid)) {
$courseid = SITEID;
}

$event = self::create(array(
'userid' => $userfromid,
'context' => \context_system::instance(),
Expand All @@ -64,7 +70,8 @@ public static function create_from_ids($userfromid, $usertoid, $messageid) {
// 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
// to the 'message_read' table later when message marked as read.
'messageid' => $messageid
'messageid' => $messageid,
'courseid' => $courseid
)
));

Expand Down Expand Up @@ -143,6 +150,10 @@ protected function validate_data() {
if (!isset($this->other['messageid'])) {
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() {
Expand All @@ -155,6 +166,7 @@ public static function get_other_mapping() {
$othermapped = array();
// The messages table could vary for older events - so cannot be 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;
}
}
24 changes: 21 additions & 3 deletions lib/classes/message/manager.php
Expand Up @@ -50,7 +50,7 @@ class manager {
*
* 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 array $processorlist list of processors for target user
* @return int $messageid the id from 'message' or 'message_read' table (false is not returned)
Expand All @@ -63,11 +63,24 @@ public static function send_message($eventdata, \stdClass $savemessage, array $p
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.

if (empty($processorlist)) {
// 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 they have deselected all processors and its a notification mark it read. The user doesn't want to be bothered.
Expand Down Expand Up @@ -132,7 +145,12 @@ protected static function send_message_to_processors($eventdata, \stdClass $save
}

// 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 messaging is disabled and they previously had forum notifications handled by the popup processor
Expand Down
33 changes: 30 additions & 3 deletions lib/classes/message/message.php
Expand Up @@ -56,6 +56,12 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class message {
/** @var int Course id. */
private $courseid;

/** @var string Module name. */
private $modulename;

/** @var string Component name. */
private $component;

Expand Down Expand Up @@ -104,10 +110,31 @@ class message {
/** @var string Name of the attachment. Note:- not all processors support this.*/
private $attachname;

/** @var int The time the message was created.*/
private $timecreated;

/** @var array a list of properties that is allowed for each message. */
private $properties = array('component', 'name', 'userfrom', 'userto', 'subject', 'fullmessage', 'fullmessageformat',
'fullmessagehtml', 'smallmessage', 'notification', 'contexturl', 'contexturlname', 'savedmessageid',
'replyto', 'attachment', 'attachname');
private $properties = array(
'courseid',
'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 */
private $additionalcontent = array();
Expand Down

0 comments on commit cc350fd

Please sign in to comment.