diff --git a/mod/chat/backup/moodle2/backup_chat_stepslib.php b/mod/chat/backup/moodle2/backup_chat_stepslib.php index a6372218d39..0c791905067 100644 --- a/mod/chat/backup/moodle2/backup_chat_stepslib.php +++ b/mod/chat/backup/moodle2/backup_chat_stepslib.php @@ -39,10 +39,12 @@ class backup_chat_activity_structure_step extends backup_activity_structure_step // It is not cool to have two tags with same name, so we need to rename message field to message_text. $message->set_source_alias('message', 'message_text'); + // Renamed 'issystem' into 'system', for backward compatibility: 'system' is now a reserved word in MySQL 8.0.3+. + $message->set_source_alias('issystem', 'system'); // Build the tree. $chat->add_child($messages); - $messages->add_child($message); + $messages->add_child($message); // Define sources. $chat->set_source_table('chat', array('id' => backup::VAR_ACTIVITYID)); diff --git a/mod/chat/backup/moodle2/restore_chat_stepslib.php b/mod/chat/backup/moodle2/restore_chat_stepslib.php index 95be95a1053..c4c64dd5e61 100644 --- a/mod/chat/backup/moodle2/restore_chat_stepslib.php +++ b/mod/chat/backup/moodle2/restore_chat_stepslib.php @@ -70,6 +70,7 @@ class restore_chat_activity_structure_step extends restore_activity_structure_st $data->userid = $this->get_mappingid('user', $data->userid); $data->groupid = $this->get_mappingid('group', $data->groupid); $data->message = $data->message_text; + $data->issystem = $data->system; $newitemid = $DB->insert_record('chat_messages', $data); $this->set_mapping('chat_message', $oldid, $newitemid); // Because of decode. diff --git a/mod/chat/chat_ajax.php b/mod/chat/chat_ajax.php index 552f8e82d75..40681f73c2e 100644 --- a/mod/chat/chat_ajax.php +++ b/mod/chat/chat_ajax.php @@ -122,7 +122,7 @@ switch ($action) { foreach ($messages as $n => &$message) { $tmp = new stdClass(); // When somebody enter room, user list will be updated. - if (!empty($message->system)) { + if (!empty($message->issystem)) { $senduserlist = true; } if ($html = chat_format_message_theme($message, $chatuser, $USER, $cm->groupingid, $theme)) { diff --git a/mod/chat/chatd.php b/mod/chat/chatd.php index 7213186bd35..1cfee64ec37 100644 --- a/mod/chat/chatd.php +++ b/mod/chat/chatd.php @@ -342,7 +342,7 @@ EOD; $msg->chatid = $this->sets_info[$sessionid]['chatid']; $msg->userid = $this->sets_info[$sessionid]['userid']; $msg->groupid = $this->sets_info[$sessionid]['groupid']; - $msg->system = 0; + $msg->issystem = 0; $msg->message = 'beep '.$customdata['beep']; $msg->timestamp = time(); @@ -428,7 +428,7 @@ EOD; $msg->chatid = $this->sets_info[$sessionid]['chatid']; $msg->userid = $this->sets_info[$sessionid]['userid']; $msg->groupid = $this->sets_info[$sessionid]['groupid']; - $msg->system = 0; + $msg->issystem = 0; $msg->message = urldecode($customdata['message']); // Have to undo the browser's encoding. $msg->timestamp = time(); @@ -570,7 +570,7 @@ EOD; $msg->chatid = $chatuser->chatid; $msg->userid = $chatuser->userid; $msg->groupid = $chatuser->groupid; - $msg->system = 1; + $msg->issystem = 1; $msg->message = 'enter'; $msg->timestamp = time(); @@ -785,7 +785,7 @@ EOD; $msg->chatid = $info['chatid']; $msg->userid = $info['userid']; $msg->groupid = $info['groupid']; - $msg->system = 1; + $msg->issystem = 1; $msg->message = 'exit'; $msg->timestamp = time(); diff --git a/mod/chat/classes/external.php b/mod/chat/classes/external.php index da2b4b20a91..887c7185ede 100644 --- a/mod/chat/classes/external.php +++ b/mod/chat/classes/external.php @@ -383,7 +383,7 @@ class mod_chat_external extends external_api { $returnedmessages[] = array( 'id' => $message->id, 'userid' => $message->userid, - 'system' => (bool) $message->system, + 'system' => (bool) $message->issystem, 'message' => $messageformatted, 'timestamp' => $message->timestamp, ); diff --git a/mod/chat/db/install.xml b/mod/chat/db/install.xml index e985491cfd3..1e18e4b1a15 100644 --- a/mod/chat/db/install.xml +++ b/mod/chat/db/install.xml @@ -1,5 +1,5 @@ - @@ -30,7 +30,7 @@ - + @@ -50,7 +50,7 @@ - + diff --git a/mod/chat/db/upgrade.php b/mod/chat/db/upgrade.php index d40fd755bc3..9dd1d4c5c07 100644 --- a/mod/chat/db/upgrade.php +++ b/mod/chat/db/upgrade.php @@ -25,7 +25,9 @@ defined('MOODLE_INTERNAL') || die(); function xmldb_chat_upgrade($oldversion) { - global $CFG; + global $CFG, $DB; + + $dbman = $DB->get_manager(); // Moodle v3.1.0 release upgrade line. // Put any upgrade step following this. @@ -39,5 +41,32 @@ function xmldb_chat_upgrade($oldversion) { // Automatically generated Moodle v3.4.0 release upgrade line. // Put any upgrade step following this. + if ($oldversion < 2017111301) { + // Rename field 'system' on table 'chat_messages' as it is a reserved word in MySQL 8+. + $table = new xmldb_table('chat_messages'); + $field = new xmldb_field('system'); + if ($dbman->field_exists($table, $field)) { + $field->set_attributes(XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'groupid'); + // Extend the execution time limit of the script to 2 hours. + upgrade_set_timeout(7200); + // Rename it to 'issystem'. + $dbman->rename_field($table, $field, 'issystem'); + } + + // Rename field 'system' on table 'chat_messages_current' as it is a reserved word in MySQL 8+. + $table = new xmldb_table('chat_messages_current'); + $field = new xmldb_field('system'); + if ($dbman->field_exists($table, $field)) { + $field->set_attributes(XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0', 'groupid'); + // Extend the execution time limit of the script to 5 minutes. + upgrade_set_timeout(300); + // Rename it to 'issystem'. + $dbman->rename_field($table, $field, 'issystem'); + } + + // Savepoint reached. + upgrade_mod_savepoint(true, 2017111301, 'chat'); + } + return true; } diff --git a/mod/chat/lib.php b/mod/chat/lib.php index f16e8a9743f..9bec7032719 100644 --- a/mod/chat/lib.php +++ b/mod/chat/lib.php @@ -723,12 +723,12 @@ function chat_update_chat_times($chatid=0) { * * @param object $chatuser The chat user record. * @param string $messagetext The message to be sent. - * @param bool $system False for non-system messages, true for system messages. + * @param bool $issystem False for non-system messages, true for system messages. * @param object $cm The course module object, pass it to save a database query when we trigger the event. * @return int The message ID. * @since Moodle 2.6 */ -function chat_send_chatmessage($chatuser, $messagetext, $system = false, $cm = null) { +function chat_send_chatmessage($chatuser, $messagetext, $issystem = false, $cm = null) { global $DB; $message = new stdClass(); @@ -736,14 +736,14 @@ function chat_send_chatmessage($chatuser, $messagetext, $system = false, $cm = n $message->userid = $chatuser->userid; $message->groupid = $chatuser->groupid; $message->message = $messagetext; - $message->system = $system ? 1 : 0; + $message->issystem = $issystem ? 1 : 0; $message->timestamp = time(); $messageid = $DB->insert_record('chat_messages', $message); $DB->insert_record('chat_messages_current', $message); $message->id = $messageid; - if (!$system) { + if (!$issystem) { if (empty($cm)) { $cm = get_coursemodule_from_instance('chat', $chatuser->chatid, $chatuser->course); @@ -801,7 +801,7 @@ function chat_format_message_manually($message, $courseid, $sender, $currentuser // Start processing the message. - if (!empty($message->system)) { + if (!empty($message->issystem)) { // System event. $output->text = $message->strtime.': '.get_string('message'.$message->message, 'chat', fullname($sender)); $output->html = ''; @@ -984,7 +984,7 @@ function chat_format_message_theme ($message, $chatuser, $currentuser, $grouping " href=\"$CFG->wwwroot/user/view.php?id=$sender->id&course=$courseid\">$message->picture"; // Start processing the message. - if (!empty($message->system)) { + if (!empty($message->issystem)) { $result->type = 'system'; $senderprofile = $CFG->wwwroot.'/user/view.php?id='.$sender->id.'&course='.$courseid; diff --git a/mod/chat/report.php b/mod/chat/report.php index e6f001f5966..8e1fd143b20 100644 --- a/mod/chat/report.php +++ b/mod/chat/report.php @@ -235,7 +235,7 @@ foreach ($messages as $message) { // We are walking BACKWARDS through the messa $sessionend = $message->timestamp; } if ((($lasttime - $message->timestamp) < $sessiongap) and $messagesleft) { // Same session. - if ($message->userid and !$message->system) { // Remember user and count messages. + if ($message->userid and !$message->issystem) { // Remember user and count messages. if (empty($sessionusers[$message->userid])) { $sessionusers[$message->userid] = 1; } else { diff --git a/mod/chat/tests/format_message_test.php b/mod/chat/tests/format_message_test.php index 10dd8c75c22..b6b3a4d1a0a 100644 --- a/mod/chat/tests/format_message_test.php +++ b/mod/chat/tests/format_message_test.php @@ -44,7 +44,7 @@ class mod_chat_format_message_testcase extends advanced_testcase { return [ 'Beep everyone' => [ 'message' => 'beep all', - 'system' => false, + 'issystem' => false, 'willreturn' => true, 'expecttext' => "/^{$dateregexp}: " . get_string('messagebeepseveryone', 'chat', '__CURRENTUSER__') . ': /', 'refreshusers' => false, @@ -52,7 +52,7 @@ class mod_chat_format_message_testcase extends advanced_testcase { ], 'Beep the current user' => [ 'message' => 'beep __CURRENTUSER__', - 'system' => false, + 'issystem' => false, 'willreturn' => true, 'expecttext' => "/^{$dateregexp}: " . get_string('messagebeepsyou', 'chat', '__CURRENTUSER__') . ': /', 'refreshusers' => false, @@ -60,7 +60,7 @@ class mod_chat_format_message_testcase extends advanced_testcase { ], 'Beep another user' => [ 'message' => 'beep __OTHERUSER__', - 'system' => false, + 'issystem' => false, 'willreturn' => false, 'expecttext' => null, 'refreshusers' => null, @@ -68,7 +68,7 @@ class mod_chat_format_message_testcase extends advanced_testcase { ], 'Malformed beep' => [ 'message' => 'beep', - 'system' => false, + 'issystem' => false, 'willreturn' => true, 'expecttext' => "/^{$dateregexp} __CURRENTUSER_FIRST__: beep$/", 'refreshusers' => false, @@ -76,7 +76,7 @@ class mod_chat_format_message_testcase extends advanced_testcase { ], '/me says' => [ 'message' => '/me writes a test', - 'system' => false, + 'issystem' => false, 'willreturn' => true, 'expecttext' => "/^{$dateregexp}: \*\*\* __CURRENTUSER_FIRST__ writes a test$/", 'refreshusers' => false, @@ -84,7 +84,7 @@ class mod_chat_format_message_testcase extends advanced_testcase { ], 'Invalid command' => [ 'message' => '/help', - 'system' => false, + 'issystem' => false, 'willreturn' => true, 'expecttext' => "/^{$dateregexp} __CURRENTUSER_FIRST__: \/help$/", 'refreshusers' => false, @@ -92,7 +92,7 @@ class mod_chat_format_message_testcase extends advanced_testcase { ], 'To user' => [ 'message' => 'To Bernard:I love tests', - 'system' => false, + 'issystem' => false, 'willreturn' => true, 'expecttext' => "/^{$dateregexp}: __CURRENTUSER_FIRST__ " . get_string('saidto', 'chat') . " Bernard: I love tests$/", 'refreshusers' => false, @@ -100,7 +100,7 @@ class mod_chat_format_message_testcase extends advanced_testcase { ], 'To user trimmed' => [ 'message' => 'To Bernard: I love tests', - 'system' => false, + 'issystem' => false, 'willreturn' => true, 'expecttext' => "/^{$dateregexp}: __CURRENTUSER_FIRST__ " . get_string('saidto', 'chat') . " Bernard: I love tests$/", 'refreshusers' => false, @@ -108,7 +108,7 @@ class mod_chat_format_message_testcase extends advanced_testcase { ], 'System: enter' => [ 'message' => 'enter', - 'system' => true, + 'issystem' => true, 'willreturn' => true, 'expecttext' => "/^{$dateregexp}: " . get_string('messageenter', 'chat', '__CURRENTUSER__') . "$/", 'refreshusers' => true, @@ -116,7 +116,7 @@ class mod_chat_format_message_testcase extends advanced_testcase { ], 'System: exit' => [ 'message' => 'exit', - 'system' => true, + 'issystem' => true, 'willreturn' => true, 'expecttext' => "/^{$dateregexp}: " . get_string('messageexit', 'chat', '__CURRENTUSER__') . "$/", 'refreshusers' => true, @@ -128,7 +128,7 @@ class mod_chat_format_message_testcase extends advanced_testcase { /** * @dataProvider chat_format_message_manually_provider */ - public function test_chat_format_message_manually($messagetext, $system, $willreturn, + public function test_chat_format_message_manually($messagetext, $issystem, $willreturn, $expecttext, $refreshusers, $expectbeep) { $this->resetAfterTest(); @@ -147,7 +147,7 @@ class mod_chat_format_message_testcase extends advanced_testcase { $message = (object) [ 'message' => $messagetext, 'timestamp' => time(), - 'system' => $system, + 'issystem' => $issystem, ]; $result = chat_format_message_manually($message, $course->id, $currentuser, $currentuser); diff --git a/mod/chat/version.php b/mod/chat/version.php index 88813d4d77d..587b96e4e16 100644 --- a/mod/chat/version.php +++ b/mod/chat/version.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2017111300; // The current module version (Date: YYYYMMDDXX). +$plugin->version = 2017111301; // The current module version (Date: YYYYMMDDXX). $plugin->requires = 2017110800; // Requires this Moodle version. $plugin->component = 'mod_chat'; // Full name of the plugin (used for diagnostics). $plugin->cron = 300;
'.$message->picture.'