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('<iframe src="%s"></iframe>'
74
% urllib.quote(serve_loc))
29
from ivle.webapp.base.xhtml import XHTMLView
30
from ivle.webapp.base.plugins import ViewPlugin
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
enrolled_subjects = req.user.subjects
43
unenrolled_subjects = [subject for subject in
44
req.store.find(Subject)
45
if subject not in enrolled_subjects]
47
ctx['enrolled_subjects'] = []
48
ctx['other_subjects'] = []
50
req.content_type = "text/html"
51
req.write_html_head_foot = True
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):
69
('subjects/', SubjectsView),