~replaceafill/schooltool/cando

« back to all changes in this revision

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

  • Committer: Douglas Cerna
  • Date: 2012-05-28 20:06:38 UTC
  • Revision ID: douglascerna@yahoo.com-20120528200638-8t2qwpelt19jt8t2
Added skills gradebook

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
from zope.browserpage.viewpagetemplatefile import ViewPageTemplateFile
24
24
from zope.container.interfaces import INameChooser
 
25
from zope.location.location import LocationProxy
25
26
from zope.traversing.browser.absoluteurl import absoluteURL
26
27
from zope.security import proxy
27
28
 
28
29
from z3c.form import form, field, button
29
30
 
 
31
from schooltool.course.interfaces import ISection
30
32
from schooltool.common.inlinept import InheritTemplate
 
33
from schooltool.common.inlinept import InlineViewPageTemplate
31
34
from schooltool.gradebook.browser.gradebook import FlourishGradebookOverview
32
35
from schooltool.gradebook.browser.gradebook import FlourishGradebookStartup
33
36
from schooltool.gradebook.browser.gradebook import GradebookStartupNavLink
41
44
 
42
45
from schooltool.cando.interfaces import IProject
43
46
from schooltool.cando.interfaces import IProjects
 
47
from schooltool.cando.interfaces import ISectionSkills
 
48
from schooltool.cando.interfaces import IProjectsGradebook
 
49
from schooltool.cando.interfaces import ISkillsGradebook
44
50
from schooltool.cando.interfaces import ISkill
45
51
from schooltool.cando.gradebook import ensureAtLeastOneProject
46
52
from schooltool.cando.gradebook import getCurrentSectionTaught
47
53
from schooltool.cando.gradebook import getCurrentSectionAttended
48
54
from schooltool.cando.project import Project
49
 
from schooltool.cando.skill import Skill
50
55
from schooltool.cando.browser.skill import SkillAddView
51
56
from schooltool.cando import CanDoMessage as _
52
57
 
105
110
        return "Redirecting..."
106
111
 
107
112
 
 
113
class SectionSkillsCanDoRedirectView(flourish.page.Page):
 
114
 
 
115
    teacher_worksheet_view_name = 'gradebook'
 
116
    student_worksheet_view_name = 'mygrades'
 
117
 
 
118
    # XXX: merge this with SectionGradebookRedirectView
 
119
    def __call__(self):
 
120
        person = IPerson(self.request.principal)
 
121
        worksheets = ISectionSkills(self.context)
 
122
        # XXX: get Location proxy here
 
123
        current_worksheet = worksheets.getCurrentWorksheet(person)
 
124
        url = absoluteURL(worksheets, self.request)
 
125
        if current_worksheet is not None:
 
126
            container = ISectionSkills(self.context)
 
127
            current_worksheet = LocationProxy(
 
128
                current_worksheet,
 
129
                container=container,
 
130
                name=current_worksheet.__name__)
 
131
            url = absoluteURL(current_worksheet, self.request)
 
132
            if person in self.context.members:
 
133
                url += '/%s' % self.student_worksheet_view_name
 
134
            else:
 
135
                url += '/%s' % self.teacher_worksheet_view_name
 
136
        self.request.response.redirect(url)
 
137
        return "Redirecting..."
 
138
 
 
139
 
108
140
class ProjectsGradebookOverview(FlourishGradebookOverview):
109
141
 
110
142
    labels_row_header = _('Skill')
141
173
        return shortTitle, longTitle, bestScore
142
174
 
143
175
 
 
176
 
 
177
class SkillsGradebookOverview(FlourishGradebookOverview):
 
178
 
 
179
    labels_row_header = _('Skill')
 
180
    teacher_gradebook_view_name = 'gradebook-skills'
 
181
    student_gradebook_view_name = 'mygrades-skills'
 
182
 
 
183
    @property
 
184
    def title(self):
 
185
        if self.all_hidden:
 
186
            return _('No Visible Skill Sets')
 
187
        else:
 
188
            return _('Enter Skills')
 
189
 
 
190
    def getActivityInfo(self, activity):
 
191
        result = super(SkillsGradebookOverview, self).getActivityInfo(
 
192
            activity)
 
193
        if not activity.required:
 
194
            cssClass = ' '.join(filter(None, [result['cssClass'], 'optional']))
 
195
            result['cssClass'] = cssClass
 
196
        return result
 
197
 
 
198
    def processColumnPreferences(self):
 
199
        self.average_hide = True
 
200
        self.total_hide = True
 
201
        self.tardies_hide = True
 
202
        self.absences_hide = True
 
203
        self.due_date_hide = True
 
204
        self.average_scoresystem = None
 
205
 
 
206
    def getActivityAttrs(self, activity):
 
207
        shortTitle, longTitle, bestScore = super(
 
208
            SkillsGradebookOverview, self).getActivityAttrs(activity)
 
209
        longTitle = activity.label + ': ' + longTitle
 
210
        return shortTitle, longTitle, bestScore
 
211
 
 
212
 
144
213
class ProjectBreadcrumbs(flourish.breadcrumbs.Breadcrumbs):
145
214
 
146
215
    @property
153
222
 
154
223
 
155
224
class CanDoSettingsLinks(flourish.page.RefineLinksViewlet):
156
 
    pass
 
225
 
 
226
    pass
 
227
 
 
228
 
 
229
class CanDoModes(flourish.page.RefineLinksViewlet):
 
230
 
 
231
    pass
 
232
 
 
233
 
 
234
class CanDoModesViewlet(flourish.viewlet.Viewlet):
 
235
 
 
236
    list_class = 'filter'
 
237
 
 
238
    template = InlineViewPageTemplate('''
 
239
        <ul tal:attributes="class view/list_class"
 
240
            tal:condition="view/items">
 
241
          <li tal:repeat="item view/items">
 
242
            <input type="radio"
 
243
                   onfocus="ST.redirect($(this).context.value)"
 
244
                   tal:attributes="value item/url;
 
245
                                   checked item/selected;" />
 
246
            <tal:block replace="item/label" />
 
247
          </li>
 
248
        </ul>
 
249
    ''')
 
250
 
 
251
    def items(self):
 
252
        section = ISection(proxy.removeSecurityProxy(self.context))
 
253
        section_url = absoluteURL(section, self.request)
 
254
        return [
 
255
            {
 
256
                'label': _('Skills'),
 
257
                'url': section_url + '/gradebook-skills',
 
258
                'selected': ISkillsGradebook.providedBy(self.context),
 
259
                },
 
260
            {
 
261
                'label': _('Projects'),
 
262
                'url': section_url + '/gradebook-projects',
 
263
                'selected': IProjectsGradebook.providedBy(self.context),
 
264
                },
 
265
            ]
 
266
 
 
267
    def render(self, *args, **kw):
 
268
        return self.template(*args, **kw)
157
269
 
158
270
 
159
271
class SkillAddLink(flourish.page.LinkViewlet):