AutorÃa | Ultima modificación | Ver Log |
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* This file contains the JS code to support mod_subsection in versions of the app previous to 4.5.
*
* @copyright 2024 Dani Palou <dani@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
const context = this;
/**
* Open a subsection.
*/
const openSubsection = async(module, courseId, siteId) => {
const customData = context.CoreTextUtilsProvider.parseJSON(module.customdata);
const pageParams = {
sectionId: customData.sectionid,
};
if (
(!siteId || siteId === context.CoreSitesProvider.getCurrentSiteId()) &&
context.CoreCourseProvider.currentViewIsCourse(courseId)
) {
context.CoreCourseProvider.selectCourseTab('', pageParams);
} else {
await context.CoreCourseHelperProvider.getAndOpenCourse(courseId, pageParams, siteId);
}
};
/**
* Handler to support mod_subsection in a course.
*/
class SubsectionModuleHandler {
constructor() {
this.name = 'PluginModSubsection';
this.modName = 'subsection';
}
isEnabled() {
return true;
}
getData(module) {
return {
icon: context.CoreCourseProvider.getModuleIconSrc(module.modname, module.modicon),
title: module.name,
action: async(event, module, courseId) => {
try {
await openSubsection(module, courseId);
} catch (error) {
context.CoreDomUtilsProvider.showErrorModalDefault(error, 'Error opening subsection.');
}
},
};
}
}
/**
* Handler to support links to mod_subsection.
*/
class SubsectionLinkHandler extends this.CoreContentLinksHandlerBase {
constructor() {
super();
this.name = 'PluginModSubsection';
this.priority = 0;
this.featureName = 'CoreCourseModuleDelegate_AddonModSubsection';
this.pattern = new RegExp('/mod/subsection/view.php.*([&?]id=\\d+)');
}
getActions(siteIds, url, params, courseId) {
return [{
action: async(siteId) => {
const modal = await context.CoreDomUtilsProvider.showModalLoading();
const moduleId = Number(params.id);
try {
// Get the module.
const module = await context.CoreCourseProvider.getModule(moduleId, courseId, undefined, true, false, siteId);
await openSubsection(module, module.course, siteId);
} catch (error) {
context.CoreDomUtilsProvider.showErrorModalDefault(error, 'Error opening link.');
} finally {
modal.dismiss();
}
},
}];
}
}
this.CoreCourseModuleDelegate.registerHandler(new SubsectionModuleHandler());
this.CoreContentLinksDelegate.registerHandler(new SubsectionLinkHandler());