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

« back to all changes in this revision

Viewing changes to www/media/settings/settings.js

  • Committer: mattgiuca
  • Date: 2008-01-20 10:03:06 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:251
setup.py: Worked the "files to copy into jail" out into a separate list
instead of being expressed as code.
Still need to add some more dependencies to get matplotlib working.

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