2
# Copyright (C) 2007-2008 The University of Melbourne
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.
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.
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
22
# This is an IVLE application.
23
# A sample / testing application for IVLE.
29
from ivle.webapp.base.xhtml import XHTMLView
30
from ivle.webapp.base.plugins import BasePlugin
31
from ivle.webapp.errors import NotFound
32
from ivle.database import Subject
36
class SubjectsView(XHTMLView):
37
'''The view of the list of subjects.'''
38
template = 'subjects.html'
39
appname = 'subjects' # XXX
41
def populate(self, req, ctx):
42
req.styles = ["media/subjects/subjects.css"]
44
enrolled_subjects = req.user.subjects
45
unenrolled_subjects = [subject for subject in
46
req.store.find(Subject)
47
if subject not in enrolled_subjects]
49
ctx['enrolled_subjects'] = []
50
ctx['other_subjects'] = []
52
req.content_type = "text/html"
53
req.write_html_head_foot = True
55
for subject in enrolled_subjects:
57
new_subj['name'] = subject.name
58
new_subj['url'] = subject.url
59
ctx['enrolled_subjects'].append(new_subj)
61
if len(unenrolled_subjects) > 0:
62
for subject in unenrolled_subjects:
64
new_subj['name'] = subject.name
65
new_subj['url'] = subject.url
66
ctx['other_subjects'].append(new_subj)
69
class SubjectView(XHTMLView):
70
'''The view of a subject.'''
71
template = 'subject.html'
72
appname = 'subjects' # XXX
74
def __init__(self, req, subject, path):
75
self.subject = req.store.find(Subject, code=subject).one()
78
def populate(self, req, ctx):
79
if self.subject is None:
82
ctx['serve_loc'] = urllib.quote(util.make_path(os.path.join('media',
83
'subjects', self.subject.code, self.path)))
85
class Plugin(BasePlugin):
87
('subjects/', SubjectsView),
88
('subjects/:subject', SubjectView, {'path': ''}),
89
('subjects/:subject/*(path)', SubjectView),