Example #1
0
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
Example #2
0
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})
Example #3
0
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})
Example #4
0
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
Example #5
0
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
Example #6
0
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
Example #7
0
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
Example #8
0
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})
Example #9
0
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
Example #10
0
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