diff --git a/amd/src/page-edit-plan.js b/amd/src/page-edit-plan.js index 0e4a8d9..f20ac79 100644 --- a/amd/src/page-edit-plan.js +++ b/amd/src/page-edit-plan.js @@ -2,15 +2,15 @@ /* eslint no-unused-vars: "off" */ /* eslint linebreak-style: "off" */ /* eslint no-trailing-spaces: "off" */ +/* eslint no-empty-function: "off" */ /* eslint-env es6*/ // Put this file in path/to/plugin/amd/src // You can call it anything you like -import {get_string,get_strings} from 'core/str'; import {call} from 'core/ajax'; import notification from 'core/notification'; -//import {resetAllFormDirtyStates} from 'core_form/changechecker'; // Moodle 4.00+ only +// Commented out: import {resetAllFormDirtyStates} from 'core_form/changechecker'; // Moodle 4.00+ only import Vue from './vue/vue'; @@ -27,9 +27,9 @@ import {addBrowserButtonEvent} from './util/browserbuttonevents'; import {loadStrings} from './util/string-helper'; import {processStudyplan} from './studyplan-processor'; -import {download,upload} from './downloader'; +import {download, upload} from './downloader'; import {studyplanTiming} from './util/date-helper'; -import { premiumenabled, premiumstatus } from "./util/premium"; +import {premiumenabled, premiumstatus} from "./util/premium"; import mFormComponents from "./util/mform-helper"; Vue.use(mFormComponents); @@ -41,22 +41,21 @@ Vue.use(BootstrapVue); const debug = new Debugger("treestudyplan"); -let resetAllFormDirtyStates = () => {}; +let resetAllFormDirtyStates = () => { }; import('core_form/changechecker').then((ns) => { debug.info(ns); - if(ns.resetAllFormDirtyStates) { + if (ns.resetAllFormDirtyStates) { resetAllFormDirtyStates = ns.resetAllFormDirtyStates; } + return; }).catch(()=>{}); - - let strings = loadStrings({ studyplan: { - studyplan_select_placeholder: 'studyplan_select_placeholder', - advanced_import_from_file: 'advanced_import_from_file', - advanced_create_from_template: 'advanced_create_from_template', - studyplan_add: "studyplan_add", + 'studyplan_select_placeholder': 'studyplan_select_placeholder', + 'advanced_import_from_file': 'advanced_import_from_file', + 'advanced_create_from_template': 'advanced_create_from_template', + 'studyplan_add': "studyplan_add", }, }); @@ -66,21 +65,27 @@ let strings = loadStrings({ * @param {int} categoryid The category we shoud attempt to work in (1:1 related to the context) * @param {object} options Options to be passed to this script */ -export function init(contextid,categoryid,options) { +export function init(contextid, categoryid, options) { // Make sure the id's are numeric and integer - if(undefined === contextid || !Number.isInteger(Number(contextid)) || contextid < 1 ){ contextid = 1;} - else { contextid = Number(contextid);} // ensure a numeric value instead of string - if(undefined === categoryid || !Number.isInteger(Number(categoryid))){ categoryid = 0;} - else { categoryid = Number(categoryid);} // ensure a numeric value instead of string + if (undefined === contextid || !Number.isInteger(Number(contextid)) || contextid < 1) { + contextid = 1; + } else { + contextid = Number(contextid); // Ensure a numeric value instead of string + } + if (undefined === categoryid || !Number.isInteger(Number(categoryid))) { + categoryid = 0; + } else { + categoryid = Number(categoryid); // Ensure a numeric value instead of string + } - debug.info("options",options); - if ( options !== null && typeof options === 'object' && !Array.isArray(options) ) { - if ( !options.defaultAggregation ) { + debug.info("options", options); + if (options !== null && typeof options === 'object' && !Array.isArray(options)) { + if (!options.defaultAggregation) { options.defaultAggregation = "core"; } } else { - options = { defaultAggregation: "core"}; + options = {defaultAggregation: "core"}; } // Setup the initial Vue app for this page @@ -93,12 +98,12 @@ export function init(contextid,categoryid,options) { shortname: '', description: '', idnumber: '', - slots : 4, + slots: 4, startdate: '2020-08-01', enddate: '', context: contextid, aggregation: options.defaultAggregation, - aggregation_config: '', + 'aggregation_config': '', } }, @@ -112,21 +117,21 @@ export function init(contextid,categoryid,options) { usedcontexts: [], }, created() { - this.$root.$on('studyplanRemoved',(studyplan)=>{ + this.$root.$on('studyplanRemoved', (studyplan)=>{ - if(app.activestudyplan == studyplan){ + if (app.activestudyplan == studyplan) { app.activestudyplan = null; } - // remove studyplan from index list + // Remove studyplan from index list let index = null; - for(let idx in app.studyplans){ - if(app.studyplans[idx].id == studyplan.id){ + for (let idx in app.studyplans) { + if (app.studyplans[idx].id == studyplan.id) { index = idx; break; } } - if(index){ + if (index) { app.studyplans.splice(index, 1); } @@ -141,15 +146,14 @@ export function init(contextid,categoryid,options) { }, computed: { premiumenabled, - dropdown_title(){ - if(this.activestudyplan && this.activestudyplan.name){ + dropdownTitle() { + if (this.activestudyplan && this.activestudyplan.name) { return this.activestudyplan.name; - } - else{ + } else { return this.text.studyplan_select_placeholder; } }, - contextid(){ + contextid() { return contextid; }, @@ -165,20 +169,20 @@ export function init(contextid,categoryid,options) { initialize() { call([{ methodname: 'local_treestudyplan_list_studyplans', - args: { context_id: contextid} - }])[0].then(function(response){ - const timingval = { future: 0, present: 1, past: 2, }; - response.sort((a,b) => { + args: {'context_id': contextid} + }])[0].then(function(response) { + const timingval = {future: 0, present: 1, past: 2}; + response.sort((a, b) => { const timinga = studyplanTiming(a); const timingb = studyplanTiming(b); let t = timingval[timinga] - timingval[timingb]; - if(t == 0){ - // sort by start date if timing is equal + if (t == 0) { + // Sort by start date if timing is equal t = new Date(b.startdate).getTime() - new Date(a.startdate).getTime(); if (t == 0) { - // sort by name if timing is equal + // Sort by name if timing is equal t = a.name.localeCompare(b.name); } } @@ -186,51 +190,54 @@ export function init(contextid,categoryid,options) { }); app.studyplans = response; - // load studyplan from hash if applicable - const hash = location.hash.replace('#',''); - if(hash){ + // Load studyplan from hash if applicable + const hash = location.hash.replace('#', ''); + if (hash) { const id = hash; - for(const p of app.studyplans) { + for (const p of app.studyplans) { if (p.id == id) { app.selectStudyplan(id); break; } } } + return; }).catch(notification.exception); call([{ methodname: 'local_treestudyplan_list_available_categories', - args: { operation: 'edit', refcontext_id: contextid} - }])[0].then(function(response){ + args: {operation: 'edit', 'refcontext_id': contextid} + }])[0].then(function(response) { app.usedcontexts = response; + return; }).catch(notification.exception); this.refreshTemplateCount(); }, - refreshTemplateCount(){ + refreshTemplateCount() { call([{ methodname: 'local_treestudyplan_count_templates', args: { } - }])[0].then(function(response){ + }])[0].then(function(response) { app.templatecount = response; + return; }).catch(notification.exception); }, closeStudyplan() { app.activestudyplan = null; window.location.hash = ''; }, - movedStudyplan(plan,from,to) { - // reload the page in the new context (needed, since a number of links are not reactive in the page) + movedStudyplan(plan, from, to) { + // Reload the page in the new context (needed, since a number of links are not reactive in the page) const params = new URLSearchParams(location.search); params.delete('categoryid'); params.set("contextid", to); setTimeout(() => { // Reload page in a timeout to give other form javasccript the change to remove the beforeunload handler. window.location.search = params.toString(); - },50); + }, 50); }, - onStudyPlanCreated(newstudyplan){ + onStudyPlanCreated(newstudyplan) { if (newstudyplan.context_id != contextid) { // Study plan has changed context id - reload page into new context id and show the plan const params = new URLSearchParams(location.search); @@ -244,69 +251,53 @@ export function init(contextid,categoryid,options) { app.selectStudyplan(newstudyplan.id); } }, - switchContext(ctxid){ + switchContext(ctxid) { const params = new URLSearchParams(location.search); params.delete('categoryid'); params.set('contextid', ctxid); setTimeout(() => { // Reload page in a timeout to give other form javasccript the change to remove the beforeunload handler. window.location.href = window.location.pathname + "?" + params.toString(); - },50); + }, 50); }, - selectStudyplan(studyplanid){ - // fetch studyplan + selectStudyplan(studyplanid) { + // Fetch studyplan app.loadingstudyplan = true; app.activestudyplan = null; call([{ methodname: 'local_treestudyplan_get_studyplan_map', - args: { id: studyplanid} - }])[0].then(function(response){ + args: {id: studyplanid} + }])[0].then(function(response) { app.activestudyplan = processStudyplan(response); debug.info('studyplan processed'); app.loadingstudyplan = false; window.location.hash = app.activestudyplan.id; - }).catch(function(error){ + return; + }).catch(function(error) { notification.exception(error); app.loadingstudyplan = false; }); }, - import_studyplan(){ + importStudyplan() { const self = this; - upload((filename,content)=>{ + upload((filename, content)=>{ call([{ methodname: 'local_treestudyplan_import_plan', args: { content: content, format: "application/json", - context_id: contextid, + 'context_id': contextid, }, - }])[0].then(function(response){ - if(response.success){ + }])[0].then(function(response) { + if (response.success) { self.initialize(); } else { - debug.error("Import failed: ",response.msg); + debug.error("Import failed: ", response.msg); } - + return; }).catch(notification.exception); }, "application/json"); }, - export_plan(plan,format){ - let self = this; - if(format == undefined || !["json","csv"].includes(format)){ - format = "json"; - } - call([{ - methodname: 'local_treestudyplan_export_plan', - args: { - studyplan_id: plan.id, - format: format - }, - }])[0].then(function(response){ - - download(plan.shortname+".json",response.content,response.format); - }).catch(notification.exception); - }, - }, }); }