~ubuntu-branches/ubuntu/natty/schooltool.gradebook/natty

« back to all changes in this revision

Viewing changes to src/schooltool/gradebook/browser/worksheet.py

  • Committer: Bazaar Package Importer
  • Author(s): Gediminas Paulauskas
  • Date: 2011-02-24 16:53:53 UTC
  • Revision ID: james.westby@ubuntu.com-20110224165353-hi69ckyal3b8dyns
Tags: upstream-0.9.0~a1
ImportĀ upstreamĀ versionĀ 0.9.0~a1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# SchoolTool - common information systems platform for school administration
 
3
# Copyright (c) 2005 Shuttleworth Foundation
 
4
#
 
5
# This program is free software; you can redistribute it and/or modify
 
6
# it under the terms of the GNU General Public License as published by
 
7
# the Free Software Foundation; either version 2 of the License, or
 
8
# (at your option) any later version.
 
9
#
 
10
# This program is distributed in the hope that it will be useful,
 
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
# GNU General Public License for more details.
 
14
#
 
15
# You should have received a copy of the GNU General Public License
 
16
# along with this program; if not, write to the Free Software
 
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
18
#
 
19
"""Worksheet Views.
 
20
 
 
21
$Id$
 
22
"""
 
23
 
 
24
from zope.security.checker import canWrite
 
25
from zope.security.interfaces import Unauthorized
 
26
from zope.traversing.api import getName
 
27
from zope.traversing.browser.absoluteurl import absoluteURL
 
28
from zope.publisher.browser import BrowserView
 
29
 
 
30
from schooltool.app.browser import app
 
31
from schooltool.gradebook import GradebookMessage as _
 
32
from schooltool.gradebook import interfaces
 
33
from schooltool.gradebook.browser.activity import BaseEditView
 
34
from schooltool.person.interfaces import IPerson
 
35
 
 
36
 
 
37
class WorksheetGradebookView(BrowserView):
 
38
    """A view that redirects from the worksheet to its gradebook."""
 
39
 
 
40
    def __init__(self, context, request):
 
41
        super(WorksheetGradebookView, self).__init__(context, request)
 
42
        url = absoluteURL(self.context, self.request) + '/gradebook'
 
43
        self.request.response.redirect(url)
 
44
 
 
45
    def __call__(self):
 
46
        return "Redirecting..."
 
47
 
 
48
 
 
49
class WorksheetManageView(object):
 
50
    """A Worksheet view."""
 
51
 
 
52
    __used_for__ = interfaces.IWorksheet
 
53
    
 
54
    def activities(self):
 
55
        pos = 0
 
56
        results = []
 
57
        for activity in list(self.context.values()):
 
58
            pos += 1
 
59
            url = absoluteURL(activity, self.request)
 
60
            if interfaces.ILinkedColumnActivity.providedBy(activity):
 
61
                url += '/editLinkedColumn.html'
 
62
            yield {'name': getName(activity),
 
63
                   'title': activity.title,
 
64
                   'url': url,
 
65
                   'pos': pos,
 
66
                   'deployed': self.context.deployed}
 
67
 
 
68
    def isTemplate(self):
 
69
        return interfaces.IReportWorksheet.providedBy(self.context)
 
70
 
 
71
    def canModify(self):
 
72
        return canWrite(self.context, 'title')
 
73
 
 
74
    def positions(self):
 
75
        return range(1, len(self.context.values())+1)
 
76
 
 
77
    def update(self):
 
78
        self.person = IPerson(self.request.principal, None)
 
79
        if self.person is None:
 
80
            # XXX ignas: i had to do this to make the tests pass,
 
81
            # someone who knows what this code should do if the user
 
82
            # is unauthenticated should add the relevant code
 
83
            raise Unauthorized("You don't have the permission to do this.")
 
84
 
 
85
        if 'DELETE' in self.request:
 
86
            for name in self.request.get('delete', []):
 
87
                del self.context[name]
 
88
        elif 'form-submitted' in self.request:
 
89
            old_pos = 0
 
90
            for activity in self.context.values():
 
91
                old_pos += 1
 
92
                name = getName(activity)
 
93
                if 'pos.'+name not in self.request:
 
94
                    continue
 
95
                new_pos = int(self.request['pos.'+name])
 
96
                if new_pos != old_pos:
 
97
                    self.context.changePosition(name, new_pos-1)
 
98
 
 
99
    @property
 
100
    def noActivitiesMessage(self):
 
101
        return _('This worksheet has no activities.')
 
102
 
 
103
 
 
104
class WorksheetAddView(app.BaseAddView):
 
105
    """A view for adding a worksheet."""
 
106
 
 
107
    def nextURL(self):
 
108
        #person = IPerson(self.request.principal, None)
 
109
        #self.context.context.resetCurrentWorksheet(person)
 
110
        return absoluteURL(self.context.context, self.request)
 
111
 
 
112
 
 
113
class WorksheetEditView(BaseEditView):
 
114
    """A view for editing worksheet info."""
 
115
 
 
116
    def nextURL(self):
 
117
        return absoluteURL(self.context.__parent__, self.request)
 
118
 
 
119
 
 
120
class WorksheetDeleteView(object):
 
121
    """A view for deleting a worksheet."""
 
122
 
 
123
    def update(self):
 
124
        import pdb; pdb.set_trace()
 
125
        next_url = absoluteURL(self.context.__parent__, self.request)
 
126
        if 'CANCEL' in self.request:
 
127
            self.request.response.redirect(next_url)
 
128
        elif 'DELETE' in self.request:
 
129
            next_url += '?DELETE_WORKSHEET=' + self.context.__name__
 
130
            self.request.response.redirect(next_url)
 
131