From 55fda006e3b1fd1bcc9ee9fe4e0afb441f64d3a7 Mon Sep 17 00:00:00 2001 From: cescobedo Date: Mon, 22 Oct 2018 22:34:15 +0200 Subject: [PATCH] MDL-63280 core_message: Create conversation area --- lib/db/install.xml | 21 +++++++++++++++++++++ lib/db/upgrade.php | 30 ++++++++++++++++++++++++++++-- message/classes/api.php | 36 ++++++++++++++++++++++++++++++++++++ message/tests/api_test.php | 28 ++++++++++++++++++++++++++++ 4 files changed, 113 insertions(+), 2 deletions(-) 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]) + ); + } }