mirror of
https://github.com/moodle/moodle.git
synced 2025-08-04 16:36:37 +02:00
MDL-47162 core_message: debug whenever courseid is missing
Instead of silently defaulting to SITEID when courseid (coming from message_send()/\core\message\manager::send_message()) is missing, now a debugging message is shown to allow developers to fix their messages to, always, include courseid. Raw creation of events via message_sent::create() missing other[courseid] leads to coding exception since now (there shouldn't be any legacy use, as far as they are always created via create_from_ids() when sending a message. Updated upgrade.txt notes a little bit, added references the 3.6 final deprecation issue (MDL-55449) and covered with unit tests.
This commit is contained in:
parent
9d0e8a4f6d
commit
a29bcf7819
5 changed files with 78 additions and 5 deletions
|
@ -44,10 +44,11 @@ defined('MOODLE_INTERNAL') || die();
|
||||||
class message_sent extends base {
|
class message_sent extends base {
|
||||||
/**
|
/**
|
||||||
* Create event using ids.
|
* Create event using ids.
|
||||||
|
* @todo MDL-55449 Make $courseid mandatory in Moodle 3.6
|
||||||
* @param int $userfromid
|
* @param int $userfromid
|
||||||
* @param int $usertoid
|
* @param int $usertoid
|
||||||
* @param int $messageid
|
* @param int $messageid
|
||||||
* @param int|null $courseid
|
* @param int|null $courseid course id the event is related with. Use SITEID if no relation exists.
|
||||||
* @return message_sent
|
* @return message_sent
|
||||||
*/
|
*/
|
||||||
public static function create_from_ids($userfromid, $usertoid, $messageid, $courseid = null) {
|
public static function create_from_ids($userfromid, $usertoid, $messageid, $courseid = null) {
|
||||||
|
@ -58,8 +59,13 @@ class message_sent extends base {
|
||||||
$userfromid = 0;
|
$userfromid = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: MDL-55449 Make $courseid mandatory in Moodle 3.6.
|
||||||
if (is_null($courseid)) {
|
if (is_null($courseid)) {
|
||||||
|
// Arrived here with not defined $courseid to associate the event with.
|
||||||
|
// Let's default to SITEID and perform debugging so devs are aware. MDL-47162.
|
||||||
$courseid = SITEID;
|
$courseid = SITEID;
|
||||||
|
debugging('message_sent::create_from_ids() needs a $courseid to be passed, nothing was detected. Please, change ' .
|
||||||
|
'the call to include it, using SITEID if the message is unrelated to any real course.', DEBUG_DEVELOPER);
|
||||||
}
|
}
|
||||||
|
|
||||||
$event = self::create(array(
|
$event = self::create(array(
|
||||||
|
@ -152,7 +158,7 @@ class message_sent extends base {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($this->other['courseid'])) {
|
if (!isset($this->other['courseid'])) {
|
||||||
debugging('The \'courseid\' value must be set in other.', DEBUG_DEVELOPER);
|
throw new \coding_exception('The \'courseid\' value must be set in other.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,7 @@ class manager {
|
||||||
*
|
*
|
||||||
* NOTE: to be used from message_send() only.
|
* NOTE: to be used from message_send() only.
|
||||||
*
|
*
|
||||||
|
* @todo MDL-55449 Drop support for stdClass in Moodle 3.6
|
||||||
* @param \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
|
||||||
|
@ -58,11 +59,13 @@ class manager {
|
||||||
public static function send_message($eventdata, \stdClass $savemessage, array $processorlist) {
|
public static function send_message($eventdata, \stdClass $savemessage, array $processorlist) {
|
||||||
global $CFG;
|
global $CFG;
|
||||||
|
|
||||||
|
// TODO MDL-55449 Drop support for stdClass in Moodle 3.6.
|
||||||
if (!($eventdata instanceof \stdClass) && !($eventdata instanceof message)) {
|
if (!($eventdata instanceof \stdClass) && !($eventdata instanceof message)) {
|
||||||
// Not a valid object.
|
// Not a valid object.
|
||||||
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');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO MDL-55449 Drop support for stdClass in Moodle 3.6.
|
||||||
if ($eventdata instanceof \stdClass) {
|
if ($eventdata instanceof \stdClass) {
|
||||||
if (!isset($eventdata->courseid)) {
|
if (!isset($eventdata->courseid)) {
|
||||||
$eventdata->courseid = null;
|
$eventdata->courseid = null;
|
||||||
|
|
|
@ -50,6 +50,7 @@ require_once(__DIR__ . '/../message/lib.php');
|
||||||
* Note: processor failure is is not reported as false return value,
|
* Note: processor failure is is not reported as false return value,
|
||||||
* earlier versions did not do it consistently either.
|
* earlier versions did not do it consistently either.
|
||||||
*
|
*
|
||||||
|
* @todo MDL-55449 Drop support for stdClass in Moodle 3.6
|
||||||
* @category message
|
* @category message
|
||||||
* @param \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
|
||||||
|
@ -57,6 +58,7 @@ require_once(__DIR__ . '/../message/lib.php');
|
||||||
function message_send($eventdata) {
|
function message_send($eventdata) {
|
||||||
global $CFG, $DB;
|
global $CFG, $DB;
|
||||||
|
|
||||||
|
// TODO MDL-55449 Drop support for stdClass in Moodle 3.6.
|
||||||
if ($eventdata instanceof \stdClass) {
|
if ($eventdata instanceof \stdClass) {
|
||||||
if (!isset($eventdata->courseid)) {
|
if (!isset($eventdata->courseid)) {
|
||||||
$eventdata->courseid = null;
|
$eventdata->courseid = null;
|
||||||
|
|
|
@ -119,8 +119,12 @@ 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. Use of \stdClass is depecated.
|
* The first parameter $eventdata of both message_send() and \core\message\manager::send_message() should
|
||||||
* message_sent::create_from_ids has an additional required parameter $courseid with a default value of SITEID.
|
be \core\message\message. Use of stdClass is deprecated.
|
||||||
|
* The message_sent event now expects other[courseid] to be always set, exception otherwise. For BC with contrib code,
|
||||||
|
message_sent::create_from_ids() will show a debugging notice if the \core\message\message being sent is missing
|
||||||
|
the courseid property, defaulting to SITEID automatically. In Moodle 3.6 (MDL-55449) courseid will be fully mandatory
|
||||||
|
for all messages sent.
|
||||||
|
|
||||||
=== 3.1 ===
|
=== 3.1 ===
|
||||||
|
|
||||||
|
|
|
@ -202,7 +202,7 @@ class core_message_events_testcase extends advanced_testcase {
|
||||||
'relateduserid' => 2,
|
'relateduserid' => 2,
|
||||||
'other' => array(
|
'other' => array(
|
||||||
'messageid' => 3,
|
'messageid' => 3,
|
||||||
'courseid' => 1
|
'courseid' => 4
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
|
|
||||||
|
@ -219,8 +219,66 @@ class core_message_events_testcase extends advanced_testcase {
|
||||||
$this->assertEventLegacyLogData($expected, $event);
|
$this->assertEventLegacyLogData($expected, $event);
|
||||||
$url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
|
$url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
|
||||||
$this->assertEquals($url, $event->get_url());
|
$this->assertEquals($url, $event->get_url());
|
||||||
|
$this->assertEquals(3, $event->other['messageid']);
|
||||||
|
$this->assertEquals(4, $event->other['courseid']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_mesage_sent_without_other_courseid() {
|
||||||
|
|
||||||
|
// Creating a message_sent event without other[courseid] leads to exception.
|
||||||
|
$this->expectException('coding_exception');
|
||||||
|
$this->expectExceptionMessage('The \'courseid\' value must be set in other');
|
||||||
|
|
||||||
|
$event = \core\event\message_sent::create(array(
|
||||||
|
'userid' => 1,
|
||||||
|
'context' => context_system::instance(),
|
||||||
|
'relateduserid' => 2,
|
||||||
|
'other' => array(
|
||||||
|
'messageid' => 3,
|
||||||
|
)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_mesage_sent_via_create_from_ids() {
|
||||||
|
// Containing courseid.
|
||||||
|
$event = \core\event\message_sent::create_from_ids(1, 2, 3, 4);
|
||||||
|
|
||||||
|
// Trigger and capturing the event.
|
||||||
|
$sink = $this->redirectEvents();
|
||||||
|
$event->trigger();
|
||||||
|
$events = $sink->get_events();
|
||||||
|
$event = reset($events);
|
||||||
|
|
||||||
|
// Check that the event data is valid.
|
||||||
|
$this->assertInstanceOf('\core\event\message_sent', $event);
|
||||||
|
$this->assertEquals(context_system::instance(), $event->get_context());
|
||||||
|
$expected = array(SITEID, 'message', 'write', 'index.php?user=1&id=2&history=1#m3', 1);
|
||||||
|
$this->assertEventLegacyLogData($expected, $event);
|
||||||
|
$url = new moodle_url('/message/index.php', array('user1' => $event->userid, 'user2' => $event->relateduserid));
|
||||||
|
$this->assertEquals($url, $event->get_url());
|
||||||
|
$this->assertEquals(3, $event->other['messageid']);
|
||||||
|
$this->assertEquals(4, $event->other['courseid']);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function test_mesage_sent_via_create_from_ids_without_other_courseid() {
|
||||||
|
|
||||||
|
// Creating a message_sent event without courseid leads to debugging + SITEID.
|
||||||
|
// TODO: MDL-55449 Ensure this leads to exception instead of debugging in Moodle 3.6.
|
||||||
|
$event = \core\event\message_sent::create_from_ids(1, 2, 3);
|
||||||
|
|
||||||
|
// Trigger and capturing the event.
|
||||||
|
$sink = $this->redirectEvents();
|
||||||
|
$event->trigger();
|
||||||
|
$events = $sink->get_events();
|
||||||
|
$event = reset($events);
|
||||||
|
|
||||||
|
$this->assertDebuggingCalled();
|
||||||
|
$this->assertEquals(SITEID, $event->other['courseid']);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test the message viewed event.
|
* Test the message viewed event.
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue