[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/admin/tool/lp/amd/src/ -> user_competency_workflow.js (source)

   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   * User competency workflow.
  18   *
  19   * @module     tool_lp/user_competency_workflow
  20   * @package    tool_lp
  21   * @copyright  2015 Frédéric Massart - FMCorz.net
  22   * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  23   */
  24  define(['jquery',
  25          'core/templates',
  26          'core/ajax',
  27          'core/notification',
  28          'core/str',
  29          'tool_lp/menubar',
  30          'tool_lp/event_base'],
  31          function($, Templates, Ajax, Notification, Str, Menubar, EventBase) {
  32  
  33      /**
  34       * UserCompetencyWorkflow class.
  35       *
  36       * @param {String} selector The node containing the buttons to switch mode.
  37       */
  38      var UserCompetencyWorkflow = function() {
  39          EventBase.prototype.constructor.apply(this, []);
  40      };
  41      UserCompetencyWorkflow.prototype = Object.create(EventBase.prototype);
  42  
  43      /** @type {String} The selector to find the user competency data. */
  44      UserCompetencyWorkflow.prototype._nodeSelector = '[data-node="user-competency"]';
  45  
  46      /**
  47       * Cancel a review request and refresh the view.
  48       *
  49       * @param  {Object} data The user competency data.
  50       * @method _cancelReviewRequest
  51       */
  52      UserCompetencyWorkflow.prototype._cancelReviewRequest = function(data) {
  53          var call = {
  54              methodname: 'core_competency_user_competency_cancel_review_request',
  55              args: {
  56                  userid: data.userid,
  57                  competencyid: data.competencyid
  58              }
  59          };
  60  
  61          Ajax.call([call])[0].then(function() {
  62              this._trigger('review-request-cancelled', data);
  63              this._trigger('status-changed', data);
  64          }.bind(this), function() {
  65              this._trigger('error-occured', data);
  66          }.bind(this));
  67      };
  68  
  69      /**
  70       * Cancel a review request an refresh the view.
  71       *
  72       * @param  {Object} data The user competency data.
  73       * @method cancelReviewRequest
  74       */
  75      UserCompetencyWorkflow.prototype.cancelReviewRequest = function(data) {
  76          this._cancelReviewRequest(data);
  77      };
  78  
  79      /**
  80       * Cancel a review request handler.
  81       *
  82       * @param  {Event} e The event.
  83       * @method _cancelReviewRequestHandler
  84       */
  85      UserCompetencyWorkflow.prototype._cancelReviewRequestHandler = function(e) {
  86          e.preventDefault();
  87          var data = this._findUserCompetencyData($(e.target));
  88          this.cancelReviewRequest(data);
  89      };
  90  
  91      /**
  92       * Request a review and refresh the view.
  93       *
  94       * @param  {Object} data The user competency data.
  95       * @method _requestReview
  96       */
  97      UserCompetencyWorkflow.prototype._requestReview = function(data) {
  98          var call = {
  99              methodname: 'core_competency_user_competency_request_review',
 100              args: {
 101                  userid: data.userid,
 102                  competencyid: data.competencyid
 103              }
 104          };
 105  
 106          Ajax.call([call])[0].then(function() {
 107              this._trigger('review-requested', data);
 108              this._trigger('status-changed', data);
 109          }.bind(this), function() {
 110              this._trigger('error-occured', data);
 111          }.bind(this));
 112      };
 113  
 114      /**
 115       * Request a review.
 116       *
 117       * @param  {Object} data The user competency data.
 118       * @method requestReview
 119       */
 120      UserCompetencyWorkflow.prototype.requestReview = function(data) {
 121          this._requestReview(data);
 122      };
 123  
 124      /**
 125       * Request a review handler.
 126       *
 127       * @param  {Event} e The event.
 128       * @method _requestReviewHandler
 129       */
 130      UserCompetencyWorkflow.prototype._requestReviewHandler = function(e) {
 131          e.preventDefault();
 132          var data = this._findUserCompetencyData($(e.target));
 133          this.requestReview(data);
 134      };
 135  
 136      /**
 137       * Start a review and refresh the view.
 138       *
 139       * @param  {Object} data The user competency data.
 140       * @method _startReview
 141       */
 142      UserCompetencyWorkflow.prototype._startReview = function(data) {
 143          var call = {
 144              methodname: 'core_competency_user_competency_start_review',
 145              args: {
 146                  userid: data.userid,
 147                  competencyid: data.competencyid
 148              }
 149          };
 150  
 151          Ajax.call([call])[0].then(function() {
 152              this._trigger('review-started', data);
 153              this._trigger('status-changed', data);
 154          }.bind(this), function() {
 155              this._trigger('error-occured', data);
 156          }.bind(this));
 157      };
 158  
 159      /**
 160       * Start a review.
 161       *
 162       * @param  {Object} data The user competency data.
 163       * @method startReview
 164       */
 165      UserCompetencyWorkflow.prototype.startReview = function(data) {
 166          this._startReview(data);
 167      };
 168  
 169      /**
 170       * Start a review handler.
 171       *
 172       * @param  {Event} e The event.
 173       * @method _startReviewHandler
 174       */
 175      UserCompetencyWorkflow.prototype._startReviewHandler = function(e) {
 176          e.preventDefault();
 177          var data = this._findUserCompetencyData($(e.target));
 178          this.startReview(data);
 179      };
 180  
 181      /**
 182       * Stop a review and refresh the view.
 183       *
 184       * @param  {Object} data The user competency data.
 185       * @method _stopReview
 186       */
 187      UserCompetencyWorkflow.prototype._stopReview = function(data) {
 188          var call = {
 189              methodname: 'core_competency_user_competency_stop_review',
 190              args: {
 191                  userid: data.userid,
 192                  competencyid: data.competencyid
 193              }
 194          };
 195  
 196          Ajax.call([call])[0].then(function() {
 197              this._trigger('review-stopped', data);
 198              this._trigger('status-changed', data);
 199          }.bind(this), function() {
 200              this._trigger('error-occured', data);
 201          }.bind(this));
 202      };
 203  
 204      /**
 205       * Stop a review.
 206       *
 207       * @param  {Object} data The user competency data.
 208       * @method stopReview
 209       */
 210      UserCompetencyWorkflow.prototype.stopReview = function(data) {
 211          this._stopReview(data);
 212      };
 213  
 214      /**
 215       * Stop a review handler.
 216       *
 217       * @param  {Event} e The event.
 218       * @method _stopReviewHandler
 219       */
 220      UserCompetencyWorkflow.prototype._stopReviewHandler = function(e) {
 221          e.preventDefault();
 222          var data = this._findUserCompetencyData($(e.target));
 223          this.stopReview(data);
 224      };
 225  
 226      /**
 227       * Enhance a menu bar.
 228       *
 229       * @param  {String} selector Menubar selector.
 230       */
 231      UserCompetencyWorkflow.prototype.enhanceMenubar = function(selector) {
 232          Menubar.enhance(selector, {
 233              '[data-action="request-review"]': this._requestReviewHandler.bind(this),
 234              '[data-action="cancel-review-request"]': this._cancelReviewRequestHandler.bind(this),
 235          });
 236      };
 237  
 238      /**
 239       * Find the user competency data from a node.
 240       *
 241       * @param  {Node} node The node to search from.
 242       * @return {Object} User competency data.
 243       */
 244      UserCompetencyWorkflow.prototype._findUserCompetencyData = function(node) {
 245          var parent = node.parents(this._nodeSelector),
 246              data;
 247  
 248          if (parent.length != 1) {
 249              throw new Error('The evidence node was not located.');
 250          }
 251  
 252          data = parent.data();
 253          if (typeof data === 'undefined' || typeof data.userid === 'undefined' || typeof data.competencyid === 'undefined') {
 254              throw new Error('User competency data could not be found.');
 255          }
 256  
 257          return data;
 258      };
 259  
 260      /**
 261       * Enhance a menu bar.
 262       *
 263       * @param  {String} selector Menubar selector.
 264       */
 265      UserCompetencyWorkflow.prototype.enhanceMenubar = function(selector) {
 266          Menubar.enhance(selector, {
 267              '[data-action="request-review"]': this._requestReviewHandler.bind(this),
 268              '[data-action="cancel-review-request"]': this._cancelReviewRequestHandler.bind(this),
 269              '[data-action="start-review"]': this._startReviewHandler.bind(this),
 270              '[data-action="stop-review"]': this._stopReviewHandler.bind(this),
 271          });
 272      };
 273  
 274      /**
 275       * Register the events in the region.
 276       *
 277       * @param {String} selector The base selector to search nodes in and attach events.
 278       */
 279      UserCompetencyWorkflow.prototype.registerEvents = function(selector) {
 280          var wrapper = $(selector);
 281  
 282          wrapper.find('[data-action="request-review"]').click(this._requestReviewHandler.bind(this));
 283          wrapper.find('[data-action="cancel-review-request"]').click(this._cancelReviewRequestHandler.bind(this));
 284          wrapper.find('[data-action="start-review"]').click(this._startReviewHandler.bind(this));
 285          wrapper.find('[data-action="stop-review"]').click(this._stopReviewHandler.bind(this));
 286      };
 287  
 288      return /** @alias module:tool_lp/user_competency_actions */ UserCompetencyWorkflow;
 289  });


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1