~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/webapp/admin/subject.py

Expose media on the public site.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
import urllib
27
27
import cgi
28
28
 
29
 
from common import util
30
 
 
31
 
def handle(req):
32
 
    """Handler for the Subjects application. Links to subject home pages."""
33
 
 
34
 
    req.styles = ["media/subjects/subjects.css"]
35
 
    if req.path == "":
36
 
        handle_toplevel_menu(req)
37
 
    else:
38
 
        handle_subject_page(req, req.path)
39
 
 
40
 
def handle_toplevel_menu(req):
41
 
    # This is represented as a directory. Redirect and add a slash if it is
42
 
    # missing.
43
 
    if req.uri[-1] != '/':
44
 
        req.throw_redirect(req.uri + '/')
45
 
 
46
 
    # Get list of subjects
47
 
    # TODO: Fetch from DB. For now, just get directory listing
48
 
    try:
49
 
        subjects = os.listdir(util.make_local_path(os.path.join('media',
50
 
            'subjects')))
51
 
    except OSError:
52
 
        req.throw_error(req.HTTP_INTERNAL_SERVER_ERROR,
53
 
            "There are is no subject homepages directory.")
54
 
    subjects.sort()
55
 
 
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)))
64
 
    req.write("</ul>\n")
65
 
    req.write("</div>\n")
66
 
 
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
70
 
 
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
 
33
from ivle import util
 
34
 
 
35
 
 
36
class SubjectsView(XHTMLView):
 
37
    '''The view of the list of subjects.'''
 
38
    template = 'subjects.html'
 
39
    appname = 'subjects' # XXX
 
40
 
 
41
    def authorize(self, req):
 
42
        return req.user is not None
 
43
 
 
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]
 
49
 
 
50
        ctx['enrolled_subjects'] = []
 
51
        ctx['other_subjects'] = []
 
52
 
 
53
        for subject in enrolled_subjects:
 
54
            new_subj = {}
 
55
            new_subj['name'] = subject.name
 
56
            new_subj['url'] = subject.url
 
57
            ctx['enrolled_subjects'].append(new_subj)
 
58
 
 
59
        if len(unenrolled_subjects) > 0:
 
60
            for subject in unenrolled_subjects:
 
61
                new_subj = {}
 
62
                new_subj['name'] = subject.name
 
63
                new_subj['url'] = subject.url
 
64
                ctx['other_subjects'].append(new_subj)
 
65
 
 
66
 
 
67
class Plugin(ViewPlugin, MediaPlugin):
 
68
    urls = [
 
69
        ('subjects/', SubjectsView),
 
70
    ]
 
71
 
 
72
    tabs = [
 
73
        ('subjects', 'Subjects', 'Announcements and information about the '
 
74
         'subjects you are enrolled in.', 'subjects.png', 'subjects', 5)
 
75
    ]
 
76
 
 
77
    media = 'subject-media'