29
29
from ivle.database import Subject
30
30
from ivle import util
34
import genshi.template
37
# Set request attributes
38
req.content_type = "text/html"
39
req.styles = ["media/groups/groups.css"]
41
"media/groups/groups.js",
42
"media/common/util.js",
43
"media/common/json2.js",
32
from ivle.webapp.base.plugins import BasePlugin
33
from ivle.webapp.base.views import XHTMLView
35
class GroupsView(XHTMLView):
39
def __init__(self, req, **kwargs):
40
super(GroupsView, self).__init__(req, **kwargs)
41
self.app_template = 'template.html'
42
#XXX: Will hates me for this.
43
self.appname = "groups"
45
def populate(self, req, ctx):
46
# Set request attributes
47
req.content_type = "text/html"
48
req.styles = ["media/groups/groups.css"]
50
"media/groups/groups.js",
51
"media/common/util.js",
52
"media/common/json2.js",
54
req.write_html_head_foot = True # Have dispatch print head and foot
56
ctx['enrolments'] = []
57
# Show a group panel per enrolment
58
enrolments = req.user.active_enrolments
59
if enrolments.count() == 0:
60
ctx['no_enrolments'] = True
62
ctx['no_enrolments'] = False
64
for enrolment in enrolments:
65
self.add_subject_panel(req, enrolment.offering, ctx)
67
if req.user.hasCap(caps.CAP_MANAGEGROUPS):
68
ctx['manage_groups'] = True
69
ctx['manage_subjects'] = []
70
subjects = req.store.find(Subject)
74
new_s['name'] = s.name
75
new_s['code'] = s.code
76
ctx['manage_subjects'].append(new_s)
78
ctx['manage_groups'] = False
81
def add_subject_panel(self, req, offering, ctx):
83
Show the group management panel for a particular subject.
86
# Get the groups this user is in, for this offering
87
groups = req.user.get_groups(offering)
88
if groups.count() == 0:
93
offering_groups['offering_id'] = offering.id
94
offering_groups['offering_name'] = offering.subject.name
95
offering_groups['groups'] = []
97
#TODO: Use a better way to manage group membership and invitations
100
new_group['nick'] = cgi.escape(group.nick if group.nick else '')
101
new_group['name'] = cgi.escape(group.name)
103
# XXX - This should be set to reflect whether or not a user is invited
104
# - or if they have accepted the offer
105
new_group['is_member'] = True
106
new_group['members'] = []
108
for user in group.members:
110
member['fullname'] = cgi.escape(user.fullname)
111
member['login'] = cgi.escape(user.login)
112
new_group['members'].append(member)
113
offering_groups['groups'].append(new_group)
115
ctx['enrolments'].append(offering_groups)
117
class Plugin(BasePlugin):
119
The Plugin class for the user plugin.
121
# Magic attribute: urls
122
# Sequence of pairs/triples of
123
# (regex str, handler class, kwargs dict)
124
# The kwargs dict is passed to the __init__ of the view object
126
('groups/*(path)', GroupsView),
127
('groups/', GroupsView),
45
req.write_html_head_foot = True # Have dispatch print head and foot
47
ctx = genshi.template.Context()
49
ctx['enrolments'] = []
50
# Show a group panel per enrolment
51
enrolments = req.user.active_enrolments
52
if enrolments.count() == 0:
53
ctx['no_enrolments'] = True
55
ctx['no_enrolments'] = False
57
for enrolment in enrolments:
58
add_subject_panel(req, enrolment.offering, ctx)
60
if req.user.hasCap(caps.CAP_MANAGEGROUPS):
61
ctx['manage_groups'] = True
62
ctx['manage_subjects'] = []
63
subjects = req.store.find(Subject)
67
new_s['name'] = s.name
68
new_s['code'] = s.code
69
ctx['manage_subjects'].append(new_s)
71
ctx['manage_groups'] = False
73
loader = genshi.template.TemplateLoader(".", auto_reload=True)
74
tmpl = loader.load(util.make_local_path("apps/groups/template.html"))
76
req.write(tmpl.generate(ctx).render('html'))
78
def add_subject_panel(req, offering, ctx):
80
Show the group management panel for a particular subject.
83
# Get the groups this user is in, for this offering
84
groups = req.user.get_groups(offering)
85
if groups.count() == 0:
90
offering_groups['offering_id'] = offering.id
91
offering_groups['offering_name'] = offering.subject.name
92
offering_groups['groups'] = []
94
#TODO: Use a better way to manage group membership and invitations
97
new_group['nick'] = cgi.escape(group.nick if group.nick else '')
98
new_group['name'] = cgi.escape(group.name)
100
# XXX - This should be set to reflect whether or not a user is invited
101
# - or if they have accepted the offer
102
new_group['is_member'] = True
103
new_group['members'] = []
105
for user in group.members:
107
member['fullname'] = cgi.escape(user.fullname)
108
member['login'] = cgi.escape(user.login)
109
new_group['members'].append(member)
110
offering_groups['groups'].append(new_group)
112
ctx['enrolments'].append(offering_groups)