def activity_ajax(request): exercise = request.session.get('exercise', None) if not exercise: return HttpResponse("No exercise found in the session", status=409) exercise = PLInstance(exercise) status = json.loads(request.body.decode()) if status['requested_action'] == 'save': feedback_type = "info" feedback = "Réponse enregistré avec succès" Answer(value=status['inputs']['answer'], user=request.user, pl=PL.objects.get(id=exercise.dic['pl_id__']), seed=exercise.dic['seed'], grade=-1).save() return HttpResponse(json.dumps({ 'feedback_type': feedback_type, 'feedback': feedback }), content_type='application/json') elif status['requested_action'] == 'submit': # Validate success, feedback = exercise.evaluate(status['inputs']) if 'answer' in status['inputs']: value = status['inputs']['answer'] else: value = "" if success == None: feedback_type = "info" Answer(value=value, user=request.user, pl=PL.objects.get(id=exercise.dic['pl_id__']), seed=exercise.dic['seed'], grade=-1).save() elif success: feedback_type = "success" Answer(value=value, user=request.user, pl=PL.objects.get(id=exercise.dic['pl_id__']), seed=exercise.dic['seed'], grade=100).save() else: feedback_type = "fail" Answer(value=value, user=request.user, pl=PL.objects.get(id=exercise.dic['pl_id__']), seed=exercise.dic['seed'], grade=0).save() return HttpResponse(json.dumps({ 'feedback_type': feedback_type, 'feedback': feedback }), content_type='application/json') return HttpResponseBadRequest("Missing action in status")
def activity_receiver(request): activity_id = request.session.get("current_activity", None) if activity_id == None: return HttpResponse("No activity found in the session", status=409) if request.method == "POST": # Received ajax request return activity_ajax(request) if request.session.get("testing", False): activity = get_object_or_404(ActivityTest, id=activity_id) else: activity = get_object_or_404(Activity, id=activity_id) current_pl = request.session.get("current_pl", None) current_pl = None if current_pl == None else PL.objects.get(id=current_pl) exercise = ActivityInstance(request, activity, current_pl) if request.method == 'GET' and request.GET.get("action", None): action = request.GET.get("action", None) if action == "pl": request.session["current_pl"] = request.GET.get("pl_id", None) elif action == "pltp": request.session["current_pl"] = None elif current_pl and action == "reset": value = "" if 'code' not in exercise.dic else exercise.dic["code"] Answer(value=value, user=request.user, pl=current_pl, seed=exercise.dic['seed'], grade=-1).save() elif current_pl and action == "next": for current, next in zip(activity.pltp.pl.all(), list(activity.pltp.pl.all())[1:] + [None]): if current_pl.id == current.id: request.session[ "current_pl"] = None if next == None else next.id break else: request.session["current_pl"] = None request.method return redirect(reverse(activity_receiver)) request.session['exercise'] = exercise.dic if current_pl: Answer(value='', user=request.user, pl=PL.objects.get(id=current_pl.id), seed=exercise.dic['seed'], grade=-1).save() return HttpResponse(exercise.render(request))
def ajax(request, exercise): status = json.loads(request.body.decode()) if status['requested_action'] == 'submit': # Validate success, feedback = exercise.evaluate(status['inputs']) if 'answer' in status['inputs']: value = status['inputs']['answer'] else: value = "" if success == None: feedback_type = "info" Answer(value=value, user=request.user, pl=PL.objects.get(sha1=exercise.dic['pl_sha1']), seed=exercise.dic['seed'], state=Answer.STARTED).save() elif success: feedback_type = "success" Answer(value=value, user=request.user, pl=PL.objects.get(sha1=exercise.dic['pl_sha1']), seed=exercise.dic['seed'], state=Answer.SUCCEEDED).save() else: feedback_type = "fail" Answer(value=value, user=request.user, pl=PL.objects.get(sha1=exercise.dic['pl_sha1']), seed=exercise.dic['seed'], state=Answer.FAILED).save() return HttpResponse(json.dumps({ 'feedback_type': feedback_type, 'feedback': feedback }), content_type='application/json') elif status['requested_action'] == 'save': # Save if 'answer' in status['inputs']: value = status['inputs']['answer'] else: value = "" Answer(value=value, user=request.user, pl=PL.objects.get(sha1=exercise.dic['pl_sha1']), seed=exercise.dic['seed'], state=Answer.STARTED).save() return HttpResponse(json.dumps({ 'feedback_type': "info", 'feedback': "Votre réponse à bien été enregistrée." }), content_type='application/json') return None # Not an AJAX request
def evaluate(self, exercise, request): """ Return the evaluation of the user's answer in the form of a tuple: - 'success'/'fail'/'info': The user succeeded / The user failed / Save or An error occured - Feedback Return None, None if the request doesn't contain any AJAX request. Calling this function will also save the user's answer in the database. """ status = json.loads(request.body.decode()) if status['requested_action'] == 'submit': # Validate success, feedback = exercise.evaluate(status['inputs']) if 'answer' in status['inputs']: value = status['inputs']['answer'] else: value = "" if success == None: feedback_type = "info" Answer(value=value, user=request.user, pl=PL.objects.get(id=exercise.dic['pl_id']), seed=exercise.dic['seed'], state=-1).save() elif success: feedback_type = "success" Answer(value=value, user=request.user, pl=PL.objects.get(id=exercise.dic['pl_id']), seed=exercise.dic['seed'], state=100).save() else: feedback_type = "fail" Answer(value=value, user=request.user, pl=PL.objects.get(id=exercise.dic['pl_id']), seed=exercise.dic['seed'], state=0).save() return feedback_type, feedback elif status['requested_action'] == 'save': # Save if 'answer' in status['inputs']: value = status['inputs']['answer'] else: value = "" Answer(value=value, user=request.user, pl=PL.objects.get(id=exercise.dic['pl_id']), seed=exercise.dic['seed'], state=-1).save() return 'info', "Votre réponse à bien été enregistrée." return None, None # Not an AJAX request
def reset_pl(self, exercise, request): """ Reset the PL to the default code """ value = "" if 'code' not in exercise.dic else exercise.dic["code"] Answer(value=value, user=request.user, pl=PL.objects.get(id=exercise.dic['pl_id']), seed=exercise.dic['seed'], state=-1).save()
def add_db_entry(self, exercise, request): Answer(value='', user=request.user, pl=PL.objects.get(id=exercise.dic['pl_id']), seed=exercise.dic['seed'], state=Answer.STARTED).save()
def add_db_entry(self, exercise, request): Answer(value='User clicked on the PL', user=request.user, pl=PL.objects.get(sha1=exercise.dic['pl_sha1']), seed=exercise.dic['seed'], state=Answer.STARTED).save()