From ecb96b508973a660d09adcc29c92acae3d2a6d22 Mon Sep 17 00:00:00 2001 From: ferran Date: Fri, 24 Jan 2025 16:38:39 +0100 Subject: [PATCH] MDL-83892 core_course: overview page redirection method --- .../format/classes/activityoverviewbase.php | 11 ++ .../output/local/overview/overviewpage.php | 15 +++ course/resources.php | 124 +----------------- 3 files changed, 28 insertions(+), 122 deletions(-) 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 = ''.$cm->get_module_type_name().' '; - - 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');