MDL-83892 core_course: overview page redirection method
This commit is contained in:
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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();
|
||||
|
||||
+2
-122
@@ -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 = '<img src="'.$cm->get_icon_url().'" class="activityicon" alt="'.$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,
|
||||
"<a $class $extra href=\"" . $url ."\">" . $icon . $cm->get_formatted_name() . "</a>",
|
||||
$intro);
|
||||
}
|
||||
|
||||
echo html_writer::table($table);
|
||||
|
||||
echo $OUTPUT->footer();
|
||||
\core_courseformat\activityoverviewbase::redirect_to_overview_page($courseid, 'resource');
|
||||
|
||||
Reference in New Issue
Block a user