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

621 by mattgiuca
Added 2 new apps: home and subjects. Both fairly incomplete, just a basic
1
# IVLE
2
# Copyright (C) 2007-2008 The University of Melbourne
3
#
4
# This program is free software; you can redistribute it and/or modify
5
# it under the terms of the GNU General Public License as published by
6
# the Free Software Foundation; either version 2 of the License, or
7
# (at your option) any later version.
8
#
9
# This program is distributed in the hope that it will be useful,
10
# but WITHOUT ANY WARRANTY; without even the implied warranty of
11
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12
# GNU General Public License for more details.
13
#
14
# You should have received a copy of the GNU General Public License
15
# along with this program; if not, write to the Free Software
16
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17
18
# App: subjects
19
# Author: Matt Giuca
20
# Date: 29/2/2008
21
22
# This is an IVLE application.
23
# A sample / testing application for IVLE.
24
627 by mattgiuca
subjects: Now presents a top-level subjects menu (same as tutorials).
25
import os
26
import urllib
27
import cgi
28
1099.1.34 by William Grant
Split up ivle.webapp.base.views into ivle.webapp.base.{rest,xhtml}, as it was
29
from ivle.webapp.base.xhtml import XHTMLView
1099.1.20 by William Grant
ivle.webapp.admin.subject: Port www/apps/subjects to new framework.
30
from ivle.webapp.base.plugins import BasePlugin
31
from ivle.webapp.errors import NotFound
32
from ivle.database import Subject
1079 by William Grant
Merge setup-refactor branch. This completely breaks existing installations;
33
from ivle import util
621 by mattgiuca
Added 2 new apps: home and subjects. Both fairly incomplete, just a basic
34
1099.1.20 by William Grant
ivle.webapp.admin.subject: Port www/apps/subjects to new framework.
35
36
class SubjectsView(XHTMLView):
37
    '''The view of the list of subjects.'''
1099.1.35 by William Grant
ivle.webapp.base.xhtml#XHTMLView: Rename app_template to template (the things
38
    template = 'subjects.html'
39
    appname = 'subjects' # XXX
1099.1.20 by William Grant
ivle.webapp.admin.subject: Port www/apps/subjects to new framework.
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:
1093 by chadnickbok
Adding the changes from my genshi branch into trunk.
56
            new_subj = {}
57
            new_subj['name'] = subject.name
58
            new_subj['url'] = subject.url
1099.1.20 by William Grant
ivle.webapp.admin.subject: Port www/apps/subjects to new framework.
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.'''
1099.1.35 by William Grant
ivle.webapp.base.xhtml#XHTMLView: Rename app_template to template (the things
71
    template = 'subject.html'
1099.1.20 by William Grant
ivle.webapp.admin.subject: Port www/apps/subjects to new framework.
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):
86
    urls = [
87
        ('subjects/', SubjectsView),
88
        ('subjects/:subject', SubjectView, {'path': ''}),
1099.1.22 by root
ivle.dispatch: Reorder things in plugins_HACK to fix wildcards clobbering
89
        ('subjects/:subject/*(path)', SubjectView),
1099.1.20 by William Grant
ivle.webapp.admin.subject: Port www/apps/subjects to new framework.
90
    ]