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

« back to all changes in this revision

Viewing changes to ivle/webapp/admin/user.py

  • Committer: mattgiuca
  • Date: 2008-01-31 01:44:30 UTC
  • Revision ID: svn-v3-trunk0:2b9c9e99-6f39-0410-b283-7f802c844ae2:trunk:345
Global CSS change: ivlebody no longer has 1em of padding (it has none).
This is because most apps were disabling it (and it had to change anyway for
other reasons -- see below).

Hence, all apps which WERE disabling the padding have had that removed, and
just work by default. (console, browser, tutorial)
All apps which WEREN'T disabling the padding (very few) now have to manually
include an extra div. This has been done on all such apps, and has been
heavily documented (both in the CSS file and doc/app_howto). (help, dummy,
debuginfo).

media/common/ivle.css: 
    The real change here (which isn't yet being used) is that ivlebody is now
    positioned absolutely and takes up all the space on the canvas. This is
    to be used for full-page layouts in console and browser.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# IVLE - Informatics Virtual Learning Environment
2
 
# Copyright (C) 2007-2009 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
 
# Author: Matt Giuca, Will Grant
19
 
 
20
 
from ivle.webapp.base.rest import JSONRESTView
21
 
from ivle.webapp.base.xhtml import XHTMLView
22
 
from ivle.webapp.base.plugins import ViewPlugin
23
 
import ivle.database
24
 
import ivle.util
25
 
 
26
 
# List of fields returned as part of the user JSON dictionary
27
 
# (as returned by the get_user action)
28
 
user_fields_list = (
29
 
    "login", "state", "unixid", "email", "nick", "fullname",
30
 
    "rolenm", "studentid", "acct_exp", "pass_exp", "last_login",
31
 
    "svn_pass"
32
 
)
33
 
 
34
 
class UserRESTView(JSONRESTView):
35
 
    """
36
 
    A REST interface to the user object.
37
 
    """
38
 
    def __init__(self, req, login):
39
 
        super(UserRESTView, self).__init__(self, req, login)
40
 
        self.context = ivle.database.User.get_by_login(req.store, login)
41
 
 
42
 
    def GET(self, req):
43
 
        # XXX Check Caps
44
 
        user = ivle.util.object_to_dict(user_fields_list, self.context)
45
 
        # Convert time stamps to nice strings
46
 
        for k in 'pass_exp', 'acct_exp', 'last_login':
47
 
            if user[k] is not None:
48
 
                user[k] = unicode(user[k])
49
 
 
50
 
        user['local_password'] = self.context.passhash is not None
51
 
        return user
52
 
 
53
 
    def PATCH(self, req, data):
54
 
        # XXX Check Caps
55
 
        # XXX Admins can set extra fields
56
 
        # Note: Cannot change password here (use change_password named op)
57
 
 
58
 
        for f in user_fields_list:
59
 
            try:
60
 
                field = data[f]
61
 
                if isinstance(field, str):
62
 
                    field = unicode(field)
63
 
                setattr(self.context, f, field)
64
 
            except KeyError:
65
 
                continue
66
 
 
67
 
class UserSettingsView(XHTMLView):
68
 
    template = 'user-settings.html'
69
 
    appname = 'settings'
70
 
 
71
 
    def __init__(self, req, login):
72
 
        self.context = ivle.database.User.get_by_login(req.store, login)
73
 
 
74
 
    def populate(self, req, ctx):
75
 
        if not self.context:
76
 
            raise NotFound()
77
 
 
78
 
        self.plugin_scripts[Plugin] = ['settings.js']
79
 
        req.scripts_init = ['revert_settings']
80
 
 
81
 
        ctx['login'] = self.context.login
82
 
 
83
 
class Plugin(ViewPlugin):
84
 
    """
85
 
    The Plugin class for the user plugin.
86
 
    """
87
 
    # Magic attribute: urls
88
 
    # Sequence of pairs/triples of
89
 
    # (regex str, handler class, kwargs dict)
90
 
    # The kwargs dict is passed to the __init__ of the view object
91
 
    urls = [
92
 
        ('~:login/+settings', UserSettingsView),
93
 
        ('api/~:login', UserRESTView),
94
 
    ]
95
 
 
96
 
    media = 'user-media'