~azzar1/unity/add-show-desktop-key

« back to all changes in this revision

Viewing changes to ivle/webapp/tutorial/service.py

MergedĀ fromĀ trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
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()
171
171
 
172
172
 
173
173
class WorksheetExerciseRESTView(JSONRESTView):
174
 
    '''REST view of a worksheet exercise.'''
175
 
 
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()
186
 
        
187
 
        if self.context is None:
188
 
            raise NotFound()
189
 
 
190
 
    @named_operation('view')
 
174
    '''REST view of an exercise.'''
 
175
 
 
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?
 
180
        if user is not None:
 
181
            return set(['save'])
 
182
        else:
 
183
            return set()
 
184
 
 
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()
 
198
        
 
199
        if worksheet_exercise is None:
 
200
            raise NotFound()
194
201
 
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()
198
205
        
199
206
        #Overwrite the old, or create a new if there isn't one
203
210
        else:
204
211
            new_save = old_save
205
212
        
206
 
        new_save.worksheet_exercise = self.context
 
213
        new_save.worksheet_exercise = worksheet_exercise
207
214
        new_save.user = req.user
208
215
        new_save.text = unicode(text)
209
216
        new_save.date = datetime.datetime.now()
211
218
        return {"result": "ok"}
212
219
 
213
220
 
 
221
 
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."""
218
226
 
 
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
 
231
        if user is not None:
 
232
            if user.admin:
 
233
                return set(['save'])
 
234
            else:
 
235
                return set()
 
236
        else:
 
237
            return set()    
 
238
 
219
239
    def __init__(self, req, **kwargs):
220
240
    
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()
235
255
        if self.context is None:
236
256
            raise NotFound()
237
257
    
238
 
    @named_operation('edit')
 
258
    @named_operation('save')
239
259
    def save(self, req, name, assessable, data, format):
240
260
        """Takes worksheet data and saves it."""
241
261
        self.context.name = unicode(name)
249
269
class WorksheetsRESTView(JSONRESTView):
250
270
    """View used to update and create Worksheets."""
251
271
    
 
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
 
276
        if user is not None:
 
277
            if user.admin:
 
278
                return set(['edit'])
 
279
            else:
 
280
                return set()
 
281
        else:
 
282
            return set()
 
283
 
252
284
    def __init__(self, req, **kwargs):
253
285
    
254
286
        self.subject = kwargs['subject']
257
289
    
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()