def grammar_answers_for_check(quiz_id, stud_id): quesrtr = repo.QuestionRepository(Questions) grammar_questions = quesrtr.get_grammar_questions(quiz_id) sgar = repo.StudentGrammarAnswersRepository(StudentGrammarAnswers) gqsr = repo.GrammarQuestionSanctionsRepository(GrammarQuestionSanctions) qsrr = repo.QuizSolveRecordRepository(QuizSolveRecord) solve_info_id = qsrr.get_solve_info_id(quiz_id, stud_id) if grammar_questions: for gq in grammar_questions: student_answer = sgar.get_stud_grammar_answer_info(solve_info_id, gq['id']) if not student_answer: gq['exist'] = False else: sanctions = gqsr.form_error_sanction_dict_error_names(gq['id']) ethalonts = checkerop.get_etalons(gq['id']) ethalon = "" for eth in ethalonts: ethalon += eth['name'] + ". " gq['checked_result'] = json.loads(student_answer[0]['check_result']) #gq['points'] = gq[0]['points'] gq['exist'] = True gq['stud_answer'] = student_answer[0]['answer'] gq['corrected_sent'] = student_answer[0]['corrected_sent'] gq['suggested_points'] = student_answer[0]['points'] gq['sanctions'] = sanctions gq['ethalons'] = ethalon print(ethalon) return grammar_questions
def take_quiz_confirm(request, pk): qsrr = repo.QuizSolveRecordRepository(QuizSolveRecord) is_started = qsrr.check_if_started(pk, request.user.id) qr = repo.QuizRepository(Quiz) quiz = qr.get_by_id(pk) course_id = qr.get_course_id(pk) cpr = repo.CourseParticipantsRepository(CourseParticipants) is_in_joined_courses = cpr.is_quiz_in_joined_active_courses(pk, request.user.id) if not is_in_joined_courses: raise Http404 minutes_left = 0 if quiz: if is_started: timer = quiz[0].timer_minutes if timer != 0: start_time = qsrr.get_start_time(pk, request.user.id) end_time = start_time + datetime.timedelta(minutes = timer) now = timezone.now() now = timezone.localtime(now) time_delta = (end_time - now) minutes_left = time_delta.seconds / 60 else: minutes_left = quiz[0].timer_minutes return render(request, 'students/confirm/take_quiz_confirm.html', {'quiz': quiz, 'course_id': course_id, 'minutes_left': round(minutes_left), 'is_started': is_started})
def take_quiz(request, pk): qr = repo.QuizRepository(Quiz) test = helper.construct_quiz(pk) qsrr = repo.QuizSolveRecordRepository(QuizSolveRecord) cpr = repo.CourseParticipantsRepository(CourseParticipants) is_in_joined_courses = cpr.is_quiz_in_joined_active_courses(pk, request.user.id) if not is_in_joined_courses: raise Http404 is_submitted = qsrr.if_quiz_is_submitted(pk, request.user.id) if is_submitted: raise Http404 is_started = qsrr.check_if_started(pk, request.user.id) if(not is_started): raise Http404 timer = qr.get_quiz_timer(pk) start_time = qsrr.get_start_time(pk, request.user.id) time = start_time + datetime.timedelta(minutes = timer) now = timezone.now() now = timezone.localtime(now) time_delta = (time - now) time_delta = time_delta.seconds / 60 quiz_name =qr.get_name(pk) if time_delta > timer and timer != 0: raise Http404 #TODO page time is end return render(request, 'students/quiz_solve.html', {'tests': test, 'quiz_id': pk, 'timer': timer, 'minutes_left': time_delta, 'quiz_name': quiz_name})
def save_checked_answers(request, pk, spk): quiz = repo.QuizRepository(Quiz) owner_id = quiz.get_owner_id(pk) course_id = quiz.get_course_id(pk) cpr = repo.CourseParticipantsRepository(CourseParticipants) is_participant = cpr.is_user_participant(spk, course_id) if request.user.id == owner_id and is_participant: new_points = request.POST['data'] new_points = json.loads(new_points) quesrtr = repo.QuestionRepository(Questions) soar = repo.StudentOpenAnswersRepository(StudentOpenAnswers) qsrr = repo.QuizSolveRecordRepository(QuizSolveRecord) sgar = repo.StudentGrammarAnswersRepository(StudentGrammarAnswers) solve_info_id = qsrr.get_solve_info_id(pk, spk) #new_points[i]['name'] - id #new_points[i]['value'] - points sum_points = 0 for i in range(1, len(new_points)): question_id = int(new_points[i]['name']) question_info = quesrtr.get_open_grammar_question_id_points(pk, question_id) if question_info != -1: if question_info['qtype'] == 'open': points = round(float(new_points[i]['value']), 1) open_question_points = float(question_info['points']) if points <= open_question_points: soar.update_answer_points(solve_info_id, question_id, points) sum_points += points else: soar.update_answer_points(solve_info_id, question_id, open_question_points) sum_points += open_question_points else: if question_info['qtype'] == 'grammar': if isfloat(new_points[i]['value']): points = round(float(new_points[i]['value']), 1) grammar_points = float(question_info['points']) if points <= grammar_points: sgar.update_answer_points(solve_info_id, question_id, points) sum_points += points else: sgar.update_answer_points(solve_info_id, question_id, grammar_points) sum_points += grammar_points else: sgar.update_answer_corrected(solve_info_id, question_id, new_points[i]['value']) student_points = qsrr.get_points(solve_info_id) qsrr.update_quiz_points_and_status(solve_info_id, student_points + sum_points, True) return JsonResponse({ 'success': True, 'url': reverse('teachers:view_quiz_for_check', kwargs={'pk': pk}), #, args=[{'courses': courses}] }) raise Http404
def view_quiz_for_check(request, pk): quiz = repo.QuizRepository(Quiz) owner_id = quiz.get_owner_id(pk) if request.user.id == owner_id: quiz_name = quiz.get_name(pk) qsr = repo.QuizSolveRecordRepository(QuizSolveRecord) quizzes = qsr.get_quizzes_and_students(pk, False) course_id = quiz.get_course_id(pk) return render(request, 'teachers/lists/check_quiz_list.html', {'quizzes': quizzes, 'course_id': course_id, 'quiz_name': quiz_name}) raise Http404
def open_answers_for_check(quiz_id, stud_id): quesrtr = repo.QuestionRepository(Questions) open_questions = quesrtr.get_open_questions(quiz_id) soar = repo.StudentOpenAnswersRepository(StudentOpenAnswers) qsrr = repo.QuizSolveRecordRepository(QuizSolveRecord) solve_info_id = qsrr.get_solve_info_id(quiz_id, stud_id) if open_questions: for oq in open_questions: student_answer = soar.get_stud_open_answer_text(solve_info_id, oq['id']) if not student_answer: oq['exist'] = False else: oq['exist'] = True oq['stud_answer'] = student_answer[0]['answer'] return open_questions
def view_students_quiz_grades(request, pk): quiz_ch = get_object_or_404(Quiz, pk=pk) quiz = repo.QuizRepository(Quiz) owner_id = quiz.get_owner_id(pk) if request.user.id == owner_id: qsr = repo.QuizSolveRecordRepository(QuizSolveRecord) quizzes = qsr.get_quizzes_and_students(pk, True) course_id = quiz.get_course_id(pk) points = quiz.get_point_schedule(pk) max_points = 0 min_points = 0 good_points = 0 if points: max_points = points[0]['max_points'] min_points = points[0]['min_points'] good_points = points[0]['good_points'] return render(request, 'teachers/lists/students_grade_list.html', {'quizzes': quizzes, 'course_id': course_id, 'min_points': min_points, 'good_points': good_points, 'max_points': max_points}) raise Http404
def join_quiz(request, pk, template_name='students/join_quiz.html'): cpr = repo.CourseParticipantsRepository(CourseParticipants) is_in_joined_courses = cpr.is_quiz_in_joined_active_courses(pk, request.user.id) if not is_in_joined_courses: raise Http404 quiz= get_object_or_404(Quiz, pk=pk) qr = repo.QuizRepository(Quiz) if request.method == 'POST': code = request.POST.get('code') in_code = qr.get_quiz_code(pk) if in_code == code: qsrr = repo.QuizSolveRecordRepository(QuizSolveRecord) is_started = qsrr.check_if_started(pk, request.user.id) if(not is_started): qsrr.start_quiz(pk, request.user.id) return redirect('students:take_quiz', pk=pk) messages.success(request, 'Welcome to the course') else: messages.error(request, 'Please enter the right varification code.') return redirect('students:take_quiz_confirm', pk=pk) else: return render(request, template_name, {'id': pk})
def construct_quiz_student_results(quiz_id, student_id): qsrr = repo.QuizSolveRecordRepository(QuizSolveRecord) solve_info_id = qsrr.get_solve_info_id(quiz_id, student_id) if solve_info_id != 0: sar = repo.StudentAnswersRepository(StudentAnswers) stud_answers = sar.get_student_answers(solve_info_id) quesrtr = repo.QuestionRepository(Questions) ar = repo.AnswerRepository(Answers) answers_id = [ sub['answer_id'] for sub in stud_answers ] questions = quesrtr.get_by_quiz_id(quiz_id) soar = repo.StudentOpenAnswersRepository(StudentOpenAnswers) sgar = repo.StudentGrammarAnswersRepository(StudentGrammarAnswers) quiz = {} for question in questions: temp = {} temp[question.id] = {} temp[question.id]['qname'] = question.name temp[question.id]['qtype'] = question.qtype temp[question.id]['points'] = question.points temp[question.id]['description'] = question.description temp[question.id]['answers'] = {} if question.qtype != 'open' and question.qtype != 'compare' and question.qtype != 'grammar': answers = ar.get_answer_points_and_name_by_question(question.id) for answer in answers: temp[question.id]['answers'][answer.id] = {} temp[question.id]['answers'][answer.id]['answer'] = answer.name temp[question.id]['answers'][answer.id]['points'] = answer.points temp[question.id]['answers'][answer.id]['correct'] = answer.correct if answer.id in answers_id: temp[question.id]['answers'][answer.id]['is_answer'] = True else: temp[question.id]['answers'][answer.id]['is_answer'] = False else: if question.qtype != 'grammar': open_student_answers = soar.get_student_answers(solve_info_id, question.id) temp[question.id]['answers']['answer'] = "" temp[question.id]['answers']['points'] = 0 if open_student_answers != -1: temp[question.id]['answers']['answer'] = open_student_answers['answer'] temp[question.id]['answers']['points'] = open_student_answers['points'] else: open_student_answers = sgar.get_student_answers(solve_info_id, question.id) temp[question.id]['answers']['answer'] = "" temp[question.id]['answers']['points'] = 0 if open_student_answers != -1: temp[question.id]['answers']['answer'] = open_student_answers['answer'] temp[question.id]['answers']['points'] = open_student_answers['points'] temp[question.id]['answers']['result'] = json.loads(open_student_answers['check_result']) temp[question.id]['answers']['corrected_sents'] = open_student_answers['corrected_sent'] quiz.update(temp) return quiz else: return -1
def finish_test(request, pk): qsrr = repo.QuizSolveRecordRepository(QuizSolveRecord) is_submitted = qsrr.if_quiz_is_submitted(pk, request.user.id) if is_submitted: raise Http404 cpr = repo.CourseParticipantsRepository(CourseParticipants) is_in_joined_courses = cpr.is_quiz_in_joined_active_courses(pk, request.user.id) if not is_in_joined_courses: raise Http404 solve_info_id = qsrr.get_solve_info_id(pk, request.user.id) if solve_info_id != 0: grammarChecker_ru = checkerop.GrammarChecker('ru') grammarChecker_en = checkerop.GrammarChecker('en') student_answers = request.POST['data'] student_answers = json.loads(student_answers) quiz_data = helper.construct_main(pk) is_fully_checked = True points = 0 solve_info_id = int(solve_info_id) sar = repo.StudentAnswersRepository(StudentAnswers) soar = repo.StudentOpenAnswersRepository(StudentOpenAnswers) sgar = repo.StudentGrammarAnswersRepository(StudentGrammarAnswers) lang_id = -1 grammarChecker = -1 gqsr = -1 for i in range(1, len(student_answers)): if i != 0: #name = question_id #value = answer_id or answer to open question key = int(student_answers[i]['name']) #check if question_id belongs to quiz if key in quiz_data.keys(): if quiz_data[key]['qtype'] != 'open' and quiz_data[key]['qtype'] != 'compare' and quiz_data[key]['qtype'] != 'grammar': #check if answer_id belongs to question answer_id = int(student_answers[i]['value']) if answer_id in quiz_data[key]['answers'].keys(): points += float(quiz_data[key]['answers'][answer_id]) #create record sar.save_answer(solve_info_id, key, answer_id) else: answer = student_answers[i]['value'] if quiz_data[key]['qtype'] == 'open': is_fully_checked = False soar.save_answer(solve_info_id, key, answer, 0) if(len(answer)): if quiz_data[key]['qtype'] == 'compare': points_compare = helper.check_student_compare_answer(key, str(answer)) points += points_compare #save answer + compare algorithm = points soar.save_answer(solve_info_id, key, answer, points_compare) if quiz_data[key]['qtype'] == 'grammar': gqsr = repo.GrammarQuestionSanctionsRepository(GrammarQuestionSanctions) lang_id = gqsr.get_language(key) if lang_id != -1: langRepo = repo.LanguagesRepository(Languages) lang = langRepo.get_abr_by_id(lang_id) ''' if grammarChecker != -1: if grammarChecker.lang != lang: grammarChecker = checkerop.GrammarChecker(lang) else: grammarChecker = checkerop.GrammarChecker(lang) ''' if lang == 'ru': grammarChecker = grammarChecker_ru else: grammarChecker = grammarChecker_en if lang_id != -1 and grammarChecker != -1 and gqsr != -1: question_sanctions = gqsr.form_error_sanction_dict(key) struct, corrected_sents, points_gra = helper.check_student_grammar_answer(key, str(answer), question_sanctions, grammarChecker) sgar.save_answer(solve_info_id, key, answer, points_gra, corrected_sents, struct) grammarChecker.reset() qsrr.finish_quiz(pk, request.user.id, points, is_fully_checked) qr = repo.QuizRepository(Quiz) course_id = qr.get_course_id(pk) return JsonResponse({ 'success': True, 'url': reverse('students:view_course_active_quizzes', kwargs={'pk': course_id}), #, args=[{'courses': courses}] }) raise Http404