29
29
from ivle.webapp.base.xhtml import XHTMLView
30
from ivle.webapp.base.plugins import BasePlugin
30
from ivle.webapp.base.plugins import ViewPlugin, MediaPlugin
31
31
from ivle.webapp.errors import NotFound
32
32
from ivle.database import Subject
33
33
from ivle import util
38
38
template = 'subjects.html'
39
39
appname = 'subjects' # XXX
41
def authorize(self, req):
42
return req.user is not None
41
44
def populate(self, req, ctx):
42
req.styles = ["media/subjects/subjects.css"]
44
45
enrolled_subjects = req.user.subjects
45
46
unenrolled_subjects = [subject for subject in
46
47
req.store.find(Subject)
49
50
ctx['enrolled_subjects'] = []
50
51
ctx['other_subjects'] = []
52
req.content_type = "text/html"
53
req.write_html_head_foot = True
55
53
for subject in enrolled_subjects:
57
55
new_subj['name'] = subject.name
66
64
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):
67
class Plugin(ViewPlugin, MediaPlugin):
87
69
('subjects/', SubjectsView),
88
('subjects/:subject', SubjectView, {'path': ''}),
89
('subjects/:subject/*(path)', SubjectView),
73
('subjects', 'Subjects', 'Announcements and information about the '
74
'subjects you are enrolled in.', 'subjects.png', 'subjects', 5)
77
media = 'subject-media'