Esempio n. 1
0
 public ActionResult GetQuestionTypes()
 {
     using (var context = new eQuizEntities(System.Configuration.ConfigurationManager.ConnectionStrings["eQuizDB"].ConnectionString))
     {
         var typesList = context.QuestionTypes.OrderBy(x => x.TypeName).ToList();
         return(Json(typesList, JsonRequestBehavior.AllowGet));
     }
 }
 public ActionResult Get()
 {
     UserGroup[] groups = null;
     using (eQuizEntities model = new eQuizEntities(System.Configuration.ConfigurationManager.ConnectionStrings["eQuizDB"].ConnectionString))
     {
         groups = model.UserGroups.ToArray();
         return(Json(groups, JsonRequestBehavior.AllowGet));
     }
 }
Esempio n. 3
0
        public ActionResult GetQuizzesPage(int currentPage = 1, int quizzesPerPage = 3, string predicate = "Name", bool reverse = false)
        {
            IEnumerable <QuizListModel> quizzesList = null;
            var quizzesTotal = 0;

            using (var context = new eQuizEntities(System.Configuration.ConfigurationManager.ConnectionStrings["eQuizDB"].ConnectionString))
            {
                quizzesList = context.Quizs.Join(context.QuizBlocks,
                                                 quiz => quiz.Id,
                                                 quizBlock => quizBlock.QuizId,
                                                 (quiz, quizBlock) =>
                                                 new QuizListModel
                {
                    Id               = quiz.Id,
                    Name             = quiz.Name,
                    CountOfQuestions = quizBlock.QuestionCount,
                    StartDate        = quiz.StartDate,
                    Duration         = quiz.TimeLimitMinutes,
                    Active           = false
                }).OrderBy(q => q.Name);

                quizzesTotal = quizzesList.Count();

                switch (predicate)
                {
                case "Name":
                    quizzesList = reverse ? quizzesList.OrderByDescending(q => q.Name) : quizzesList.OrderBy(q => q.Name);
                    break;

                case "CountOfQuestions":
                    quizzesList = reverse ? quizzesList.OrderByDescending(q => q.CountOfQuestions) : quizzesList.OrderBy(q => q.CountOfQuestions);
                    break;

                case "StartDate":
                    quizzesList = reverse ? quizzesList.OrderByDescending(q => q.StartDate) : quizzesList.OrderBy(q => q.StartDate);
                    break;

                case "Active":
                    quizzesList = reverse ? quizzesList.OrderByDescending(q => q.Active) : quizzesList.OrderBy(q => q.Active);
                    break;

                case "Duration":
                    quizzesList = reverse ? quizzesList.OrderByDescending(q => q.Duration) : quizzesList.OrderBy(q => q.Duration);
                    break;

                default:
                    quizzesList = reverse ? quizzesList.OrderByDescending(q => q.Name) : quizzesList.OrderBy(q => q.Name);
                    break;
                }

                quizzesList = quizzesList.Skip((currentPage - 1) * quizzesPerPage).Take(quizzesPerPage).ToList();
            }
            return(Json(new { Quizzes = quizzesList, QuizzesTotal = quizzesTotal }, JsonRequestBehavior.AllowGet));
        }
Esempio n. 4
0
        public ActionResult Get(int id)
        {
            List <Question> questions             = new List <Question>();
            List <List <QuestionAnswer> > answers = null;
            List <List <Tag> >            tags    = null;
            int quizId = 0;

            using (var context = new eQuizEntities(System.Configuration.ConfigurationManager.ConnectionStrings["eQuizDB"].ConnectionString))
            {
                var quiz = context.Quizs.Where(x => x.Id == id).FirstOrDefault();  //check if exists

                if (quiz == null)
                {
                    return(new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Quiz is not found"));
                }
                quizId = quiz.Id;
                var quizBlockIds = context.QuizBlocks.Where(b => b.QuizId == quizId).Select(b => b.Id).ToList();
                var quizQuestios = context.QuizQuestions.Where(x => quizBlockIds.Contains(x.QuizBlockId)).OrderBy(x => x.QuestionOrder).ToList();

                foreach (var quizQuestion in quizQuestios)
                {
                    questions.Add(context.Questions.Where(q => q.Id == quizQuestion.QuestionId).Include(q => q.QuestionAnswers).Include(q => q.QuestionTags).First());
                }

                answers = new List <List <QuestionAnswer> >();
                foreach (var item in questions)
                {
                    answers.Add(item.QuestionAnswers.ToList());
                }

                tags = new List <List <Tag> >();
                foreach (var item in questions)
                {
                    var questionTags = context.QuestionTags.Where(x => x.QuestionId == item.Id).Include("Tag").ToList();

                    var tagStorage = new List <Tag>();
                    foreach (var tag in questionTags)
                    {
                        tagStorage.Add(tag.Tag);
                    }
                    tags.Add(tagStorage);
                }
            }

            var data = JsonConvert.SerializeObject(new { questions = questions, answers = answers, id = quizId, tags = tags }, Formatting.None,
                                                   new JsonSerializerSettings()
            {
                ReferenceLoopHandling = ReferenceLoopHandling.Ignore
            });

            return(Content(data, "application/json"));
        }
        public IEnumerable <QuestionAnswer> GetAllQuestionAnswers()
        {
            List <QuestionAnswer> result;

            using (var context = new eQuizEntities())
            {
                context.Configuration.ProxyCreationEnabled = false;

                var query = from question in context.QuestionAnswers
                            select question;

                result = query.ToList();
            }

            return(result);
        }
        public IEnumerable <QuizVariant> GetAllVariants()
        {
            List <QuizVariant> result;

            using (var context = new eQuizEntities())
            {
                //context.Configuration.ProxyCreationEnabled = false;

                var query = from variant in context.QuizVariants
                            select variant;

                result = query.ToList();
            }

            return(result);
        }
Esempio n. 7
0
        public ActionResult Save(int id, Question[] questions, QuestionAnswer[][] answers, Tag[][] tags)
        {
            if (questions == null)
            {
                return(new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Can not save quiz without question."));
            }
            using (var context = new eQuizEntities(System.Configuration.ConfigurationManager.ConnectionStrings["eQuizDB"].ConnectionString))
            {
                var topicId       = context.Topics.First().Id;
                var quizVariantId = 1; /*context.QuizVariants.First(x => x.QuizId == id).Id;*/ //we don't have fk on tblQuiz
                var blockId       = context.QuizBlocks.First(x => x.QuizId == id).Id;
                var newQuestions  = questions.Where(q => q.Id == 0).ToList();

                for (int i = 0; i < questions.Length; i++)
                {
                    var question = questions[i];

                    if (question.Id != 0)
                    {
                        var existedQuestion = context.Questions.FirstOrDefault(x => x.Id == question.Id);
                        if (existedQuestion == null)
                        {
                            return(new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Question is not found"));
                        }
                        existedQuestion.IsActive           = question.IsActive;
                        existedQuestion.QuestionComplexity = question.QuestionComplexity;
                        existedQuestion.QuestionText       = question.QuestionText;
                        existedQuestion.QuestionTypeId     = question.QuestionTypeId;
                    }
                    else
                    {
                        question.TopicId  = topicId;
                        question.IsActive = true;
                        context.Questions.Add(question);
                    }
                }
                context.SaveChanges();

                for (int i = 0; i < questions.Length; i++)
                {
                    var question = questions[i];

                    if (newQuestions.Contains(question))
                    {
                        var quizQuestion = new QuizQuestion
                        {
                            QuestionId    = question.Id,
                            QuizVariantId = quizVariantId,
                            QuestionOrder = (short)(i + 1),
                            QuizBlockId   = blockId
                        };
                        context.QuizQuestions.Add(quizQuestion);
                    }
                }
                //for delete answer
                for (int i = 0; i < answers.Length; i++)
                {
                    var questionId     = questions[i].Id;
                    var questionAnswer = context.Questions.Include("QuestionAnswers").FirstOrDefault(y => y.Id == questionId).QuestionAnswers.ToList();

                    if (answers[i][0] != null)
                    {
                        for (var qa = 0; qa < answers[i].Length; qa++)
                        {
                            var answer = answers[i][qa];

                            if (answer.Id != 0)
                            {
                                var existedAnswer = context.QuestionAnswers.FirstOrDefault(x => x.Id == answer.Id);

                                if (existedAnswer == null)
                                {
                                    return(new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Answer is not found"));
                                }

                                if (questionAnswer.Contains(existedAnswer))
                                {
                                    questionAnswer.Remove(existedAnswer);
                                }
                                //existedAnswer.AnswerOrder = answer.AnswerOrder;
                                //existedAnswer.AnswerText = answer.AnswerText;
                                //existedAnswer.IsRight = answer.IsRight;
                                existedAnswer.QuestionId = answer.QuestionId;
                            }
                            else
                            {
                                //answer.AnswerOrder = (byte)(qa + 1);
                                answer.QuestionId = questions[i].Id;
                                context.QuestionAnswers.Add(answer);
                            }
                        }
                        if (questionAnswer != null)
                        {
                            foreach (var item in questionAnswer)
                            {
                                context.QuestionAnswers.Remove(item);//todo
                            }
                        }
                    }
                    //todo doesn't delete tags

                    if (tags[i][0] != null)
                    {
                        for (int qt = 0; qt < tags[i].Length; qt++)
                        {
                            var tag = tags[i][qt];

                            var existedTag = context.Tags.FirstOrDefault(x => x.Name == tag.Name);

                            var question = context.Questions.FirstOrDefault(x => x.Id == questionId);

                            if (existedTag == null)
                            {
                                context.Tags.Add(tag);
                                question.QuestionTags.Add(new QuestionTag
                                {
                                    Tag = tag
                                });
                            }
                        }
                    }
                }
                context.SaveChanges();
            }
            return(RedirectToAction("Get", new { id = id }));
        }
Esempio n. 8
0
        public ActionResult Save(int id, Question[] questions, Answer[][] answers, Tag[][] tags, int[] questionScores)
        {
            using (var context = new eQuizEntities(System.Configuration.ConfigurationManager.ConnectionStrings["eQuizDB"].ConnectionString))
            {
                var quiz      = context.Quizs.FirstOrDefault(x => x.Id == id);
                var quizState = context.QuizStates.FirstOrDefault(state => state.Id == quiz.QuizStateId).Name;
                var quizBlock = context.QuizBlocks.First(x => x.QuizId == id);
                if (questions == null && answers == null && tags == null && quizState == "Draft")
                {
                    return(RedirectToAction("Get", new { id = id }));
                }

                IEnumerable <string> errors = QuestionsValidate(id, questions, answers, tags, questionScores);
                if (errors != null)
                {
                    string mergedErrors = string.Join(". ", errors.ToArray());
                    return(new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, mergedErrors));
                }

                if (quizBlock.QuestionCount != questions.Length && quizState != "Draft")
                {
                    return(new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Not enough question had created."));
                }
                var topicId       = context.Topics.First().Id;
                var quizVariantId = _repository.GetSingle <QuizVariant>(x => x.QuizId == id).Id;
                var blockId       = quizBlock.Id;
                var newQuestions  = questions.Where(q => q.Id == 0).ToList();

                DeleteQuestions(id, questions);

                for (int i = 0; i < questions.Length; i++)
                {
                    var question = questions[i];

                    if (question.Id != 0)
                    {
                        var existedQuestion = context.Questions.FirstOrDefault(x => x.Id == question.Id);
                        if (existedQuestion == null)
                        {
                            return(new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Question is not found"));
                        }

                        var existedQuizQuestion = context.QuizQuestions.FirstOrDefault(x => x.QuestionId == existedQuestion.Id);
                        existedQuizQuestion.QuestionScore = (byte)questionScores[i];

                        existedQuestion.IsActive           = question.IsActive;
                        existedQuestion.QuestionComplexity = question.QuestionComplexity;
                        existedQuestion.QuestionText       = question.QuestionText;
                        existedQuestion.QuestionTypeId     = question.QuestionTypeId;
                    }
                    else
                    {
                        question.TopicId  = topicId;
                        question.IsActive = true;
                        context.Questions.Add(question);
                    }
                }
                context.SaveChanges();

                for (int i = 0; i < questions.Length; i++)
                {
                    var question = questions[i];

                    if (newQuestions.Contains(question))
                    {
                        var quizQuestion = new QuizQuestion
                        {
                            QuestionId    = question.Id,
                            QuizVariantId = quizVariantId,
                            QuestionOrder = (short)(i + 1),
                            QuizBlockId   = blockId,
                            QuestionScore = (byte)questionScores[i]
                        };
                        context.QuizQuestions.Add(quizQuestion);
                    }
                }
                //for delete answer
                for (int i = 0; i < answers.Length; i++)
                {
                    var questionId     = questions[i].Id;
                    var questionAnswer = context.QuestionAnswers.Where(y => y.QuestionId == questionId).ToList(); // list of answers for current question

                    if (answers[i][0] != null)
                    {
                        for (var qa = 0; qa < answers[i].Length; qa++)
                        {
                            var answer = answers[i][qa];

                            if (answer.Id != 0)
                            {
                                var existedAnswer = context.Answers.Include("QuestionAnswers").FirstOrDefault(x => x.Id == answer.Id);

                                if (existedAnswer == null)
                                {
                                    return(new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest, "Answer is not found"));
                                }
                                var temp = context.QuestionAnswers.Where(x => x.AnswerId == answer.Id && x.QuestionId == questionId).FirstOrDefault();
                                if (temp != null)
                                {
                                    var answerFromList = questionAnswer.Where(a => a.Id == temp.Id).FirstOrDefault();
                                    if (answerFromList != null)
                                    {
                                        questionAnswer.Remove(answerFromList);
                                    }
                                }
                                existedAnswer.AnswerOrder = answer.AnswerOrder;
                                existedAnswer.AnswerText  = answer.AnswerText;
                                existedAnswer.IsRight     = answer.IsRight;
                            }
                            else
                            {
                                answer.AnswerOrder = (byte)(qa + 1);
                                context.Answers.Add(answer);
                                context.QuestionAnswers.Add(new QuestionAnswer
                                {
                                    QuestionId = questionId,
                                    Answer     = answer,
                                });
                            }
                        }
                        if (questionAnswer != null)
                        {
                            foreach (var item in questionAnswer)
                            {
                                context.QuestionAnswers.Remove(item);//test it
                            }
                        }
                    }

                    if (tags[i][0] != null)
                    {
                        var question     = context.Questions.FirstOrDefault(x => x.Id == questionId);
                        var questionTags = context.QuestionTags.Where(x => x.QuestionId == questionId).ToList();

                        for (int qt = 0; qt < tags[i].Length; qt++)
                        {
                            var tag = tags[i][qt];

                            var existedTag = context.Tags.FirstOrDefault(x => x.Name == tag.Name);

                            if (existedTag == null)
                            {
                                context.Tags.Add(tag);
                                question.QuestionTags.Add(new QuestionTag
                                {
                                    Tag = tag
                                });
                            }
                            else
                            {
                                var temp = context.QuestionTags.FirstOrDefault(x => x.TagId == existedTag.Id && x.QuestionId == questionId);
                                if (temp != null)
                                {
                                    if (questionTags.Contains(temp))
                                    {
                                        questionTags.Remove(temp);
                                    }
                                }
                                else
                                {
                                    question.QuestionTags.Add(new QuestionTag
                                    {
                                        Tag = existedTag
                                    });
                                }
                            }
                        }
                        if (questionTags != null)
                        {
                            foreach (var item in questionTags)
                            {
                                context.QuestionTags.Remove(item);//test it
                            }
                        }
                    }
                    else
                    {
                        var questionTags = context.QuestionTags.Where(x => x.QuestionId == questionId).ToList();
                        foreach (var item in questionTags)
                        {
                            context.QuestionTags.Remove(item);
                        }
                    }
                    context.SaveChanges();
                }
            }
            return(RedirectToAction("Get", new { id = id }));
        }