925
by mattgiuca
Added "groups" app. No code within the app just yet. |
1 |
/* IVLE - Informatics Virtual Learning Environment
|
2 |
* Copyright (C) 2007-2008 The University of Melbourne
|
|
3 |
*
|
|
4 |
* This program is free software; you can redistribute it and/or modify
|
|
5 |
* it under the terms of the GNU General Public License as published by
|
|
6 |
* the Free Software Foundation; either version 2 of the License, or
|
|
7 |
* (at your option) any later version.
|
|
8 |
*
|
|
9 |
* This program is distributed in the hope that it will be useful,
|
|
10 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12 |
* GNU General Public License for more details.
|
|
13 |
*
|
|
14 |
* You should have received a copy of the GNU General Public License
|
|
15 |
* along with this program; if not, write to the Free Software
|
|
16 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
17 |
*
|
|
18 |
* Module: Group management system (client)
|
|
19 |
* Author: Matt Giuca
|
|
20 |
* Date: 21/7/2008
|
|
21 |
*/
|
|
22 |
||
1001
by dcoles
Groups: Added the view half of the group admin panel. This lets people with the |
23 |
serviceapp = 'userservice'; |
24 |
||
1004
by dcoles
Groups: Now you can add people to a group as well as creating groups from the |
25 |
/* Creates a group */
|
26 |
function create_new_group(projectsetid) |
|
27 |
{
|
|
1329
by David Coles
All window.prompts now have a default text (fixes appearing as "undefined" in |
28 |
groupnm = window.prompt('Please enter a name for the group',''); |
1335
by William Grant
Abort group creation if the prompt is cancelled or the name is empty. |
29 |
|
30 |
/* If the provided name is empty, or the prompt is cancelled, stop. */
|
|
31 |
if (groupnm) |
|
32 |
{
|
|
33 |
args = { |
|
34 |
'projectsetid': projectsetid, |
|
35 |
'groupnm':groupnm, |
|
36 |
'nick': groupnm |
|
37 |
};
|
|
38 |
response = ajax_call(null, serviceapp, 'create_group', args, 'POST'); |
|
39 |
if (response.status == 200) |
|
40 |
{
|
|
41 |
/* pass */
|
|
42 |
}
|
|
1606.1.4
by William Grant
Display a nice error when trying to add a group with an invalid name. |
43 |
else if (response.status == 400) |
44 |
{
|
|
1606.1.5
by William Grant
Call the field X-IVLE-Error instead (to avoid potential conflicts with icky fileservice), and populate it in the root XHTMLErrorView. |
45 |
alert("Could not create group: " + response.getResponseHeader('X-IVLE-Error')); |
1606.1.4
by William Grant
Display a nice error when trying to add a group with an invalid name. |
46 |
}
|
1335
by William Grant
Abort group creation if the prompt is cancelled or the name is empty. |
47 |
else
|
48 |
{
|
|
49 |
alert("Error: Could not add group. Does it already exist?"); |
|
50 |
}
|
|
51 |
/* Reload the display */
|
|
52 |
window.location.href = window.location.href; |
|
53 |
}
|
|
1004
by dcoles
Groups: Now you can add people to a group as well as creating groups from the |
54 |
}
|
55 |
||
56 |
function manage_group(offeringid, groupid, namespace) |
|
57 |
{
|
|
58 |
var elem = document.getElementById(namespace); |
|
59 |
var button = document.getElementById(namespace+"_button"); |
|
60 |
var manage_div = document.createElement("div") |
|
1014
by dcoles
Groups: Small interface bug fix. Will now refresh the group information when |
61 |
manage_div.id = namespace + "_contents"; |
1004
by dcoles
Groups: Now you can add people to a group as well as creating groups from the |
62 |
elem.insertBefore(manage_div, button); |
1014
by dcoles
Groups: Small interface bug fix. Will now refresh the group information when |
63 |
|
64 |
/* Refresh contents */
|
|
65 |
list_projectgroup_contents(offeringid, groupid, manage_div.id); |
|
66 |
||
67 |
/* Remove the button element */
|
|
68 |
elem.removeChild(button); |
|
69 |
}
|
|
70 |
||
71 |
/* Lists the information about a particular project group identified by groupid
|
|
72 |
* in an offering identified by offeringid in the element with id elemnm. May
|
|
73 |
* be called multiple times safely to refresh the displayed information.
|
|
74 |
*/
|
|
75 |
function list_projectgroup_contents(offeringid, groupid, elemnm) |
|
76 |
{
|
|
77 |
var contents = document.getElementById(elemnm); |
|
78 |
dom_removechildren(contents); |
|
1004
by dcoles
Groups: Now you can add people to a group as well as creating groups from the |
79 |
var callback = function(xhr) |
80 |
{
|
|
81 |
var members = JSON.parse(xhr.responseText); |
|
82 |
var available = members.available; |
|
83 |
var groupmembers = members.groupmembers; |
|
84 |
||
1009
by wagrant
groups: Pretty up the admin interface somewhat. |
85 |
/* Existing members */
|
86 |
var ul = document.createElement("ul"); |
|
87 |
for (var i=0; i<groupmembers.length; i++) |
|
88 |
{
|
|
1181
by William Grant
Allow revocation of group memberships by tutors and lecturers. |
89 |
var member = groupmembers[i]; |
90 |
||
91 |
var li = dom_make_text_elem("li", member.fullname + " (" + |
|
92 |
member.login + ")"); |
|
93 |
var rmbutton = document.createElement("input"); |
|
94 |
rmbutton.value = "Remove"; |
|
95 |
rmbutton.type = "image"; |
|
96 |
/* XXX: There must be a better way to do this! */
|
|
97 |
rmbutton.src = "/+media/ivle.webapp.groups/cross.png"; |
|
98 |
||
99 |
$(rmbutton).click(function(offeringid, login, groupid, elemnm) |
|
100 |
{
|
|
101 |
return function() { |
|
102 |
if (!confirm("Are you sure want to revoke this user's membership?")) |
|
103 |
return; |
|
104 |
this.disabled = true; |
|
105 |
var args = {'login': login, 'groupid': groupid}; |
|
106 |
ajax_call(null, serviceapp, 'unassign_group', args, 'POST'); |
|
107 |
list_projectgroup_contents(offeringid, groupid, elemnm); |
|
108 |
};
|
|
109 |
}(offeringid, member.login, groupid, elemnm)); |
|
110 |
||
111 |
li.appendChild(rmbutton); |
|
1009
by wagrant
groups: Pretty up the admin interface somewhat. |
112 |
ul.appendChild(li); |
113 |
}
|
|
114 |
||
1004
by dcoles
Groups: Now you can add people to a group as well as creating groups from the |
115 |
/* Add member box */
|
1009
by wagrant
groups: Pretty up the admin interface somewhat. |
116 |
var add_li = document.createElement("li"); |
1004
by dcoles
Groups: Now you can add people to a group as well as creating groups from the |
117 |
var select = document.createElement("select"); |
118 |
for (var i=0; i<available.length; i++) |
|
119 |
{
|
|
120 |
var option = dom_make_text_elem("option", available[i].login); |
|
121 |
option.value = available[i].login; |
|
122 |
select.appendChild(option); |
|
123 |
}
|
|
124 |
var button = document.createElement("input"); |
|
1009
by wagrant
groups: Pretty up the admin interface somewhat. |
125 |
button.value = "Add"; |
1004
by dcoles
Groups: Now you can add people to a group as well as creating groups from the |
126 |
button.type = 'button'; |
1166
by William Grant
Replace all non-external addEventListeners with equivalent jQuery calls. |
127 |
$(button).click(function() |
1004
by dcoles
Groups: Now you can add people to a group as well as creating groups from the |
128 |
{
|
1145
by William Grant
Disable the 'Add' button inside groups as soon as it's pressed, to avoid |
129 |
this.disabled = true; |
1004
by dcoles
Groups: Now you can add people to a group as well as creating groups from the |
130 |
args = {'login': select.value, 'groupid': groupid}; |
131 |
ajax_call(null, serviceapp, 'assign_group', args, 'POST'); |
|
1014
by dcoles
Groups: Small interface bug fix. Will now refresh the group information when |
132 |
list_projectgroup_contents(offeringid, groupid, elemnm); |
1166
by William Grant
Replace all non-external addEventListeners with equivalent jQuery calls. |
133 |
});
|
1009
by wagrant
groups: Pretty up the admin interface somewhat. |
134 |
add_li.appendChild(select); |
135 |
add_li.appendChild(button); |
|
136 |
ul.appendChild(add_li); |
|
1014
by dcoles
Groups: Small interface bug fix. Will now refresh the group information when |
137 |
contents.appendChild(ul); |
1004
by dcoles
Groups: Now you can add people to a group as well as creating groups from the |
138 |
}
|
139 |
var args = {'offeringid': offeringid, 'groupid': groupid}; |
|
140 |
ajax_call(callback, serviceapp, 'get_group_membership', args, 'GET'); |
|
1014
by dcoles
Groups: Small interface bug fix. Will now refresh the group information when |
141 |
|
1001
by dcoles
Groups: Added the view half of the group admin panel. This lets people with the |
142 |
}
|