diff --git a/amd/build/page-edit-plan.min.js b/amd/build/page-edit-plan.min.js index 59bc758..9ece328 100644 --- a/amd/build/page-edit-plan.min.js +++ b/amd/build/page-edit-plan.min.js @@ -1,3 +1,3 @@ -define("local_treestudyplan/page-edit-plan",["exports","core/str","core/ajax","core/notification","./vue/vue","./studyplan-editor-components","./treestudyplan-components","./modedit-modal","./util/debugger","./util/string-helper","./studyplan-processor","./downloader","./util/date-helper","./portal-vue/portal-vue.esm","./bootstrap-vue/bootstrap-vue","./vue-easy-dnd/vue-easy-dnd.esm"],(function(_exports,_str,_ajax,_notification,_vue,_studyplanEditorComponents,_treestudyplanComponents,_modeditModal,_debugger,_stringHelper,_studyplanProcessor,_downloader,_dateHelper,_portalVue,_bootstrapVue,_vueEasyDnd){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=function(contextid,categoryid,options){contextid=void 0===contextid||!Number.isInteger(Number(contextid))||contextid<1?1:Number(contextid);categoryid=void 0!==categoryid&&Number.isInteger(Number(categoryid))?Number(categoryid):0;debug.info("options",options),null===options||"object"!=typeof options||Array.isArray(options)?options={defaultAggregation:"core",editMode:!1}:(options.defaultAggregation||(options.defaultAggregation="core"),options.editMode||(options.editMode=!1));let app=new _vue.default({el:"#root",data:{create:{studyplan:{name:"",shortname:"",description:"",idnumber:"",slots:4,startdate:"2020-08-01",enddate:"",context:contextid,aggregation:options.defaultAggregation,aggregation_config:""}},toolbox:{shown:!1,right:!0},filters:{systembadges:"",relatedbadges:""},activestudyplan:null,activepage:null,loadingstudyplan:!1,studyplans:[],frameworks:[],relatedbadges:[],systembadges:[],courses:[],text:strings.studyplan,usedcontexts:[],initialEditMode:!!options.editMode},created(){this.$root.$on("studyplanRemoved",(studyplan=>{app.activestudyplan==studyplan&&(app.activestudyplan=null);let index=null;for(let idx in app.studyplans)if(app.studyplans[idx].id==studyplan.id){index=idx;break}index&&app.studyplans.splice(index,1)}))},mounted(){this.initialize()},computed:{dropdown_title(){return this.activestudyplan&&this.activestudyplan.name?this.activestudyplan.name:this.text.studyplan_select_placeholder},contextid:()=>contextid,filterComponentType:()=>({item:!1,component:!0,span:1,type:"filter"})},methods:{initialize(){(0,_ajax.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)=>{const timinga=(0,_dateHelper.studyplanTiming)(a),timingb=(0,_dateHelper.studyplanTiming)(b);let t=timingval[timinga]-timingval[timingb];return 0==t&&(t=new Date(b.startdate).getTime()-new Date(a.startdate).getTime(),0==t&&(t=a.name.localeCompare(b.name))),t})),app.studyplans=response;const hash=location.hash.replace("#","");if(hash)for(let idx in app.studyplans)if(app.studyplans[idx].id==hash){app.selectStudyplan(app.studyplans[idx]);break}})).catch(_notification.default.exception),(0,_ajax.call)([{methodname:"local_treestudyplan_map_categories",args:{}}])[0].then((function(response){app.courses=response})).catch(_notification.default.exception),(0,_ajax.call)([{methodname:"local_treestudyplan_list_used_categories",args:{operation:"edit",refcontext_id:contextid}}])[0].then((function(response){app.usedcontexts=response})).catch(_notification.default.exception),this.filter_systembadges()},closeStudyplan(){app.activestudyplan=null,window.location.hash=""},movedStudyplan(plan,from,to){const params=new URLSearchParams(location.search);params.delete("categoryid"),params.set("contextid",to),setTimeout((()=>{window.location.search=params.toString()}),50)},onStudyPlanCreated(newstudyplan){if(newstudyplan.context_id!=contextid){const params=new URLSearchParams(location.search);params.delete("categoryid"),params.set("contextid",newstudyplan.context_id),setTimeout((()=>{window.location=window.location.pathname+"?"+params.toString()+"#"+newstudyplan.id}),50)}else app.studyplans.push(newstudyplan),app.selectStudyplan(newstudyplan)},switchContext(cat){const params=new URLSearchParams(location.search);params.delete("categoryid"),params.set("contextid",cat.context_id),window.location.search=params.toString()},selectStudyplan(studyplan){app.loadingstudyplan=!0,app.activestudyplan=null,(0,_ajax.call)([{methodname:"local_treestudyplan_get_studyplan_map",args:{id:studyplan.id}}])[0].then((function(response){app.activestudyplan=(0,_studyplanProcessor.ProcessStudyplan)(response),debug.info("studyplan processed"),app.loadingstudyplan=!1,window.location.hash=app.activestudyplan.id})).catch((function(error){_notification.default.exception(error),app.loadingstudyplan=!1}))},onPageChange(page){this.activepage=page,this.filter_relatedbadges()},import_studyplan(){const self=this;(0,_downloader.upload)(((filename,content)=>{(0,_ajax.call)([{methodname:"local_treestudyplan_import_plan",args:{content:content,format:"application/json",context_id:contextid}}])[0].then((function(response){response.success?self.initialize():debug.error("Import failed: ",response.msg)})).catch(_notification.default.exception)}),"application/json")},export_plan(plan,format){null!=format&&["json","csv"].includes(format)||(format="json"),(0,_ajax.call)([{methodname:"local_treestudyplan_export_plan",args:{studyplan_id:plan.id,format:format}}])[0].then((function(response){(0,_downloader.download)(plan.shortname+".json",response.content,response.format)})).catch(_notification.default.exception)},toggletoolbox(event){debug.info(event),this.toolbox.shown=event},filter_systembadges(){const self=this;(0,_ajax.call)([{methodname:"local_treestudyplan_search_badges",args:{search:this.filters.systembadges||""}}])[0].then((function(response){self.systembadges=response})).catch(_notification.default.exception)},filter_relatedbadges(){const self=this;this.activepage&&(0,_ajax.call)([{methodname:"local_treestudyplan_search_related_badges",args:{page_id:this.activepage.id,search:this.filters.relatedbadges||""}}])[0].then((function(response){self.relatedbadges=response})).catch(_notification.default.exception)},reset_systembadges(){this.filters.systembadges="",this.filter_systembadges()},reset_relatedbadges(){this.filters.relatedbadges="",this.filter_relatedbadges()}}})},_notification=_interopRequireDefault(_notification),_vue=_interopRequireDefault(_vue),_studyplanEditorComponents=_interopRequireDefault(_studyplanEditorComponents),_treestudyplanComponents=_interopRequireDefault(_treestudyplanComponents),_modeditModal=_interopRequireDefault(_modeditModal),_debugger=_interopRequireDefault(_debugger),_portalVue=_interopRequireDefault(_portalVue),_bootstrapVue=_interopRequireDefault(_bootstrapVue),_vue.default.use(_studyplanEditorComponents.default),_vue.default.use(_treestudyplanComponents.default),_vue.default.use(_modeditModal.default),_vue.default.use(_portalVue.default),_vue.default.use(_bootstrapVue.default),_vue.default.component("drag",_vueEasyDnd.Drag),_vue.default.component("drop",_vueEasyDnd.Drop),_vue.default.component("drop-list",_vueEasyDnd.DropList);const debug=new _debugger.default("treestudyplan");let strings=(0,_stringHelper.load_strings)({studyplan:{studyplan_select_placeholder:"studyplan_select_placeholder"}})})); +define("local_treestudyplan/page-edit-plan",["exports","core/str","core/ajax","core/notification","./vue/vue","./studyplan-editor-components","./treestudyplan-components","./modedit-modal","./util/debugger","./util/string-helper","./studyplan-processor","./downloader","./util/date-helper","./portal-vue/portal-vue.esm","./bootstrap-vue/bootstrap-vue","./vue-easy-dnd/vue-easy-dnd.esm"],(function(_exports,_str,_ajax,_notification,_vue,_studyplanEditorComponents,_treestudyplanComponents,_modeditModal,_debugger,_stringHelper,_studyplanProcessor,_downloader,_dateHelper,_portalVue,_bootstrapVue,_vueEasyDnd){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _typeof(obj){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj},_typeof(obj)}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=function(_contextid,categoryid,options){_contextid=void 0===_contextid||!Number.isInteger(Number(_contextid))||_contextid<1?1:Number(_contextid);categoryid=void 0!==categoryid&&Number.isInteger(Number(categoryid))?Number(categoryid):0;debug.info("options",options),null===options||"object"!==_typeof(options)||Array.isArray(options)?options={defaultAggregation:"core",editMode:!1}:(options.defaultAggregation||(options.defaultAggregation="core"),options.editMode||(options.editMode=!1));var app=new _vue.default({el:"#root",data:{create:{studyplan:{name:"",shortname:"",description:"",idnumber:"",slots:4,startdate:"2020-08-01",enddate:"",context:_contextid,aggregation:options.defaultAggregation,aggregation_config:""}},toolbox:{shown:!1,right:!0},filters:{systembadges:"",relatedbadges:""},activestudyplan:null,activepage:null,loadingstudyplan:!1,studyplans:[],frameworks:[],relatedbadges:[],systembadges:[],courses:[],text:strings.studyplan,usedcontexts:[],initialEditMode:!!options.editMode},created:function(){this.$root.$on("studyplanRemoved",(function(studyplan){app.activestudyplan==studyplan&&(app.activestudyplan=null);var index=null;for(var idx in app.studyplans)if(app.studyplans[idx].id==studyplan.id){index=idx;break}index&&app.studyplans.splice(index,1)}))},mounted:function(){this.initialize()},computed:{dropdown_title:function(){return this.activestudyplan&&this.activestudyplan.name?this.activestudyplan.name:this.text.studyplan_select_placeholder},contextid:function(){return _contextid},filterComponentType:function(){return{item:!1,component:!0,span:1,type:"filter"}}},methods:{initialize:function(){(0,_ajax.call)([{methodname:"local_treestudyplan_list_studyplans",args:{context_id:_contextid}}])[0].then((function(response){var timingval={future:0,present:1,past:2};response.sort((function(a,b){var timinga=(0,_dateHelper.studyplanTiming)(a),timingb=(0,_dateHelper.studyplanTiming)(b),t=timingval[timinga]-timingval[timingb];return 0==t&&0==(t=new Date(b.startdate).getTime()-new Date(a.startdate).getTime())&&(t=a.name.localeCompare(b.name)),t})),app.studyplans=response;var hash=location.hash.replace("#","");if(hash)for(var idx in app.studyplans)if(app.studyplans[idx].id==hash){app.selectStudyplan(app.studyplans[idx]);break}})).catch(_notification.default.exception),(0,_ajax.call)([{methodname:"local_treestudyplan_map_categories",args:{}}])[0].then((function(response){app.courses=response})).catch(_notification.default.exception),(0,_ajax.call)([{methodname:"local_treestudyplan_list_used_categories",args:{operation:"edit",refcontext_id:_contextid}}])[0].then((function(response){app.usedcontexts=response})).catch(_notification.default.exception),this.filter_systembadges()},closeStudyplan:function(){app.activestudyplan=null,window.location.hash=""},movedStudyplan:function(plan,from,to){var params=new URLSearchParams(location.search);params.delete("categoryid"),params.set("contextid",to),setTimeout((function(){window.location.search=params.toString()}),50)},onStudyPlanCreated:function(newstudyplan){if(newstudyplan.context_id!=_contextid){var params=new URLSearchParams(location.search);params.delete("categoryid"),params.set("contextid",newstudyplan.context_id),setTimeout((function(){window.location=window.location.pathname+"?"+params.toString()+"#"+newstudyplan.id}),50)}else app.studyplans.push(newstudyplan),app.selectStudyplan(newstudyplan)},switchContext:function(ctxid){var params=new URLSearchParams(location.search);params.delete("categoryid"),params.set("contextid",ctxid),setTimeout((function(){window.location.href=window.location.pathname+"?"+params.toString()}),50)},selectStudyplan:function(studyplan){app.loadingstudyplan=!0,app.activestudyplan=null,(0,_ajax.call)([{methodname:"local_treestudyplan_get_studyplan_map",args:{id:studyplan.id}}])[0].then((function(response){app.activestudyplan=(0,_studyplanProcessor.ProcessStudyplan)(response),debug.info("studyplan processed"),app.loadingstudyplan=!1,window.location.hash=app.activestudyplan.id})).catch((function(error){_notification.default.exception(error),app.loadingstudyplan=!1}))},onPageChange:function(page){this.activepage=page,this.filter_relatedbadges()},import_studyplan:function(){var self=this;(0,_downloader.upload)((function(filename,content){(0,_ajax.call)([{methodname:"local_treestudyplan_import_plan",args:{content:content,format:"application/json",context_id:_contextid}}])[0].then((function(response){response.success?self.initialize():debug.error("Import failed: ",response.msg)})).catch(_notification.default.exception)}),"application/json")},export_plan:function(plan,format){null!=format&&["json","csv"].includes(format)||(format="json"),(0,_ajax.call)([{methodname:"local_treestudyplan_export_plan",args:{studyplan_id:plan.id,format:format}}])[0].then((function(response){(0,_downloader.download)(plan.shortname+".json",response.content,response.format)})).catch(_notification.default.exception)},toggletoolbox:function(event){debug.info(event),this.toolbox.shown=event},filter_systembadges:function(){var self=this;(0,_ajax.call)([{methodname:"local_treestudyplan_search_badges",args:{search:this.filters.systembadges||""}}])[0].then((function(response){self.systembadges=response})).catch(_notification.default.exception)},filter_relatedbadges:function(){var self=this;this.activepage&&(0,_ajax.call)([{methodname:"local_treestudyplan_search_related_badges",args:{page_id:this.activepage.id,search:this.filters.relatedbadges||""}}])[0].then((function(response){self.relatedbadges=response})).catch(_notification.default.exception)},reset_systembadges:function(){this.filters.systembadges="",this.filter_systembadges()},reset_relatedbadges:function(){this.filters.relatedbadges="",this.filter_relatedbadges()}}})},_notification=_interopRequireDefault(_notification),_vue=_interopRequireDefault(_vue),_studyplanEditorComponents=_interopRequireDefault(_studyplanEditorComponents),_treestudyplanComponents=_interopRequireDefault(_treestudyplanComponents),_modeditModal=_interopRequireDefault(_modeditModal),_debugger=_interopRequireDefault(_debugger),_portalVue=_interopRequireDefault(_portalVue),_bootstrapVue=_interopRequireDefault(_bootstrapVue),_vue.default.use(_studyplanEditorComponents.default),_vue.default.use(_treestudyplanComponents.default),_vue.default.use(_modeditModal.default),_vue.default.use(_portalVue.default),_vue.default.use(_bootstrapVue.default),_vue.default.component("drag",_vueEasyDnd.Drag),_vue.default.component("drop",_vueEasyDnd.Drop),_vue.default.component("drop-list",_vueEasyDnd.DropList);var debug=new _debugger.default("treestudyplan"),strings=(0,_stringHelper.load_strings)({studyplan:{studyplan_select_placeholder:"studyplan_select_placeholder"}})})); //# sourceMappingURL=page-edit-plan.min.js.map \ No newline at end of file diff --git a/amd/build/page-edit-plan.min.js.map b/amd/build/page-edit-plan.min.js.map index d057b63..8e979f9 100644 --- a/amd/build/page-edit-plan.min.js.map +++ b/amd/build/page-edit-plan.min.js.map @@ -1 +1 @@ -{"version":3,"file":"page-edit-plan.min.js","sources":["../src/page-edit-plan.js"],"sourcesContent":["/*eslint no-var: \"error\" */\n/*eslint no-unused-vars: \"off\" */\n/*eslint linebreak-style: \"off\" */\n/*eslint no-trailing-spaces: \"off\" */\n/*eslint-env es6*/\n// Put this file in path/to/plugin/amd/src\n// You can call it anything you like\n\nimport {get_string,get_strings} from 'core/str';\nimport {call} from 'core/ajax';\nimport notification from 'core/notification';\n\nimport Vue from './vue/vue';\n\n\nimport EditorComponents from './studyplan-editor-components';\nVue.use(EditorComponents);\n\nimport TSComponents from './treestudyplan-components';\nVue.use(TSComponents);\n\nimport ModalComponents from './modedit-modal';\nVue.use(ModalComponents);\nimport Debugger from './util/debugger';\n\nimport {load_strings} from './util/string-helper';\nimport {ProcessStudyplan} from './studyplan-processor';\nimport {download,upload} from './downloader';\nimport {studyplanTiming} from './util/date-helper';\n\nimport PortalVue from './portal-vue/portal-vue.esm';\nVue.use(PortalVue);\nimport BootstrapVue from './bootstrap-vue/bootstrap-vue';\nVue.use(BootstrapVue);\n\nimport {Drag, Drop, DropList} from './vue-easy-dnd/vue-easy-dnd.esm';\nVue.component('drag',Drag);\nVue.component('drop',Drop);\nVue.component('drop-list',DropList);\n\nconst debug = new Debugger(\"treestudyplan\");\n\nlet strings = load_strings({\n studyplan: {\n studyplan_select_placeholder: 'studyplan_select_placeholder',\n },\n});\n\n/**\n * Initialize the Page\n * @param {int} contextid The context we should attempt to work in (1:1 related to the category)\n * @param {int} categoryid The category we shoud attempt to work in (1:1 related to the context)\n * @param {object} options Options to be passed to this script\n */\nexport function init(contextid,categoryid,options) {\n // Make sure the id's are numeric and integer\n if(undefined === contextid || !Number.isInteger(Number(contextid)) || contextid < 1 ){ contextid = 1;}\n else { contextid = Number(contextid);} // ensure a numeric value instead of string\n if(undefined === categoryid || !Number.isInteger(Number(categoryid))){ categoryid = 0;}\n else { categoryid = Number(categoryid);} // ensure a numeric value instead of string\n\n debug.info(\"options\",options);\n if ( options !== null && typeof options === 'object' && !Array.isArray(options) ) {\n if ( !options.defaultAggregation ) {\n options.defaultAggregation = \"core\";\n }\n if ( !options.editMode ) {\n options.editMode = false;\n }\n } else {\n options = { defaultAggregation: \"core\", editMode: false};\n }\n\n // Setup the initial Vue app for this page\n let app = new Vue({\n el: '#root',\n data: {\n create: {\n studyplan: {\n name: '',\n shortname: '',\n description: '',\n idnumber: '',\n slots : 4,\n startdate: '2020-08-01',\n enddate: '',\n context: contextid,\n aggregation: options.defaultAggregation,\n aggregation_config: '',\n }\n },\n toolbox: {\n shown: false,\n right: true,\n },\n filters: {\n systembadges: \"\",\n relatedbadges: \"\",\n },\n activestudyplan: null,\n activepage: null,\n loadingstudyplan: false,\n studyplans: [],\n frameworks: [],\n relatedbadges: [],\n systembadges: [],\n courses: [],\n text: strings.studyplan,\n usedcontexts: [],\n initialEditMode: !!options.editMode,\n },\n created() {\n this.$root.$on('studyplanRemoved',(studyplan)=>{\n\n if(app.activestudyplan == studyplan){\n app.activestudyplan = null;\n }\n\n // remove studyplan from index list\n let index = null;\n for(let idx in app.studyplans){\n if(app.studyplans[idx].id == studyplan.id){\n index = idx;\n break;\n }\n }\n if(index){\n app.studyplans.splice(index, 1);\n }\n\n });\n },\n mounted() {\n this.initialize();\n },\n computed: {\n dropdown_title(){\n if(this.activestudyplan && this.activestudyplan.name){\n return this.activestudyplan.name;\n }\n else{\n return this.text.studyplan_select_placeholder;\n }\n },\n contextid(){\n return contextid;\n },\n filterComponentType(){\n return {\n item: false,\n component: true,\n span: 1,\n type: 'filter',\n };\n },\n },\n methods: {\n initialize() {\n call([{\n methodname: 'local_treestudyplan_list_studyplans',\n args: { context_id: contextid}\n }])[0].then(function(response){\n const timingval = { future: 0, present: 1, past: 2, };\n response.sort((a,b) => {\n const timinga = studyplanTiming(a);\n const timingb = studyplanTiming(b);\n \n let t = timingval[timinga] - timingval[timingb];\n if(t == 0){\n // sort by start date if timing is equal\n t = new Date(b.startdate).getTime() - new Date(a.startdate).getTime();\n \n if (t == 0) {\n // sort by name if timing is equal\n t = a.name.localeCompare(b.name);\n }\n }\n return t;\n });\n app.studyplans = response;\n \n // load studyplan from hash if applicable\n const hash = location.hash.replace('#','');\n if(hash){\n for(let idx in app.studyplans){\n if(app.studyplans[idx].id == hash){\n app.selectStudyplan(app.studyplans[idx]);\n break;\n }\n }\n }\n }).catch(notification.exception);\n call([{\n methodname: 'local_treestudyplan_map_categories',\n args: {}\n }])[0].then(function(response){\n app.courses = response;\n }).catch(notification.exception);\n call([{\n methodname: 'local_treestudyplan_list_used_categories',\n args: { operation: 'edit', refcontext_id: contextid}\n }])[0].then(function(response){\n app.usedcontexts = response;\n }).catch(notification.exception);\n this.filter_systembadges();\n },\n closeStudyplan() {\n app.activestudyplan = null;\n window.location.hash = '';\n },\n movedStudyplan(plan,from,to) {\n // reload the page in the new context (needed, since a number of links are not reactive in the page)\n const params = new URLSearchParams(location.search);\n params.delete('categoryid');\n params.set(\"contextid\", to);\n setTimeout(() => {\n // Reload page in a timeout to give other form javasccript the change to remove the beforeunload handler.\n window.location.search = params.toString();\n },50);\n },\n onStudyPlanCreated(newstudyplan){\n if (newstudyplan.context_id != contextid) {\n // Study plan has changed context id - reload page into new context id and show the plan\n const params = new URLSearchParams(location.search);\n params.delete('categoryid');\n params.set(\"contextid\", newstudyplan.context_id);\n setTimeout(() => {\n // Reload page in a timeout to give other form javasccript the change to remove the beforeunload handler.\n window.location = window.location.pathname + \"?\" + params.toString() + \"#\" + newstudyplan.id;\n },50);\n } else {\n app.studyplans.push(newstudyplan);\n app.selectStudyplan(newstudyplan);\n }\n },\n switchContext(cat){\n const params = new URLSearchParams(location.search);\n params.delete('categoryid');\n params.set('contextid', cat.context_id);\n window.location.search = params.toString();\n },\n selectStudyplan(studyplan){\n // fetch studyplan\n app.loadingstudyplan = true;\n app.activestudyplan = null;\n call([{\n methodname: 'local_treestudyplan_get_studyplan_map',\n args: { id: studyplan.id}\n }])[0].then(function(response){\n app.activestudyplan = ProcessStudyplan(response);\n debug.info('studyplan processed');\n app.loadingstudyplan = false;\n window.location.hash = app.activestudyplan.id;\n }).catch(function(error){\n notification.exception(error);\n app.loadingstudyplan = false;\n });\n },\n onPageChange(page) {\n this.activepage = page;\n this.filter_relatedbadges();\n },\n import_studyplan(){\n const self = this;\n upload((filename,content)=>{\n call([{\n methodname: 'local_treestudyplan_import_plan',\n args: {\n content: content,\n format: \"application/json\",\n context_id: contextid,\n },\n }])[0].then(function(response){\n if(response.success){\n self.initialize();\n } else {\n debug.error(\"Import failed: \",response.msg);\n }\n\n }).catch(notification.exception);\n }, \"application/json\");\n },\n export_plan(plan,format){\n let self = this;\n if(format == undefined || ![\"json\",\"csv\"].includes(format)){\n format = \"json\";\n }\n call([{\n methodname: 'local_treestudyplan_export_plan',\n args: {\n studyplan_id: plan.id,\n format: format\n },\n }])[0].then(function(response){\n\n download(plan.shortname+\".json\",response.content,response.format);\n }).catch(notification.exception);\n },\n toggletoolbox(event) {\n debug.info(event);\n this.toolbox.shown = event;\n },\n filter_systembadges() {\n const self = this;\n call([{\n methodname: 'local_treestudyplan_search_badges',\n args: { \n search: this.filters.systembadges || \"\"\n }\n }])[0].then(function(response){\n self.systembadges = response;\n }).catch(notification.exception);\n },\n filter_relatedbadges() {\n const self = this;\n if (this.activepage) {\n call([{\n methodname: 'local_treestudyplan_search_related_badges',\n args: { \n page_id: this.activepage.id,\n search: this.filters.relatedbadges || \"\"\n }\n }])[0].then(function(response){\n self.relatedbadges = response;\n }).catch(notification.exception);\n }\n },\n reset_systembadges() {\n this.filters.systembadges = \"\";\n this.filter_systembadges();\n },\n reset_relatedbadges() {\n this.filters.relatedbadges = \"\";\n this.filter_relatedbadges();\n },\n },\n });\n}\n\n"],"names":["contextid","categoryid","options","undefined","Number","isInteger","debug","info","Array","isArray","defaultAggregation","editMode","app","Vue","el","data","create","studyplan","name","shortname","description","idnumber","slots","startdate","enddate","context","aggregation","aggregation_config","toolbox","shown","right","filters","systembadges","relatedbadges","activestudyplan","activepage","loadingstudyplan","studyplans","frameworks","courses","text","strings","usedcontexts","initialEditMode","created","$root","$on","index","idx","id","splice","mounted","initialize","computed","dropdown_title","this","studyplan_select_placeholder","filterComponentType","item","component","span","type","methods","methodname","args","context_id","then","response","timingval","future","present","past","sort","a","b","timinga","timingb","t","Date","getTime","localeCompare","hash","location","replace","selectStudyplan","catch","notification","exception","operation","refcontext_id","filter_systembadges","closeStudyplan","window","movedStudyplan","plan","from","to","params","URLSearchParams","search","delete","set","setTimeout","toString","onStudyPlanCreated","newstudyplan","pathname","push","switchContext","cat","error","onPageChange","page","filter_relatedbadges","import_studyplan","self","filename","content","format","success","msg","export_plan","includes","studyplan_id","toggletoolbox","event","page_id","reset_systembadges","reset_relatedbadges","use","EditorComponents","TSComponents","ModalComponents","PortalVue","BootstrapVue","Drag","Drop","DropList","Debugger"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"page-edit-plan.min.js","sources":["../src/page-edit-plan.js"],"sourcesContent":["/*eslint no-var: \"error\" */\n/*eslint no-unused-vars: \"off\" */\n/*eslint linebreak-style: \"off\" */\n/*eslint no-trailing-spaces: \"off\" */\n/*eslint-env es6*/\n// Put this file in path/to/plugin/amd/src\n// You can call it anything you like\n\nimport {get_string,get_strings} from 'core/str';\nimport {call} from 'core/ajax';\nimport notification from 'core/notification';\n\nimport Vue from './vue/vue';\n\n\nimport EditorComponents from './studyplan-editor-components';\nVue.use(EditorComponents);\n\nimport TSComponents from './treestudyplan-components';\nVue.use(TSComponents);\n\nimport ModalComponents from './modedit-modal';\nVue.use(ModalComponents);\nimport Debugger from './util/debugger';\n\nimport {load_strings} from './util/string-helper';\nimport {ProcessStudyplan} from './studyplan-processor';\nimport {download,upload} from './downloader';\nimport {studyplanTiming} from './util/date-helper';\n\nimport PortalVue from './portal-vue/portal-vue.esm';\nVue.use(PortalVue);\nimport BootstrapVue from './bootstrap-vue/bootstrap-vue';\nVue.use(BootstrapVue);\n\nimport {Drag, Drop, DropList} from './vue-easy-dnd/vue-easy-dnd.esm';\nVue.component('drag',Drag);\nVue.component('drop',Drop);\nVue.component('drop-list',DropList);\n\nconst debug = new Debugger(\"treestudyplan\");\n\nlet strings = load_strings({\n studyplan: {\n studyplan_select_placeholder: 'studyplan_select_placeholder',\n },\n});\n\n/**\n * Initialize the Page\n * @param {int} contextid The context we should attempt to work in (1:1 related to the category)\n * @param {int} categoryid The category we shoud attempt to work in (1:1 related to the context)\n * @param {object} options Options to be passed to this script\n */\nexport function init(contextid,categoryid,options) {\n // Make sure the id's are numeric and integer\n if(undefined === contextid || !Number.isInteger(Number(contextid)) || contextid < 1 ){ contextid = 1;}\n else { contextid = Number(contextid);} // ensure a numeric value instead of string\n if(undefined === categoryid || !Number.isInteger(Number(categoryid))){ categoryid = 0;}\n else { categoryid = Number(categoryid);} // ensure a numeric value instead of string\n\n debug.info(\"options\",options);\n if ( options !== null && typeof options === 'object' && !Array.isArray(options) ) {\n if ( !options.defaultAggregation ) {\n options.defaultAggregation = \"core\";\n }\n if ( !options.editMode ) {\n options.editMode = false;\n }\n } else {\n options = { defaultAggregation: \"core\", editMode: false};\n }\n\n // Setup the initial Vue app for this page\n let app = new Vue({\n el: '#root',\n data: {\n create: {\n studyplan: {\n name: '',\n shortname: '',\n description: '',\n idnumber: '',\n slots : 4,\n startdate: '2020-08-01',\n enddate: '',\n context: contextid,\n aggregation: options.defaultAggregation,\n aggregation_config: '',\n }\n },\n toolbox: {\n shown: false,\n right: true,\n },\n filters: {\n systembadges: \"\",\n relatedbadges: \"\",\n },\n activestudyplan: null,\n activepage: null,\n loadingstudyplan: false,\n studyplans: [],\n frameworks: [],\n relatedbadges: [],\n systembadges: [],\n courses: [],\n text: strings.studyplan,\n usedcontexts: [],\n initialEditMode: !!options.editMode,\n },\n created() {\n this.$root.$on('studyplanRemoved',(studyplan)=>{\n\n if(app.activestudyplan == studyplan){\n app.activestudyplan = null;\n }\n\n // remove studyplan from index list\n let index = null;\n for(let idx in app.studyplans){\n if(app.studyplans[idx].id == studyplan.id){\n index = idx;\n break;\n }\n }\n if(index){\n app.studyplans.splice(index, 1);\n }\n\n });\n },\n mounted() {\n this.initialize();\n },\n computed: {\n dropdown_title(){\n if(this.activestudyplan && this.activestudyplan.name){\n return this.activestudyplan.name;\n }\n else{\n return this.text.studyplan_select_placeholder;\n }\n },\n contextid(){\n return contextid;\n },\n filterComponentType(){\n return {\n item: false,\n component: true,\n span: 1,\n type: 'filter',\n };\n },\n },\n methods: {\n initialize() {\n call([{\n methodname: 'local_treestudyplan_list_studyplans',\n args: { context_id: contextid}\n }])[0].then(function(response){\n const timingval = { future: 0, present: 1, past: 2, };\n response.sort((a,b) => {\n const timinga = studyplanTiming(a);\n const timingb = studyplanTiming(b);\n \n let t = timingval[timinga] - timingval[timingb];\n if(t == 0){\n // sort by start date if timing is equal\n t = new Date(b.startdate).getTime() - new Date(a.startdate).getTime();\n \n if (t == 0) {\n // sort by name if timing is equal\n t = a.name.localeCompare(b.name);\n }\n }\n return t;\n });\n app.studyplans = response;\n \n // load studyplan from hash if applicable\n const hash = location.hash.replace('#','');\n if(hash){\n for(let idx in app.studyplans){\n if(app.studyplans[idx].id == hash){\n app.selectStudyplan(app.studyplans[idx]);\n break;\n }\n }\n }\n }).catch(notification.exception);\n call([{\n methodname: 'local_treestudyplan_map_categories',\n args: {}\n }])[0].then(function(response){\n app.courses = response;\n }).catch(notification.exception);\n call([{\n methodname: 'local_treestudyplan_list_used_categories',\n args: { operation: 'edit', refcontext_id: contextid}\n }])[0].then(function(response){\n app.usedcontexts = response;\n }).catch(notification.exception);\n this.filter_systembadges();\n },\n closeStudyplan() {\n app.activestudyplan = null;\n window.location.hash = '';\n },\n movedStudyplan(plan,from,to) {\n // reload the page in the new context (needed, since a number of links are not reactive in the page)\n const params = new URLSearchParams(location.search);\n params.delete('categoryid');\n params.set(\"contextid\", to);\n setTimeout(() => {\n // Reload page in a timeout to give other form javasccript the change to remove the beforeunload handler.\n window.location.search = params.toString();\n },50);\n },\n onStudyPlanCreated(newstudyplan){\n if (newstudyplan.context_id != contextid) {\n // Study plan has changed context id - reload page into new context id and show the plan\n const params = new URLSearchParams(location.search);\n params.delete('categoryid');\n params.set(\"contextid\", newstudyplan.context_id);\n setTimeout(() => {\n // Reload page in a timeout to give other form javasccript the change to remove the beforeunload handler.\n window.location = window.location.pathname + \"?\" + params.toString() + \"#\" + newstudyplan.id;\n },50);\n } else {\n app.studyplans.push(newstudyplan);\n app.selectStudyplan(newstudyplan);\n }\n },\n switchContext(ctxid){\n const params = new URLSearchParams(location.search);\n params.delete('categoryid');\n params.set('contextid', ctxid);\n setTimeout(() => {\n // Reload page in a timeout to give other form javasccript the change to remove the beforeunload handler.\n window.location.href = window.location.pathname + \"?\" + params.toString();\n },50);\n },\n selectStudyplan(studyplan){\n // fetch studyplan\n app.loadingstudyplan = true;\n app.activestudyplan = null;\n call([{\n methodname: 'local_treestudyplan_get_studyplan_map',\n args: { id: studyplan.id}\n }])[0].then(function(response){\n app.activestudyplan = ProcessStudyplan(response);\n debug.info('studyplan processed');\n app.loadingstudyplan = false;\n window.location.hash = app.activestudyplan.id;\n }).catch(function(error){\n notification.exception(error);\n app.loadingstudyplan = false;\n });\n },\n onPageChange(page) {\n this.activepage = page;\n this.filter_relatedbadges();\n },\n import_studyplan(){\n const self = this;\n upload((filename,content)=>{\n call([{\n methodname: 'local_treestudyplan_import_plan',\n args: {\n content: content,\n format: \"application/json\",\n context_id: contextid,\n },\n }])[0].then(function(response){\n if(response.success){\n self.initialize();\n } else {\n debug.error(\"Import failed: \",response.msg);\n }\n\n }).catch(notification.exception);\n }, \"application/json\");\n },\n export_plan(plan,format){\n let self = this;\n if(format == undefined || ![\"json\",\"csv\"].includes(format)){\n format = \"json\";\n }\n call([{\n methodname: 'local_treestudyplan_export_plan',\n args: {\n studyplan_id: plan.id,\n format: format\n },\n }])[0].then(function(response){\n\n download(plan.shortname+\".json\",response.content,response.format);\n }).catch(notification.exception);\n },\n toggletoolbox(event) {\n debug.info(event);\n this.toolbox.shown = event;\n },\n filter_systembadges() {\n const self = this;\n call([{\n methodname: 'local_treestudyplan_search_badges',\n args: { \n search: this.filters.systembadges || \"\"\n }\n }])[0].then(function(response){\n self.systembadges = response;\n }).catch(notification.exception);\n },\n filter_relatedbadges() {\n const self = this;\n if (this.activepage) {\n call([{\n methodname: 'local_treestudyplan_search_related_badges',\n args: { \n page_id: this.activepage.id,\n search: this.filters.relatedbadges || \"\"\n }\n }])[0].then(function(response){\n self.relatedbadges = response;\n }).catch(notification.exception);\n }\n },\n reset_systembadges() {\n this.filters.systembadges = \"\";\n this.filter_systembadges();\n },\n reset_relatedbadges() {\n this.filters.relatedbadges = \"\";\n this.filter_relatedbadges();\n },\n },\n });\n}\n\n"],"names":["contextid","categoryid","options","undefined","Number","isInteger","debug","info","_typeof","Array","isArray","defaultAggregation","editMode","app","Vue","el","data","create","studyplan","name","shortname","description","idnumber","slots","startdate","enddate","context","aggregation","aggregation_config","toolbox","shown","right","filters","systembadges","relatedbadges","activestudyplan","activepage","loadingstudyplan","studyplans","frameworks","courses","text","strings","usedcontexts","initialEditMode","created","$root","$on","index","idx","id","splice","mounted","initialize","computed","dropdown_title","this","studyplan_select_placeholder","filterComponentType","item","component","span","type","methods","methodname","args","context_id","then","response","timingval","future","present","past","sort","a","b","timinga","timingb","t","Date","getTime","localeCompare","hash","location","replace","selectStudyplan","catch","notification","exception","operation","refcontext_id","filter_systembadges","closeStudyplan","window","movedStudyplan","plan","from","to","params","URLSearchParams","search","delete","set","setTimeout","toString","onStudyPlanCreated","newstudyplan","pathname","push","switchContext","ctxid","href","error","onPageChange","page","filter_relatedbadges","import_studyplan","self","filename","content","format","success","msg","export_plan","includes","studyplan_id","toggletoolbox","event","page_id","reset_systembadges","reset_relatedbadges","use","EditorComponents","TSComponents","ModalComponents","PortalVue","BootstrapVue","Drag","Drop","DropList","Debugger"],"mappings":"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"} \ No newline at end of file diff --git a/amd/build/page-view-plan.min.js b/amd/build/page-view-plan.min.js index e42e47a..6de9cb8 100644 --- a/amd/build/page-view-plan.min.js +++ b/amd/build/page-view-plan.min.js @@ -1,3 +1,3 @@ -define("local_treestudyplan/page-view-plan",["exports","core/ajax","core/notification","./vue/vue","./util/debugger","./util/string-helper","./studyplan-processor","./util/date-helper","./report-viewer-components","./treestudyplan-components","./modedit-modal","./portal-vue/portal-vue.esm","./bootstrap-vue/bootstrap-vue"],(function(_exports,_ajax,_notification,_vue,_debugger,_stringHelper,_studyplanProcessor,_dateHelper,_reportViewerComponents,_treestudyplanComponents,_modeditModal,_portalVue,_bootstrapVue){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.init=function(contextid,categoryid){contextid=void 0===contextid||!Number.isInteger(Number(contextid))||contextid<1?1:Number(contextid);categoryid=void 0!==categoryid&&Number.isInteger(Number(categoryid))?Number(categoryid):0;let app=new _vue.default({el:"#root",data:{displayedstudyplan:null,activestudyplan:null,associatedstudents:[],selectedstudent:null,studentstudyplan:null,loadingstudyplan:!1,studyplans:[],text:strings.studyplan,toolbox:{right:!0},usedcontexts:[]},async mounted(){(0,_ajax.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=(0,_dateHelper.studyplanTiming)(a),timingb=(0,_dateHelper.studyplanTiming)(b),t=timingval[timinga]-timingval[timingb];return 0==t?a.name.localeCompare(b.name):t})),app.studyplans=response;const parts=window.location.hash.replace("#","").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.default.exception),(0,_ajax.call)([{methodname:"local_treestudyplan_list_used_categories",args:{operation:"view",refcontext_id:contextid}}])[0].then((function(response){const contexts=[];for(const ix in response)response[ix].studyplancount>0&&contexts.push(response[ix]);app.usedcontexts=contexts})).catch(_notification.default.exception)},computed:{dropdown_title(){return this.activestudyplan&&this.activestudyplan.name?this.activestudyplan.name:this.text.studyplan_select_placeholder},contextid:()=>contextid},methods:{switchContext(cat){const params=new URLSearchParams(location.search);params.delete("categoryid"),params.set("contextid",cat.context_id),window.location.search=params.toString()},closeStudyplan(){app.activestudyplan=null,app.associatedstudents=[],app.studentstudyplan=[],app.displayedstudyplan=null,window.location.hash=""},selectStudyplan(studyplan,studentid){app.loadingstudyplan=!0,app.activestudyplan=null,app.associatedstudents=[],app.selectedstudent=null,app.studentstudyplan=null,(0,_ajax.call)([{methodname:"local_treestudyplan_get_studyplan_map",args:{id:studyplan.id}}])[0].then((function(response){app.activestudyplan=(0,_studyplanProcessor.ProcessStudyplan)(response,!0),app.displayedstudyplan=app.activestudyplan,app.loadingstudyplan=!1,window.location.hash=app.activestudyplan.id,(0,_ajax.call)([{methodname:"local_treestudyplan_all_associated",args:{studyplan_id:studyplan.id}}])[0].then((function(response){if(app.associatedstudents=response,studentid)for(const student of app.associatedstudents)if(student.id==studentid){app.showStudentView(student);break}})).catch(_notification.default.exception)})).catch((function(error){_notification.default.exception(error),app.loadingstudyplan=!1}))},showStudentView(student){app.selectedstudent=student,app.studentstudyplan=null,app.loadingstudyplan=!0,(0,_ajax.call)([{methodname:"local_treestudyplan_get_user_studyplan",args:{userid:student.id,studyplanid:app.activestudyplan.id}}])[0].then((function(response){app.studentstudyplan=(0,_studyplanProcessor.ProcessStudyplan)(response,!1),app.displayedstudyplan=app.studentstudyplan,app.loadingstudyplan=!1,window.location.hash=app.activestudyplan.id+"-"+student.id})).catch((function(error){_notification.default.exception(error),app.loadingstudyplan=!1}))},showOverview(){app.selectedstudent=null,app.studentstudyplan=null,app.displayedstudyplan=app.activestudyplan,window.location.hash=app.activestudyplan.id}}})},_notification=_interopRequireDefault(_notification),_vue=_interopRequireDefault(_vue),_debugger=_interopRequireDefault(_debugger),_reportViewerComponents=_interopRequireDefault(_reportViewerComponents),_treestudyplanComponents=_interopRequireDefault(_treestudyplanComponents),_modeditModal=_interopRequireDefault(_modeditModal),_portalVue=_interopRequireDefault(_portalVue),_bootstrapVue=_interopRequireDefault(_bootstrapVue),_vue.default.use(_reportViewerComponents.default),_vue.default.use(_modeditModal.default),_vue.default.use(_portalVue.default),_vue.default.use(_bootstrapVue.default);new _debugger.default("treestudyplanviewer");let strings=(0,_stringHelper.load_strings)({studyplan:{studyplan_select_placeholder:"studyplan_select_placeholder"}})})); +define("local_treestudyplan/page-view-plan",["exports","core/ajax","core/notification","./vue/vue","./util/debugger","./util/string-helper","./studyplan-processor","./util/date-helper","./report-viewer-components","./treestudyplan-components","./modedit-modal","./portal-vue/portal-vue.esm","./bootstrap-vue/bootstrap-vue"],(function(_exports,_ajax,_notification,_vue,_debugger,_stringHelper,_studyplanProcessor,_dateHelper,_reportViewerComponents,_treestudyplanComponents,_modeditModal,_portalVue,_bootstrapVue){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i0)for(var idx in app.studyplans)if(app.studyplans[idx].id==parts[0]){app.selectStudyplan(app.studyplans[idx],parts[1]);break}})).catch(_notification.default.exception),(0,_ajax.call)([{methodname:"local_treestudyplan_list_used_categories",args:{operation:"view",refcontext_id:_contextid}}])[0].then((function(response){var contexts=[];for(var ix in response)response[ix].studyplancount>0&&contexts.push(response[ix]);app.usedcontexts=contexts})).catch(_notification.default.exception);case 2:case"end":return _context.stop()}}),_callee)})),function(){var self=this,args=arguments;return new Promise((function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(void 0)}))})();var fn},computed:{dropdown_title:function(){return this.activestudyplan&&this.activestudyplan.name?this.activestudyplan.name:this.text.studyplan_select_placeholder},contextid:function(){return _contextid}},methods:{switchContext:function(ctxid){var params=new URLSearchParams(location.search);params.delete("categoryid"),params.set("contextid",ctxid),setTimeout((function(){window.location.href=window.location.pathname+"?"+params.toString()}),50)},closeStudyplan:function(){app.activestudyplan=null,app.associatedstudents=[],app.studentstudyplan=[],app.displayedstudyplan=null,window.location.hash=""},selectStudyplan:function(studyplan,studentid){app.loadingstudyplan=!0,app.activestudyplan=null,app.associatedstudents=[],app.selectedstudent=null,app.studentstudyplan=null,(0,_ajax.call)([{methodname:"local_treestudyplan_get_studyplan_map",args:{id:studyplan.id}}])[0].then((function(response){app.activestudyplan=(0,_studyplanProcessor.ProcessStudyplan)(response,!0),app.displayedstudyplan=app.activestudyplan,app.loadingstudyplan=!1,window.location.hash=app.activestudyplan.id,(0,_ajax.call)([{methodname:"local_treestudyplan_all_associated",args:{studyplan_id:studyplan.id}}])[0].then((function(response){if(app.associatedstudents=response,studentid){var _step,_iterator=function(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=function(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function(){};return{s:F,n:function(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function(_e){throw _e},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function(){it=it.call(o)},n:function(){var step=it.next();return normalCompletion=step.done,step},e:function(_e2){didErr=!0,err=_e2},f:function(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}(app.associatedstudents);try{for(_iterator.s();!(_step=_iterator.n()).done;){var student=_step.value;if(student.id==studentid){app.showStudentView(student);break}}}catch(err){_iterator.e(err)}finally{_iterator.f()}}})).catch(_notification.default.exception)})).catch((function(error){_notification.default.exception(error),app.loadingstudyplan=!1}))},showStudentView:function(student){app.selectedstudent=student,app.studentstudyplan=null,app.loadingstudyplan=!0,(0,_ajax.call)([{methodname:"local_treestudyplan_get_user_studyplan",args:{userid:student.id,studyplanid:app.activestudyplan.id}}])[0].then((function(response){app.studentstudyplan=(0,_studyplanProcessor.ProcessStudyplan)(response,!1),app.displayedstudyplan=app.studentstudyplan,app.loadingstudyplan=!1,window.location.hash=app.activestudyplan.id+"-"+student.id})).catch((function(error){_notification.default.exception(error),app.loadingstudyplan=!1}))},showOverview:function(){app.selectedstudent=null,app.studentstudyplan=null,app.displayedstudyplan=app.activestudyplan,window.location.hash=app.activestudyplan.id}}})},_notification=_interopRequireDefault(_notification),_vue=_interopRequireDefault(_vue),_debugger=_interopRequireDefault(_debugger),_reportViewerComponents=_interopRequireDefault(_reportViewerComponents),_treestudyplanComponents=_interopRequireDefault(_treestudyplanComponents),_modeditModal=_interopRequireDefault(_modeditModal),_portalVue=_interopRequireDefault(_portalVue),_bootstrapVue=_interopRequireDefault(_bootstrapVue),_vue.default.use(_reportViewerComponents.default),_vue.default.use(_modeditModal.default),_vue.default.use(_portalVue.default),_vue.default.use(_bootstrapVue.default);new _debugger.default("treestudyplanviewer");var strings=(0,_stringHelper.load_strings)({studyplan:{studyplan_select_placeholder:"studyplan_select_placeholder"}})})); //# sourceMappingURL=page-view-plan.min.js.map \ No newline at end of file diff --git a/amd/build/page-view-plan.min.js.map b/amd/build/page-view-plan.min.js.map index bc4e4da..4efc652 100644 --- a/amd/build/page-view-plan.min.js.map +++ b/amd/build/page-view-plan.min.js.map @@ -1 +1 @@ -{"version":3,"file":"page-view-plan.min.js","sources":["../src/page-view-plan.js"],"sourcesContent":["/*eslint no-var: \"error\" */\n/*eslint no-unused-vars: \"off\" */\n/*eslint linebreak-style: \"off\" */\n/*eslint no-trailing-spaces: \"off\" */\n/*eslint-env es6*/\n// Put this file in path/to/plugin/amd/src\n// You can call it anything you like\n\nimport {call} from 'core/ajax';\nimport notification from 'core/notification';\n\nimport Vue from './vue/vue';\n\nimport Debugger from './util/debugger';\nimport {load_strings} from './util/string-helper';\nimport {ProcessStudyplan} from './studyplan-processor';\nimport {studyplanTiming} from './util/date-helper';\n\nimport RVComponents from './report-viewer-components';\nVue.use(RVComponents);\nimport TSComponents from './treestudyplan-components';\nimport ModalComponents from './modedit-modal';\nVue.use(ModalComponents);\n\nimport PortalVue from './portal-vue/portal-vue.esm';\nVue.use(PortalVue);\nimport BootstrapVue from './bootstrap-vue/bootstrap-vue';\nVue.use(BootstrapVue);\n\n\nlet debug = new Debugger(\"treestudyplanviewer\");\n\nlet strings = load_strings({\n studyplan: {\n studyplan_select_placeholder: 'studyplan_select_placeholder',\n },\n});\n\n/**\n * Initialize the Page\n * @param {int} contextid The context we should attempt to work in (1:1 related to the category)\n * @param {int} categoryid The category we shoud attempt to work in (1:1 related to the context)\n */\nexport function init(contextid,categoryid) {\n // Make sure the id's are numeric and integer\n if(undefined === contextid || !Number.isInteger(Number(contextid)) || contextid < 1 ){ contextid = 1;}\n else { contextid = Number(contextid);} // ensure a numeric value instead of string\n if(undefined === categoryid || !Number.isInteger(Number(categoryid))){ categoryid = 0;}\n else { categoryid = Number(categoryid);} // ensure a numeric value instead of string\n\n const in_systemcontext = (contextid <= 1);\n\n let app = new Vue({\n el: '#root',\n data: {\n displayedstudyplan: null,\n activestudyplan: null,\n associatedstudents: [],\n selectedstudent: null,\n studentstudyplan: null,\n loadingstudyplan: false,\n studyplans: [],\n text: strings.studyplan,\n toolbox: {\n right: true,\n },\n usedcontexts: [],\n },\n async mounted() {\n call([{\n methodname: 'local_treestudyplan_list_studyplans',\n args: {context_id: contextid}\n }])[0].then(function(response){\n const timingval = { present: 0, past: 1, future: 2};\n response.sort((a,b) => {\n const timinga = studyplanTiming(a);\n const timingb = studyplanTiming(b);\n\n const t = timingval[timinga] - timingval[timingb];\n if(t == 0){\n // sort by name if timing is equal\n return a.name.localeCompare(b.name);\n }\n else {\n return t;\n }\n });\n app.studyplans = response;\n // load studyplan from hash if applicable\n const hash = window.location.hash.replace('#','');\n const parts = hash.split(\"-\");\n\n if(!!parts && parts.length > 0){\n for(let idx in app.studyplans){\n if(app.studyplans[idx].id == parts[0]){\n app.selectStudyplan(app.studyplans[idx],parts[1]);\n break;\n }\n }\n }\n }).catch(notification.exception);\n call([{\n methodname: 'local_treestudyplan_list_used_categories',\n args: { operation: 'view', refcontext_id: contextid}\n }])[0].then(function(response){\n const contexts = [];\n for(const ix in response){\n if(response[ix].studyplancount >0){\n contexts.push(response[ix]);\n }\n }\n app.usedcontexts = contexts;\n }).catch(notification.exception);\n },\n computed: {\n dropdown_title(){\n if(this.activestudyplan && this.activestudyplan.name){\n return this.activestudyplan.name;\n }\n else{\n return this.text.studyplan_select_placeholder;\n }\n },\n contextid(){\n return contextid;\n }\n },\n methods: {\n switchContext(cat){\n const params = new URLSearchParams(location.search);\n params.delete('categoryid');\n params.set('contextid', cat.context_id);\n window.location.search = params.toString();\n },\n closeStudyplan() {\n app.activestudyplan = null;\n app.associatedstudents = [];\n app.studentstudyplan = [];\n app.displayedstudyplan = null;\n window.location.hash = '';\n },\n\n selectStudyplan(studyplan,studentid){\n // fetch studyplan\n app.loadingstudyplan = true;\n app.activestudyplan = null;\n app.associatedstudents = [];\n app.selectedstudent = null;\n app.studentstudyplan = null;\n call([{\n methodname: 'local_treestudyplan_get_studyplan_map',\n args: { id: studyplan.id}\n }])[0].then(function(response){\n app.activestudyplan = ProcessStudyplan(response,true);\n app.displayedstudyplan = app.activestudyplan;\n app.loadingstudyplan = false;\n window.location.hash = app.activestudyplan.id;\n call([{\n methodname: 'local_treestudyplan_all_associated',\n args: { studyplan_id: studyplan.id}\n }])[0].then(function(response){\n app.associatedstudents = response;\n if(studentid){\n for(const student of app.associatedstudents){\n if(student.id == studentid){\n app.showStudentView(student);\n break;\n }\n }\n }\n }).catch(notification.exception);\n\n }).catch(function(error){\n notification.exception(error);\n app.loadingstudyplan = false;\n });\n },\n showStudentView(student){\n app.selectedstudent = student;\n app.studentstudyplan = null;\n app.loadingstudyplan = true;\n call([{\n methodname: 'local_treestudyplan_get_user_studyplan',\n args: { userid: student.id, studyplanid: app.activestudyplan.id}\n }])[0].then(function(response){\n app.studentstudyplan = ProcessStudyplan(response,false);\n app.displayedstudyplan = app.studentstudyplan;\n app.loadingstudyplan = false;\n window.location.hash = app.activestudyplan.id + \"-\" + student.id;\n }).catch(function(error){\n notification.exception(error);\n app.loadingstudyplan = false;\n });\n\n\n },\n showOverview(){\n app.selectedstudent = null;\n app.studentstudyplan = null;\n app.displayedstudyplan = app.activestudyplan;\n window.location.hash = app.activestudyplan.id;\n }\n\n },\n });\n}\n"],"names":["contextid","categoryid","undefined","Number","isInteger","app","Vue","el","data","displayedstudyplan","activestudyplan","associatedstudents","selectedstudent","studentstudyplan","loadingstudyplan","studyplans","text","strings","studyplan","toolbox","right","usedcontexts","methodname","args","context_id","then","response","timingval","present","past","future","sort","a","b","timinga","timingb","t","name","localeCompare","parts","window","location","hash","replace","split","length","idx","id","selectStudyplan","catch","notification","exception","operation","refcontext_id","contexts","ix","studyplancount","push","computed","dropdown_title","this","studyplan_select_placeholder","methods","switchContext","cat","params","URLSearchParams","search","delete","set","toString","closeStudyplan","studentid","studyplan_id","student","showStudentView","error","userid","studyplanid","showOverview","use","RVComponents","ModalComponents","PortalVue","BootstrapVue","Debugger"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"page-view-plan.min.js","sources":["../src/page-view-plan.js"],"sourcesContent":["/*eslint no-var: \"error\" */\n/*eslint no-unused-vars: \"off\" */\n/*eslint linebreak-style: \"off\" */\n/*eslint no-trailing-spaces: \"off\" */\n/*eslint-env es6*/\n// Put this file in path/to/plugin/amd/src\n// You can call it anything you like\n\nimport {call} from 'core/ajax';\nimport notification from 'core/notification';\n\nimport Vue from './vue/vue';\n\nimport Debugger from './util/debugger';\nimport {load_strings} from './util/string-helper';\nimport {ProcessStudyplan} from './studyplan-processor';\nimport {studyplanTiming} from './util/date-helper';\n\nimport RVComponents from './report-viewer-components';\nVue.use(RVComponents);\nimport TSComponents from './treestudyplan-components';\nimport ModalComponents from './modedit-modal';\nVue.use(ModalComponents);\n\nimport PortalVue from './portal-vue/portal-vue.esm';\nVue.use(PortalVue);\nimport BootstrapVue from './bootstrap-vue/bootstrap-vue';\nVue.use(BootstrapVue);\n\n\nlet debug = new Debugger(\"treestudyplanviewer\");\n\nlet strings = load_strings({\n studyplan: {\n studyplan_select_placeholder: 'studyplan_select_placeholder',\n },\n});\n\n/**\n * Initialize the Page\n * @param {int} contextid The context we should attempt to work in (1:1 related to the category)\n * @param {int} categoryid The category we shoud attempt to work in (1:1 related to the context)\n */\nexport function init(contextid,categoryid) {\n // Make sure the id's are numeric and integer\n if(undefined === contextid || !Number.isInteger(Number(contextid)) || contextid < 1 ){ contextid = 1;}\n else { contextid = Number(contextid);} // ensure a numeric value instead of string\n if(undefined === categoryid || !Number.isInteger(Number(categoryid))){ categoryid = 0;}\n else { categoryid = Number(categoryid);} // ensure a numeric value instead of string\n\n const in_systemcontext = (contextid <= 1);\n\n let app = new Vue({\n el: '#root',\n data: {\n displayedstudyplan: null,\n activestudyplan: null,\n associatedstudents: [],\n selectedstudent: null,\n studentstudyplan: null,\n loadingstudyplan: false,\n studyplans: [],\n text: strings.studyplan,\n toolbox: {\n right: true,\n },\n usedcontexts: [],\n },\n async mounted() {\n call([{\n methodname: 'local_treestudyplan_list_studyplans',\n args: {context_id: contextid}\n }])[0].then(function(response){\n const timingval = { present: 0, past: 1, future: 2};\n response.sort((a,b) => {\n const timinga = studyplanTiming(a);\n const timingb = studyplanTiming(b);\n\n const t = timingval[timinga] - timingval[timingb];\n if(t == 0){\n // sort by name if timing is equal\n return a.name.localeCompare(b.name);\n }\n else {\n return t;\n }\n });\n app.studyplans = response;\n // load studyplan from hash if applicable\n const hash = window.location.hash.replace('#','');\n const parts = hash.split(\"-\");\n\n if(!!parts && parts.length > 0){\n for(let idx in app.studyplans){\n if(app.studyplans[idx].id == parts[0]){\n app.selectStudyplan(app.studyplans[idx],parts[1]);\n break;\n }\n }\n }\n }).catch(notification.exception);\n call([{\n methodname: 'local_treestudyplan_list_used_categories',\n args: { operation: 'view', refcontext_id: contextid}\n }])[0].then(function(response){\n const contexts = [];\n for(const ix in response){\n if(response[ix].studyplancount >0){\n contexts.push(response[ix]);\n }\n }\n app.usedcontexts = contexts;\n }).catch(notification.exception);\n },\n computed: {\n dropdown_title(){\n if(this.activestudyplan && this.activestudyplan.name){\n return this.activestudyplan.name;\n }\n else{\n return this.text.studyplan_select_placeholder;\n }\n },\n contextid(){\n return contextid;\n }\n },\n methods: {\n switchContext(ctxid){\n const params = new URLSearchParams(location.search);\n params.delete('categoryid');\n params.set('contextid', ctxid);\n setTimeout(() => {\n // Reload page in a timeout to give other form javasccript the change to remove the beforeunload handler.\n window.location.href = window.location.pathname + \"?\" + params.toString();\n },50);\n },\n closeStudyplan() {\n app.activestudyplan = null;\n app.associatedstudents = [];\n app.studentstudyplan = [];\n app.displayedstudyplan = null;\n window.location.hash = '';\n },\n\n selectStudyplan(studyplan,studentid){\n // fetch studyplan\n app.loadingstudyplan = true;\n app.activestudyplan = null;\n app.associatedstudents = [];\n app.selectedstudent = null;\n app.studentstudyplan = null;\n call([{\n methodname: 'local_treestudyplan_get_studyplan_map',\n args: { id: studyplan.id}\n }])[0].then(function(response){\n app.activestudyplan = ProcessStudyplan(response,true);\n app.displayedstudyplan = app.activestudyplan;\n app.loadingstudyplan = false;\n window.location.hash = app.activestudyplan.id;\n call([{\n methodname: 'local_treestudyplan_all_associated',\n args: { studyplan_id: studyplan.id}\n }])[0].then(function(response){\n app.associatedstudents = response;\n if(studentid){\n for(const student of app.associatedstudents){\n if(student.id == studentid){\n app.showStudentView(student);\n break;\n }\n }\n }\n }).catch(notification.exception);\n\n }).catch(function(error){\n notification.exception(error);\n app.loadingstudyplan = false;\n });\n },\n showStudentView(student){\n app.selectedstudent = student;\n app.studentstudyplan = null;\n app.loadingstudyplan = true;\n call([{\n methodname: 'local_treestudyplan_get_user_studyplan',\n args: { userid: student.id, studyplanid: app.activestudyplan.id}\n }])[0].then(function(response){\n app.studentstudyplan = ProcessStudyplan(response,false);\n app.displayedstudyplan = app.studentstudyplan;\n app.loadingstudyplan = false;\n window.location.hash = app.activestudyplan.id + \"-\" + student.id;\n }).catch(function(error){\n notification.exception(error);\n app.loadingstudyplan = false;\n });\n\n\n },\n showOverview(){\n app.selectedstudent = null;\n app.studentstudyplan = null;\n app.displayedstudyplan = app.activestudyplan;\n window.location.hash = app.activestudyplan.id;\n }\n\n },\n });\n}\n"],"names":["contextid","categoryid","undefined","Number","isInteger","app","Vue","el","data","displayedstudyplan","activestudyplan","associatedstudents","selectedstudent","studentstudyplan","loadingstudyplan","studyplans","text","strings","studyplan","toolbox","right","usedcontexts","mounted","methodname","args","context_id","then","response","timingval","present","past","future","sort","a","b","timinga","timingb","t","name","localeCompare","parts","window","location","hash","replace","split","length","idx","id","selectStudyplan","catch","notification","exception","operation","refcontext_id","contexts","ix","studyplancount","push","computed","dropdown_title","this","studyplan_select_placeholder","methods","switchContext","ctxid","params","URLSearchParams","search","delete","set","setTimeout","href","pathname","toString","closeStudyplan","studentid","studyplan_id","student","showStudentView","error","userid","studyplanid","showOverview","use","RVComponents","ModalComponents","PortalVue","BootstrapVue","Debugger"],"mappings":"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"} \ No newline at end of file diff --git a/amd/src/page-edit-plan.js b/amd/src/page-edit-plan.js index 7f544f8..c4511da 100644 --- a/amd/src/page-edit-plan.js +++ b/amd/src/page-edit-plan.js @@ -233,11 +233,14 @@ export function init(contextid,categoryid,options) { app.selectStudyplan(newstudyplan); } }, - switchContext(cat){ + switchContext(ctxid){ const params = new URLSearchParams(location.search); params.delete('categoryid'); - params.set('contextid', cat.context_id); - window.location.search = params.toString(); + 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); }, selectStudyplan(studyplan){ // fetch studyplan diff --git a/amd/src/page-view-plan.js b/amd/src/page-view-plan.js index 42a18a5..12c07f8 100644 --- a/amd/src/page-view-plan.js +++ b/amd/src/page-view-plan.js @@ -126,11 +126,14 @@ export function init(contextid,categoryid) { } }, methods: { - switchContext(cat){ + switchContext(ctxid){ const params = new URLSearchParams(location.search); params.delete('categoryid'); - params.set('contextid', cat.context_id); - window.location.search = params.toString(); + 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; diff --git a/classes/courseservice.php b/classes/courseservice.php index be6c8ca..629d717 100644 --- a/classes/courseservice.php +++ b/classes/courseservice.php @@ -314,6 +314,11 @@ class courseservice extends \external_api { $contextids[] = $r->context_id; } + // Add system context to list if needed. + if (!in_array(1,$contextids)) { + array_unshift($contextids,1); + } + $rs->close(); $cats = []; @@ -332,13 +337,15 @@ class courseservice extends \external_api { array_reverse(array_slice($refpath,0,$i)), array_slice($contextids, $idx+1, count($contextids) - 1) ) ; - + $found = true; break; } } if(!$found) { array_unshift($contextids,$refctxid); + debug::write("After two"); + debug::print_r($contextids); } } catch(\dml_missing_record_exception $x) { // ignore context @@ -358,7 +365,10 @@ class courseservice extends \external_api { if ($operation == "edit" && $ctxid == $refctxid) { // Include direct children for navigation purposes foreach ($cat->get_children() as $ccat) { - $cats[] = $ccat; + $ccatctx = \context_coursecat::instance($ccat->id); + if (!in_array($ccatctx->id,$contextids)) { + $cats[] = $ccat; + } } } } @@ -408,6 +418,11 @@ class courseservice extends \external_api { } $rs->close(); + // Add system context to list if needed. + if (!in_array(1,$contextids)) { + array_unshift($contextids,1); + } + $cats = []; // If the reference context id is not in the list, push it there if ($refctxid > 1 && !in_array($refctxid, $contextids)) { @@ -451,7 +466,10 @@ class courseservice extends \external_api { if ($operation == "view" && $ctxid == $refctxid) { // Include direct children for navigation purposes foreach ($cat->get_children() as $ccat) { - $cats[] = $ccat; + $ccatctx = \context_coursecat::instance($ccat->id); + if (!in_array($ccatctx->id,$contextids)) { + $cats[] = $ccat; + } } } } diff --git a/edit-plan.php b/edit-plan.php index 9739e99..45de976 100644 --- a/edit-plan.php +++ b/edit-plan.php @@ -107,9 +107,9 @@ print $OUTPUT->header();
- - + / {{ p }} ({{ ctx.studyplancount }}) diff --git a/view-plan.php b/view-plan.php index e7cf08a..f9235b3 100644 --- a/view-plan.php +++ b/view-plan.php @@ -104,9 +104,9 @@ print $OUTPUT->header();
- - + / {{ p }} ({{ ctx.studyplancount }})