~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/webapp/admin/user-media/settings.js

  • Committer: William Grant
  • Date: 2009-04-29 04:58:42 UTC
  • Revision ID: grantw@unimelb.edu.au-20090429045842-upijb1ybcbz1zg6u
Kill --nosvnrevno from setup.install - we don't use Subversion now.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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: Settings (Client-side JavaScript)
 
19
 * Author: Matt Giuca
 
20
 * Date: 25/2/2008
 
21
 */
 
22
 
 
23
var user_data;
 
24
 
 
25
/* Fetch the user's details from the server, and populate the page.
 
26
 * Returns false. */
 
27
function revert_settings()
 
28
{
 
29
    var callback = function(xhr)
 
30
        {
 
31
            user = JSON.parse(xhr.responseText);
 
32
            populate(user);
 
33
        }
 
34
    /* Just get details for the logged in user */
 
35
    ajax_call(callback, "userservice", "get_user", {"login": settings_login}, "GET");
 
36
    return false;
 
37
}
 
38
 
 
39
/* Populate the page with the given user's account details */
 
40
function populate(user)
 
41
{
 
42
    user_data = user;
 
43
    /* Plain text elements (non-editable) */
 
44
    var login = document.getElementById("login");
 
45
    var admin = document.getElementById("admin");
 
46
    var changepassword = document.getElementById("changepassword");
 
47
    var notices = document.getElementById("notices");
 
48
    /* Textbox (input) elements */
 
49
    var nick = document.getElementById("nick");
 
50
    var email = document.getElementById("email");
 
51
 
 
52
    var text;
 
53
    var p;
 
54
    var b;
 
55
    var table;
 
56
    var tbody;
 
57
    var tr;
 
58
    var td;
 
59
    var inputbox;
 
60
 
 
61
    /* Clear things */
 
62
    dom_removechildren(login);
 
63
    dom_removechildren(admin);
 
64
    dom_removechildren(changepassword);
 
65
    dom_removechildren(notices);
 
66
 
 
67
    /* Construct the page */
 
68
 
 
69
    /* "login" : Full Name (<b>login</b> / studentid) */
 
70
    text = user.fullname + " (";
 
71
    login.appendChild(document.createTextNode(text));
 
72
    text = user.login
 
73
    b = document.createElement("b");
 
74
    b.appendChild(document.createTextNode(text));
 
75
    login.appendChild(b);
 
76
    if (user.studentid != null)
 
77
        text = " / " + user.studentid + ")"
 
78
    else
 
79
        text = ")"
 
80
    login.appendChild(document.createTextNode(text));
 
81
 
 
82
    /* "admin" : <p>Privilege: <strong>administrator</strong></p>
 
83
     */
 
84
    if (user.admin)
 
85
    {
 
86
        text = "Privilege: ";
 
87
        admin.appendChild(document.createTextNode(text));
 
88
        strong = document.createElement("strong");
 
89
        strong.appendChild(document.createTextNode("IVLE administrator"));
 
90
        admin.appendChild(strong);
 
91
    }
 
92
 
 
93
    /* "nick" and "email" boxes */
 
94
    nick.value = user.nick;
 
95
    email.value = user.email;
 
96
 
 
97
    /* Password change box */
 
98
    /* (Only if this user has a local password) */
 
99
    if (user.local_password)
 
100
    {
 
101
        p = document.createElement("h3");
 
102
        p.appendChild(document.createTextNode("Change password"))
 
103
        changepassword.appendChild(p);
 
104
        p = document.createElement("p");
 
105
        
 
106
        p.appendChild(document.createTextNode("Please type your old password, "
 
107
                + "and new password twice, for verification."));
 
108
        changepassword.appendChild(p);
 
109
 
 
110
        table = document.createElement("table");
 
111
        tbody = document.createElement("tbody");
 
112
 
 
113
        tr = document.createElement("tr");
 
114
        td = document.createElement("td");
 
115
        td.appendChild(document.createTextNode("Old password:"))
 
116
        tr.appendChild(td);
 
117
        td = document.createElement("td");
 
118
        inputbox = document.createElement("input");
 
119
        inputbox.setAttribute("type", "password");
 
120
        inputbox.setAttribute("name", "oldpass");
 
121
        inputbox.setAttribute("id", "oldpass");
 
122
        inputbox.setAttribute("size", "40");
 
123
        td.appendChild(inputbox)
 
124
        tr.appendChild(td);
 
125
        tbody.appendChild(tr);
 
126
 
 
127
        tr = document.createElement("tr");
 
128
        td = document.createElement("td");
 
129
        td.appendChild(document.createTextNode("New password:"))
 
130
        tr.appendChild(td);
 
131
        td = document.createElement("td");
 
132
        inputbox = document.createElement("input");
 
133
        inputbox.setAttribute("type", "password");
 
134
        inputbox.setAttribute("name", "newpass");
 
135
        inputbox.setAttribute("id", "newpass");
 
136
        inputbox.setAttribute("size", "40");
 
137
        td.appendChild(inputbox)
 
138
        tr.appendChild(td);
 
139
        tbody.appendChild(tr);
 
140
 
 
141
        tr = document.createElement("tr");
 
142
        td = document.createElement("td");
 
143
        td.appendChild(document.createTextNode("Retype password:"))
 
144
        tr.appendChild(td);
 
145
        td = document.createElement("td");
 
146
        inputbox = document.createElement("input");
 
147
        inputbox.setAttribute("type", "password");
 
148
        inputbox.setAttribute("name", "repeatpass");
 
149
        inputbox.setAttribute("id", "repeatpass");
 
150
        inputbox.setAttribute("size", "40");
 
151
        td.appendChild(inputbox)
 
152
        tr.appendChild(td);
 
153
        tbody.appendChild(tr);
 
154
 
 
155
        table.appendChild(tbody);
 
156
        changepassword.appendChild(table);
 
157
    }
 
158
 
 
159
    if (user.pass_exp != null || user.acct_exp != null)
 
160
    {
 
161
        p = document.createElement("h3");
 
162
        text = "Notices";
 
163
        p.appendChild(document.createTextNode(text));
 
164
        notices.appendChild(p);
 
165
        if (user.pass_exp != null)
 
166
        {
 
167
            p = document.createElement("p");
 
168
            /* TODO: Nice passexp */
 
169
            var pass_exp = user.pass_exp.toString()
 
170
            text = "Your password will expire on " + pass_exp
 
171
                + ". You should change it before then to avoid having your "
 
172
                + "account disabled.";
 
173
            p.appendChild(document.createTextNode(text));
 
174
            notices.appendChild(p);
 
175
        }
 
176
        if (user.acct_exp != null)
 
177
        {
 
178
            p = document.createElement("p");
 
179
            /* TODO: Nice acct_exp */
 
180
            var acct_exp = user.acct_exp.toString()
 
181
            text = "Your IVLE account will expire on " + acct_exp + ".";
 
182
            p.appendChild(document.createTextNode(text));
 
183
            notices.appendChild(p);
 
184
        }
 
185
    }
 
186
}
 
187
 
 
188
/* Sets the "result" text.
 
189
 * iserror (bool) determines the styling.
 
190
 */
 
191
function set_result(text, iserror)
 
192
{
 
193
    var p = document.getElementById("result");
 
194
    dom_removechildren(p);
 
195
    p.appendChild(document.createTextNode(text));
 
196
    if (iserror)
 
197
        p.setAttribute("class", "error");
 
198
    else
 
199
        p.removeAttribute("class");
 
200
}
 
201
 
 
202
/* Writes the settings to the server.
 
203
 * Returns false. */
 
204
function save_settings()
 
205
{
 
206
    /* Button (input) elements */
 
207
    var save = document.getElementById("save");
 
208
    /* Textbox (input) elements */
 
209
    try
 
210
    {
 
211
        var oldpass = document.getElementById("oldpass");
 
212
        var newpass = document.getElementById("newpass");
 
213
        var repeatpass = document.getElementById("repeatpass");
 
214
    }
 
215
    catch (e)
 
216
    {
 
217
        var newpass = null;
 
218
        var repeatpass = null;
 
219
    }
 
220
    var nick = document.getElementById("nick");
 
221
    var email = document.getElementById("email");
 
222
 
 
223
    /* Check */
 
224
    oldpassval = oldpass == null ? null : oldpass.value;
 
225
    newpassval = newpass == null ? null : newpass.value;
 
226
    repeatpassval = repeatpass == null ? null : repeatpass.value;
 
227
    nickval = nick.value;
 
228
    emailval = email.value;
 
229
 
 
230
    /* Clear the password boxes, even if there are errors later */
 
231
    try
 
232
    {
 
233
        newpass.value = "";
 
234
        repeatpass.value = "";
 
235
    }
 
236
    catch (e)
 
237
    {
 
238
    }
 
239
 
 
240
    if (nickval == "")
 
241
    {
 
242
        set_result("Display name is empty.", true);
 
243
        return false;
 
244
    }
 
245
    if (newpassval != repeatpassval)
 
246
    {
 
247
        set_result("Passwords do not match.", true);
 
248
        return false;
 
249
    }
 
250
 
 
251
    /* Disable the heavy-duty supercolliding super button */
 
252
    save.setAttribute("disabled", "disabled");
 
253
    save.setAttribute("value", "Saving...");
 
254
    var callback = function(xhr)
 
255
    {
 
256
        save.removeAttribute("disabled");
 
257
        save.setAttribute("value", "Save");
 
258
 
 
259
        if (xhr.status == 200)
 
260
        {
 
261
            set_result("Successfully updated details.");
 
262
            user_data.nick = nickval;
 
263
            user_data.email = emailval;
 
264
            /* Now a little hack - update the user's nick display
 
265
             * in the heading bar, so they are sure it has been changed.
 
266
             */
 
267
            var usernick = document.getElementById("usernick");
 
268
            dom_removechildren(usernick);
 
269
            usernick.appendChild(document.createTextNode(nickval));
 
270
        }
 
271
        else if (xhr.getResponseHeader("X-IVLE-Action-Error"))
 
272
        {
 
273
            set_result(decodeURIComponent(xhr.getResponseHeader(
 
274
                                     "X-IVLE-Action-Error").toString()), true);        
 
275
        }
 
276
        else
 
277
        {
 
278
            set_result("There was a problem updating the details."
 
279
                + " Your changes have not been saved.", true);
 
280
        }
 
281
    }
 
282
    data = {
 
283
        "login": user_data.login,
 
284
        "nick": nickval,
 
285
        "email": emailval,
 
286
        "oldpass": oldpassval,
 
287
    }
 
288
    if (newpassval != null && newpassval != "")
 
289
        data['password'] = newpassval;
 
290
    ajax_call(callback, "userservice", "update_user", data, "POST");
 
291
    return false;
 
292
}