From 8ec461823adbecafea16c48e2715d2496d9d4249 Mon Sep 17 00:00:00 2001 From: Stevani Andolo Date: Wed, 5 Apr 2023 11:45:24 +0800 Subject: [PATCH] MDL-77829 core: Added environment check for mod_assignment Decided to add an environment check before uninstalling the mod_assignment plugin to prevent data lost. --- admin/environment.xml | 5 +++++ lang/en/admin.php | 1 + lib/tests/upgradelib_test.php | 23 +++++++++++++++++++++++ lib/upgradelib.php | 19 +++++++++++++++++++ 4 files changed, 48 insertions(+) diff --git a/admin/environment.xml b/admin/environment.xml index 8ecafae5fb6..fe56aa2e253 100644 --- a/admin/environment.xml +++ b/admin/environment.xml @@ -4109,6 +4109,11 @@ + + + + + diff --git a/lang/en/admin.php b/lang/en/admin.php index 7d5a93c9cc4..2a7eed55294 100644 --- a/lang/en/admin.php +++ b/lang/en/admin.php @@ -1539,6 +1539,7 @@ $string['xmlrpcwebserviceenabled'] = 'It has been detected that the XML-RPC Web $string['yuicomboloading'] = 'YUI combo loading'; $string['ziprequired'] = 'The Zip PHP extension is now required by Moodle, info-ZIP binaries or PclZip library are not used anymore.'; $string['manageqbanks'] = 'Manage question bank plugins'; +$string['modassignmentinuse'] = 'It has been detected that your site is still using the Assignment 2.2 plugin. You may resolve this before upgrading by 1) Backing up your Assignment 2.2 activities and restoring them as new Assignment activities; or 2) Deleting the data from the assignment tables in the database.'; $string['caching'] = 'Caching'; diff --git a/lib/tests/upgradelib_test.php b/lib/tests/upgradelib_test.php index 3ed46f76f56..3987130e48a 100644 --- a/lib/tests/upgradelib_test.php +++ b/lib/tests/upgradelib_test.php @@ -1620,6 +1620,29 @@ class upgradelib_test extends advanced_testcase { $this->assertFalse($result->getStatus()); } + /** + * Test the check_mod_assignment check if mod_assignment is still used. + * + * @covers ::check_mod_assignment + * @return void + */ + public function test_check_mod_assignment_is_used(): void { + global $DB; + + $this->resetAfterTest(); + $result = new environment_results('custom_checks'); + + if ($DB->get_manager()->table_exists('assignment')) { + $DB->insert_record('assignment', (object)['name' => 'test_assign', 'intro' => 'test_assign_intro']); + + $this->assertNotNull(check_mod_assignment($result)); + $this->assertEquals('Assignment 2.2 is in use', $result->getInfo()); + $this->assertFalse($result->getStatus()); + } else { + $this->assertTrue($result->getStatus()); + } + } + /** * Data provider of usermenu items. * diff --git a/lib/upgradelib.php b/lib/upgradelib.php index acd4adcc42e..1d1dd06f9e2 100644 --- a/lib/upgradelib.php +++ b/lib/upgradelib.php @@ -2784,3 +2784,22 @@ function check_xmlrpc_usage(environment_results $result): ?environment_results { return null; } + +/** + * Check whether the mod_assignment is currently being used. + * + * @param environment_results $result + * @return environment_results|null + */ +function check_mod_assignment(environment_results $result): ?environment_results { + global $DB; + + // Check the number of records. + if ($DB->get_manager()->table_exists('assignment') && $DB->count_records('assignment') > 0) { + $result->setInfo('Assignment 2.2 is in use'); + $result->setFeedbackStr('modassignmentinuse'); + return $result; + } + + return null; +}