AutorÃa | Ultima modificación | Ver Log |
/*** A managed course.** @namespace M.course.management* @class Course* @constructor* @extends Item*/Course = function() {Course.superclass.constructor.apply(this, arguments);};Course.NAME = 'moodle-course-management-course';Course.CSS_PREFIX = 'management-course';Course.ATTRS = {/*** The course ID of this course.* @attribute courseid* @type Number*/courseid: {},/*** True if this is the selected course.* @attribute selected* @type Boolean* @default null*/selected: {getter: function(value, name) {if (value === null) {value = this.get('node').getData(name);this.set(name, value);}return value;},value: null},node: {},/*** The management console tracking this course.* @attribute console* @type Console* @writeOnce*/console: {writeOnce: 'initOnly'},/*** The category this course belongs to.* @attribute category* @type Category* @writeOnce*/category: {writeOnce: 'initOnly'}};Course.prototype = {/*** Initialises the new course instance.* @method initializer*/initializer: function() {var node = this.get('node'),category = this.get('category');this.set('courseid', node.getData('id'));if (category && category.registerCourse) {category.registerCourse(this);}this.set('itemname', 'course');},/*** Returns the name of the course.* @method getName* @return {String}*/getName: function() {return this.get('node').one('a.coursename').get('innerHTML');},/*** Handles an event relating to this course.* @method handle* @param {String} action* @param {EventFacade} e* @return {Boolean}*/handle: function(action, e) {var managementconsole = this.get('console'),args = {courseid: this.get('courseid')};switch (action) {case 'moveup':e.halt();managementconsole.performAjaxAction('movecourseup', args, this.moveup, this);break;case 'movedown':e.halt();managementconsole.performAjaxAction('movecoursedown', args, this.movedown, this);break;case 'show':e.halt();managementconsole.performAjaxAction('showcourse', args, this.show, this);break;case 'hide':e.halt();managementconsole.performAjaxAction('hidecourse', args, this.hide, this);break;case 'select':var c = this.get('console'),movetonode = c.get('courselisting').one('#menumovecoursesto');if (movetonode) {if (c.isCourseSelected(e.currentTarget)) {movetonode.removeAttribute('disabled');} else {movetonode.setAttribute('disabled', true);}}break;default:Y.log('Invalid AJAX action requested of managed course.', 'warn', 'moodle-course-management');return false;}},/*** Removes this course.* @method remove*/remove: function() {this.get('console').removeCourseById(this.get('courseid'));this.get('node').remove();},/*** Moves this course after another course.** @method moveAfter* @param {Number} moveaftercourse The course to move after or 0 to put it at the top.* @param {Number} previousid the course it was previously after in case we need to revert.*/moveAfter: function(moveaftercourse, previousid) {var managementconsole = this.get('console'),args = {courseid: this.get('courseid'),moveafter: moveaftercourse,previous: previousid};managementconsole.performAjaxAction('movecourseafter', args, this.moveAfterResponse, this);},/*** Performs the actual move.** @method moveAfterResponse* @protected* @param {Number} transactionid The transaction ID for the request.* @param {Object} response The response to the request.* @param {Objects} args The arguments that were given with the request.* @return {Boolean}*/moveAfterResponse: function(transactionid, response, args) {var outcome = this.checkAjaxResponse(transactionid, response, args),node = this.get('node'),previous;if (outcome === false) {previous = node.ancestor('ul').one('li[data-id=' + args.previous + ']');Y.log('AJAX failed to move this course after the requested course', 'warn', 'moodle-course-management');if (previous) {// After the last previous.previous.insertAfter(node, 'after');} else {// Start of the list.node.ancestor('ul').one('li').insert(node, 'before');}return false;}Y.log('AJAX successfully moved course (' + this.getName() + ')', 'info', 'moodle-course-management');this.highlight();}};Y.extend(Course, Item, Course.prototype);