def review_answer(request, course_short_title): user = RequestContext(request)["user"] if request.POST: data = request.body.decode(encoding="UTF-8") data = json.loads(data) review_id = data["review_id"] answers = data["answers"] try: review = Review.objects.get(pk=review_id) challenge = review.elaboration.challenge if not challenge.is_enabled_for_user(user): raise Http404 if not review == Review.get_open_review(challenge, user): raise Http404 except: raise Http404 review.appraisal = data["appraisal"] for answer in answers: question_id = answer["question_id"] text = answer["answer"] review_question = ReviewQuestion.objects.get(pk=question_id) ReviewAnswer(review=review, review_question=review_question, text=text).save() # send notifications review.submission_time = datetime.now() review.save() try: if review.appraisal == review.NOTHING: Notification.bad_review(review) else: Notification.enough_peer_reviews(review) except: print("Could not send Notification") return HttpResponse()
def review_answer(request, course_short_title): user = request.user if request.POST: data = request.body.decode(encoding='UTF-8') data = json.loads(data) review_id = data['review_id'] answers = data['answers'] try: review = Review.objects.get(pk=review_id) challenge = review.elaboration.challenge if not challenge.is_enabled_for_user(user): raise Http404 if not review == Review.get_open_review(challenge, user): raise Http404 except: raise Http404 review.appraisal = data['appraisal'] for answer in answers: question_id = answer['question_id'] text = answer['answer'] review_question = ReviewQuestion.objects.get(pk=question_id) # check if this answer has already been posted # submit button could have been pressed twice # there is no other way to check for this, because the parent # review object gets created when creating the review view # so we can't check it here because it would already exist. # get_or_create() would work here, but notifications would be sent in both cases if ReviewAnswer.objects.filter(review=review, review_question=review_question).exists(): # log this incident so we can trace it down to the client. Is it IE? logger.error("We prevented a review to be submitted twice. Report this with client details.") logger.error("review_id=%i, user_id=%i, question_id=%i, review_question_id=%i" % review.id, user.id, question_id, review_question.id) raise Http404 ReviewAnswer(review=review, review_question=review_question, text=text).save() # send notifications review.submission_time = datetime.now() if 'extra_review_question_answer' in data: review.extra_review_question_answer = data['extra_review_question_answer'] review.save() try: if review.appraisal == review.NOTHING: Notification.bad_review(review) else: Notification.enough_peer_reviews(review) except: print('Could not send Notification') return HttpResponse()
def set_appraisal(request, course_short_title=None): review_id = request.POST['review_id'] appraisal = request.POST['appraisal'] review = Review.objects.get(pk=review_id) review.appraisal = appraisal review.save() if review.appraisal == review.NOTHING: Notification.bad_review(review) else: Notification.enough_peer_reviews(review) return HttpResponse()
def review_answer(request, course_short_title): user = request.user if request.POST: data = request.body.decode(encoding='UTF-8') data = json.loads(data) review_id = data['review_id'] answers = data['answers'] try: review = Review.objects.get(pk=review_id) challenge = review.elaboration.challenge if not challenge.is_enabled_for_user(user): raise Http404 if not review == Review.get_open_review(challenge, user): raise Http404 except: raise Http404 review.appraisal = data['appraisal'] for answer in answers: question_id = answer['question_id'] text = answer['answer'] review_question = ReviewQuestion.objects.get(pk=question_id) # check if this answer has already been posted # submit button could have been pressed twice # there is no other way to check for this, because the parent # review object gets created when creating the review view # so we can't check it here because it would already exist. # get_or_create() would work here, but notifications would be sent in both cases if ReviewAnswer.objects.filter(review=review, review_question=review_question).exists(): # log this incident so we can trace it down to the client. Is it IE? logger.error("We prevented a review to be submitted twice. Report this with client details.") logger.error("review_id=%i, user_id=%i, question_id=%i, review_question_id=%i" % review.id, user.id, question_id, review_question.id) raise Http404 ReviewAnswer(review=review, review_question=review_question, text=text).save() # send notifications review.submission_time = datetime.now() review.save() try: if review.appraisal == review.NOTHING: Notification.bad_review(review) else: Notification.enough_peer_reviews(review) except: print('Could not send Notification') return HttpResponse()
def review_answer(request, course_short_title=None): course = Course.get_or_raise_404(short_title=course_short_title) data = request.body.decode(encoding='UTF-8') data = json.loads(data) user = request.user answers = data['answers'] elab_id_from_client = data['elab'] review = Review.objects.create( elaboration_id=elab_id_from_client, reviewer_id=user.id) review.appraisal = data['appraisal'] review.submission_time = datetime.now() review.save() for answer in answers: question_id = answer['question_id'] text = answer['answer'] review_question = ReviewQuestion.objects.get(pk=question_id) ReviewAnswer( review=review, review_question=review_question, text=text).save() if review.appraisal == review.NOTHING: Notification.bad_review(review) else: Notification.enough_peer_reviews(review) # update overview elaborations = Elaboration.get_missing_reviews(course) if type(elaborations) == list: elaborations.sort(key=lambda elaboration: elaboration.submission_time) else: elaborations = elaborations.order_by('submission_time') request.session['elaborations'] = serializers.serialize( 'json', elaborations) if review.elaboration.is_reviewed_2times(): evaluation_url = reverse('Evaluation:home', args=[course_short_title]) else: evaluation_url = reverse('Evaluation:detail', args=[course_short_title])\ + "?elaboration_id=" + str(review.elaboration.id) return HttpResponse(evaluation_url)
def review_answer(request, course_short_title=None): course = Course.get_or_raise_404(short_title=course_short_title) data = request.body.decode(encoding='UTF-8') data = json.loads(data) user = RequestContext(request)['user'] answers = data['answers'] review = Review.objects.create(elaboration_id=request.session.get( 'elaboration_id', ''), reviewer_id=user.id) review.appraisal = data['appraisal'] review.submission_time = datetime.now() review.save() for answer in answers: question_id = answer['question_id'] text = answer['answer'] review_question = ReviewQuestion.objects.get(pk=question_id) ReviewAnswer(review=review, review_question=review_question, text=text).save() if review.appraisal == review.NOTHING: Notification.bad_review(review) else: Notification.enough_peer_reviews(review) # update overview elaborations = Elaboration.get_missing_reviews(course) if type(elaborations) == list: elaborations.sort(key=lambda elaboration: elaboration.submission_time) else: elaborations = elaborations.order_by('submission_time') request.session['elaborations'] = serializers.serialize( 'json', elaborations) if review.elaboration.is_reviewed_2times(): evaluation_url = reverse('Evaluation:home', args=[course_short_title]) else: evaluation_url = reverse('Evaluation:detail', args=[course_short_title])\ + "?elaboration_id=" + str(review.elaboration.id) return HttpResponse(evaluation_url)
def review_answer(request, course_short_title=None): course = Course.get_or_raise_404(short_title=course_short_title) data = request.body.decode(encoding="UTF-8") data = json.loads(data) user = RequestContext(request)["user"] answers = data["answers"] review = Review.objects.create(elaboration_id=request.session.get("elaboration_id", ""), reviewer_id=user.id) review.appraisal = data["appraisal"] review.submission_time = datetime.now() review.save() for answer in answers: question_id = answer["question_id"] text = answer["answer"] review_question = ReviewQuestion.objects.get(pk=question_id) ReviewAnswer(review=review, review_question=review_question, text=text).save() if review.appraisal == review.NOTHING: Notification.bad_review(review) else: Notification.enough_peer_reviews(review) # update overview elaborations = Elaboration.get_missing_reviews(course) if type(elaborations) == list: elaborations.sort(key=lambda elaboration: elaboration.submission_time) else: elaborations = elaborations.order_by("submission_time") request.session["elaborations"] = serializers.serialize("json", elaborations) if review.elaboration.is_reviewed_2times(): evaluation_url = reverse("Evaluation:home", args=[course_short_title]) else: evaluation_url = ( reverse("Evaluation:detail", args=[course_short_title]) + "?elaboration_id=" + str(review.elaboration.id) ) return HttpResponse(evaluation_url)
def review_answer(request, course_short_title): user = RequestContext(request)['user'] if request.POST: data = request.body.decode(encoding='UTF-8') data = json.loads(data) review_id = data['review_id'] answers = data['answers'] try: review = Review.objects.get(pk=review_id) challenge = review.elaboration.challenge if not challenge.is_enabled_for_user(user): raise Http404 if not review == Review.get_open_review(challenge, user): raise Http404 except: raise Http404 review.appraisal = data['appraisal'] for answer in answers: question_id = answer['question_id'] text = answer['answer'] review_question = ReviewQuestion.objects.get(pk=question_id) ReviewAnswer(review=review, review_question=review_question, text=text).save() # send notifications review.submission_time = datetime.now() review.save() try: if review.appraisal == review.NOTHING: Notification.bad_review(review) else: Notification.enough_peer_reviews(review) except: print('Could not send Notification') return HttpResponse()