~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: 2010-02-15 08:39:41 UTC
  • Revision ID: grantw@unimelb.edu.au-20100215083941-60xqwbmhad360dmq
Add semester edit UI.

Show diffs side-by-side

added added

removed removed

Lines of Context:
180
180
    def _to_python(self, value, state):
181
181
        if (state.store.find(
182
182
                Semester, year=value['year'], semester=value['semester']
183
 
                ).count() > 0):
 
183
                ).one() not in (None, state.existing_semester)):
184
184
            raise formencode.Invalid(
185
185
                'Semester already exists', value, state)
186
186
        return value
189
189
class SemesterSchema(formencode.Schema):
190
190
    year = formencode.validators.UnicodeString()
191
191
    semester = formencode.validators.UnicodeString()
 
192
    state = formencode.All(
 
193
        formencode.validators.OneOf(["past", "current", "future"]),
 
194
        formencode.validators.UnicodeString())
192
195
    chained_validators = [SemesterUniquenessValidator()]
193
196
 
194
197
 
195
 
class SemesterNew(BaseFormView):
 
198
class SemesterFormView(BaseFormView):
 
199
    tab = 'subjects'
 
200
 
 
201
    def authorize(self, req):
 
202
        return req.user is not None and req.user.admin
 
203
 
 
204
    @property
 
205
    def validator(self):
 
206
        return SemesterSchema()
 
207
 
 
208
    def get_return_url(self, obj):
 
209
        return '/subjects/+manage'
 
210
 
 
211
 
 
212
class SemesterNew(SemesterFormView):
196
213
    """A form to create a semester."""
197
214
    template = 'templates/semester-new.html'
198
215
    tab = 'subjects'
199
216
 
200
 
    def authorize(self, req):
201
 
        return req.user is not None and req.user.admin
202
 
 
203
 
    @property
204
 
    def validator(self):
205
 
        return SemesterSchema()
 
217
    def populate_state(self, state):
 
218
        state.existing_semester = None
206
219
 
207
220
    def get_default_data(self, req):
208
221
        return {}
211
224
        new_semester = Semester()
212
225
        new_semester.year = data['year']
213
226
        new_semester.semester = data['semester']
 
227
        new_semester.state = data['state']
214
228
 
215
229
        req.store.add(new_semester)
216
230
        return new_semester
217
231
 
218
 
    def get_return_url(self, obj):
219
 
        return '/subjects'
 
232
 
 
233
class SemesterEdit(SemesterFormView):
 
234
    """A form to edit a semester."""
 
235
    template = 'templates/semester-edit.html'
 
236
 
 
237
    def populate_state(self, state):
 
238
        state.existing_semester = self.context
 
239
 
 
240
    def get_default_data(self, req):
 
241
        return {
 
242
            'year': self.context.year,
 
243
            'semester': self.context.semester,
 
244
            'state': self.context.state,
 
245
            }
 
246
 
 
247
    def save_object(self, req, data):
 
248
        self.context.year = data['year']
 
249
        self.context.semester = data['semester']
 
250
        self.context.state = data['state']
 
251
 
 
252
        return self.context
220
253
 
221
254
 
222
255
class OfferingView(XHTMLView):
577
610
    views = [(ApplicationRoot, ('subjects', '+index'), SubjectsView),
578
611
             (ApplicationRoot, ('subjects', '+new'), SubjectNew),
579
612
             (ApplicationRoot, ('subjects', '+new-offering'), OfferingNew),
580
 
             (ApplicationRoot, ('subjects', '+new-semester'), SemesterNew),
 
613
             (ApplicationRoot, ('+semesters', '+new'), SemesterNew),
581
614
             (Subject, '+edit', SubjectEdit),
 
615
             (Semester, '+edit', SemesterEdit),
582
616
             (Offering, '+index', OfferingView),
583
617
             (Offering, '+edit', OfferingEdit),
584
618
             (Offering, ('+enrolments', '+index'), EnrolmentsView),