moodle_local_treestudyplan/amd/src/page-view-plan.js

203 lines
7.5 KiB
JavaScript
Raw Normal View History

/*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';
2023-08-19 17:54:40 +02:00
import Debugger from './util/debugger';
import {load_strings} from './util/string-helper';
2023-07-18 16:12:31 +02:00
import {ProcessStudyplan} from './studyplan-processor';
import RVComponents from './report-viewer-components';
Vue.use(RVComponents);
import ModalComponents from './modedit-modal';
Vue.use(ModalComponents);
2023-08-19 17:54:40 +02:00
import PortalVue from './portal-vue/portal-vue.esm';
Vue.use(PortalVue);
2023-08-31 07:40:55 +02:00
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)
*/
2023-08-19 17:54:40 +02:00
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].done(function(response){
const timingval = { present: 0, past: 1, future: 2};
response.sort((a,b) => {
const timinga = TSComponents.studyplanTiming(a);
const timingb = TSComponents.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 = location.hash.replace('#','');
const parts = hash.split("-");
2023-05-19 16:45:25 +02:00
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;
}
}
}
}).fail(notification.exception);
call([{
methodname: 'local_treestudyplan_list_used_categories',
args: { operation: 'view'}
}])[0].done(function(response){
const contexts = [];
for(const ix in response){
if(response[ix].studyplancount >0){
contexts.push(response[ix]);
}
}
app.usedcontexts = contexts;
2023-05-19 16:45:25 +02:00
}).fail(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(ctx){
const params = new URLSearchParams(location.search);
params.set('categoryid', ctx.id);
window.location.search = params.toString();
2023-05-19 16:45:25 +02:00
},
closeStudyplan() {
app.activestudyplan = null;
app.associatedstudents = [];
app.studentstudyplan = [];
app.displayedstudyplan = null;
2023-05-19 16:45:25 +02:00
},
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].done(function(response){
app.activestudyplan = ProcessStudyplan(response,true);
app.displayedstudyplan = app.activestudyplan;
app.loadingstudyplan = false;
location.hash = app.activestudyplan.id;
call([{
methodname: 'local_treestudyplan_all_associated',
args: { studyplan_id: studyplan.id}
}])[0].done(function(response){
app.associatedstudents = response;
if(studentid){
for(const student of app.associatedstudents){
if(student.id == studentid){
app.showStudentView(student);
break;
}
}
}
2023-05-19 16:45:25 +02:00
}).fail(notification.exception);
}).fail(function(error){
notification.exception(error);
app.loadingstudyplan = false;
});
},
showStudentView(student){
app.selectedstudent = student;
app.studentstudyplan = null;
app.loadingstudyplan = true;
call([{
methodname: 'local_treestudyplan_get_user_studyplan',
args: { userid: student.id, studyplanid: app.activestudyplan.id}
}])[0].done(function(response){
app.studentstudyplan = ProcessStudyplan(response,false);
app.displayedstudyplan = app.studentstudyplan;
app.loadingstudyplan = false;
location.hash = app.activestudyplan.id + "-" + student.id;
}).fail(function(error){
notification.exception(error);
app.loadingstudyplan = false;
});
},
showOverview(){
app.selectedstudent = null;
app.studentstudyplan = null;
app.displayedstudyplan = app.activestudyplan;
}
2023-05-19 16:45:25 +02:00
},
});
}