Beispiel #1
0
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(BadRequest());
            }

            int userId = User.Identity.GetUserId <int>();

            if (!this.questionService.CanEdit(id.Value, userId) &&
                !User.IsInRole(CommonConstants.ModeratorRole))
            {
                return(new HttpUnauthorizedResult());
            }

            QuestionFormViewModel model = new QuestionFormViewModel
            {
                Question      = this.questionService.GetForm(id.Value),
                SubCategories = this.GetSubCategories()
            };

            if (model.Question == null)
            {
                return(BadRequest());
            }

            return(View(model));
        }
        public IActionResult Update(int id)
        {
            QuestionDto           editedQuestion    = _questionService.GetById(id);
            QuestionFormViewModel newEditedQuestion = new QuestionFormViewModel(editedQuestion);

            return(View("QuestionForm", newEditedQuestion));
        }
Beispiel #3
0
        public IActionResult Edit(int id)
        {
            var questionToEdit    = _questionService.GetById(id);
            var questionViewModel = new QuestionFormViewModel(questionToEdit);

            return(View("QuestionForm", questionViewModel));
        }
Beispiel #4
0
        public void Save_ExistingQuestion_ShouldUpdateQuestionAndItsTopicsInDatabase()
        {
            var topic            = _context.AddTestTopicToDatabase();
            var existingQuestion = _context.AddTestQuestionToDatabase();

            var title       = existingQuestion.Title;
            var description = existingQuestion.Description;

            var question = new Question {
                Title       = title + "?",
                Description = description + "-",
                Id          = existingQuestion.Id,
            };

            question.SetUserId(existingQuestion.AppUserId);

            var viewModel = new QuestionFormViewModel {
                Question = question,
                TopicIds = new[] { topic.Id }
            };

            _controller.Save(viewModel);

            var questionInDb = _contextAfterAction.Questions.Include(q => q.Topics).SingleOrDefault();

            Assert.That(questionInDb.Title, Is.EqualTo(title + "?"));
            Assert.That(questionInDb.Description, Is.EqualTo(description + "-"));
            Assert.That(questionInDb.Topics.Count, Is.EqualTo(1));
        }
Beispiel #5
0
        public ActionResult Create()
        {
            QuestionFormViewModel model = new QuestionFormViewModel
            {
                SubCategories = this.GetSubCategories()
            };

            return(View(model));
        }
Beispiel #6
0
        public async Task <IActionResult> New()
        {
            var categories = await _context.Categories.ToListAsync();

            QuestionFormViewModel viewModel = new QuestionFormViewModel()
            {
                Categories = categories
            };

            return(View("Edit", viewModel));
        }
Beispiel #7
0
        public ActionResult SaveQuestionTopics(QuestionFormViewModel formViewModel)
        {
            var questionPosted = formViewModel.Question;
            var questionInDb   = _unitOfWork.QuestionRepository.Single(
                q => q.Id == questionPosted.Id,
                nameof(Question.Topics));

            UpdateQuestionTopics(formViewModel.TopicIds, questionInDb);
            _unitOfWork.Complete();

            return(RedirectToAction("Detail", new { id = questionInDb.Id }));
        }
Beispiel #8
0
        public ActionResult Edit(int?id, QuestionFormViewModel model)
        {
            if (!ModelState.IsValid)
            {
                model.SubCategories = this.GetSubCategories();
                return(View(model));
            }

            int userId = User.Identity.GetUserId <int>();

            if (!this.questionService.CanEdit(id.Value, userId) &&
                !User.IsInRole(CommonConstants.ModeratorRole))
            {
                return(new HttpUnauthorizedResult());
            }

            string oldTitle = this.questionService.GetTitle(id.Value);

            if (oldTitle == null)
            {
                return(BadRequest());
            }

            string newTitle = model.Question.Title;

            if (this.questionService.TitleExists(newTitle) &&
                newTitle != oldTitle)
            {
                model.SubCategories = this.GetSubCategories();
                TempData.AddErrorMessage(string.Format(WebConstants.EntryExists, Question));
                return(View(model));
            }

            bool success = this.questionService.Edit(
                id.Value,
                newTitle,
                model.Question.Content,
                model.Question.Tags,
                model.SubCategoryId);

            if (!success)
            {
                return(BadRequest());
            }

            TempData.AddSuccessMessage(string.Format(
                                           WebConstants.SuccessfullEntityOperation,
                                           Question,
                                           WebConstants.Edited));

            return(RedirectToAction(nameof(Details), new { id }));
        }
Beispiel #9
0
        public void Delete_WhenCalled_ShouldRemoveAnswerQuestionActivityFromDatabase()
        {
            var question  = _context.AddTestQuestionToDatabase();
            var viewModel = new QuestionFormViewModel {
                Question = question
            };

            _context.AddTestActivityAddQuestionToDatabase(question.Id);

            var result = _controller.Delete(viewModel);

            Assert.That(_context.Activities.Count(), Is.EqualTo(0));
        }
Beispiel #10
0
        public void Delete_WhenCalled_ShouldSoftDeleteQuestionAndItsAnswers()
        {
            var question = _context.AddTestQuestionToDatabase("Question 2?");

            _context.AddTestAnswerToDatabase(question.Id);

            var viewModel = new QuestionFormViewModel {
                Question = question
            };

            var result = _controller.Delete(viewModel);

            Assert.That(_contextAfterAction.Questions.Single().IsDeleted, Is.True);
            Assert.That(_contextAfterAction.Answers.Single().IsDeleted, Is.True);
        }
        public ActionResult NewQuestion(int id)
        {
            setglobalCourseID(id);
            var choices             = _context.Choices.ToList();
            var correspondingCourse = _context.Courses.SingleOrDefault(c => c.Id == id);
            var viewModel           = new QuestionFormViewModel
            {
                Question = new Question {
                    CourseID_Id = id
                },
                Choice    = choices,
                Course_id = id
            };

            return(View("QuestionForm", viewModel));
        }
        public ActionResult Ask(QuestionFormViewModel vm)
        {
            Markdown md = new Markdown();

            if (ModelState.IsValid)
            {
                vm.Question.Active      = true;
                vm.Question.DateCreated = DateTime.Now;
                vm.Question.Posts.Add(new Post()
                {
                    Active      = true,
                    Content     = md.Transform(Request.Form["Post.Content"]),
                    User_id     = (int)Session["ID"],
                    DateCreated = DateTime.Now,
                });

                // Was unable to add Tags, but fixed this by following the steps under 'Issues With Views': http://oyonti.wordpress.com/2011/05/26/unable-to-update-the-entityset-because-it-has-a-definingquery/
                //
                var tagNames = Request.Form["Tag.Name"].Split(" ,".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);

                foreach (var t in tagNames)
                {
                    if (db.Tags.Where(q => q.Name == t).Count() == 0) //More elegant use of extensions goes here
                    {
                        vm.Question.Tags.Add(new Tag()
                        {
                            Active  = true,
                            Name    = t,
                            Summary = "Requires summary",
                        });
                    }
                    else
                    {
                        vm.Question.Tags.Add(db.Tags.Where(q => q.Name == t).ToList()[0]);
                    }
                }

                //Add and apply changes to the database
                db.Questions.Add(vm.Question);
                db.SaveChanges();

                return(RedirectToAction("Index"));
            }

            return(View(vm.Question));
        }
Beispiel #13
0
        public void Save_NewQuestion_ShouldSaveAddQuestionActivityToDatabase()
        {
            var question = new Question {
                Title       = "New Question?",
                Description = "New desc"
            };

            var viewModel = new QuestionFormViewModel {
                Question = question
            };

            var result = _controller.Save(viewModel);

            var activity = _contextAfterAction.Activities.Single();

            Assert.That(activity.Type, Is.EqualTo(ActivityType.AddQuestion));
            Assert.That(activity.QuestionId, Is.EqualTo(question.Id));
        }
Beispiel #14
0
        public IActionResult Save(QuestionFormViewModel updatedQuestion)
        {
            if (!ModelState.IsValid)
            {
                return(View("QuestionForm", updatedQuestion));
            }
            var question = updatedQuestion.Question;

            question.Answers[updatedQuestion.CorrectAnswerIndex].IsCorrect = true;
            if (question.Id != 0)
            {
                _questionService.Update(question);
            }
            else
            {
                question = _questionService.Add(question);
            }

            return(RedirectToAction("Get", new { Id = question.Id }));
        }
        public ActionResult Edit(int id)
        {
            setglobalCourseID(id);
            var choices  = _context.Choices.ToList();
            var question = _context.Questions.SingleOrDefault(c => c.Id == id);

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

            var viewModel = new QuestionFormViewModel
            {
                Question  = question,
                Choice    = choices,
                Course_id = id
            };

            return(View("QuestionForm", viewModel));
        }
Beispiel #16
0
        private Question SaveQuestion(QuestionFormViewModel formViewModel)
        {
            var questionToSave = formViewModel.Question;
            var isQuestionNew  = questionToSave.Id == 0;

            questionToSave = UpdateOrAddQuestion(questionToSave);

            if (questionToSave.CanUserModify(User))
            {
                UpdateQuestionTopics(formViewModel.TopicIds, questionToSave);
                _unitOfWork.Complete();

                if (isQuestionNew)
                {
                    AddAddQuestionActivity(User.Identity.GetUserId(), questionToSave.Id);
                }
            }

            return(questionToSave);
        }
Beispiel #17
0
        private QuestionFormViewModel ConstructQuestionFormViewModel(Question question)
        {
            var topics = _unitOfWork.TopicRepository.GetAll().Select(t => new
            {
                TopicId   = t.Id,
                TopicName = t.Name
            }).ToList();

            var selectedTopicIds = question.Topics.Select(t => t.Id).ToArray();

            var viewModel = new QuestionFormViewModel
            {
                Question      = question,
                Topics        = new MultiSelectList(topics, "TopicId", "TopicName"),
                TopicIds      = selectedTopicIds,
                CanUserDelete = question.CanUserModify(User)
            };

            return(viewModel);
        }
Beispiel #18
0
        public ActionResult Save(QuestionFormViewModel formViewModel)
        {
            if (!ModelState.IsValid)
            {
                // return to current page
                return(Redirect(Request.UrlReferrer.ToString()));
            }

            formViewModel.Question.TrimTitleAndDescription();

            // check if new question title is unique
            if (DoesQuestionTitleExist(formViewModel.Question))
            {
                TempData["pageError"] = "Question already exists.";
                return(Redirect(Request.UrlReferrer.ToString()));
            }

            var questionSaved = SaveQuestion(formViewModel);

            return(RedirectToAction("Detail", new { id = questionSaved.Id }));
        }
Beispiel #19
0
        public ActionResult Delete(QuestionFormViewModel viewModel)
        {
            var question = _unitOfWork.QuestionRepository.Single(q => q.Id == viewModel.Question.Id, nameof(Question.Answers));

            if (question.CanUserModify(User))
            {
                _unitOfWork.AnswerRepository.RemoveRange(question.Answers);
                _unitOfWork.QuestionRepository.Remove(question);

                var activity = _unitOfWork.ActivityRepository.SingleOrDefault(a => a.Type == ActivityType.AddQuestion &&
                                                                              a.QuestionId == viewModel.Question.Id);
                if (activity != null)
                {
                    _unitOfWork.ActivityRepository.Remove(activity);
                }

                _unitOfWork.Complete();
            }

            return(RedirectToAction("Index", "Home"));
        }
Beispiel #20
0
        public async Task <IActionResult> Edit(int id)
        {
            var questionInDb = await _context.Question.SingleOrDefaultAsync(q => q.Id == id);

            if (questionInDb == null)
            {
                return(StatusCode(404));
            }

            var viewModel = new QuestionFormViewModel
            {
                Id          = questionInDb.Id,
                Text        = questionInDb.Text,
                CategoryId  = questionInDb.CategoryId,
                Explanation = questionInDb.Explanation,
                ImagePath   = questionInDb.ImagePath,
                Answers     = await _context.Answers.Where(a => a.QuestionId == id).ToListAsync(),
                Categories  = await _context.Categories.ToListAsync()
            };

            return(View(viewModel));
        }
Beispiel #21
0
        public ActionResult Create(QuestionFormViewModel model)
        {
            if (!ModelState.IsValid)
            {
                model.SubCategories = this.GetSubCategories();
                return(View(model));
            }

            string title = model.Question.Title;

            if (this.questionService.TitleExists(title))
            {
                model.SubCategories = this.GetSubCategories();
                TempData.AddErrorMessage(string.Format(WebConstants.EntryExists, Question));
                return(View(model));
            }

            int authorId = User.Identity.GetUserId <int>();

            int id = this.questionService.Create(
                authorId,
                title,
                model.Question.Content,
                model.Question.Tags,
                model.SubCategoryId);

            if (id < 1)
            {
                return(BadRequest());
            }

            TempData.AddSuccessMessage(string.Format(
                                           WebConstants.SuccessfullEntityOperation,
                                           Question,
                                           WebConstants.Added));

            return(RedirectToAction(nameof(Details), new { id }));
        }
        public ActionResult Save(QuestionFormViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View("QuestionForm", viewModel));
            }



            if (viewModel.Question.Id == 0)
            {
                viewModel.Question.CourseID_Id = viewModel.Course_id;
                _context.Questions.Add(viewModel.Question);
            }
            else
            {
                var questionInDb = _context.Questions.Single(c => c.Id == viewModel.Question.Id);
                questionInDb.Body           = viewModel.Question.Body;
                questionInDb.AnswerA        = viewModel.Question.AnswerA;
                questionInDb.AnswerB        = viewModel.Question.AnswerB;
                questionInDb.AnswerC        = viewModel.Question.AnswerC;
                questionInDb.AnswerD        = viewModel.Question.AnswerD;
                questionInDb.RightAnswer_Id = viewModel.Question.RightAnswer_Id;
                questionInDb.CourseID_Id    = viewModel.Question.CourseID_Id;
            }


            _context.SaveChanges();

            var firstQuery         = _context.Questions.Where(c => c.CourseID_Id.Equals(viewModel.Question.CourseID_Id)).ToList();
            var questionsViewModel = new SelectedQuestionsViewModel
            {
                Question  = firstQuery,
                Course_id = viewModel.Question.CourseID_Id,
            };

            return(View("Index", questionsViewModel));
        }
Beispiel #23
0
        public void SaveQuestionTopics_WhenCalled_ShouldUpdateQuestionTopicsInDatabase()
        {
            var topic            = _context.AddTestTopicToDatabase();
            var existingQuestion = _context.AddTestQuestionToDatabase();

            var question = new Question {
                Title = existingQuestion.Title,
                Id    = existingQuestion.Id,
            };

            question.SetUserId(existingQuestion.AppUserId);

            var viewModel = new QuestionFormViewModel {
                Question = question,
                TopicIds = new[] { topic.Id }
            };

            var result = _controller.SaveQuestionTopics(viewModel);

            var questionInDb = _contextAfterAction.Questions.Include(q => q.Topics).SingleOrDefault();

            Assert.That(questionInDb.Topics.Count, Is.EqualTo(1));
        }
Beispiel #24
0
        public void Save_NewQuestion_ShouldSaveQuestionAndItsTopicsToDatabase()
        {
            var topic = _context.AddTestTopicToDatabase();

            var question = new Question {
                Title       = "New Question?",
                Description = "New desc"
            };

            var viewModel = new QuestionFormViewModel {
                Question = question,
                TopicIds = new[] { topic.Id }
            };

            var result = _controller.Save(viewModel);

            var questionInDb = _contextAfterAction.Questions.Include(q => q.Topics).SingleOrDefault();

            Assert.That(questionInDb, Is.Not.Null);
            Assert.That(questionInDb.Title, Is.EqualTo(questionInDb.Title));
            Assert.That(questionInDb.Description, Is.EqualTo(questionInDb.Description));
            Assert.That(questionInDb.Topics.Count, Is.EqualTo(1));
        }
Beispiel #25
0
        public IActionResult Create()
        {
            var newQuestion = new QuestionFormViewModel();

            return(View("QuestionForm", newQuestion));
        }