public async Task <IActionResult> Edit(int id) { var testQuestion = await _db.TestQuestions.FindAsync(id); if (testQuestion == null) { return(RedirectToAction("Tests", "Admin")); } var testAnswers = await _db.TestAnswers .Where(ta => ta.TestQuestionId == id) .ToListAsync(); var questionModel = new TestQuestionViewModel { TestQuestion = testQuestion, TestAnswers = testAnswers, QuestionNumber = await GetQuestionNumber(testQuestion.TestId, testQuestion.Id), Image = testQuestion.Image }; questionModel.TestQuestion.TestAnswers = new List <TestAnswer>(); return(View(questionModel)); }
public IActionResult PassTestQuestion(int id, int questionOrderId = 0) { System.Security.Claims.ClaimsPrincipal currentUser = this.User; string userId = userIdenityManager.GetUserId(currentUser); bool isNotAccessDenied = testResultManager.CheckIfTestForUserId(id, userId); if (!isNotAccessDenied) { return(View("AccessDenied")); } bool toFinishTest = testResultManager.CheckTestResultIsClosed(id); if (toFinishTest) { testResultManager.FinishTestResult(id); return(RedirectToAction("ShowResult", new { @id = id })); } GivenQuestionDTO model = testResultManager.GetGivenQuestionByTestIdAndQuestionOrderId(id, questionOrderId); int questionsCount = testResultManager.GetByID(model.TestResultId).Questions.Count; PrepareQuestionTextAndAnswers(model.Question); TestQuestionViewModel testQuestion = new TestQuestionViewModel { Question = model, CurrentQuestionOrder = questionOrderId, QuestionsCount = questionsCount, GivenAnswers = testResultManager.GetGivenAnswers(id), MaxTimeEnd = testResultManager.GetMaxTimeEnd(id) }; return(View(testQuestion)); }
/// <summary> /// Метод перехода к следующему вопросу /// </summary> public void NextQuestion() { if (_currentQuestion == null) { return; } // если вопрос последний , то переходить некуда if (IsLast) { return; } var next = _questions.IndexOf(_currentQuestion) + 1; _currentQuestion = _questions[next]; }
/// <summary> /// Метод перехода к предыдущему вопросу /// </summary> public void PrevQuestion() { if (_currentQuestion == null) { return; } // если вопрос первый , то переходить некуда if (IsFirst) { return; } var next = _questions.IndexOf(_currentQuestion) - 1; _currentQuestion = _questions[next]; }
public IActionResult Question(int id, int TestId) { TestQuestionViewModel model = new TestQuestionViewModel(); DbfunctionUtility dbfunction = new DbfunctionUtility(_appSettings); TestUtility _testUtility = new TestUtility(_appSettings, _dbContext); var checkUserTest = _dbContext.tbl_UserTests.Where(w => w.UserId == UserId && w.TestId == TestId && w.IsReset == false).FirstOrDefault(); if (checkUserTest == null) { var sNo = 0; var questionList = _dbContext.tbl_Questions.Select(s => new TestQuestionViewModel { QuestionId = s.Id, Question = s.Question, Choice1 = s.Choice1, Choice2 = s.Choice2, Choice3 = s.Choice3, Choice4 = s.Choice4, Choice5 = s.Choice5, Answer = s.Answer, }).ToList(); foreach (var item in questionList) { item.SeqNo = ++sNo; } model = questionList.FirstOrDefault(); model.SeqNo = 1; model.TestId = TestId; } else { var questionList = _testUtility.GetUserQuestions(UserId, TestId); model = questionList.Where(w => w.SeqNo == id).FirstOrDefault(); model.TestId = TestId; model.MaxSequenceId = questionList.LastOrDefault().SeqNo; model.MinSequenceId = questionList.FirstOrDefault().SeqNo; } model.TestName = _dbContext.tbl_Tests.Where(w => w.Id == TestId).Select(s => s.Name).FirstOrDefault(); return(View(model)); }
private async Task <int> AddTestQuestion(TestQuestionViewModel questionModel) { var testQuestion = questionModel.TestQuestion; testQuestion.Image = questionModel.Image; if (!questionModel.IsNewTest) { await ResetLastQuestion(questionModel.TestQuestion.TestId); testQuestion.IsLastQuestion = true; } var result = await _db.TestQuestions.AddAsync(testQuestion); await _db.SaveChangesAsync(); return(result.Entity.Id); }
public async Task <IActionResult> CreateTestQuestion(TestQuestionViewModel questionModel) { if (!await _accessManager.HasAdminAccess(questionModel.UserId)) { return(Forbid()); } var testQuestionId = await AddTestQuestion(questionModel); var correctAnswerId = await AddTestQuestionAnswers(testQuestionId, questionModel.TestAnswers); var testQuestion = await _db.TestQuestions.FindAsync(testQuestionId); testQuestion.CorrectAnswerId = correctAnswerId; _db.Entry(testQuestion).State = EntityState.Modified; await _db.SaveChangesAsync(); return(Ok()); }
public async Task <IActionResult> Create(int testId, bool isNewTest) { var testQuestion = new TestQuestion { TestId = testId, TestQuestionType = TestQuestionType.FreeAnswer }; var testAnswers = new List <TestAnswer> { new TestAnswer() }; var questionModel = new TestQuestionViewModel { TestQuestion = testQuestion, TestAnswers = testAnswers, QuestionNumber = await GetQuestionNumber(testId), IsNewTest = isNewTest }; return(View(questionModel)); }
/// <summary> /// Метод для загрузки списка вопросов текущего теста /// </summary> /// <remarks> /// На данный момент тест один /// </remarks> /// <param name="testId">Идентификатор теста</param> public void LoadTest(int?testId = null) { // Загрузка данных из бд var testParts = _testService.Get(); // Преобразование моделей базы данных в модели представления _questions = testParts.Select(tp => new TestQuestionViewModel() { Seq = testParts.IndexOf(tp) + 1, Content = tp.Image, CorrectAnswer = tp.CorrectAnswer, Answers = tp.Answers.Select(ta => new AnswerViewModel() { Seq = ta.AnswerNumber, Text = ta.Text }).ToList() }).ToList(); // Текущим вопросом устанавливается первый из загруженного списка _currentQuestion = _questions.FirstOrDefault(); }
public async Task <bool> EditTestQuestion(TestQuestionViewModel questionModel) { if (!await _accessManager.HasAdminAccess(questionModel.UserId)) { return(false); } await EditTestQuestionAnswers(questionModel.TestQuestion.Id, questionModel.TestAnswers); await EditTestQuestion(questionModel.TestQuestion, questionModel.Image); var testQuestions = await _db.TestQuestions .Where(tq => tq.TestId == questionModel.TestQuestion.TestId) .ToListAsync(); var lastQuestion = testQuestions.Last(); lastQuestion.IsLastQuestion = true; _db.Entry(lastQuestion).State = EntityState.Modified; await _db.SaveChangesAsync(); return(true); }
public IActionResult Question(TestQuestionViewModel model, string submit) { int TestId = model.TestId; DbfunctionUtility dbfunction = new DbfunctionUtility(_appSettings); TestUtility _testUtility = new TestUtility(_appSettings, _dbContext); var checkUserTest = _dbContext.tbl_UserTests.Where(w => w.UserId == UserId && w.TestId == TestId && w.IsReset == false).FirstOrDefault(); if (submit == "Save") { var checkAnswer = _dbContext.tbl_UserTestAnswers.Where(w => w.UserTestId == checkUserTest.Id && w.QuestionId == model.QuestionId).FirstOrDefault(); if (checkAnswer == null) { UserTestAnswer userTestAnswer = new UserTestAnswer() { QuestionId = model.QuestionId, UserTestId = checkUserTest.Id, UserSelected = model.UserAnswer, IsRight = (model.Answer == model.UserAnswer ? true : false) }; _dbContext.tbl_UserTestAnswers.Add(userTestAnswer); _dbContext.SaveChanges(); checkUserTest.QuestionsAttend = checkUserTest.QuestionsAttend + 1; checkUserTest.QuestionsRight = checkUserTest.QuestionsRight + (userTestAnswer.IsRight ? 1 : 0); _dbContext.SaveChanges(); } else { if (checkAnswer.IsRight == true && (model.Answer != model.UserAnswer)) { checkUserTest.QuestionsRight = checkUserTest.QuestionsRight - 1; } else if (checkAnswer.IsRight == false && (model.Answer == model.UserAnswer)) { checkUserTest.QuestionsRight = checkUserTest.QuestionsRight + 1; } _dbContext.SaveChanges(); checkAnswer.UserSelected = model.UserAnswer; checkAnswer.IsRight = (model.Answer == model.UserAnswer ? true : false); _dbContext.SaveChanges(); } var questionList = _testUtility.GetUserQuestions(UserId, TestId); if (model.SeqNo != model.MaxSequenceId) { model = questionList.Where(w => w.SeqNo == model.SeqNo + 1).FirstOrDefault(); model.MaxSequenceId = questionList.LastOrDefault().SeqNo; model.MinSequenceId = questionList.FirstOrDefault().SeqNo; } } if (submit == "Previous") { var questionList = _testUtility.GetUserQuestions(UserId, TestId); model = questionList.Where(w => w.SeqNo == model.SeqNo - 1).FirstOrDefault(); model.MaxSequenceId = questionList.LastOrDefault().SeqNo; model.MinSequenceId = questionList.FirstOrDefault().SeqNo; } if (submit == "Next") { var questionList = _testUtility.GetUserQuestions(UserId, TestId); model = questionList.Where(w => w.SeqNo == model.SeqNo + 1).FirstOrDefault(); model.MaxSequenceId = questionList.LastOrDefault().SeqNo; model.MinSequenceId = questionList.FirstOrDefault().SeqNo; } if (submit == "Finish") { checkUserTest.IsLocked = true; checkUserTest.EndDate = DateTime.Now; _dbContext.SaveChanges(); return(RedirectToAction("Exam", "Attendant")); } return(RedirectToAction("Question", new { id = model.SeqNo, TestId = TestId })); }