コード例 #1
0
        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));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        /// <summary>
        /// Метод перехода к следующему вопросу
        /// </summary>
        public void NextQuestion()
        {
            if (_currentQuestion == null)
            {
                return;
            }
            // если вопрос последний , то переходить некуда
            if (IsLast)
            {
                return;
            }

            var next = _questions.IndexOf(_currentQuestion) + 1;

            _currentQuestion = _questions[next];
        }
コード例 #4
0
        /// <summary>
        /// Метод перехода к предыдущему вопросу
        /// </summary>
        public void PrevQuestion()
        {
            if (_currentQuestion == null)
            {
                return;
            }
            // если вопрос первый , то переходить некуда
            if (IsFirst)
            {
                return;
            }

            var next = _questions.IndexOf(_currentQuestion) - 1;

            _currentQuestion = _questions[next];
        }
コード例 #5
0
        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));
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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());
        }
コード例 #8
0
        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));
        }
コード例 #9
0
        /// <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();
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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 }));
        }