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

« back to all changes in this revision

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

ivle.webapp.groups: Remove most of the view code; the template now accesses
    the objects directly. Also fix a few double-encodings and typos.

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
import cgi
28
28
 
29
29
from ivle.webapp.base.xhtml import XHTMLView
30
 
from ivle.webapp.base.plugins import ViewPlugin, MediaPlugin
 
30
from ivle.webapp.base.plugins import BasePlugin
31
31
from ivle.webapp.errors import NotFound
32
32
from ivle.database import Subject
33
33
from ivle import util
36
36
class SubjectsView(XHTMLView):
37
37
    '''The view of the list of subjects.'''
38
38
    template = 'subjects.html'
39
 
    tab = 'subjects'
40
 
 
41
 
    def authorize(self, req):
42
 
        return req.user is not None
43
 
 
44
 
    def populate(self, req, ctx):
45
 
        ctx['enrolments'] = req.user.active_enrolments
46
 
 
47
 
class Plugin(ViewPlugin, MediaPlugin):
 
39
    appname = 'subjects' # XXX
 
40
 
 
41
    def populate(self, req, ctx):
 
42
        req.styles = ["media/subjects/subjects.css"]
 
43
 
 
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]
 
48
 
 
49
        ctx['enrolled_subjects'] = []
 
50
        ctx['other_subjects'] = []
 
51
 
 
52
        req.content_type = "text/html"
 
53
        req.write_html_head_foot = True
 
54
 
 
55
        for subject in enrolled_subjects:
 
56
            new_subj = {}
 
57
            new_subj['name'] = subject.name
 
58
            new_subj['url'] = subject.url
 
59
            ctx['enrolled_subjects'].append(new_subj)
 
60
 
 
61
        if len(unenrolled_subjects) > 0:
 
62
            for subject in unenrolled_subjects:
 
63
                new_subj = {}
 
64
                new_subj['name'] = subject.name
 
65
                new_subj['url'] = subject.url
 
66
                ctx['other_subjects'].append(new_subj)
 
67
 
 
68
 
 
69
class SubjectView(XHTMLView):
 
70
    '''The view of a subject.'''
 
71
    template = 'subject.html'
 
72
    appname = 'subjects' # XXX
 
73
 
 
74
    def __init__(self, req, subject, path):
 
75
        self.subject = req.store.find(Subject, code=subject).one()
 
76
        self.path = path
 
77
 
 
78
    def populate(self, req, ctx):
 
79
        if self.subject is None:
 
80
            raise NotFound()
 
81
 
 
82
        ctx['serve_loc'] = urllib.quote(util.make_path(os.path.join('media',
 
83
                                    'subjects', self.subject.code, self.path)))
 
84
 
 
85
class Plugin(BasePlugin):
48
86
    urls = [
49
87
        ('subjects/', SubjectsView),
50
 
    ]
51
 
 
52
 
    tabs = [
53
 
        ('subjects', 'Subjects',
54
 
         'View subject content and complete worksheets',
55
 
         'subjects.png', 'subjects', 5)
56
 
    ]
57
 
 
58
 
    media = 'subject-media'
 
88
        ('subjects/:subject', SubjectView, {'path': ''}),
 
89
        ('subjects/:subject/*(path)', SubjectView),
 
90
    ]