Ejemplo n.º 1
0
        public new void Update(ExamCore editedExam)
        {
            var questionsToRemove = getQuestionsToRemove(editedExam).ToList();
            var questionsToEdit   = getQuestionsToEdit(editedExam).ToList();
            var questionsToAdd    = getQuestionsToAdd(editedExam).ToList();

            _context.Questions.RemoveRange(questionsToRemove);

            foreach (var questionToAdd in questionsToAdd)
            {
                AddQuestionToExam(editedExam, questionToAdd);
            }

            foreach (var questionToEdit in questionsToEdit)
            {
                var answersToRemove = getAnswersToRemove(questionToEdit).ToList();
                var answersToEdit   = getAnswersToEdit(questionToEdit).ToList();
                var answersToAdd    = getAnswersToAdd(questionToEdit).ToList();
                _context.Answer.RemoveRange(answersToRemove);

                foreach (var answerToAdd in answersToAdd)
                {
                    _questionService.AddAnswerToQuestion(questionToEdit, answerToAdd);
                }

                foreach (var answerToEdit in answersToEdit)
                {
                    _answerService.Update(answerToEdit);
                }
                _questionService.Update(questionToEdit);
            }
            _context.Exams.AddOrUpdate(editedExam);
            _context.SaveChanges();
        }
Ejemplo n.º 2
0
        public ActionResult SaveAsyncQuestion(string examID, string questionID, AsyncEditedDataViewModel questionData, List <AsyncEditedDataViewModel> answersData)
        {
            if (int.TryParse(questionID, out int questionIntID))
            {
                var editedQuestion = _questionService.GetByID(questionIntID);
                if (questionData != null && questionData.oldValue != null && questionData.newValue != null)
                {
                    editedQuestion.QuestionText = questionData.newValue;
                }

                if (questionData != null && questionData.secondNewValue != null && questionData.secondNewValue == "true")
                {
                    _questionService.Delete(editedQuestion);
                    return(Json(
                               new
                    {
                        success = true,
                        responseText = "Question has been successfuly deleted!",
                        deleted = true
                    }, JsonRequestBehavior.AllowGet));
                }
                var editedAnswers = new List <Answer>();
                var addedAnswers  = new List <Answer>();
                if (answersData != null && answersData.Any())
                {
                    foreach (var answerData in answersData)
                    {
                        var editedAnswer = editedQuestion.Answers.Where(x => x.TextAnswer == answerData.oldValue).FirstOrDefault();

                        if (editedAnswer != null)
                        {
                            editedAnswer.TextAnswer = answerData.newValue;
                            editedAnswer.IfCorrect  = answerData.secondNewValue == "true" ? true : false;
                            editedAnswers.Add(editedAnswer);
                        }
                        else
                        {
                            var addedAnswer = new Answer()
                            {
                                IfCorrect  = answerData.secondNewValue == "true" ? true : false,
                                TextAnswer = answerData.newValue
                            };
                            _questionService.AddAnswerToQuestion(questionIntID, addedAnswer);
                            addedAnswers.Add(addedAnswer);
                        }
                    }

                    var allAnswers     = _questionService.GetByID(questionIntID).Answers.ToList();
                    var deletedAnswers = allAnswers.Except(editedAnswers).ToList();
                    deletedAnswers = deletedAnswers.Except(addedAnswers).ToList();

                    foreach (var deletedAnswerr in deletedAnswers)
                    {
                        _answerService.Delete(deletedAnswerr.Id);
                    }
                    _questionService.Update(editedQuestion);
                }

                var returnedAnswers = editedAnswers.ToList();
                if (addedAnswers.Any())
                {
                    returnedAnswers = returnedAnswers.Concat(addedAnswers.ToList()).ToList();
                }
                return(Json(
                           new
                {
                    success = true,
                    responseText = "Questions have been successfuly updated!",
                    data = returnedAnswers.Select(x => new
                    {
                        TextAnswer = x.TextAnswer,
                        IfCorrect = x.IfCorrect
                    }).ToList(),
                    newQuestionID = editedQuestion.Id
                }, JsonRequestBehavior.AllowGet));
            }
            else
            {
                if (int.TryParse(examID, out int examIntID))
                {
                    var editedQuestion = new Question();
                    if (questionData != null && questionData.newValue != null)
                    {
                        editedQuestion.QuestionText = questionData.newValue;
                        _examCoreService.AddQuestionToExam(examIntID, editedQuestion);
                    }
                    if (answersData != null && answersData.Any())
                    {
                        foreach (var answerData in answersData)
                        {
                            var addedAnswer = new Answer()
                            {
                                IfCorrect  = answerData.secondNewValue == "true" ? true : false,
                                TextAnswer = answerData.newValue
                            };
                            _questionService.AddAnswerToQuestion(editedQuestion.Id, addedAnswer);
                        }
                    }
                    return(Json(
                               new
                    {
                        success = true,
                        responseText = "Questions have been successfuly updated!",
                        data = _questionService.GetByID(editedQuestion.Id).Answers.Select(x => new
                        {
                            TextAnswer = x.TextAnswer,
                            IfCorrect = x.IfCorrect
                        }).ToList(),
                        newQuestionID = editedQuestion.Id
                    }, JsonRequestBehavior.AllowGet));
                }
            }
            return(Json(new { success = false, responseText = "Error during updating questions." }, JsonRequestBehavior.AllowGet));
        }