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)); } }
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)); }
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); }
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 })); }
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 })); }