29
from common import util
33
"""Handler for the Subjects application. Links to subject home pages."""
35
req.styles = ["media/subjects/subjects.css"]
37
handle_toplevel_menu(req)
39
handle_subject_page(req, req.path)
41
def handle_toplevel_menu(req):
42
# This is represented as a directory. Redirect and add a slash if it is
44
if req.uri[-1] != '/':
45
req.throw_redirect(req.uri + '/')
47
(enrolled_subjects, unenrolled_subjects) = \
48
common.db.DB().get_subjects_status(req.user.login)
50
def print_subject(subject):
51
if subject['url'] is None:
52
req.write(' <li>%s (no home page)</li>\n'
53
% cgi.escape(subject['subj_name']))
55
req.write(' <li><a href="%s">%s</a></li>\n'
56
% (cgi.escape(subject['url']),
57
cgi.escape(subject['subj_name'])))
59
req.content_type = "text/html"
60
req.write_html_head_foot = True
61
req.write('<div id="ivle_padding">\n')
62
req.write("<h2>IVLE Subject Homepages</h2>\n")
63
req.write("<h2>Subjects</h2>\n<ul>\n")
64
for subject in enrolled_subjects:
65
print_subject(subject)
67
if len(unenrolled_subjects) > 0:
68
req.write("<h3>Other Subjects</h3>\n")
69
req.write("<p>You are not currently enrolled in these subjects</p>\n")
71
for subject in unenrolled_subjects:
72
print_subject(subject)
76
def handle_subject_page(req, path):
77
req.content_type = "text/html"
78
req.write_html_head_foot = True # Have dispatch print head and foot
80
# Just make the iframe pointing to media/subjects
81
serve_loc = util.make_path(os.path.join('media', 'subjects', path))
82
req.write('<object class="fullscreen" type="text/html" \
83
data="%s"></iframe>'% urllib.quote(serve_loc))
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 Plugin(BasePlugin):
71
('subjects/', SubjectsView),