[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/enrol/manual/yui/quickenrolment/ -> quickenrolment.js (source)

   1  YUI.add('moodle-enrol_manual-quickenrolment', function(Y) {
   2  
   3      var UEP = {
   4          NAME : 'Enrolment Manager',
   5          /** Properties **/
   6          BASE : 'base',
   7          SEARCH : 'search',
   8          SEARCHBTN : 'searchbtn',
   9          PARAMS : 'params',
  10          URL : 'url',
  11          AJAXURL : 'ajaxurl',
  12          MULTIPLE : 'multiple',
  13          PAGE : 'page',
  14          COURSEID : 'courseid',
  15          USERS : 'users',
  16          USERCOUNT : 'userCount',
  17          REQUIREREFRESH : 'requiresRefresh',
  18          LASTSEARCH : 'lastPreSearchValue',
  19          INSTANCES : 'instances',
  20          OPTIONSTARTDATE : 'optionsStartDate',
  21          DEFAULTROLE : 'defaultRole',
  22          DEFAULTSTARTDATE : 'defaultStartDate',
  23          DEFAULTDURATION : 'defaultDuration',
  24          ASSIGNABLEROLES : 'assignableRoles',
  25          DISABLEGRADEHISTORY : 'disableGradeHistory',
  26          RECOVERGRADESDEFAULT : 'recoverGradesDefault',
  27          ENROLCOUNT : 'enrolCount',
  28          PERPAGE : 'perPage',
  29          COHORTSAVAILABLE : 'cohortsAvailable',
  30          COHORTCOUNT : 'cohortCount'
  31      };
  32      /** CSS classes for nodes in structure **/
  33      var CSS = {
  34          PANEL : 'user-enroller-panel',
  35          WRAP : 'uep-wrap',
  36          HEADER : 'uep-header',
  37          CONTENT : 'uep-content',
  38          AJAXCONTENT : 'uep-ajax-content',
  39          SEARCHRESULTS : 'uep-search-results',
  40          TOTALUSERS : 'totalusers',
  41          USERS : 'users',
  42          USER : 'user',
  43          MORERESULTS : 'uep-more-results',
  44          LIGHTBOX : 'uep-loading-lightbox',
  45          LOADINGICON : 'loading-icon',
  46          FOOTER : 'uep-footer',
  47          ENROL : 'enrol',
  48          ENROLLED : 'enrolled',
  49          COUNT : 'count',
  50          PICTURE : 'picture',
  51          DETAILS : 'details',
  52          FULLNAME : 'fullname',
  53          EXTRAFIELDS : 'extrafields',
  54          OPTIONS : 'options',
  55          ODD  : 'odd',
  56          EVEN : 'even',
  57          HIDDEN : 'hidden',
  58          RECOVERGRADES : 'recovergrades',
  59          RECOVERGRADESTITLE : 'recovergradestitle',
  60          SEARCHOPTIONS : 'uep-searchoptions',
  61          COLLAPSIBLEHEADING : 'collapsibleheading',
  62          COLLAPSIBLEAREA : 'collapsiblearea',
  63          ENROLMENTOPTION : 'uep-enrolment-option',
  64          SEARCHCONTROLS : 'uep-controls',
  65          ROLE : 'role',
  66          STARTDATE : 'startdate',
  67          DURATION : 'duration',
  68          ACTIVE : 'active',
  69          SEARCH : 'uep-search',
  70          SEARCHBTN : 'uep-search-btn',
  71          CLOSE : 'close',
  72          CLOSEBTN : 'close-button',
  73          ENTITYSELECTOR : 'uep-entity-selector',
  74          COHORTS : 'cohorts',
  75          COHORT : 'cohort',
  76          COHORTNAME : 'cohortname',
  77          TOTALCOHORTS : 'totalcohorts'
  78      };
  79      var create = Y.Node.create;
  80  
  81      var USERENROLLER = function(config) {
  82          USERENROLLER.superclass.constructor.apply(this, arguments);
  83      };
  84      Y.extend(USERENROLLER, Y.Base, {
  85          _searchTimeout : null,
  86          _loadingNode : null,
  87          _escCloseEvent : null,
  88          initializer : function(config) {
  89              var recovergrades = null;
  90              if (this.get(UEP.DISABLEGRADEHISTORY) != true) {
  91                  recovergrades = create('<div class="'+CSS.ENROLMENTOPTION+' '+CSS.RECOVERGRADES+'"></div>')
  92                      .append(create('<label class="'+CSS.RECOVERGRADESTITLE+'" for="'+CSS.RECOVERGRADES+'">'+M.str.enrol.recovergrades+'</label>'))
  93                      .append(create('<input type="checkbox" id="'+CSS.RECOVERGRADES+'" name="'+CSS.RECOVERGRADES+'"'+ this.get(UEP.RECOVERGRADESDEFAULT) +' />'))
  94              }
  95  
  96              this.set(UEP.BASE, create('<div class="'+CSS.PANEL+' '+CSS.HIDDEN+'"></div>')
  97                  .append(create('<div class="'+CSS.WRAP+'"></div>')
  98                      .append(create('<div class="'+CSS.HEADER+' header"></div>')
  99                          .append(create('<div class="'+CSS.CLOSE+'"></div>'))
 100                          .append(create('<h2>'+M.str.enrol.enrolusers+'</h2>')))
 101                      .append(create('<div class="'+CSS.CONTENT+'"></div>')
 102                          .append(create('<div class="'+CSS.SEARCHCONTROLS+'"></div>')
 103                              .append(create('<div class="'+CSS.ENROLMENTOPTION+' '+CSS.ROLE+'"><label for="id_enrol_manual_assignable_roles">'+M.str.role.assignroles+'</label></div>')
 104                                      .append(create('<select id="id_enrol_manual_assignable_roles"><option value="">'+M.str.enrol.none+'</option></select>'))
 105                              )
 106                              .append(create('<div class="'+CSS.ENTITYSELECTOR+'"></div>'))
 107                              .append(create('<div class="'+CSS.SEARCHOPTIONS+'"></div>')
 108                                  .append(create('<div class="'+CSS.COLLAPSIBLEHEADING+'"><img alt="" />'+M.str.enrol.enrolmentoptions+'</div>'))
 109                                  .append(create('<div class="'+CSS.COLLAPSIBLEAREA+' '+CSS.HIDDEN+'"></div>')
 110                                      .append(recovergrades)
 111                                      .append(create('<div class="'+CSS.ENROLMENTOPTION+' '+CSS.STARTDATE+'">'+M.str.moodle.startingfrom+'</div>')
 112                                          .append(create('<select></select>')))
 113                                      .append(create('<div class="'+CSS.ENROLMENTOPTION+' '+CSS.DURATION+'">'+M.str.enrol.enrolperiod+'</div>')
 114                                          .append(create('<select><option value="0" selected="selected">'+M.str.enrol.unlimitedduration+'</option></select>')))
 115                                  )
 116                              )
 117                          )
 118                          .append(create('<div class="'+CSS.AJAXCONTENT+'"></div>'))
 119                          .append(create('<div class="'+CSS.LIGHTBOX+' '+CSS.HIDDEN+'"></div>')
 120                              .append(create('<img alt="loading" class="'+CSS.LOADINGICON+'" />')
 121                                  .setAttribute('src', M.util.image_url('i/loading', 'moodle')))
 122                              .setStyle('opacity', 0.5)))
 123                      .append(create('<div class="'+CSS.FOOTER+'"></div>')
 124                          .append(create('<div class="'+CSS.SEARCH+'"><label for="enrolusersearch" class="accesshide">'+M.str.enrol.usersearch+'</label></div>')
 125                              .append(create('<input type="text" id="enrolusersearch" value="" />'))
 126                                  .append(create('<input type="button" id="searchbtn" class="'+CSS.SEARCHBTN+'" value="'+M.str.enrol.usersearch+'" />'))
 127                          )
 128                          .append(create('<div class="'+CSS.CLOSEBTN+'"></div>')
 129                              .append(create('<input type="button" value="'+M.str.enrol.finishenrollingusers+'" />'))
 130                          )
 131                      )
 132                  )
 133              );
 134  
 135              this.set(UEP.SEARCH, this.get(UEP.BASE).one('#enrolusersearch'));
 136              this.set(UEP.SEARCHBTN, this.get(UEP.BASE).one('#searchbtn'));
 137              Y.all('.enrol_manual_plugin input').each(function(node){
 138                  if (node.getAttribute('type', 'submit')) {
 139                      node.on('click', this.show, this);
 140                  }
 141              }, this);
 142              this.get(UEP.BASE).one('.'+CSS.HEADER+' .'+CSS.CLOSE).on('click', this.hide, this);
 143              this.get(UEP.BASE).one('.'+CSS.FOOTER+' .'+CSS.CLOSEBTN+' input').on('click', this.hide, this);
 144              this._loadingNode = this.get(UEP.BASE).one('.'+CSS.CONTENT+' .'+CSS.LIGHTBOX);
 145              var params = this.get(UEP.PARAMS);
 146              params['id'] = this.get(UEP.COURSEID);
 147              this.set(UEP.PARAMS, params);
 148  
 149              Y.on('key', this.preSearch, this.get(UEP.SEARCH), 'down:13', this);
 150              this.get(UEP.SEARCHBTN).on('click', this.preSearch, this);
 151  
 152              if (this.get(UEP.COHORTSAVAILABLE)) {
 153                  this.get(UEP.BASE).one('.'+CSS.ENTITYSELECTOR)
 154                      .append(create('<input type="radio" id="id_enrol_manual_entity_users" name="enrol_manual_entity" value="users" checked="checked"/>'))
 155                      .append(create('<label for="id_enrol_manual_entity_users">'+ M.str.enrol_manual.browseusers+'</label>'))
 156                      .append(create('<input type="radio" id="id_enrol_manual_entity_cohorts" name="enrol_manual_entity" value="cohorts"/>'))
 157                      .append(create('<label for="id_enrol_manual_entity_cohorts">'+M.str.enrol_manual.browsecohorts+'</label>'));
 158                  this.get(UEP.BASE).one('#id_enrol_manual_entity_cohorts').on('change', this.search, this);
 159                  this.get(UEP.BASE).one('#id_enrol_manual_entity_users').on('change', this.search, this);
 160              } else {
 161                  this.get(UEP.BASE).one('.'+CSS.ENTITYSELECTOR)
 162                      .append(create('<input type="hidden" name="enrol_manual_entity" value="users"/>'));
 163              }
 164  
 165              Y.one(document.body).append(this.get(UEP.BASE));
 166  
 167              var base = this.get(UEP.BASE);
 168              base.plug(Y.Plugin.Drag);
 169              base.dd.addHandle('.'+CSS.HEADER+' h2');
 170              base.one('.'+CSS.HEADER+' h2').setStyle('cursor', 'move');
 171  
 172              var collapsedimage = 't/collapsed'; // ltr mode
 173              if ( Y.one(document.body).hasClass('dir-rtl') ) {
 174                  collapsedimage = 't/collapsed_rtl';
 175              } else {
 176                  collapsedimage = 't/collapsed';
 177              }
 178  
 179              this.get(UEP.BASE).one('.'+CSS.SEARCHOPTIONS+' .'+CSS.COLLAPSIBLEHEADING).one('img').setAttribute('src', M.util.image_url(collapsedimage, 'moodle'));
 180              this.populateStartDates();
 181              this.populateDuration();
 182              this.get(UEP.BASE).one('.'+CSS.SEARCHOPTIONS+' .'+CSS.COLLAPSIBLEHEADING).on('click', function(){
 183                  this.get(UEP.BASE).one('.'+CSS.SEARCHOPTIONS+' .'+CSS.COLLAPSIBLEHEADING).toggleClass(CSS.ACTIVE);
 184                  this.get(UEP.BASE).one('.'+CSS.SEARCHOPTIONS+' .'+CSS.COLLAPSIBLEAREA).toggleClass(CSS.HIDDEN);
 185                  if (this.get(UEP.BASE).one('.'+CSS.SEARCHOPTIONS+' .'+CSS.COLLAPSIBLEAREA).hasClass(CSS.HIDDEN)) {
 186                      this.get(UEP.BASE).one('.'+CSS.SEARCHOPTIONS+' .'+CSS.COLLAPSIBLEHEADING).one('img').setAttribute('src', M.util.image_url(collapsedimage, 'moodle'));
 187                  } else {
 188                      this.get(UEP.BASE).one('.'+CSS.SEARCHOPTIONS+' .'+CSS.COLLAPSIBLEHEADING).one('img').setAttribute('src', M.util.image_url('t/expanded', 'moodle'));
 189                  }
 190              }, this);
 191              this.populateAssignableRoles();
 192          },
 193          populateAssignableRoles : function() {
 194              this.on('assignablerolesloaded', function(){
 195                  var roles = this.get(UEP.ASSIGNABLEROLES);
 196                  var s = this.get(UEP.BASE).one('.'+CSS.ENROLMENTOPTION+'.'+CSS.ROLE+' select');
 197                  var v = this.get(UEP.DEFAULTROLE);
 198                  var index = 0, count = 0;
 199                  for (var i in roles) {
 200                      count++;
 201                      var option = create('<option value="'+i+'">'+roles[i]+'</option>');
 202                      if (i == v) {
 203                          index = count;
 204                      }
 205                      s.append(option);
 206                  }
 207                  s.set('selectedIndex', index);
 208                  Y.one('#id_enrol_manual_assignable_roles').focus();
 209              }, this);
 210              this.getAssignableRoles();
 211          },
 212          populateStartDates : function() {
 213              var select = this.get(UEP.BASE).one('.'+CSS.ENROLMENTOPTION+'.'+CSS.STARTDATE+' select');
 214              var defaultvalue = this.get(UEP.DEFAULTSTARTDATE);
 215              var options = this.get(UEP.OPTIONSTARTDATE);
 216              var index = 0, count = 0;
 217              for (var i in options) {
 218                  count++;
 219                  var option = create('<option value="'+i+'">'+options[i]+'</option>');
 220                  if (i == defaultvalue) {
 221                      index = count;
 222                  }
 223                  select.append(option);
 224              }
 225              select.set('selectedIndex', index);
 226          },
 227          populateDuration : function() {
 228              var select = this.get(UEP.BASE).one('.'+CSS.ENROLMENTOPTION+'.'+CSS.DURATION+' select');
 229              var defaultvalue = this.get(UEP.DEFAULTDURATION);
 230              var index = 0, count = 0;
 231              var durationdays = M.util.get_string('durationdays', 'enrol', '{a}');
 232              for (var i = 1; i <= 365; i++) {
 233                  count++;
 234                  var option = create('<option value="'+i+'">'+durationdays.replace('{a}', i)+'</option>');
 235                  if (i == defaultvalue) {
 236                      index = count;
 237                  }
 238                  select.append(option);
 239              }
 240              select.set('selectedIndex', index);
 241          },
 242          getAssignableRoles : function(){
 243              Y.io(M.cfg.wwwroot+'/enrol/ajax.php', {
 244                  method:'POST',
 245                  data:'id='+this.get(UEP.COURSEID)+'&action=getassignable&sesskey='+M.cfg.sesskey,
 246                  on: {
 247                      complete: function(tid, outcome, args) {
 248                          try {
 249                              var roles = Y.JSON.parse(outcome.responseText);
 250                              this.set(UEP.ASSIGNABLEROLES, roles.response);
 251                          } catch (e) {
 252                              new M.core.exception(e);
 253                          }
 254                          this.getAssignableRoles = function() {
 255                              this.fire('assignablerolesloaded');
 256                          };
 257                          this.getAssignableRoles();
 258                      }
 259                  },
 260                  context:this
 261              });
 262          },
 263          preSearch : function(e) {
 264              this.search(null, false);
 265              /*
 266              var value = this.get(UEP.SEARCH).get('value');
 267              if (value.length < 3 || value == this.get(UEP.LASTSEARCH)) {
 268                  return;
 269              }
 270              this.set(UEP.LASTSEARCH, value);
 271              if (this._searchTimeout) {
 272                  clearTimeout(this._searchTimeout);
 273                  this._searchTimeout = null;
 274              }
 275              var self = this;
 276              this._searchTimeout = setTimeout(function(){
 277                  self._searchTimeout = null;
 278                  self.search(null, false);
 279              }, 300);
 280              */
 281          },
 282          show : function(e) {
 283              e.preventDefault();
 284              e.halt();
 285  
 286              var base = this.get(UEP.BASE);
 287              base.removeClass(CSS.HIDDEN);
 288              var x = (base.get('winWidth') - 400)/2;
 289              var y = (parseInt(base.get('winHeight'))-base.get('offsetHeight'))/2 + parseInt(base.get('docScrollY'));
 290              if (y < parseInt(base.get('winHeight'))*0.1) {
 291                  y = parseInt(base.get('winHeight'))*0.1;
 292              }
 293              base.setXY([x,y]);
 294  
 295              if (this.get(UEP.USERS)===null) {
 296                  this.search(e, false);
 297              }
 298  
 299              this._escCloseEvent = Y.on('key', this.hide, document.body, 'down:27', this);
 300              var rolesselect = Y.one('#id_enrol_manual_assignable_roles');
 301              if (rolesselect) {
 302                  rolesselect.focus();
 303              }
 304          },
 305          hide : function(e) {
 306              if (this._escCloseEvent) {
 307                  this._escCloseEvent.detach();
 308                  this._escCloseEvent = null;
 309              }
 310              this.get(UEP.BASE).addClass(CSS.HIDDEN);
 311              if (this.get(UEP.REQUIREREFRESH)) {
 312                  window.location = this.get(UEP.URL);
 313              }
 314          },
 315          currentEntity : function() {
 316              var entity = CSS.USER;
 317              var cohortsinput = Y.one('#id_enrol_manual_entity_cohorts');
 318              if (cohortsinput && cohortsinput.get('checked')) {
 319                  entity = CSS.COHORT;
 320              }
 321              return entity;
 322          },
 323          search : function(e, append) {
 324              var entity = this.currentEntity();
 325  
 326              if (e) {
 327                  e.halt();
 328                  e.preventDefault();
 329              }
 330              var on, params;
 331              if (append) {
 332                  this.set(UEP.PAGE, this.get(UEP.PAGE)+1);
 333              } else {
 334                  this.set(UEP.USERCOUNT, 0);
 335                  this.set(UEP.COHORTCOUNT, 0);
 336                  this.set(UEP.PAGE, 0);
 337              }
 338              params = this.get(UEP.PARAMS);
 339              params['sesskey'] = M.cfg.sesskey;
 340              params['action'] = (entity === CSS.USER) ? 'searchusers' : 'searchcohorts';
 341              params['search'] = this.get(UEP.SEARCH).get('value');
 342              params['page'] = this.get(UEP.PAGE);
 343              params['enrolcount'] = this.get(UEP.ENROLCOUNT);
 344              params['perpage'] = this.get(UEP.PERPAGE);
 345  
 346              if (this.get(UEP.MULTIPLE)) {
 347                  alert('oh no there are multiple');
 348              } else {
 349                  var instance = this.get(UEP.INSTANCES)[0];
 350                  params['enrolid'] = instance.id;
 351              }
 352              Y.io(M.cfg.wwwroot+this.get(UEP.AJAXURL), {
 353                  method:'POST',
 354                  data:build_querystring(params),
 355                  on : {
 356                      start : this.displayLoading,
 357                      complete: ((entity === CSS.USER) ? this.processSearchResults : this.processCohortsSearchResults),
 358                      end : this.removeLoading
 359                  },
 360                  context:this,
 361                  arguments:{
 362                      append:append,
 363                      enrolid:params['enrolid']
 364                  }
 365              });
 366          },
 367          displayLoading : function() {
 368              this._loadingNode.removeClass(CSS.HIDDEN);
 369          },
 370          removeLoading : function() {
 371              this._loadingNode.addClass(CSS.HIDDEN);
 372          },
 373          processSearchResults : function(tid, outcome, args) {
 374              try {
 375                  var result = Y.JSON.parse(outcome.responseText);
 376                  if (result.error) {
 377                      return new M.core.ajaxException(result);
 378                  }
 379              } catch (e) {
 380                  new M.core.exception(e);
 381              }
 382              if (!result.success) {
 383                  this.setContent = M.str.enrol.errajaxsearch;
 384              }
 385              var users;
 386              if (!args.append) {
 387                  users = create('<div class="'+CSS.USERS+'"></div>');
 388              } else {
 389                  users = this.get(UEP.BASE).one('.'+CSS.SEARCHRESULTS+' .'+CSS.USERS);
 390              }
 391              var count = this.get(UEP.USERCOUNT);
 392              for (var i in result.response.users) {
 393                  count++;
 394                  var user = result.response.users[i];
 395                  users.append(create('<div class="'+CSS.USER+' clearfix" rel="'+user.id+'"></div>')
 396                      .addClass((count%2)?CSS.ODD:CSS.EVEN)
 397                      .append(create('<div class="'+CSS.COUNT+'">'+count+'</div>'))
 398                      .append(create('<div class="'+CSS.PICTURE+'"></div>')
 399                          .append(create(user.picture)))
 400                      .append(create('<div class="'+CSS.DETAILS+'"></div>')
 401                          .append(create('<div class="'+CSS.FULLNAME+'">'+user.fullname+'</div>'))
 402                          .append(create('<div class="'+CSS.EXTRAFIELDS+'">'+user.extrafields+'</div>')))
 403                      .append(create('<div class="'+CSS.OPTIONS+'"></div>')
 404                          .append(create('<input type="button" class="'+CSS.ENROL+'" value="'+M.str.enrol.enrol+'" />')))
 405                  );
 406              }
 407              this.set(UEP.USERCOUNT, count);
 408              if (!args.append) {
 409                  var usersstr = (result.response.totalusers == '1')?M.str.enrol.ajaxoneuserfound:M.util.get_string('ajaxxusersfound','enrol', result.response.totalusers);
 410                  var content = create('<div class="'+CSS.SEARCHRESULTS+'"></div>')
 411                      .append(create('<div class="'+CSS.TOTALUSERS+'">'+usersstr+'</div>'))
 412                      .append(users);
 413                  if (result.response.totalusers > (this.get(UEP.PAGE)+1)*this.get(UEP.PERPAGE)) {
 414                      var fetchmore = create('<div class="'+CSS.MORERESULTS+'"><a href="#">'+M.str.enrol.ajaxnext25+'</a></div>');
 415                      fetchmore.on('click', this.search, this, true);
 416                      content.append(fetchmore)
 417                  }
 418                  this.setContent(content);
 419                  Y.delegate("click", this.enrolUser, users, '.'+CSS.USER+' .'+CSS.ENROL, this, args);
 420              } else {
 421                  if (result.response.totalusers <= (this.get(UEP.PAGE)+1)*this.get(UEP.PERPAGE)) {
 422                      this.get(UEP.BASE).one('.'+CSS.MORERESULTS).remove();
 423                  }
 424              }
 425          },
 426          processCohortsSearchResults : function(tid, outcome, args) {
 427              try {
 428                  var result = Y.JSON.parse(outcome.responseText);
 429                  if (result.error) {
 430                      return new M.core.ajaxException(result);
 431                  }
 432              } catch (e) {
 433                  new M.core.exception(e);
 434              }
 435              if (!result.success) {
 436                  this.setContent = M.str.enrol.errajaxsearch;
 437              }
 438              var cohorts;
 439              if (!args.append) {
 440                  cohorts = create('<div class="'+CSS.COHORTS+'"></div>');
 441              } else {
 442                  cohorts = this.get(UEP.BASE).one('.'+CSS.SEARCHRESULTS+' .'+CSS.COHORTS);
 443              }
 444              var count = this.get(UEP.COHORTCOUNT);
 445              for (var i in result.response.cohorts) {
 446                  count++;
 447                  var cohort = result.response.cohorts[i];
 448                  cohorts.append(create('<div class="'+CSS.COHORT+' clearfix" rel="'+cohort.id+'"></div>')
 449                      .addClass((count%2)?CSS.ODD:CSS.EVEN)
 450                      .append(create('<div class="'+CSS.COUNT+'">'+count+'</div>'))
 451                      .append(create('<div class="'+CSS.DETAILS+'"></div>')
 452                          .append(create('<div class="'+CSS.COHORTNAME+'">'+cohort.name+'</div>')))
 453                      .append(create('<div class="'+CSS.OPTIONS+'"></div>')
 454                          .append(create('<input type="button" class="'+CSS.ENROL+'" value="'+'Enrol '+cohort.cnt+' users'+'" />'))) // TODO string
 455                  );
 456              }
 457              this.set(UEP.COHORTCOUNT, count);
 458              if (!args.append) {
 459                  //var usersstr = (result.response.totalusers == '1')?M.str.enrol.ajaxoneuserfound:M.util.get_string('ajaxxusersfound','enrol', result.response.totalusers);
 460                  var cohortsstr = 'Found '+result.response.totalcohorts+' cohorts'; // TODO
 461                  var content = create('<div class="'+CSS.SEARCHRESULTS+'"></div>')
 462                      .append(create('<div class="'+CSS.TOTALCOHORTS+'">'+cohortsstr+'</div>'))
 463                      .append(cohorts);
 464                  if (result.response.totalcohorts > (this.get(UEP.PAGE)+1)*this.get(UEP.PERPAGE)) {
 465                      var fetchmore = create('<div class="'+CSS.MORERESULTS+'"><a href="#">'+M.str.enrol.ajaxnext25+'</a></div>');
 466                      fetchmore.on('click', this.search, this, true);
 467                      content.append(fetchmore)
 468                  }
 469                  this.setContent(content);
 470                  Y.delegate("click", this.enrolUser, cohorts, '.'+CSS.COHORT+' .'+CSS.ENROL, this, args);
 471              } else {
 472                  if (result.response.totalcohorts <= (this.get(UEP.PAGE)+1)*this.get(UEP.PERPAGE)) {
 473                      this.get(UEP.BASE).one('.'+CSS.MORERESULTS).remove();
 474                  }
 475              }
 476          },
 477          enrolUser : function(e, args) {
 478              var entityname = this.currentEntity();
 479  
 480              var entity = e.currentTarget.ancestor('.'+entityname);
 481              var params = [];
 482              params['id'] = this.get(UEP.COURSEID);
 483              if (entityname === CSS.USER) {
 484                  params['userid'] = entity.getAttribute("rel");
 485              } else {
 486                  params['cohortid'] = entity.getAttribute("rel");
 487              }
 488              params['enrolid'] = args.enrolid;
 489              params['sesskey'] = M.cfg.sesskey;
 490              params['action'] = 'enrol';
 491              params['role'] = this.get(UEP.BASE).one('.'+CSS.ENROLMENTOPTION+'.'+CSS.ROLE+' select').get('value');
 492              params['startdate'] = this.get(UEP.BASE).one('.'+CSS.ENROLMENTOPTION+'.'+CSS.STARTDATE+' select').get('value');
 493              params['duration'] = this.get(UEP.BASE).one('.'+CSS.ENROLMENTOPTION+'.'+CSS.DURATION+' select').get('value');
 494              if (this.get(UEP.DISABLEGRADEHISTORY) != true) {
 495                  params['recovergrades'] = this.get(UEP.BASE).one('#'+CSS.RECOVERGRADES).get('checked')?1:0;
 496              } else {
 497                  params['recovergrades'] = 0;
 498              }
 499  
 500              Y.io(M.cfg.wwwroot+this.get(UEP.AJAXURL), {
 501                  method:'POST',
 502                  data:build_querystring(params),
 503                  on: {
 504                      start : this.displayLoading,
 505                      complete : function(tid, outcome, args) {
 506                          try {
 507                              var result = Y.JSON.parse(outcome.responseText);
 508                              if (result.error) {
 509                                  return new M.core.ajaxException(result);
 510                              } else {
 511                                  args.entityNode.addClass(CSS.ENROLLED);
 512                                  args.entityNode.one('.'+CSS.ENROL).remove();
 513                                  this.set(UEP.REQUIREREFRESH, true);
 514                                  var countenrol = this.get(UEP.ENROLCOUNT)+1;
 515                                  this.set(UEP.ENROLCOUNT, countenrol);
 516                              }
 517                          } catch (e) {
 518                              new M.core.exception(e);
 519                          }
 520                      },
 521                      end : this.removeLoading
 522                  },
 523                  context:this,
 524                  arguments:{
 525                      params : params,
 526                      entityNode : entity
 527                  }
 528              });
 529  
 530          },
 531          setContent: function(content) {
 532              this.get(UEP.BASE).one('.'+CSS.CONTENT+' .'+CSS.AJAXCONTENT).setContent(content);
 533          }
 534      }, {
 535          NAME : UEP.NAME,
 536          ATTRS : {
 537              url : {
 538                  validator : Y.Lang.isString
 539              },
 540              ajaxurl : {
 541                  validator : Y.Lang.isString
 542              },
 543              base : {
 544                  setter : function(node) {
 545                      var n = Y.one(node);
 546                      if (!n) {
 547                          Y.fail(UEP.NAME+': invalid base node set');
 548                      }
 549                      return n;
 550                  }
 551              },
 552              users : {
 553                  validator : Y.Lang.isArray,
 554                  value : null
 555              },
 556              courseid : {
 557                  value : null
 558              },
 559              params : {
 560                  validator : Y.Lang.isArray,
 561                  value : []
 562              },
 563              instances : {
 564                  validator : Y.Lang.isArray,
 565                  setter : function(instances) {
 566                      var i,ia = [], count=0;
 567                      for (i in instances) {
 568                          ia.push(instances[i]);
 569                          count++;
 570                      }
 571                      this.set(UEP.MULTIPLE, (count>1));
 572                  }
 573              },
 574              multiple : {
 575                  validator : Y.Lang.isBool,
 576                  value : false
 577              },
 578              page : {
 579                  validator : Y.Lang.isNumber,
 580                  value : 0
 581              },
 582              userCount : {
 583                  value : 0,
 584                  validator : Y.Lang.isNumber
 585              },
 586              requiresRefresh : {
 587                  value : false,
 588                  validator : Y.Lang.isBool
 589              },
 590              search : {
 591                  setter : function(node) {
 592                      var n = Y.one(node);
 593                      if (!n) {
 594                          Y.fail(UEP.NAME+': invalid search node set');
 595                      }
 596                      return n;
 597                  }
 598              },
 599              lastPreSearchValue : {
 600                  value : '',
 601                  validator : Y.Lang.isString
 602              },
 603              strings  : {
 604                  value : {},
 605                  validator : Y.Lang.isObject
 606              },
 607              defaultRole : {
 608                  value : 0
 609              },
 610              defaultStartDate : {
 611                  value : 2,
 612                  validator : Y.Lang.isNumber
 613              },
 614              defaultDuration : {
 615                  value : ''
 616              },
 617              assignableRoles : {
 618                  value : []
 619              },
 620              optionsStartDate : {
 621                  value : []
 622              },
 623              disableGradeHistory : {
 624                  value : 0
 625              },
 626              recoverGradesDefault : {
 627                  value : ''
 628              },
 629              enrolCount : {
 630                  value : 0,
 631                  validator : Y.Lang.isNumber
 632              },
 633              perPage : {
 634                  value: 25,
 635                  Validator: Y.Lang.isNumber
 636              },
 637              cohortCount : {
 638                  value : 0,
 639                  validator : Y.Lang.isNumber
 640              },
 641              cohortsAvailable : {
 642                  value : null
 643              }
 644          }
 645      });
 646      Y.augment(USERENROLLER, Y.EventTarget);
 647  
 648      M.enrol_manual = M.enrol_manual || {};
 649      M.enrol_manual.quickenrolment = {
 650          init : function(cfg) {
 651              new USERENROLLER(cfg);
 652          }
 653      }
 654  
 655  }, '@VERSION@', {requires:['base','node', 'overlay', 'io-base', 'test', 'json-parse', 'event-delegate', 'dd-plugin', 'event-key', 'moodle-core-notification']});


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1