56
56
Worksheet.offering_id == Offering.id,
57
57
Worksheet.identifier == unicode(worksheet),
58
58
Offering.subject_id == Subject.id,
59
Subject.code == subject,
59
Subject.short_name == 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.code == subject,
154
Subject.short_name == 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 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')
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')
186
191
def save(self, req, text):
187
192
# Find the appropriate WorksheetExercise to save to. If its not found,
188
193
# 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:
202
195
old_save = req.store.find(ExerciseSave,
203
ExerciseSave.ws_ex_id == worksheet_exercise.id,
196
ExerciseSave.ws_ex_id == self.context.id,
204
197
ExerciseSave.user == req.user).one()
206
199
#Overwrite the old, or create a new if there isn't one
218
211
return {"result": "ok"}
222
214
# Note that this is the view of an existing worksheet. Creation is handled
223
215
# by OfferingRESTView (as offerings have worksheets)
224
216
class WorksheetRESTView(JSONRESTView):
225
217
"""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
239
219
def __init__(self, req, **kwargs):
241
221
self.worksheet = kwargs['worksheet']
247
227
Worksheet.identifier == self.worksheet,
248
228
Worksheet.offering_id == Offering.id,
249
229
Offering.subject_id == Subject.id,
250
Subject.code == self.subject,
230
Subject.short_name == self.subject,
251
231
Offering.semester_id == Semester.id,
252
232
Semester.year == self.year,
253
233
Semester.semester == self.semester).one()
269
249
class WorksheetsRESTView(JSONRESTView):
270
250
"""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
284
252
def __init__(self, req, **kwargs):
286
254
self.subject = kwargs['subject']
290
258
self.context = req.store.find(Offering,
291
259
Offering.subject_id == Subject.id,
292
Subject.code == self.subject,
260
Subject.short_name == self.subject,
293
261
Offering.semester_id == Semester.id,
294
262
Semester.year == self.year,
295
263
Semester.semester == self.semester).one()