/*eslint no-var: "error" */ /*eslint no-unused-vars: "off" */ /*eslint linebreak-style: "off" */ /*eslint no-trailing-spaces: "off" */ /*eslint-env es6*/ // Put this file in path/to/plugin/amd/src // You can call it anything you like import {call} from 'core/ajax'; import notification from 'core/notification'; import Vue from './vue/vue'; import Debugger from './util/debugger'; import {load_strings} from './util/string-helper'; import {ProcessStudyplan} from './studyplan-processor'; import {studyplanTiming} from './util/date-helper'; import RVComponents from './report-viewer-components'; Vue.use(RVComponents); import TSComponents from './treestudyplan-components'; import ModalComponents from './modedit-modal'; Vue.use(ModalComponents); import PortalVue from './portal-vue/portal-vue.esm'; Vue.use(PortalVue); import BootstrapVue from './bootstrap-vue/bootstrap-vue'; Vue.use(BootstrapVue); let debug = new Debugger("treestudyplanviewer"); let strings = load_strings({ studyplan: { studyplan_select_placeholder: 'studyplan_select_placeholder', }, }); /** * Initialize the Page * @param {int} contextid The context we should attempt to work in (1:1 related to the category) * @param {int} categoryid The category we shoud attempt to work in (1:1 related to the context) */ export function init(contextid,categoryid) { // 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 const in_systemcontext = (contextid <= 1); let app = new Vue({ el: '#root', data: { displayedstudyplan: null, activestudyplan: null, associatedstudents: [], selectedstudent: null, studentstudyplan: null, loadingstudyplan: false, studyplans: [], text: strings.studyplan, toolbox: { right: true, }, usedcontexts: [], }, async mounted() { call([{ methodname: 'local_treestudyplan_list_studyplans', args: {context_id: contextid} }])[0].then(function(response){ const timingval = { present: 0, past: 1, future: 2}; response.sort((a,b) => { const timinga = studyplanTiming(a); const timingb = studyplanTiming(b); const t = timingval[timinga] - timingval[timingb]; if(t == 0){ // sort by name if timing is equal return a.name.localeCompare(b.name); } else { return t; } }); app.studyplans = response; // load studyplan from hash if applicable const hash = window.location.hash.replace('#',''); const parts = hash.split("-"); if(!!parts && parts.length > 0){ for(let idx in app.studyplans){ if(app.studyplans[idx].id == parts[0]){ app.selectStudyplan(app.studyplans[idx],parts[1]); break; } } } }).catch(notification.exception); call([{ methodname: 'local_treestudyplan_list_available_categories', args: { operation: 'view', refcontext_id: contextid} }])[0].then(function(response){ const contexts = []; for(const ix in response){ const cat = response[ix]; if(cat.studyplancount > 0 || cat.context_id == contextid){ contexts.push(cat); } } app.usedcontexts = contexts; }).catch(notification.exception); }, computed: { dropdown_title(){ if(this.activestudyplan && this.activestudyplan.name){ return this.activestudyplan.name; } else{ return this.text.studyplan_select_placeholder; } }, contextid(){ return contextid; } }, methods: { 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); }, closeStudyplan() { app.activestudyplan = null; app.associatedstudents = []; app.studentstudyplan = []; app.displayedstudyplan = null; window.location.hash = ''; }, selectStudyplan(studyplan,studentid){ // fetch studyplan app.loadingstudyplan = true; app.activestudyplan = null; app.associatedstudents = []; app.selectedstudent = null; app.studentstudyplan = null; call([{ methodname: 'local_treestudyplan_get_studyplan_map', args: { id: studyplan.id} }])[0].then(function(response){ app.activestudyplan = ProcessStudyplan(response,true); app.displayedstudyplan = app.activestudyplan; app.loadingstudyplan = false; window.location.hash = app.activestudyplan.id; call([{ methodname: 'local_treestudyplan_all_associated_grouped', args: { studyplan_id: studyplan.id} }])[0].then(function(response){ app.associatedstudents = response; if(studentid){ for(const student of app.associatedstudents){ if(student.id == studentid){ app.showStudentView(student); break; } } } }).catch(notification.exception); }).catch(function(error){ notification.exception(error); app.loadingstudyplan = false; }); }, showStudentView(student){ app.selectedstudent = student; app.studentstudyplan = null; if (student) { app.loadingstudyplan = true; call([{ methodname: 'local_treestudyplan_get_user_studyplan', args: { userid: student.id, studyplanid: app.activestudyplan.id} }])[0].then(function(response){ app.studentstudyplan = ProcessStudyplan(response,false); app.displayedstudyplan = app.studentstudyplan; app.loadingstudyplan = false; window.location.hash = app.activestudyplan.id + "-" + student.id; }).catch(function(error){ notification.exception(error); app.loadingstudyplan = false; }); } }, showOverview(){ app.selectedstudent = null; app.studentstudyplan = null; app.displayedstudyplan = app.activestudyplan; window.location.hash = app.activestudyplan.id; } }, }); }