diff --git a/lib/db/install.xml b/lib/db/install.xml
index 360bf469f82..4e6290d22e6 100644
--- a/lib/db/install.xml
+++ b/lib/db/install.xml
@@ -629,6 +629,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/lib/db/upgrade.php b/lib/db/upgrade.php
index d60b286e4f9..68b92a30f7c 100644
--- a/lib/db/upgrade.php
+++ b/lib/db/upgrade.php
@@ -2589,7 +2589,7 @@ function xmldb_main_upgrade($oldversion) {
$table = new xmldb_table('message_conversations');
// Remove the unique 'convhash' index, change to null and add a new non unique index.
- $index = new xmldb_index('convhash', XMLDB_INDEX_UNIQUE, ['convhash']);
+ $index = new xmldb_index('convhash', XMLDB_INDEX_UNIQUE, array('convhash'));
if ($dbman->index_exists($table, $index)) {
$dbman->drop_index($table, $index);
}
@@ -2597,7 +2597,7 @@ function xmldb_main_upgrade($oldversion) {
$field = new xmldb_field('convhash', XMLDB_TYPE_CHAR, '40', null, null, null, null, 'name');
$dbman->change_field_notnull($table, $field);
- $index = new xmldb_index('convhash', XMLDB_INDEX_NOTUNIQUE, ['convhash']);
+ $index = new xmldb_index('convhash', XMLDB_INDEX_NOTUNIQUE, array('convhash'));
if (!$dbman->index_exists($table, $index)) {
$dbman->add_index($table, $index);
}
@@ -2605,5 +2605,31 @@ function xmldb_main_upgrade($oldversion) {
upgrade_main_savepoint(true, 2018102200.00);
}
+ if ($oldversion < 2018101900.03) {
+ // Create new 'message_conversation_area' table.
+ $table = new xmldb_table('message_conversation_area');
+ $table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null, null);
+ $table->add_field('conversationid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'id');
+ $table->add_field('component', XMLDB_TYPE_CHAR, '100', null, null, null, null, 'conversationid');
+ $table->add_field('itemtype', XMLDB_TYPE_CHAR, '100', null, null, null, null, 'component');
+ $table->add_field('itemid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null, 'itemtype');
+ $table->add_field('contextid', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'itemid');
+ $table->add_field('enabled', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, 0, 'contextid');
+ $table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'enable');
+ $table->add_field('timemodified', XMLDB_TYPE_INTEGER, '10', null, null, null, null, 'timecreated');
+ $table->add_key('primary', XMLDB_KEY_PRIMARY, ['id'], null, null);
+ $table->add_key('conversationid', XMLDB_KEY_FOREIGN, ['conversationid'], 'message_conversations', ['id']);
+ $table->add_key('contextid', XMLDB_KEY_FOREIGN, ['contextid'], 'context', ['id']);
+ $table->add_index('component-itemtype-contextid-itemid', XMLDB_INDEX_UNIQUE, ['component',
+ 'itemtype',
+ 'itemid',
+ 'contextid']);
+ if (!$dbman->table_exists($table)) {
+ $dbman->create_table($table);
+ }
+
+ upgrade_main_savepoint(true, 2018101900.03);
+ }
+
return true;
}
diff --git a/message/classes/api.php b/message/classes/api.php
index 216050c5132..06c5d9c4508 100644
--- a/message/classes/api.php
+++ b/message/classes/api.php
@@ -1975,4 +1975,40 @@ class api {
return $DB->count_records('message_conversation_members', ['conversationid' => $convid]);
}
+
+ /**
+ * Create message conversation area.
+ *
+ * @param string $component Defines the Moodle component which the area was added to
+ * @param string $itemtype Defines the type of the component
+ * @param int $itemid The id of the component
+ * @param int $contextid The id of the context
+ * @param int $enabled Allow enabled or disabled the conversation area
+ * @param string $name The main name of the area
+ * @return \stdClass
+ */
+ public static function create_conversation_area(string $component,
+ string $itemtype,
+ int $itemid,
+ int $contextid,
+ int $enabled = 0,
+ string $name) {
+ global $DB;
+
+ // Create a conversation.
+ $conversation = self::create_conversation(self::MESSAGE_CONVERSATION_TYPE_GROUP, array(), $name);
+ // Create a conversation area.
+ $conversationarea = new \stdClass;
+ $conversationarea->conversationid = $conversation->id;
+ $conversationarea->component = !empty($component) ? $component : '';
+ $conversationarea->itemtype = $itemtype;
+ $conversationarea->itemid = $itemid;
+ $conversationarea->contextid = $contextid;
+ $conversationarea->enabled = $enabled;
+ $conversationarea->timecreated = time();
+ $conversationarea->timemodified = $conversationarea->timecreated;
+ $conversationarea->id = $DB->insert_record('message_conversation_area', $conversationarea);
+
+ return $conversationarea;
+ }
}
diff --git a/message/tests/api_test.php b/message/tests/api_test.php
index 15fba071148..c1966930721 100644
--- a/message/tests/api_test.php
+++ b/message/tests/api_test.php
@@ -3273,4 +3273,32 @@ class core_message_api_testcase extends core_message_messagelib_testcase {
protected static function sort_contacts($a, $b) {
return $a->userid > $b->userid;
}
+
+ /**
+ * Test create message conversation area.
+ */
+ public function test_create_conversation_area() {
+ global $DB;
+
+ $this->resetAfterTest();
+ $contextid = 111;
+ $itemid = 222;
+ $name = 'Name of conversation';
+ \core_message\api::create_conversation_area('core_group',
+ 'groups',
+ $itemid,
+ $contextid,
+ 1,
+ $name);
+ $conversationarea = $DB->get_record('message_conversation_area', ['itemid' => $itemid,
+ 'contextid' => $contextid,
+ 'component' => 'core_group',
+ 'itemtype' => 'groups']);
+ // Check if exist the new conversation area and if the conversation has been created with the name.
+ $this->assertEquals($itemid, $conversationarea->itemid);
+ $this->assertEquals(
+ $name,
+ $DB->get_field('message_conversations', 'name', ['id' => $conversationarea->conversationid])
+ );
+ }
}