2
* Client-side JavaScript for group management interface.
3
* @author vy-shane AT moodle.com
4
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
10
* Class UpdatableGroupsCombo
12
function UpdatableGroupsCombo(wwwRoot, courseId) {
13
this.wwwRoot = wwwRoot;
14
this.courseId = courseId;
16
this.connectCallback = {
18
success: function(o) {
19
if (o.responseText !== undefined) {
20
var groupsComboEl = document.getElementById("groups");
21
var membersComboEl = document.getElementById("members");
24
// Clear the members combo box.
25
while (membersComboEl.firstChild) {
26
membersComboEl.removeChild(membersComboEl.firstChild);
30
if (groupsComboEl && o.responseText) {
31
var groups = eval("("+o.responseText+")");
33
// Populate the groups combo box.
34
for (var i=0; i<groups.length; i++) {
35
var optionEl = document.createElement("option");
36
optionEl.setAttribute("value", groups[i].id);
37
optionEl.title = groups[i].name;
38
optionEl.innerHTML = groups[i].name;
39
groupsComboEl.appendChild(optionEl);
43
// Remove the loader gif image.
44
removeLoaderImgs("groupsloader", "groupslabel");
47
failure: function(o) {
48
removeLoaderImgs("membersloader", "memberslabel");
49
this.currentTransId = null;
54
// Add onchange event to groups combo box.
55
// Okay, this is not working in IE. The onchange is never fired...
56
// I'm hard coding the onchange in ../index.php. Not ideal, but it works
57
// then. vyshane AT moodle DOT com.
59
groupsComboEl = document.getElementById("groups");
61
groupsComboEl.setAttribute("onchange", "membersCombo.refreshMembers(this.options[this.selectedIndex].value);");
65
// Hide the updategroups input since AJAX will take care of this.
66
YAHOO.util.Dom.setStyle("updategroups", "display", "none");
70
* When a grouping is selected, we need to update the groups.
72
UpdatableGroupsCombo.prototype.refreshGroups = function (groupingId) {
73
// Add the loader gif image.
74
createLoaderImg("groupsloader", "groupslabel", this.wwwRoot);
77
var selectEl = document.getElementById("groupings");
78
var spanEl = document.getElementById("thegrouping");
79
if (selectEl && selectEl.selectedIndex >= 0) {
80
spanEl.innerHTML = selectEl.options[selectEl.selectedIndex].title;
83
// Clear the groups combo box.
84
selectEl = document.getElementById("groups");
86
while (selectEl.firstChild) {
87
selectEl.removeChild(selectEl.firstChild);
91
if (groupingId > -1) {
92
document.getElementById("showaddmembersform").disabled = true;
93
document.getElementById("showeditgroupingsettingsform").disabled = false;
94
document.getElementById("deletegrouping").disabled = false;
95
document.getElementById("printerfriendly").disabled = false;
96
document.getElementById("showeditgroupsettingsform").disabled = true;
97
document.getElementById("deletegroup").disabled = true;
98
document.getElementById("showcreategroupform").disabled = false;
100
document.getElementById("showeditgroupingsettingsform").disabled = true;
101
document.getElementById("deletegrouping").disabled = true;
102
document.getElementById("showcreategroupform").disabled = true;
103
document.getElementById("showeditgroupsettingsform").disabled = true;
104
document.getElementById("deletegroup").disabled = true;
105
document.getElementById("showaddmembersform").disabled = true;
109
var sUrl = this.wwwRoot+"/group/index.php?id="+this.courseId+"&grouping="+groupingId+"&act_ajax_getgroupsingrouping";
110
YAHOO.util.Connect.asyncRequest('GET', sUrl, this.connectCallback, null);
116
* Class UpdatableMembersCombo
118
function UpdatableMembersCombo(wwwRoot, courseId) {
119
this.wwwRoot = wwwRoot;
120
this.courseId = courseId;
122
this.connectCallback = {
123
success: function(o) {
125
if (o.responseText !== undefined) {
126
var selectEl = document.getElementById("members");
127
if (selectEl && o.responseText) {
128
var members = eval("("+o.responseText+")");
130
// Clear the members combo box.
132
while (selectEl.firstChild) {
133
selectEl.removeChild(selectEl.firstChild);
136
// Populate the members combo box.
137
for (var i=0; i<members.length; i++) {
138
var optionEl = document.createElement("option");
139
optionEl.setAttribute("value", members[i].id);
140
optionEl.title = members[i].name;
141
optionEl.innerHTML = members[i].name;
142
selectEl.appendChild(optionEl);
146
// Remove the loader gif image.
147
removeLoaderImgs("membersloader", "memberslabel");
150
failure: function(o) {
151
removeLoaderImgs("membersloader", "memberslabel");
156
// Hide the updatemembers input since AJAX will take care of this.
157
YAHOO.util.Dom.setStyle("updatemembers", "display", "none");
161
* When a group is selected, we need to update the members.
162
* The Add/Remove Users button also needs to be disabled/enabled
163
* depending on whether or not a group is selected
165
UpdatableMembersCombo.prototype.refreshMembers = function (groupId) {
166
// Add the loader gif image.
167
createLoaderImg("membersloader", "memberslabel", this.wwwRoot);
170
var selectEl = document.getElementById("groups");
171
var spanEl = document.getElementById("thegroup");
172
if (selectEl && selectEl.selectedIndex >= 0) {
173
spanEl.innerHTML = selectEl.options[selectEl.selectedIndex].title;
176
// Clear the members combo box.
177
selectEl = document.getElementById("members");
179
while (selectEl.firstChild) {
180
selectEl.removeChild(selectEl.firstChild);
184
document.getElementById("showaddmembersform").disabled = false;
185
document.getElementById("showeditgroupsettingsform").disabled = false;
186
document.getElementById("deletegroup").disabled = false;
187
var sUrl = this.wwwRoot+"/group/index.php?id="+this.courseId+"&group="+groupId+"&act_ajax_getmembersingroup";
188
YAHOO.util.Connect.asyncRequest("GET", sUrl, this.connectCallback, null);
193
var createLoaderImg = function (elClass, parentId, wwwRoot) {
194
var parentEl = document.getElementById(parentId);
198
if (document.getElementById("loaderImg")) {
199
// A loader image already exists.
202
var loadingImg = document.createElement("img");
204
loadingImg.setAttribute("src", wwwRoot+"/pix/i/ajaxloader.gif");
205
loadingImg.setAttribute("class", elClass);
206
loadingImg.setAttribute("alt", "Loading");
207
loadingImg.setAttribute("id", "loaderImg");
208
parentEl.appendChild(loadingImg);
214
var removeLoaderImgs = function (elClass, parentId) {
215
var parentEl = document.getElementById(parentId);
217
var loader = document.getElementById("loaderImg");
218
parentEl.removeChild(loader);