Autoría | Ultima modificación | Ver Log |
// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>./*** User competency workflow.** @module tool_lp/user_competency_workflow* @copyright 2015 Frédéric Massart - FMCorz.net* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/define(['jquery','core/templates','core/ajax','core/notification','core/str','tool_lp/menubar','tool_lp/event_base'],function($, Templates, Ajax, Notification, Str, Menubar, EventBase) {/*** UserCompetencyWorkflow class.*/var UserCompetencyWorkflow = function() {EventBase.prototype.constructor.apply(this, []);};UserCompetencyWorkflow.prototype = Object.create(EventBase.prototype);/** @property {String} The selector to find the user competency data. */UserCompetencyWorkflow.prototype._nodeSelector = '[data-node="user-competency"]';/*** Cancel a review request and refresh the view.** @param {Object} data The user competency data.* @method _cancelReviewRequest*/UserCompetencyWorkflow.prototype._cancelReviewRequest = function(data) {var call = {methodname: 'core_competency_user_competency_cancel_review_request',args: {userid: data.userid,competencyid: data.competencyid}};Ajax.call([call])[0].then(function() {this._trigger('review-request-cancelled', data);this._trigger('status-changed', data);}.bind(this)).catch(function() {this._trigger('error-occured', data);}.bind(this));};/*** Cancel a review request an refresh the view.** @param {Object} data The user competency data.* @method cancelReviewRequest*/UserCompetencyWorkflow.prototype.cancelReviewRequest = function(data) {this._cancelReviewRequest(data);};/*** Cancel a review request handler.** @param {Event} e The event.* @method _cancelReviewRequestHandler*/UserCompetencyWorkflow.prototype._cancelReviewRequestHandler = function(e) {e.preventDefault();var data = this._findUserCompetencyData($(e.target));this.cancelReviewRequest(data);};/*** Request a review and refresh the view.** @param {Object} data The user competency data.* @method _requestReview*/UserCompetencyWorkflow.prototype._requestReview = function(data) {var call = {methodname: 'core_competency_user_competency_request_review',args: {userid: data.userid,competencyid: data.competencyid}};Ajax.call([call])[0].then(function() {this._trigger('review-requested', data);this._trigger('status-changed', data);}.bind(this)).catch(function() {this._trigger('error-occured', data);}.bind(this));};/*** Request a review.** @param {Object} data The user competency data.* @method requestReview*/UserCompetencyWorkflow.prototype.requestReview = function(data) {this._requestReview(data);};/*** Request a review handler.** @param {Event} e The event.* @method _requestReviewHandler*/UserCompetencyWorkflow.prototype._requestReviewHandler = function(e) {e.preventDefault();var data = this._findUserCompetencyData($(e.target));this.requestReview(data);};/*** Start a review and refresh the view.** @param {Object} data The user competency data.* @method _startReview*/UserCompetencyWorkflow.prototype._startReview = function(data) {var call = {methodname: 'core_competency_user_competency_start_review',args: {userid: data.userid,competencyid: data.competencyid}};Ajax.call([call])[0].then(function() {this._trigger('review-started', data);this._trigger('status-changed', data);}.bind(this)).catch(function() {this._trigger('error-occured', data);}.bind(this));};/*** Start a review.** @param {Object} data The user competency data.* @method startReview*/UserCompetencyWorkflow.prototype.startReview = function(data) {this._startReview(data);};/*** Start a review handler.** @param {Event} e The event.* @method _startReviewHandler*/UserCompetencyWorkflow.prototype._startReviewHandler = function(e) {e.preventDefault();var data = this._findUserCompetencyData($(e.target));this.startReview(data);};/*** Stop a review and refresh the view.** @param {Object} data The user competency data.* @method _stopReview*/UserCompetencyWorkflow.prototype._stopReview = function(data) {var call = {methodname: 'core_competency_user_competency_stop_review',args: {userid: data.userid,competencyid: data.competencyid}};Ajax.call([call])[0].then(function() {this._trigger('review-stopped', data);this._trigger('status-changed', data);}.bind(this)).catch(function() {this._trigger('error-occured', data);}.bind(this));};/*** Stop a review.** @param {Object} data The user competency data.* @method stopReview*/UserCompetencyWorkflow.prototype.stopReview = function(data) {this._stopReview(data);};/*** Stop a review handler.** @param {Event} e The event.* @method _stopReviewHandler*/UserCompetencyWorkflow.prototype._stopReviewHandler = function(e) {e.preventDefault();var data = this._findUserCompetencyData($(e.target));this.stopReview(data);};/*** Enhance a menu bar.** @param {String} selector Menubar selector.*/UserCompetencyWorkflow.prototype.enhanceMenubar = function(selector) {Menubar.enhance(selector, {'[data-action="request-review"]': this._requestReviewHandler.bind(this),'[data-action="cancel-review-request"]': this._cancelReviewRequestHandler.bind(this),});};/*** Find the user competency data from a node.** @param {Node} node The node to search from.* @return {Object} User competency data.*/UserCompetencyWorkflow.prototype._findUserCompetencyData = function(node) {var parent = node.parents(this._nodeSelector),data;if (parent.length != 1) {throw new Error('The evidence node was not located.');}data = parent.data();if (typeof data === 'undefined' || typeof data.userid === 'undefined' || typeof data.competencyid === 'undefined') {throw new Error('User competency data could not be found.');}return data;};/*** Enhance a menu bar.** @param {String} selector Menubar selector.*/UserCompetencyWorkflow.prototype.enhanceMenubar = function(selector) {Menubar.enhance(selector, {'[data-action="request-review"]': this._requestReviewHandler.bind(this),'[data-action="cancel-review-request"]': this._cancelReviewRequestHandler.bind(this),'[data-action="start-review"]': this._startReviewHandler.bind(this),'[data-action="stop-review"]': this._stopReviewHandler.bind(this),});};/*** Register the events in the region.** @param {String} selector The base selector to search nodes in and attach events.*/UserCompetencyWorkflow.prototype.registerEvents = function(selector) {var wrapper = $(selector);wrapper.find('[data-action="request-review"]').click(this._requestReviewHandler.bind(this));wrapper.find('[data-action="cancel-review-request"]').click(this._cancelReviewRequestHandler.bind(this));wrapper.find('[data-action="start-review"]').click(this._startReviewHandler.bind(this));wrapper.find('[data-action="stop-review"]').click(this._stopReviewHandler.bind(this));};return /** @alias module:tool_lp/user_competency_actions */ UserCompetencyWorkflow;});