29
from common import util
32
"""Handler for the Subjects application. Links to subject home pages."""
34
req.styles = ["media/subjects/subjects.css"]
36
handle_toplevel_menu(req)
38
handle_subject_page(req, req.path)
40
def handle_toplevel_menu(req):
41
# This is represented as a directory. Redirect and add a slash if it is
43
if req.uri[-1] != '/':
44
req.throw_redirect(req.uri + '/')
46
# Get list of subjects
47
# TODO: Fetch from DB. For now, just get directory listing
49
subjects = os.listdir(util.make_local_path(os.path.join('media',
52
req.throw_error(req.HTTP_INTERNAL_SERVER_ERROR,
53
"There are is no subject homepages directory.")
56
req.content_type = "text/html"
57
req.write_html_head_foot = True
58
req.write('<div id="ivle_padding">\n')
59
req.write("<h2>IVLE Subject Homepages</h2>\n")
60
req.write("<h2>Subjects</h2>\n<ul>\n")
61
for subject in subjects:
62
req.write(' <li><a href="%s">%s</a></li>\n'
63
% (urllib.quote(subject) + '/', cgi.escape(subject)))
67
def handle_subject_page(req, path):
68
req.content_type = "text/html"
69
req.write_html_head_foot = True # Have dispatch print head and foot
71
# Just make the iframe pointing to media/subjects
72
serve_loc = util.make_path(os.path.join('media', 'subjects', path))
73
req.write('<object class="fullscreen" type="text/html" \
74
data="%s"></iframe>'% urllib.quote(serve_loc))
29
from ivle.webapp.base.xhtml import XHTMLView
30
from ivle.webapp.base.plugins import ViewPlugin, MediaPlugin
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 authorize(self, req):
42
return req.user is not None
44
def populate(self, req, ctx):
45
enrolled_subjects = req.user.subjects
46
unenrolled_subjects = [subject for subject in
47
req.store.find(Subject)
48
if subject not in enrolled_subjects]
50
ctx['enrolled_subjects'] = []
51
ctx['other_subjects'] = []
53
for subject in enrolled_subjects:
55
new_subj['name'] = subject.name
56
new_subj['url'] = subject.url
57
ctx['enrolled_subjects'].append(new_subj)
59
if len(unenrolled_subjects) > 0:
60
for subject in unenrolled_subjects:
62
new_subj['name'] = subject.name
63
new_subj['url'] = subject.url
64
ctx['other_subjects'].append(new_subj)
67
class Plugin(ViewPlugin, MediaPlugin):
69
('subjects/', SubjectsView),
73
('subjects', 'Subjects', 'Announcements and information about the '
74
'subjects you are enrolled in.', 'subjects.png', 'subjects', 5)
77
media = 'subject-media'