diff --git a/course/format/classes/activityoverviewbase.php b/course/format/classes/activityoverviewbase.php
index f5ff78d112d..c0e734fa1aa 100644
--- a/course/format/classes/activityoverviewbase.php
+++ b/course/format/classes/activityoverviewbase.php
@@ -21,6 +21,7 @@ use core\context\module as module_context;
use core_completion\cm_completion_details;
use core_courseformat\local\overview\overviewitem;
use core_courseformat\output\local\overview\activityname;
+use core_courseformat\output\local\overview\overviewpage;
use core_courseformat\base as courseformat;
/**
@@ -69,6 +70,16 @@ abstract class activityoverviewbase {
$this->format = courseformat::instance($this->course);
}
+ /**
+ * Redirects to the overview page for the activity.
+ *
+ * @param int $courseid The course id.
+ * @param string $modname The module name.
+ */
+ public static function redirect_to_overview_page(int $courseid, string $modname): void {
+ redirect(overviewpage::get_modname_url($courseid, $modname));
+ }
+
/**
* Get the plugin specific overview items for the activity.
*
diff --git a/course/format/classes/output/local/overview/overviewpage.php b/course/format/classes/output/local/overview/overviewpage.php
index b13162979d0..290ceb274b0 100644
--- a/course/format/classes/output/local/overview/overviewpage.php
+++ b/course/format/classes/output/local/overview/overviewpage.php
@@ -51,6 +51,21 @@ class overviewpage implements renderable, named_templatable {
$this->context = context_course::instance($this->course->id);
}
+ /**
+ * Gets the URL to the course overview page for a given course and module name.
+ *
+ * @param int $courseid
+ * @param string $modname
+ * @return url
+ */
+ public static function get_modname_url(int $courseid, string $modname): url {
+ return new url(
+ url: '/course/overview.php',
+ params: ['id' => $courseid, 'expand[]' => $modname],
+ anchor: "{$modname}_overview_collapsible",
+ );
+ }
+
#[\Override]
public function export_for_template(\renderer_base $output): stdClass {
$modfullnames = $this->get_course_activities_overview_list();
diff --git a/course/resources.php b/course/resources.php
index 43f053938f1..76223c3d6c7 100644
--- a/course/resources.php
+++ b/course/resources.php
@@ -24,127 +24,7 @@
*/
require_once('../config.php');
-require_once("$CFG->libdir/resourcelib.php");
-$id = required_param('id', PARAM_INT); // course id
+$courseid = required_param('id', PARAM_INT);
-$course = $DB->get_record('course', array('id'=>$id), '*', MUST_EXIST);
-$PAGE->set_pagelayout('incourse');
-require_course_login($course, true);
-
-// get list of all resource-like modules
-$allmodules = $DB->get_records('modules', array('visible'=>1));
-$availableresources = array();
-foreach ($allmodules as $key=>$module) {
- $modname = $module->name;
- $libfile = "$CFG->dirroot/mod/$modname/lib.php";
- if (!file_exists($libfile)) {
- continue;
- }
- $archetype = plugin_supports('mod', $modname, FEATURE_MOD_ARCHETYPE, MOD_ARCHETYPE_OTHER);
- if ($archetype != MOD_ARCHETYPE_RESOURCE) {
- continue;
- }
-
- $availableresources[] = $modname;
-}
-
-// Triger view event.
-$event = \core\event\course_resources_list_viewed::create(array('context' => context_course::instance($course->id)));
-$event->add_record_snapshot('course', $course);
-$event->trigger();
-
-$strresources = get_string('resources');
-$strname = get_string('name');
-$strintro = get_string('moduleintro');
-$strlastmodified = get_string('lastmodified');
-
-$PAGE->set_url('/course/resources.php', array('id' => $course->id));
-$PAGE->set_title($course->shortname.': '.$strresources);
-$PAGE->set_heading($course->fullname);
-$PAGE->navbar->add($strresources);
-echo $OUTPUT->header();
-
-$modinfo = get_fast_modinfo($course);
-$usesections = course_format_uses_sections($course->format);
-$cms = array();
-$resources = array();
-foreach ($modinfo->cms as $cm) {
- if (!in_array($cm->modname, $availableresources)) {
- continue;
- }
- // Exclude activities that aren't visible or have no view link (e.g. label). Account for folder being displayed inline.
- if (!$cm->uservisible || (!$cm->has_view() && strcmp($cm->modname, 'folder') !== 0)) {
- continue;
- }
- $cms[$cm->id] = $cm;
- $resources[$cm->modname][] = $cm->instance;
-}
-
-// preload instances
-foreach ($resources as $modname=>$instances) {
- $additionalfields = '';
- if (plugin_supports('mod', $modname, FEATURE_MOD_INTRO)) {
- $additionalfields = ',intro,introformat';
- }
- $resources[$modname] = $DB->get_records_list($modname, 'id', $instances, 'id', 'id,name'.$additionalfields);
-}
-
-if (!$cms) {
- notice(get_string('thereareno', 'moodle', $strresources), "$CFG->wwwroot/course/view.php?id=$course->id");
- exit;
-}
-
-$table = new html_table();
-$table->attributes['class'] = 'generaltable mod_index';
-
-if ($usesections) {
-
- $strsectionname = course_get_format($course)->get_generic_section_name();
- $table->head = array ($strsectionname, $strname, $strintro);
- $table->align = array ('center', 'left', 'left');
-} else {
- $table->head = array ($strlastmodified, $strname, $strintro);
- $table->align = array ('left', 'left', 'left');
-}
-
-$currentsection = '';
-foreach ($cms as $cm) {
- if (!isset($resources[$cm->modname][$cm->instance])) {
- continue;
- }
- $resource = $resources[$cm->modname][$cm->instance];
- $printsection = '';
- if ($usesections) {
- if ($cm->sectionnum !== $currentsection) {
- if ($cm->sectionnum) {
- $printsection = get_section_name($course, $cm->sectionnum);
- }
- if ($currentsection !== '') {
- $table->data[] = 'hr';
- }
- $currentsection = $cm->sectionnum;
- }
- }
-
- $extra = empty($cm->extra) ? '' : $cm->extra;
- $icon = '
';
-
- if (isset($resource->intro) && isset($resource->introformat)) {
- $intro = format_module_intro($cm->modname, $resource, $cm->id);
- } else {
- $intro = '';
- }
-
- $class = $cm->visible ? '' : 'class="dimmed"'; // hidden modules are dimmed
- $url = $cm->url ?: new moodle_url("/mod/{$cm->modname}/view.php", ['id' => $cm->id]);
-
- $table->data[] = array (
- $printsection,
- "" . $icon . $cm->get_formatted_name() . "",
- $intro);
-}
-
-echo html_writer::table($table);
-
-echo $OUTPUT->footer();
+\core_courseformat\activityoverviewbase::redirect_to_overview_page($courseid, 'resource');