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

« back to all changes in this revision

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

  • Committer: William Grant
  • Date: 2009-12-08 03:50:24 UTC
  • mfrom: (1294.2.143 ui-the-third)
  • Revision ID: grantw@unimelb.edu.au-20091208035024-wjx8zp54gth15ph8
Merge ui-the-third. This is another UI revamp.

The header is now thin! Thin! The yellow bar is gone. The tabs are gone.
Breadcrumbs are here. Routes is replaced (with an object publishing
mechanism). Views are less repetitive. etc.

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
import urlparse
29
29
import cgi
30
30
 
31
 
from storm.locals import Desc
 
31
from storm.locals import Desc, Store
32
32
import genshi
33
33
from genshi.filters import HTMLFormFiller
34
34
from genshi.template import Context, TemplateLoader
36
36
 
37
37
from ivle.webapp.base.xhtml import XHTMLView
38
38
from ivle.webapp.base.plugins import ViewPlugin, MediaPlugin
39
 
from ivle.webapp.errors import NotFound
 
39
from ivle.webapp import ApplicationRoot
40
40
 
41
41
from ivle.database import Subject, Semester, Offering, Enrolment, User,\
42
42
                          ProjectSet, Project, ProjectSubmission
46
46
from ivle.webapp.admin.projectservice import ProjectSetRESTView,\
47
47
                                             ProjectRESTView
48
48
from ivle.webapp.admin.offeringservice import OfferingRESTView
49
 
 
 
49
from ivle.webapp.admin.publishing import (root_to_subject,
 
50
            subject_to_offering, offering_to_projectset, offering_to_project,
 
51
            subject_url, offering_url, projectset_url, project_url)
 
52
from ivle.webapp.admin.breadcrumbs import (SubjectBreadcrumb,
 
53
            OfferingBreadcrumb, UserBreadcrumb, ProjectBreadcrumb)
50
54
 
51
55
class SubjectsView(XHTMLView):
52
56
    '''The view of the list of subjects.'''
100
104
    tab = 'subjects'
101
105
    permission = 'edit'
102
106
 
103
 
    def __init__(self, req, subject, year, semester):
104
 
        """Find the given offering by subject, year and semester."""
105
 
        self.context = req.store.find(Offering,
106
 
            Offering.subject_id == Subject.id,
107
 
            Subject.short_name == subject,
108
 
            Offering.semester_id == Semester.id,
109
 
            Semester.year == year,
110
 
            Semester.semester == semester).one()
111
 
 
112
 
        if not self.context:
113
 
            raise NotFound()
114
 
 
115
107
    def filter(self, stream, ctx):
116
108
        return stream | HTMLFormFiller(data=ctx['data'])
117
109
 
140
132
    template = 'templates/offering_projects.html'
141
133
    permission = 'edit'
142
134
    tab = 'subjects'
143
 
    
144
 
    def __init__(self, req, subject, year, semester):
145
 
        self.context = req.store.find(Offering,
146
 
            Offering.subject_id == Subject.id,
147
 
            Subject.short_name == subject,
148
 
            Offering.semester_id == Semester.id,
149
 
            Semester.year == year,
150
 
            Semester.semester == semester).one()
151
 
 
152
 
        if not self.context:
153
 
            raise NotFound()
154
135
 
155
136
    def project_url(self, projectset, project):
156
137
        return "/subjects/%s/%s/%s/+projects/%s" % (
207
188
    permission = "edit"
208
189
    tab = 'subjects'
209
190
 
210
 
    def __init__(self, req, subject, year, semester, project):
211
 
        self.context = req.store.find(Project,
212
 
                Project.short_name == project,
213
 
                Project.project_set_id == ProjectSet.id,
214
 
                ProjectSet.offering_id == Offering.id,
215
 
                Offering.semester_id == Semester.id,
216
 
                Semester.year == year,
217
 
                Semester.semester == semester,
218
 
                Offering.subject_id == Subject.id,
219
 
                Subject.short_name == subject).one()
220
 
        if self.context is None:
221
 
            raise NotFound()
222
 
 
223
191
    def build_subversion_url(self, svnroot, submission):
224
192
        princ = submission.assessed.principal
225
193
 
247
215
        ctx['project'] = self.context
248
216
        ctx['user'] = req.user
249
217
 
 
218
class OfferingEnrolmentSet(object):
 
219
    def __init__(self, offering):
 
220
        self.offering = offering
 
221
 
250
222
class Plugin(ViewPlugin, MediaPlugin):
251
 
    urls = [
252
 
        ('subjects/', SubjectsView),
253
 
        ('subjects/:subject/:year/:semester/+enrolments/+new', EnrolView),
254
 
        ('subjects/:subject/:year/:semester/+projects', OfferingProjectsView),
255
 
        ('subjects/:subject/:year/:semester/+projects/:project', ProjectView),
256
 
        #API Views
257
 
        ('api/subjects/:subject/:year/:semester/+projectsets/+new',
258
 
            OfferingRESTView),
259
 
        ('api/subjects/:subject/:year/:semester/+projectsets/:projectset/+projects/+new',
260
 
            ProjectSetRESTView),
261
 
        ('api/subjects/:subject/:year/:semester/+projects/:project', 
262
 
            ProjectRESTView),
263
 
 
264
 
    ]
 
223
    forward_routes = (root_to_subject, subject_to_offering,
 
224
                      offering_to_project, offering_to_projectset)
 
225
    reverse_routes = (subject_url, offering_url, projectset_url, project_url)
 
226
 
 
227
    views = [(ApplicationRoot, ('subjects', '+index'), SubjectsView),
 
228
             (Offering, ('+enrolments', '+new'), EnrolView),
 
229
             (Offering, ('+projects', '+index'), OfferingProjectsView),
 
230
             (Project, '+index', ProjectView),
 
231
 
 
232
             (Offering, ('+projectsets', '+new'), OfferingRESTView, 'api'),
 
233
             (ProjectSet, ('+projects', '+new'), ProjectSetRESTView, 'api'),
 
234
             (Project, '+index', ProjectRESTView, 'api'),
 
235
             ]
 
236
 
 
237
    breadcrumbs = {Subject: SubjectBreadcrumb,
 
238
                   Offering: OfferingBreadcrumb,
 
239
                   User: UserBreadcrumb,
 
240
                   Project: ProjectBreadcrumb,
 
241
                   }
265
242
 
266
243
    tabs = [
267
244
        ('subjects', 'Subjects',