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

« back to all changes in this revision

Viewing changes to ivle/webapp/tutorial/__init__.py

Added a view to allow admins to edit worksheets

Show diffs side-by-side

added added

removed removed

Lines of Context:
46
46
from ivle.webapp.errors import NotFound, Forbidden
47
47
from ivle.webapp.tutorial.rst import rst as rstfunc
48
48
from ivle.webapp.tutorial.service import AttemptsRESTView, AttemptRESTView, \
49
 
                                         ExerciseRESTView, WorksheetRESTView
 
49
                        ExerciseRESTView, WorksheetRESTView, OfferingRESTView
50
50
 
51
51
class Worksheet:
52
52
    """This class represents a worksheet and a particular students progress
377
377
    worksheets are actually displayed on the page."""
378
378
    pass
379
379
 
380
 
class WorksheetAdminView(XHTMLView):
 
380
class WorksheetEditView(XHTMLView):
381
381
    """The admin view for an offering.
382
382
    
383
383
    This view is designed to replace worksheets.xml, turning them instead
384
384
    into XML directly from RST."""
385
385
    permission = "edit"
386
 
    template = "worksheet_admin.html"
387
 
    appname = "Worksheet Admin"
 
386
    template = "worksheet_edit.html"
 
387
    appname = "Edit Worksheet"
388
388
 
389
 
    def __init__(self, req, subject, year, semester, worksheet):
 
389
    def __init__(self, req, **kwargs):
 
390
    
 
391
        subject = kwargs['subject']
 
392
        year = kwargs['year']
 
393
        semester = kwargs['semester']
 
394
        worksheet = kwargs['worksheet']
390
395
        self.context = req.store.find(DBWorksheet,
391
396
            DBWorksheet.identifier == worksheet,
392
397
            DBWorksheet.offering_id == Offering.id,
397
402
            Subject.code == subject
398
403
        ).one()
399
404
        
 
405
        if self.context is None:
 
406
            raise NotFound()
 
407
        
400
408
        self.subject = subject
401
409
        self.year = year
402
410
        self.semester = semester
403
411
        self.worksheet = worksheet
404
412
        
405
 
        if self.context is None:
406
 
            raise NotFound()
407
413
            
408
414
    def populate(self, req, ctx):
409
415
        self.plugin_styles[Plugin] = ["tutorial_admin.css"]
416
422
        ctx['semester'] = self.semester
417
423
 
418
424
 
 
425
class WorksheetAddView(XHTMLView):
 
426
    """This view allows a user to add a worksheet"""
 
427
    permission = "edit"
 
428
    template = "worksheet_add.html"
 
429
    appname = "Add Worksheet"
 
430
 
 
431
    def __init__(self, req, subject, year, semester):
 
432
        self.context = req.store.find(Offering,
 
433
            Offering.semester_id == Semester.id,
 
434
            Semester.year == year,
 
435
            Semester.semester == semester,
 
436
            Offering.subject_id == Subject.id,
 
437
            Subject.code == subject
 
438
        ).one()
 
439
        
 
440
        self.subject = subject
 
441
        self.year = year
 
442
        self.semester = semester
 
443
        
 
444
        if self.context is None:
 
445
            raise NotFound()
 
446
            
 
447
    def populate(self, req, ctx):
 
448
        self.plugin_styles[Plugin] = ["tutorial_admin.css"]
 
449
        self.plugin_scripts[Plugin] = ['tutorial_admin.js']
 
450
        
 
451
        ctx['subject'] = self.subject
 
452
        ctx['year'] = self.year
 
453
        ctx['semester'] = self.semester
 
454
        
 
455
        #XXX: Get the list of formats from somewhere else
 
456
        ctx['formats'] = ['xml', 'rst']
 
457
 
 
458
 
419
459
class Plugin(ViewPlugin, MediaPlugin):
420
460
    urls = [
421
461
        ('subjects/:subject/:year/:semester/+worksheets', OfferingView),
422
 
        ('subjects/:subject/:year/:semester/+worksheets/+edit', OfferingAdminView),
 
462
        ('subjects/:subject/:year/:semester/+worksheets/+add', WorksheetAddView),
423
463
        ('subjects/:subject/+worksheets/+media/*(path)', SubjectMediaView),
424
464
        ('subjects/:subject/:year/:semester/+worksheets/:worksheet', WorksheetView),
425
 
        ('subjects/:subject/:year/:semester/+worksheets/:worksheet/+edit', WorksheetAdminView),
 
465
        ('subjects/:subject/:year/:semester/+worksheets/:worksheet/+edit', WorksheetEditView),
 
466
        ('api/subjects/:subject/:year/:semester/+worksheets', OfferingRESTView),
426
467
        ('api/subjects/:subject/:year/:semester/+worksheets/:worksheet/*exercise/'
427
468
            '+attempts/:username', AttemptsRESTView),
428
469
        ('api/subjects/:subject/:year/:semester/+worksheets/:worksheet/*exercise/'