Skip to content

Commit

Permalink
MDL-83163 core_course: Fresh install fails if dependency on format
Browse files Browse the repository at this point in the history
If any plugin had dependency on a course format, Moodle fresh install
showed dependency errors (even though course format exists).
  • Loading branch information
sammarshallou committed Sep 16, 2024
1 parent 09e56f2 commit 7544d26
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
6 changes: 5 additions & 1 deletion course/lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -2894,7 +2894,11 @@ function include_course_editor(course_format $format) {
function get_sorted_course_formats($enabledonly = false) {
global $CFG;

$formats = core_plugin_manager::instance()->get_installed_plugins('format');
// Include both formats that exist on disk (but might not have been installed yet), and those
// which were installed but no longer exist on disk.
$installedformats = core_plugin_manager::instance()->get_installed_plugins('format');
$existingformats = core_component::get_plugin_list('format');
$formats = array_merge($installedformats, $existingformats);

if (!empty($CFG->format_plugins_sortorder)) {
$order = explode(',', $CFG->format_plugins_sortorder);
Expand Down
32 changes: 32 additions & 0 deletions course/tests/courselib_test.php
Original file line number Diff line number Diff line change
Expand Up @@ -7502,4 +7502,36 @@ public function test_course_section_view(): void {
$this->assertEquals('course_sections', $event->objecttable);
$this->assertEquals($section->id, $event->objectid);
}

/**
* Tests get_sorted_course_formats returns all plugins in cases where plugins are installed now,
* installed previously but no longer exist, or not installed yet.
*
* @covers ::get_sorted_course_formats()
*/
public function test_get_sorted_course_formats_installed_or_not(): void {
global $DB;

$this->resetAfterTest();

// By default returns all course formats.
$formats = get_sorted_course_formats();
$this->assertEquals(['topics', 'weeks', 'singleactivity', 'social'], $formats);

// If there is an extra format installed that no longer exists, include in list (at end).
$DB->insert_record('config_plugins', [
'plugin' => 'format_frogs',
'name' => 'version',
'value' => '20240916',
]);
\core\plugin_manager::reset_caches();
$formats = get_sorted_course_formats();
$this->assertEquals(['topics', 'weeks', 'singleactivity', 'social', 'frogs'], $formats);

// If one of the formats is not installed yet, we still return it.
$DB->delete_records('config_plugins', ['plugin' => 'format_weeks']);
\core\plugin_manager::reset_caches();
$formats = get_sorted_course_formats();
$this->assertEquals(['topics', 'weeks', 'singleactivity', 'social', 'frogs'], $formats);
}
}

0 comments on commit 7544d26

Please sign in to comment.