56
56
Worksheet.offering_id == Offering.id,
57
57
Worksheet.identifier == unicode(worksheet),
58
58
Offering.subject_id == Subject.id,
59
Subject.short_name == subject,
59
Subject.code == subject,
60
60
Offering.semester_id == Semester.id,
61
61
Semester.year == year,
62
62
Semester.semester == semester).one()
151
151
Worksheet.identifier == worksheet,
152
152
Worksheet.offering_id == Offering.id,
153
153
Offering.subject_id == Subject.id,
154
Subject.short_name == subject,
154
Subject.code == subject,
155
155
Offering.semester_id == Semester.id,
156
156
Semester.year == year,
157
157
Semester.semester == semester).one()
173
173
class WorksheetExerciseRESTView(JSONRESTView):
174
'''REST view of a worksheet exercise.'''
176
def __init__(self, req, subject, year, semester, worksheet, exercise):
177
self.context = req.store.find(WorksheetExercise,
178
WorksheetExercise.exercise_id == exercise,
179
WorksheetExercise.worksheet_id == Worksheet.id,
180
Worksheet.offering_id == Offering.id,
181
Offering.subject_id == Subject.id,
182
Subject.short_name == subject,
183
Offering.semester_id == Semester.id,
184
Semester.year == year,
185
Semester.semester == semester).one()
187
if self.context is None:
190
@named_operation('view')
174
'''REST view of an exercise.'''
176
def get_permissions(self, user):
177
# XXX: Do it properly.
178
# XXX: Does any user have the ability to save as themselves?
179
# XXX: Does a user EVER have permission to save as another user?
185
@named_operation('save')
191
186
def save(self, req, text):
192
187
# Find the appropriate WorksheetExercise to save to. If its not found,
193
188
# the user is submitting against a non-existant worksheet/exercise
189
worksheet_exercise = req.store.find(WorksheetExercise,
190
WorksheetExercise.exercise_id == self.exercise,
191
WorksheetExercise.worksheet_id == Worksheet.id,
192
Worksheet.offering_id == Offering.id,
193
Offering.subject_id == Subject.id,
194
Subject.code == self.subject,
195
Offering.semester_id == Semester.id,
196
Semester.year == self.year,
197
Semester.semester == self.semester).one()
199
if worksheet_exercise is None:
195
202
old_save = req.store.find(ExerciseSave,
196
ExerciseSave.ws_ex_id == self.context.id,
203
ExerciseSave.ws_ex_id == worksheet_exercise.id,
197
204
ExerciseSave.user == req.user).one()
199
206
#Overwrite the old, or create a new if there isn't one
211
218
return {"result": "ok"}
214
222
# Note that this is the view of an existing worksheet. Creation is handled
215
223
# by OfferingRESTView (as offerings have worksheets)
216
224
class WorksheetRESTView(JSONRESTView):
217
225
"""View used to update a worksheet."""
227
def get_permissions(self, user):
228
# XXX: Do it properly.
229
# XXX: Lecturers should be allowed to add worksheets Only to subjects
230
# under their control
219
239
def __init__(self, req, **kwargs):
221
241
self.worksheet = kwargs['worksheet']
227
247
Worksheet.identifier == self.worksheet,
228
248
Worksheet.offering_id == Offering.id,
229
249
Offering.subject_id == Subject.id,
230
Subject.short_name == self.subject,
250
Subject.code == self.subject,
231
251
Offering.semester_id == Semester.id,
232
252
Semester.year == self.year,
233
253
Semester.semester == self.semester).one()
249
269
class WorksheetsRESTView(JSONRESTView):
250
270
"""View used to update and create Worksheets."""
272
def get_permissions(self, user):
273
# XXX: Do it properly.
274
# XXX: Lecturers should be allowed to add worksheets Only to subjects
275
# under their control
252
284
def __init__(self, req, **kwargs):
254
286
self.subject = kwargs['subject']
258
290
self.context = req.store.find(Offering,
259
291
Offering.subject_id == Subject.id,
260
Subject.short_name == self.subject,
292
Subject.code == self.subject,
261
293
Offering.semester_id == Semester.id,
262
294
Semester.year == self.year,
263
295
Semester.semester == self.semester).one()