[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 // This file is part of Moodle - http://moodle.org/ 2 // 3 // Moodle is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU General Public License as published by 5 // the Free Software Foundation, either version 3 of the License, or 6 // (at your option) any later version. 7 // 8 // Moodle is distributed in the hope that it will be useful, 9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 // GNU General Public License for more details. 12 // 13 // You should have received a copy of the GNU General Public License 14 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 15 16 /** 17 * Handle add/remove competency links. 18 * 19 * @module tool_lp/competencies 20 * @package tool_lp 21 * @copyright 2015 Damyon Wiese <damyon@moodle.com> 22 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 23 */ 24 define(['jquery', 25 'core/notification', 26 'core/ajax', 27 'core/templates', 28 'core/str', 29 'tool_lp/competencypicker', 30 'tool_lp/dragdrop-reorder'], 31 function($, notification, ajax, templates, str, Picker, dragdrop) { 32 33 /** 34 * Constructor 35 * 36 * @param {Number} itemid 37 * @param {String} itemtype 38 * @param {Number} pagectxid 39 */ 40 var competencies = function(itemid, itemtype, pagectxid) { 41 this.itemid = itemid; 42 this.itemtype = itemtype; 43 this.pageContextId = pagectxid; 44 this.pickerInstance = null; 45 46 $('[data-region="actions"] button').prop('disabled', false); 47 this.registerEvents(); 48 this.registerDragDrop(); 49 }; 50 51 /** 52 * Initialise the drag/drop code. 53 * @method registerDragDrop 54 */ 55 competencies.prototype.registerDragDrop = function() { 56 var localthis = this; 57 // Init this module. 58 str.get_string('movecompetency', 'tool_lp').done( 59 function(movestring) { 60 dragdrop.dragdrop('movecompetency', 61 movestring, 62 {identifier: 'movecompetency', component: 'tool_lp'}, 63 {identifier: 'movecompetencyafter', component: 'tool_lp'}, 64 'drag-samenode', 65 'drag-parentnode', 66 'drag-handlecontainer', 67 function(drag, drop) { 68 localthis.handleDrop(drag, drop); 69 }); 70 } 71 ).fail(notification.exception); 72 73 }; 74 75 /** 76 * Handle a drop from a drag/drop operation. 77 * 78 * @method handleDrop 79 * @param {DOMNode} drag The dragged node. 80 * @param {DOMNode} drop The dropped on node. 81 */ 82 competencies.prototype.handleDrop = function(drag, drop) { 83 var fromid = $(drag).data('id'); 84 var toid = $(drop).data('id'); 85 var localthis = this; 86 var requests = []; 87 88 if (localthis.itemtype == 'course') { 89 requests = ajax.call([ 90 { 91 methodname: 'core_competency_reorder_course_competency', 92 args: {courseid: localthis.itemid, competencyidfrom: fromid, competencyidto: toid} 93 } 94 ]); 95 } else if (localthis.itemtype == 'template') { 96 requests = ajax.call([ 97 { 98 methodname: 'core_competency_reorder_template_competency', 99 args: {templateid: localthis.itemid, competencyidfrom: fromid, competencyidto: toid} 100 } 101 ]); 102 } else if (localthis.itemtype == 'plan') { 103 requests = ajax.call([ 104 { 105 methodname: 'core_competency_reorder_plan_competency', 106 args: {planid: localthis.itemid, competencyidfrom: fromid, competencyidto: toid} 107 } 108 ]); 109 } else { 110 return; 111 } 112 113 requests[0].fail(notification.exception); 114 }; 115 116 /** 117 * Pick a competency 118 * 119 * @method pickCompetency 120 */ 121 competencies.prototype.pickCompetency = function() { 122 var self = this; 123 var requests; 124 var pagerender; 125 var pageregion; 126 var pageContextIncludes; 127 128 if (!self.pickerInstance) { 129 if (self.itemtype === 'template' || self.itemtype === 'course') { 130 pageContextIncludes = 'parents'; 131 } 132 self.pickerInstance = new Picker(self.pageContextId, false, pageContextIncludes); 133 self.pickerInstance.on('save', function(e, data) { 134 var compIds = data.competencyIds; 135 136 if (self.itemtype === "course") { 137 requests = []; 138 139 $.each(compIds, function(index, compId) { 140 requests.push({ 141 methodname: 'core_competency_add_competency_to_course', 142 args: {courseid: self.itemid, competencyid: compId} 143 }); 144 }); 145 requests.push({ 146 methodname: 'tool_lp_data_for_course_competencies_page', 147 args: {courseid: self.itemid} 148 }); 149 150 pagerender = 'tool_lp/course_competencies_page'; 151 pageregion = 'coursecompetenciespage'; 152 153 } else if (self.itemtype === "template") { 154 requests = []; 155 156 $.each(compIds, function(index, compId) { 157 requests.push({ 158 methodname: 'core_competency_add_competency_to_template', 159 args: {templateid: self.itemid, competencyid: compId} 160 }); 161 }); 162 requests.push({ 163 methodname: 'tool_lp_data_for_template_competencies_page', 164 args: {templateid: self.itemid, pagecontext: {contextid: self.pageContextId}} 165 }); 166 pagerender = 'tool_lp/template_competencies_page'; 167 pageregion = 'templatecompetenciespage'; 168 } else if (self.itemtype === "plan") { 169 requests = []; 170 171 $.each(compIds, function(index, compId) { 172 requests.push({ 173 methodname: 'core_competency_add_competency_to_plan', 174 args: {planid: self.itemid, competencyid: compId} 175 }); 176 }); 177 requests.push({ 178 methodname: 'tool_lp_data_for_plan_page', 179 args: {planid: self.itemid} 180 }); 181 pagerender = 'tool_lp/plan_page'; 182 pageregion = 'plan-page'; 183 } 184 185 ajax.call(requests)[requests.length - 1].then(function(context) { 186 return templates.render(pagerender, context).done(function(html, js) { 187 $('[data-region="' + pageregion + '"]').replaceWith(html); 188 templates.runTemplateJS(js); 189 }); 190 }, notification.exception); 191 }); 192 } 193 194 self.pickerInstance.display(); 195 }; 196 197 /** 198 * Delete the link between competency and course, template or plan. Reload the page. 199 * 200 * @method doDelete 201 * @param {int} deleteid The id of record to delete. 202 */ 203 competencies.prototype.doDelete = function(deleteid) { 204 var localthis = this; 205 var requests = [], 206 pagerender = '', 207 pageregion = ''; 208 209 // Delete the link and reload the page template. 210 if (localthis.itemtype == 'course') { 211 requests = ajax.call([ 212 {methodname: 'core_competency_remove_competency_from_course', 213 args: {courseid: localthis.itemid, competencyid: deleteid}}, 214 {methodname: 'tool_lp_data_for_course_competencies_page', 215 args: {courseid: localthis.itemid}} 216 ]); 217 pagerender = 'tool_lp/course_competencies_page'; 218 pageregion = 'coursecompetenciespage'; 219 } else if (localthis.itemtype == 'template') { 220 requests = ajax.call([ 221 {methodname: 'core_competency_remove_competency_from_template', 222 args: {templateid: localthis.itemid, competencyid: deleteid}}, 223 {methodname: 'tool_lp_data_for_template_competencies_page', 224 args: {templateid: localthis.itemid, pagecontext: {contextid: localthis.pageContextId}}} 225 ]); 226 pagerender = 'tool_lp/template_competencies_page'; 227 pageregion = 'templatecompetenciespage'; 228 } else if (localthis.itemtype == 'plan') { 229 requests = ajax.call([ 230 {methodname: 'core_competency_remove_competency_from_plan', 231 args: {planid: localthis.itemid, competencyid: deleteid}}, 232 {methodname: 'tool_lp_data_for_plan_page', 233 args: {planid: localthis.itemid}} 234 ]); 235 pagerender = 'tool_lp/plan_page'; 236 pageregion = 'plan-page'; 237 } 238 239 requests[1].done(function(context) { 240 templates.render(pagerender, context).done(function(html, js) { 241 $('[data-region="' + pageregion + '"]').replaceWith(html); 242 templates.runTemplateJS(js); 243 }).fail(notification.exception); 244 }).fail(notification.exception); 245 246 }; 247 248 /** 249 * Show a confirm dialogue before deleting a competency. 250 * 251 * @method deleteHandler 252 * @param {int} deleteid The id of record to delete. 253 */ 254 competencies.prototype.deleteHandler = function(deleteid) { 255 var localthis = this; 256 var requests = []; 257 var message; 258 259 if (localthis.itemtype == 'course') { 260 message = 'unlinkcompetencycourse'; 261 } else if (localthis.itemtype == 'template') { 262 message = 'unlinkcompetencytemplate'; 263 } else if (localthis.itemtype == 'plan') { 264 message = 'unlinkcompetencyplan'; 265 } else { 266 return; 267 } 268 269 requests = ajax.call([{ 270 methodname: 'core_competency_read_competency', 271 args: {id: deleteid} 272 }]); 273 274 requests[0].done(function(competency) { 275 str.get_strings([ 276 {key: 'confirm', component: 'moodle'}, 277 {key: message, component: 'tool_lp', param: competency.shortname}, 278 {key: 'confirm', component: 'moodle'}, 279 {key: 'cancel', component: 'moodle'} 280 ]).done(function(strings) { 281 notification.confirm( 282 strings[0], // Confirm. 283 strings[1], // Unlink the competency X from the course? 284 strings[2], // Confirm. 285 strings[3], // Cancel. 286 function() { 287 localthis.doDelete(deleteid); 288 } 289 ); 290 }).fail(notification.exception); 291 }).fail(notification.exception); 292 }; 293 294 /** 295 * Register the javascript event handlers for this page. 296 * 297 * @method registerEvents 298 */ 299 competencies.prototype.registerEvents = function() { 300 var localthis = this; 301 302 if (localthis.itemtype == 'course') { 303 // Course completion rule handling. 304 $('[data-region="coursecompetenciespage"]').on('change', 'select[data-field="ruleoutcome"]', function(e) { 305 var requests = []; 306 var pagerender = 'tool_lp/course_competencies_page'; 307 var pageregion = 'coursecompetenciespage'; 308 var coursecompetencyid = $(e.target).data('id'); 309 var ruleoutcome = $(e.target).val(); 310 requests = ajax.call([ 311 {methodname: 'core_competency_set_course_competency_ruleoutcome', 312 args: {coursecompetencyid: coursecompetencyid, ruleoutcome: ruleoutcome}}, 313 {methodname: 'tool_lp_data_for_course_competencies_page', 314 args: {courseid: localthis.itemid}} 315 ]); 316 317 requests[1].done(function(context) { 318 templates.render(pagerender, context).done(function(html, js) { 319 $('[data-region="' + pageregion + '"]').replaceWith(html); 320 templates.runTemplateJS(js); 321 }).fail(notification.exception); 322 }).fail(notification.exception); 323 }); 324 } 325 326 $('[data-region="actions"] button').click(function(e) { 327 e.preventDefault(); 328 localthis.pickCompetency(); 329 }); 330 $('[data-action="delete-competency-link"]').click(function(e) { 331 e.preventDefault(); 332 333 var deleteid = $(e.target).closest('[data-id]').data('id'); 334 localthis.deleteHandler(deleteid); 335 }); 336 }; 337 338 return /** @alias module:tool_lp/competencies */ competencies; 339 });
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Thu Aug 11 10:00:09 2016 | Cross-referenced by PHPXref 0.7.1 |