From de14abaf0e7ad86d72e68bb131389e84a0a3bc66 Mon Sep 17 00:00:00 2001 From: Laurent David Date: Mon, 13 Oct 2025 10:37:42 +0200 Subject: [PATCH] MDL-86857 core_courseformat: Deprecates set_coursemodule_groupmode Deprecates set_coursemodule_groupmode in favor of core_courseformat\cmactions::set_groupmode --- .upgradenotes/MDL-86857-2025101308400893.yml | 7 +++++++ public/course/externallib.php | 3 ++- public/course/lib.php | 18 ++++++++++-------- public/course/mod.php | 4 +++- .../tests/course_enrolment_manager_test.php | 5 +++-- public/enrol/tests/externallib_test.php | 3 ++- public/mod/bigbluebuttonbn/tests/lib_test.php | 3 ++- public/mod/data/tests/lib_test.php | 3 ++- public/mod/data/tests/search/search_test.php | 4 +++- public/mod/forum/tests/search/search_test.php | 4 +++- public/mod/wiki/tests/search/search_test.php | 4 +++- public/rating/tests/externallib_test.php | 3 ++- 12 files changed, 42 insertions(+), 19 deletions(-) create mode 100644 .upgradenotes/MDL-86857-2025101308400893.yml diff --git a/.upgradenotes/MDL-86857-2025101308400893.yml b/.upgradenotes/MDL-86857-2025101308400893.yml new file mode 100644 index 00000000000..5c61d2445ed --- /dev/null +++ b/.upgradenotes/MDL-86857-2025101308400893.yml @@ -0,0 +1,7 @@ +issueNumber: MDL-86857 +notes: + core_course: + - message: >- + Deprecates set_coursemodule_groupmode in favor of + core_courseformat\cmactions::set_groupmode + type: deprecated diff --git a/public/course/externallib.php b/public/course/externallib.php index c798b707a08..cd34e89311c 100644 --- a/public/course/externallib.php +++ b/public/course/externallib.php @@ -27,6 +27,7 @@ defined('MOODLE_INTERNAL') || die; use core_course\external\course_summary_exporter; +use core_courseformat\formatactions; use core_external\external_api; use core_external\external_description; use core_external\external_files; @@ -3749,7 +3750,7 @@ class core_course_external extends external_api { } else { $newgroupmode = NOGROUPS; } - if (set_coursemodule_groupmode($cm->id, $newgroupmode)) { + if (formatactions::cm($coursecontext->instanceid)->set_groupmode($cm->id, $newgroupmode)) { \core\event\course_module_updated::create_from_cm($cm, $modcontext)->trigger(); } break; diff --git a/public/course/lib.php b/public/course/lib.php index d0cfc43fb14..0857b8e5c94 100644 --- a/public/course/lib.php +++ b/public/course/lib.php @@ -614,15 +614,17 @@ function course_add_cm_to_section($courseorid, $cmid, $sectionnum, $beforemod = * @param int $groupmode the new groupmode value. * @return bool True if the $groupmode was updated. */ +#[\core\attribute\deprecated( + replacement: 'core_courseformat\local\cmactions', + since: '5.2', + mdl: 'MDL-86857', + reason: 'Replaced by an equivalent in the course format cmactions.', +)] function set_coursemodule_groupmode($id, $groupmode) { - global $DB; - $cm = $DB->get_record('course_modules', array('id' => $id), 'id,course,groupmode', MUST_EXIST); - if ($cm->groupmode != $groupmode) { - $DB->set_field('course_modules', 'groupmode', $groupmode, array('id' => $cm->id)); - \course_modinfo::purge_course_module_cache($cm->course, $cm->id); - rebuild_course_cache($cm->course, false, true); - } - return ($cm->groupmode != $groupmode); + \core\deprecation::emit_deprecation(__FUNCTION__); + + $coursecontext = context_module::instance($id)->get_course_context(); + return formatactions::cm($coursecontext->instanceid)->set_groupmode($id, $groupmode); } function set_coursemodule_idnumber($id, $idnumber) { diff --git a/public/course/mod.php b/public/course/mod.php index ab2fbb945f7..d19195d9564 100644 --- a/public/course/mod.php +++ b/public/course/mod.php @@ -23,6 +23,8 @@ * @package course */ +use core_courseformat\formatactions; + require("../config.php"); require_once("lib.php"); @@ -336,7 +338,7 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) { $modcontext = context_module::instance($cm->id); require_capability('moodle/course:manageactivities', $modcontext); - set_coursemodule_groupmode($cm->id, $groupmode); + formatactions::cm($coursecontext->instanceid)->set_groupmode($cm->id, $groupmode); \core\event\course_module_updated::create_from_cm($cm, $modcontext)->trigger(); redirect(course_get_url($course, $cm->sectionnum, $urloptions)); diff --git a/public/enrol/tests/course_enrolment_manager_test.php b/public/enrol/tests/course_enrolment_manager_test.php index d3b0fbb19c7..9f1bedd8ce8 100644 --- a/public/enrol/tests/course_enrolment_manager_test.php +++ b/public/enrol/tests/course_enrolment_manager_test.php @@ -17,6 +17,7 @@ namespace core_enrol; use context_course; +use core_courseformat\formatactions; use course_enrolment_manager; use stdClass; @@ -593,7 +594,7 @@ final class course_enrolment_manager_test extends \advanced_testcase { // Switch course to separate groups and forum to no group. $this->course->groupmode = SEPARATEGROUPS; update_course($this->course); - set_coursemodule_groupmode($forum->cmid, NOGROUPS); + formatactions::cm($this->course->id)->set_groupmode($forum->cmid, NOGROUPS); $courseusers = (new course_enrolment_manager($PAGE, $this->course))->search_users('', false, 0, 25, true); $this->assertEqualsCanonicalizing([ @@ -615,7 +616,7 @@ final class course_enrolment_manager_test extends \advanced_testcase { ], array_column($forumusers['users'], 'username')); $this->assertEquals(7, $forumusers['totalusers']); - set_coursemodule_groupmode($forum->cmid, SEPARATEGROUPS); + formatactions::cm($this->course->id)->set_groupmode($forum->cmid, SEPARATEGROUPS); // Allow teacher to access all groups. $roleid = $DB->get_field('role', 'id', ['shortname' => 'teacher']); diff --git a/public/enrol/tests/externallib_test.php b/public/enrol/tests/externallib_test.php index 14bdf44b92b..fd175b6d7c7 100644 --- a/public/enrol/tests/externallib_test.php +++ b/public/enrol/tests/externallib_test.php @@ -16,6 +16,7 @@ namespace core_enrol; +use core_courseformat\formatactions; use core_enrol_external; use core_external\external_api; use enrol_user_enrolment_form; @@ -1479,7 +1480,7 @@ final class externallib_test extends \core_external\tests\externallib_testcase { $this->assertCount(7, $result); // Now change the group mode to no groups. - set_coursemodule_groupmode($forum->cmid, NOGROUPS); + formatactions::cm($course->id)->set_groupmode($forum->cmid, NOGROUPS); $this->setUser($teacher1); $result = core_enrol_external::search_users($course->id, 'user', true, 0, 30, $contextid); $this->assertCount(7, $result); diff --git a/public/mod/bigbluebuttonbn/tests/lib_test.php b/public/mod/bigbluebuttonbn/tests/lib_test.php index db138389397..9a1d3bfb56c 100644 --- a/public/mod/bigbluebuttonbn/tests/lib_test.php +++ b/public/mod/bigbluebuttonbn/tests/lib_test.php @@ -27,6 +27,7 @@ namespace mod_bigbluebuttonbn; use calendar_event; use context_module; +use core_courseformat\formatactions; use mod_bigbluebuttonbn\test\testcase_helper_trait; use mod_bigbluebuttonbn_mod_form; use MoodleQuickForm; @@ -136,7 +137,7 @@ final class lib_test extends \advanced_testcase { $datagenerator = $this->getDataGenerator(); list($bbactivitycontext, $bbactivitycm, $bbactivity) = $this->create_instance(); $course = $this->get_course(); - set_coursemodule_groupmode($bbactivitycm->id, VISIBLEGROUPS); + formatactions::cm($this->course->id)->set_groupmode($bbactivitycm->id, VISIBLEGROUPS); $groups = []; foreach (['G1', 'G2'] as $gname) { diff --git a/public/mod/data/tests/lib_test.php b/public/mod/data/tests/lib_test.php index 36025056cc8..34a9426ae9f 100644 --- a/public/mod/data/tests/lib_test.php +++ b/public/mod/data/tests/lib_test.php @@ -24,6 +24,7 @@ */ namespace mod_data; +use core_courseformat\formatactions; use stdClass; defined('MOODLE_INTERNAL') || die(); @@ -1158,7 +1159,7 @@ final class lib_test extends \advanced_testcase { $field1 = $datagenerator->create_field($fieldrecord, $data1); $data2 = $this->getDataGenerator()->create_module('data', array('course' => $course2->id)); $field2 = $datagenerator->create_field($fieldrecord, $data2); - set_coursemodule_groupmode($data2->cmid, SEPARATEGROUPS); + formatactions::cm($course1->id)->set_groupmode($data2->cmid, SEPARATEGROUPS); $record11 = $datagenerator->create_entry($data1, [$field1->field->id => 'value11'], 0, ['Cats', 'Dogs']); diff --git a/public/mod/data/tests/search/search_test.php b/public/mod/data/tests/search/search_test.php index 5ffb06bd3be..52d560e85b3 100644 --- a/public/mod/data/tests/search/search_test.php +++ b/public/mod/data/tests/search/search_test.php @@ -26,6 +26,8 @@ namespace mod_data\search; +use core_courseformat\formatactions; + defined('MOODLE_INTERNAL') || die(); global $CFG; @@ -643,7 +645,7 @@ final class search_test extends \advanced_testcase { $this->assertTrue($searcharea->restrict_cm_access_by_group($modinfo->get_cm($data->cmid))); // In visible groups mode, it won't request restriction by group. - set_coursemodule_groupmode($data->cmid, VISIBLEGROUPS); + formatactions::cm($course->id)->set_groupmode($data->cmid, VISIBLEGROUPS); $modinfo = get_fast_modinfo($course); $this->assertFalse($searcharea->restrict_cm_access_by_group($modinfo->get_cm($data->cmid))); } diff --git a/public/mod/forum/tests/search/search_test.php b/public/mod/forum/tests/search/search_test.php index 91d0889de26..7cbf19351b1 100644 --- a/public/mod/forum/tests/search/search_test.php +++ b/public/mod/forum/tests/search/search_test.php @@ -25,6 +25,8 @@ namespace mod_forum\search; +use core_courseformat\formatactions; + defined('MOODLE_INTERNAL') || die(); global $CFG; @@ -288,7 +290,7 @@ final class search_test extends \advanced_testcase { $this->assertTrue($searcharea->restrict_cm_access_by_group($modinfo->get_cm($forum->cmid))); // In visible groups mode, it won't request restriction by group. - set_coursemodule_groupmode($forum->cmid, VISIBLEGROUPS); + formatactions::cm($course->id)->set_groupmode($forum->cmid, VISIBLEGROUPS); $modinfo = get_fast_modinfo($course); $this->assertFalse($searcharea->restrict_cm_access_by_group($modinfo->get_cm($forum->cmid))); } diff --git a/public/mod/wiki/tests/search/search_test.php b/public/mod/wiki/tests/search/search_test.php index 86f7edffd7d..cb99bccc6f3 100644 --- a/public/mod/wiki/tests/search/search_test.php +++ b/public/mod/wiki/tests/search/search_test.php @@ -24,6 +24,8 @@ */ namespace mod_wiki\search; +use core_courseformat\formatactions; + defined('MOODLE_INTERNAL') || die(); global $CFG; @@ -194,7 +196,7 @@ final class search_test extends \advanced_testcase { $this->assertTrue($searcharea->restrict_cm_access_by_group($modinfo->get_cm($wiki->cmid))); // In visible groups mode, it won't request restriction by group. - set_coursemodule_groupmode($wiki->cmid, VISIBLEGROUPS); + formatactions::cm($course->id)->set_groupmode($wiki->cmid, VISIBLEGROUPS); $modinfo = get_fast_modinfo($course); $this->assertFalse($searcharea->restrict_cm_access_by_group($modinfo->get_cm($wiki->cmid))); } diff --git a/public/rating/tests/externallib_test.php b/public/rating/tests/externallib_test.php index 52f2c43d414..3bc55a6abdc 100644 --- a/public/rating/tests/externallib_test.php +++ b/public/rating/tests/externallib_test.php @@ -25,6 +25,7 @@ namespace core_rating; +use core_courseformat\formatactions; use core_external\external_api; use core_rating_external; @@ -213,7 +214,7 @@ final class externallib_test extends \core_external\tests\externallib_testcase { } // Test for groupmode. - set_coursemodule_groupmode($this->forum->cmid, SEPARATEGROUPS); + formatactions::cm($this->course->id)->set_groupmode($this->forum->cmid, SEPARATEGROUPS); $group = $this->getDataGenerator()->create_group(array('courseid' => $this->course->id)); groups_add_member($group, $this->teacher1);