Exemple #1
0
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()
Exemple #2
0
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()
Exemple #3
0
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()
Exemple #4
0
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()
Exemple #5
0
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()
Exemple #6
0
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)
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
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()