public async Task <IActionResult> Attempt(int?id)
        {
            if (id == null)
            {
                NotFound();
            }

            var viewModel = new ExamAttemptViewModel
            {
                Exam              = await _context.Exams.Include(e => e.Questions).ThenInclude(q => q.Question).ThenInclude(q => q.Answers).FirstOrDefaultAsync(e => e.ExamId == id),
                ExamId            = (int)id,
                User              = await _userManager.FindByIdAsync(_userManager.GetUserId(User)),
                UserId            = _userManager.GetUserId(User),
                ParticipationDate = DateTime.Now
            };

            var questions = new List <ExamQuestionViewModel>();

            foreach (ExamQuestion question in viewModel.Exam.Questions)
            {
                var questionVM = new ExamQuestionViewModel
                {
                    QuestionId   = question.Question.QuestionId,
                    Text         = question.Question.Text,
                    QuestionType = question.Question.QuestionType
                };

                var answers = new List <ExamAnswerViewModel>();
                foreach (Answer answer in question.Question.Answers)
                {
                    var answerVM = new ExamAnswerViewModel
                    {
                        Text     = answer.Text,
                        AnswerId = answer.AnswerId
                    };
                    answers.Add(answerVM);
                }

                questionVM.Answers = answers;

                questions.Add(questionVM);
            }

            viewModel.Questions = questions;

            if (viewModel == null)
            {
                return(NotFound());
            }

            return(View(viewModel));
        }
        //Add a StudentExamAnswer
        public IActionResult Answer(int id)
        {
            try
            {
                int?studentExamId = (int)TempData["studentExamId"];

                StudentExam studentExam = _studentExamManager.Get(studentExamId);
                Question    question    = studentExam.Exam.ExamQuestions.ElementAt(id - 1);

                ExamQuestionViewModel examQuestionViewModel = NewExamQuestionViewModel(studentExam, question, id);


                //Checking which type of question it is
                if (question is QuestionOpen)
                {
                    examQuestionViewModel.QuestionOpen = _questionManager.GetOpen(question.Id);
                    StudentExamAnswerOpen studentExamAnswerOpen = _studentExamAnswerManager.GetByStudentExamAndQuestionOpen(studentExam.Id, question.Id);
                    if (studentExamAnswerOpen != null)
                    {
                        examQuestionViewModel.Answer = studentExamAnswerOpen.Answer;
                    }
                }
                else if (question is QuestionMultipleChoice)
                {
                    examQuestionViewModel.QuestionMultipleChoice = _questionManager.GetMultipleChoice(question.Id);
                    StudentExamAnswerMultipleChoice studentExamAnswer = _studentExamAnswerManager.GetByStudentExamAndQuestionMultiple(studentExam.Id, question.Id);
                    if (studentExamAnswer != null)
                    {
                        List <int> answers = new List <int>();
                        answers.Add(studentExamAnswer.Answer.Id);
                        examQuestionViewModel.Answers = answers;
                    }
                }
                else
                {
                    return(NotFound());
                }

                TempData["studentExamId"] = studentExam.Id;
                return(View(examQuestionViewModel));
            }
            catch (Exception)
            {
                return(NotFound());
            }
        }
Exemple #3
0
        /// <summary>
        /// Add Questions for Exam. We are adding questions for each exam
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        // GET: Admin/ExamQuestions/AddQuestions/5
        public async Task <ActionResult> AddQuestions(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var exam = await _examservice.GetByIdAsync(Convert.ToInt32(id));

            if (exam == null)
            {
                return(RedirectToRoute(new { controller = "Exams", action = "Index", area = "Admin" }));
            }
            ExamQuestionViewModel examQuestionViewModel = new ExamQuestionViewModel();

            examQuestionViewModel.ExamId   = exam.Id;
            examQuestionViewModel.ExamName = exam.Name;
            return(View(examQuestionViewModel));
        }
        // GET: ExamQuestions
        // Listing all the Questions related to a studentExam and providing the possibility to answer
        public IActionResult Index(int?pageNumber)
        {
            try
            {
                int?studentExamId = (int)TempData["studentExamId"];

                StudentExam studentExam = _studentExamManager.Get(studentExamId);
                List <ExamQuestionViewModel> examQuestionViewModels = new List <ExamQuestionViewModel>();
                int i = 0;
                foreach (Question q in studentExam.Exam.ExamQuestions)
                {
                    i++;
                    ExamQuestionViewModel examQuestionViewModel = NewExamQuestionViewModel(studentExam, q, i);

                    foreach (StudentExamAnswer a in examQuestionViewModel.StudentExam.StudentExamAnswers)
                    {
                        //Setting Question answered true if has exists
                        if (a.Question.Id == q.Id)
                        {
                            examQuestionViewModel.Answered = true;
                            break;
                        }
                        else
                        {
                            examQuestionViewModel.Answered = false;
                        }
                    }


                    examQuestionViewModels.Add(examQuestionViewModel);
                }

                TempData["studentExamId"] = studentExam.Id;
                int pageSize = 8;
                return(View(PaginatedList <ExamQuestionViewModel> .Create(examQuestionViewModels, pageNumber ?? 1, pageSize)));
            }
            catch (Exception)
            {
                return(NotFound());
            }
        }
Exemple #5
0
        public ActionResult Details(int id)
        {
            if (id == 0)
            {
                return(HttpNotFound());
            }

            Question question = _questionService.Get(id);

            if (question == null)
            {
                return(HttpNotFound());
            }

            var viewModel = new ExamQuestionViewModel()
            {
                Question = question
            };

            return(View("Details", viewModel));
        }
        public IActionResult Answer(int id, string submit, [Bind("Question,Answer,Answers")] ExamQuestionViewModel examQuestionViewModel)
        {
            try
            {
                int studentExamId = (int)TempData["studentExamId"];

                StudentExam studentExam = _studentExamManager.Get(studentExamId);
                Question    question    = studentExam.Exam.ExamQuestions.ElementAt(id - 1);

                //Checking which type of question it is
                if (question is QuestionOpen)
                {
                    StudentExamAnswerOpen so = _studentExamAnswerManager.GetByStudentExamAndQuestionOpen(studentExamId, question.Id);
                    StudentExamAnswerOpen studentExamAnswerOpen =
                        new StudentExamAnswerOpen(
                            _questionManager.GetOpen(question.Id),
                            studentExam,
                            examQuestionViewModel.Answer
                            );
                    if (so == null)
                    {
                        _studentExamAnswerManager.Add(studentExamAnswerOpen);
                    }
                    else
                    {
                        _studentExamAnswerManager.UpdateOpen(studentExamAnswerOpen, so);
                    }
                }
                else if (question is QuestionMultipleChoice)
                {
                    StudentExamAnswerMultipleChoice sc = _studentExamAnswerManager.GetByStudentExamAndQuestionMultiple(studentExamId, question.Id);

                    StudentExamAnswerMultipleChoice studentExamAnswerMultipleChoice =
                        new StudentExamAnswerMultipleChoice(
                            _questionManager.GetMultipleChoice(question.Id),
                            studentExam,
                            _answerMultipleChoiceManager.Get(examQuestionViewModel.Answers.FirstOrDefault())
                            );

                    if (sc == null)
                    {
                        _studentExamAnswerManager.Add(studentExamAnswerMultipleChoice);
                    }
                    else
                    {
                        _studentExamAnswerManager.UpdateMultiple(studentExamAnswerMultipleChoice, sc);
                    }
                }
                else
                {
                    return(NotFound());
                }

                TempData["studentExamId"] = studentExam.Id;

                //Checking which type of submit button is used
                switch (submit)
                {
                case "Save and back to list":
                    return(RedirectToAction(nameof(Index)));

                case "Next":
                    int increase = id + 1;
                    return(RedirectToAction("Answer", "ExamQuestion", new { id = increase }));

                case "Previous":
                    int decrease = id - 1;
                    return(RedirectToAction("Answer", "ExamQuestion", new { id = decrease }));

                default:
                    return(NotFound());
                }
            }
            catch (Exception)
            {
                return(NotFound());
            }
        }