private AnswerDetailViewModel ConstructAnswerDetailViewModel(Answer answer) { var question = _unitOfWork.QuestionRepository.Single(q => q.Id == answer.Question.Id, nameof(Question.Topics)); var answerCount = _unitOfWork.AnswerRepository.Count(a => a.QuestionId == question.Id); var moreAnswers = _unitOfWork.AnswerRepository.Get(a => a.Id != answer.Id && a.QuestionId == question.Id, includeProperties: nameof(Answer.AnswerLikes) + "," + nameof(Answer.Comments), take: 2) .ToList(); // TODO: can we utilize ConstructQuestionDetailViewModel method in QuestionController? var userId = User.Identity.GetUserId(); var existingAnswer = _unitOfWork.AnswerRepository.SingleOrDefault( a => a.QuestionId == question.Id && a.AppUserId == userId); answer.SetLikedByCurrentUser(userId); moreAnswers.ForEach(ma => ma.SetLikedByCurrentUser(userId)); var questionDetailViewModel = new QuestionDetailViewModel { Question = question, CanUserEditQuestion = question.CanUserModify(User), UserAnswerId = existingAnswer?.Id ?? 0, CanUserDeleteAnswerPanelAnswer = existingAnswer != null, }; var viewModel = new AnswerDetailViewModel { Answer = answer, MoreAnswers = moreAnswers, QuestionDetailViewModel = questionDetailViewModel, AnswerCount = answerCount }; return(viewModel); }
public ActionResult Save(QuestionDetailViewModel viewModel) { var userId = User.Identity.GetUserId(); var existingAnswer = _unitOfWork.AnswerRepository.SingleOrDefault( a => a.QuestionId == viewModel.Question.Id && a.AppUserId == userId); var isNewAnswer = existingAnswer == null; var answerToSave = UpdateOrAddAnswer(viewModel, existingAnswer); try { _unitOfWork.Complete(); if (isNewAnswer) { _unitOfWork.ActivityRepository.Add( Activity.ActivityAnswerQuestion(userId, viewModel.Question.Id, answerToSave.Id)); _unitOfWork.Complete(); } } catch (DbEntityValidationException ex) { var error = ex.EntityValidationErrors?.FirstOrDefault()?.ValidationErrors?.FirstOrDefault(); ModelState.AddModelError("", error?.ErrorMessage); return(View("~/Views/Question/Detail.cshtml", viewModel)); } return(RedirectToAction("Detail", "Answer", new { id = answerToSave.Id })); }
public ActionResult QuestionDetails(QuestionDetailViewModel questionDetailViewModel) { //var queston QBL.CreateAnswer(questionDetailViewModel); //emailHelper.notifyQuestionOwner(questionDetailViewModel); return(RedirectToAction("QuestionDetails", new { Id = questionDetailViewModel.QuestionId })); }
public void NewFormViewModelTests_SelectedQuestion_Get_Set() { QuestionDetailViewModel test = new QuestionDetailViewModel(); viewModel.SelectedQuestion = test; Assert.AreSame(test, viewModel.SelectedQuestion); }
public void notifyQuestionOwner(QuestionDetailViewModel viewModel) { var user = viewModel.question.Post.CreatedBy; try { //this method will work only if you provided correct email //for security perpose we are removing credentials from here. var senderEmail = new MailAddress("*****@*****.**", "senderPassword"); var receiverEmail = new MailAddress(user.Email, "Receiver"); var password = "******"; var sub = "MITT job notification"; var body = GetBody(viewModel); var smtp = new SmtpClient { Host = "smtp.gmail.com", Port = 587, EnableSsl = true, DeliveryMethod = SmtpDeliveryMethod.Network, UseDefaultCredentials = false, Credentials = new NetworkCredential(senderEmail.Address, password) }; var mess = new MailMessage(senderEmail, receiverEmail) { Subject = sub, Body = body, }; mess.IsBodyHtml = true; smtp.Send(mess); } catch (Exception e) { } }
public ActionResult Detail(int id) { QuestionDetailViewModel questionDetailVM = new QuestionDetailViewModel(); Question question = qService.GetDetailQuestion(id, User.IsInRole(Constant.String.RoleAdmin) || User.IsInRole(Constant.String.RoleMod)); if (question == default(Question)) { return(Redirect("~/Error404.html")); } qService.IncludeUserForComments(question.Comments.ToList()); qService.IncludeUserForVotes(question.Votes.ToList()); questionDetailVM = Mapper.Map <Question, QuestionDetailViewModel>(question); questionDetailVM.UserInfo.CreateMainPostDate = question.CreatedDate; questionDetailVM.Bookmarked = question.BookmarkUsers .Where(u => u.Id == User.Identity.GetUserId <int>()).Count() > 0; questionDetailVM.VoteVM = new VoteViewModel(question, User.Identity.GetUserId <int>()); AnswerViewModel answerVM = new AnswerViewModel(qService, id, User.Identity.GetUserId <int>()); //answerVM.Answers = qService.GetAnswers(id, AnswerEnum.Answer); //answerVM.Hints = qService.GetAnswers(id, AnswerEnum.Hint); ViewBag.System = Constant.String.QuestionSystem; questionDetailVM.AnswerVMs = answerVM; var cookie = new HttpCookie("returnUrl", Request.Url.AbsolutePath + Request.Url.Query); cookie.Expires = DateTime.Now.AddMinutes(5); Response.Cookies.Add(cookie); qService.IncreaseViewQuestion(question); return(View("Views/QuestionDetailView", questionDetailVM)); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); ViewModel = new QuestionDetailViewModel(Intent.GetStringExtra("questionId")); title = FindViewById <TextView>(Resource.Id.question_view_item_title); answerCount = FindViewById <TextView>(Resource.Id.textAnswerCount); answerBtn = FindViewById <Button>(Resource.Id.btnAnswer); recyclerView = FindViewById <RecyclerView>(Resource.Id.recyclerView); recyclerView.HasFixedSize = false; recyclerView.AddItemDecoration(new DividerItemDecoration(recyclerView.Context, DividerItemDecoration.Vertical)); recyclerView.SetAdapter(adapter = new BrowseItemsAdapter(this, ViewModel)); refresher = FindViewById <SwipeRefreshLayout>(Resource.Id.refresher); refresher.SetColorSchemeColors(Resource.Color.accent); answerBtn.Click += (sender, e) => { var intent = new Intent(this, typeof(AnswerActivity)); intent.PutExtra("data", ViewModel.Question.ObjectId); StartActivity(intent); }; }
public BrowseItemsAdapter(Activity activity, QuestionDetailViewModel viewModel) { this.viewModel = viewModel; this.activity = activity; this.viewModel.Answers.CollectionChanged += (sender, args) => { this.activity.RunOnUiThread(NotifyDataSetChanged); }; }
public ActionResult QuestionDetails(int Id) { QuestionDetailViewModel questionDetailViewModel = new QuestionDetailViewModel { Question = QBL.GetQuestions(Id), UserId = User.Identity.GetUserId(), QuestionId = Id, }; return(View(questionDetailViewModel)); }
public BrowseAnswerAdapter(Activity activity, QuestionDetailViewModel viewModel, Android.Support.V4.App.FragmentManager fragmentManager) { this.viewModel = viewModel; this.activity = activity; this.fragmentManager = fragmentManager; this.viewModel.Answers.CollectionChanged += (sender, args) => { this.activity.RunOnUiThread(NotifyDataSetChanged); }; }
public QuestionDetailPage() { InitializeComponent(); var question = new Question { QuestionText = "Test", Answers = null }; viewModel = new QuestionDetailViewModel(question); BindingContext = viewModel; }
private Answer AddAnswer(QuestionDetailViewModel viewModel) { var answer = new Answer { Content = viewModel.AnswerPanelContent, QuestionId = viewModel.Question.Id, AppUserId = User.Identity.GetUserId(), CreatedDate = DateTime.Now }; _unitOfWork.AnswerRepository.Add(answer); return(answer); }
public ActionResult QuestionDetails(int Id) { //var questionById = _context.Questions.Find(Id); QuestionDetailViewModel questionDetailViewModel = new QuestionDetailViewModel { question = QBL.GetQuestions(Id), UserId = User.Identity.GetUserId(), QuestionId = Id, //VoteCount = questionById.Post.UpVotes.Count - questionById.Post.UpVotes.Count, }; return(View(questionDetailViewModel)); }
private Answer UpdateOrAddAnswer(QuestionDetailViewModel viewModel, Answer existingAnswer) { Answer answerToSave; if (existingAnswer != null) { answerToSave = UpdateAnswer(viewModel.AnswerPanelContent, existingAnswer); } else { answerToSave = AddAnswer(viewModel); } return(answerToSave); }
public void Delete_WhenCalled_ShouldSoftDeleteAnswerFromDatabase() { var question = _context.AddTestQuestionToDatabase(); var answer = _context.AddTestAnswerToDatabase(question.Id); var viewModel = new QuestionDetailViewModel { Question = question, UserAnswerId = answer.Id }; _controller.Delete(viewModel); Assert.That(_contextAfterAction.Answers.Single().IsDeleted, Is.True); }
public string GetBody(QuestionDetailViewModel viewModel) { StringBuilder htmlBuilder = new StringBuilder(); var hr = "<hr />"; var div = "<div style=\"width: 100 %; border: 1px solid orange; padding: 5px; \">"; htmlBuilder.Append(div); var questionHeader = "<h1>" + "Congrats someone answered question." + "</h1>"; htmlBuilder.Append(questionHeader); htmlBuilder.Append(hr); div = "</div>"; htmlBuilder.Append(div); return(htmlBuilder.ToString()); }
private QuestionDetailViewModel ConstructQuestionDetailViewModel(Question question) { var userId = User.Identity.GetUserId(); var existingAnswer = _unitOfWork.AnswerRepository.SingleOrDefault( a => a.QuestionId == question.Id && a.AppUserId == userId); var viewModel = new QuestionDetailViewModel { Question = question, CanUserEditQuestion = question.CanUserModify(User), UserAnswerId = existingAnswer?.Id ?? 0, CanUserDeleteAnswerPanelAnswer = existingAnswer != null, AnswerCount = _unitOfWork.AnswerRepository.Count(a => a.QuestionId == question.Id) }; return(viewModel); }
public void CreateAnswer(QuestionDetailViewModel viewModel) { Post post = new Post() { Content = viewModel.AnswerContent, CreatedTime = DateTime.Now, CreatedById = viewModel.UserId, }; Answer answer = new Answer() { Post = post, Question = GetQuestions(viewModel.QuestionId), }; QDL.CreatePost(post); QDL.CreateAnswer(answer); }
public void Delete_WhenCalled_ShouldRemoveAnswerQuestionActivityFromDatabase() { var question = _context.AddTestQuestionToDatabase(); var answer = _context.AddTestAnswerToDatabase(question.Id); var viewModel = new QuestionDetailViewModel { Question = question, UserAnswerId = answer.Id }; _context.AddTestActivityAnswerQuestionToDatabase(question.Id, answer.Id); _controller.Delete(viewModel); Assert.That(_contextAfterAction.Activities.Count(), Is.EqualTo(0)); }
public void Save_ExistingAnswer_ShouldUpdateExistingAnswerInDatabase() { var question = _context.AddTestQuestionToDatabase(); var answer = _context.AddTestAnswerToDatabase(question.Id, "original answer"); var viewModel = new QuestionDetailViewModel { Question = question, AnswerPanelContent = "new answer" }; _controller.Save(viewModel); var answers = _contextAfterAction.Answers.ToList(); Assert.That(answers.Count, Is.EqualTo(1)); Assert.That(answers.First().Content, Is.EqualTo(viewModel.AnswerPanelContent)); Assert.That(answers.First().UpdatedDate.Value.Date, Is.EqualTo(DateTime.Today)); }
public void Save_NewAnswer_ShouldSaveAnswerQuestionActivityToDatabase() { var question = _context.AddTestQuestionToDatabase(); var viewModel = new QuestionDetailViewModel { Question = question, AnswerPanelContent = "new answer" }; _controller.Save(viewModel); var activity = _contextAfterAction.Activities.Single(); var answers = _contextAfterAction.Answers.Single(); Assert.That(activity.Type, Is.EqualTo(ActivityType.AnswerQuestion)); Assert.That(activity.QuestionId, Is.EqualTo(question.Id)); Assert.That(activity.AnswerId, Is.EqualTo(answers.Id)); }
public void Save_NewAnswer_ShouldSaveNewAnswerToDatabase() { var question = _context.AddTestQuestionToDatabase(); var viewModel = new QuestionDetailViewModel { Question = question, AnswerPanelContent = "new answer" }; _controller.Save(viewModel); var answers = _contextAfterAction.Answers.ToList(); Assert.That(answers.Count, Is.EqualTo(1)); Assert.That(answers.First().Content, Is.EqualTo(viewModel.AnswerPanelContent)); Assert.That(answers.First().CreatedDate.Date, Is.EqualTo(DateTime.Today)); Assert.That(answers.First().UpdatedDate, Is.Null); Assert.That(answers.First().AppUserId, Is.EqualTo(_firstUserInDb.Id)); }
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { base.OnCreateView(inflater, container, savedInstanceState); View view = inflater.Inflate(Resource.Layout.basic_fragment_browse_answers, null); Activity.Title = "Task Detail"; ViewModel = new QuestionDetailViewModel(Arguments.GetString("questionId")); questionTitle = view.FindViewById <TextView>(Resource.Id.text_question_title); questionBody = view.FindViewById <TextView>(Resource.Id.text_question_body); tags = view.FindViewById <TextView>(Resource.Id.text_question_tags); status = view.FindViewById <TextView>(Resource.Id.text_status); answerCount = view.FindViewById <TextView>(Resource.Id.textAnswerCount); ownerFullName = view.FindViewById <TextView>(Resource.Id.text_full_name); ownerUsername = view.FindViewById <TextView>(Resource.Id.text_username); postedDate = view.FindViewById <TextView>(Resource.Id.text_posted_date); ownerHolder = view.FindViewById <RelativeLayout>(Resource.Id.owner_holder); helperBtn = view.FindViewById <Button>(Resource.Id.btnHelper); helpRequestHolder = view.FindViewById <LinearLayout>(Resource.Id.help_request_holder); requestSentHolder = view.FindViewById <LinearLayout>(Resource.Id.request_sent_holder); recyclerView = view.FindViewById <RecyclerView>(Resource.Id.recyclerView); recyclerView.HasFixedSize = false; recyclerView.AddItemDecoration(new DividerItemDecoration(recyclerView.Context, DividerItemDecoration.Vertical)); recyclerView.SetAdapter(adapter = new BrowseAnswerAdapter(Activity, ViewModel, FragmentManager)); refresher = view.FindViewById <SwipeRefreshLayout>(Resource.Id.refresher); refresher.SetColorSchemeColors(Resource.Color.accent); helperBtn.Click += async(sender, e) => { await ViewModel.SendHelperRequest(); Toast.MakeText(Context, "Your request was sent.", ToastLength.Short).Show(); helpRequestHolder.Visibility = ViewStates.Gone; requestSentHolder.Visibility = ViewStates.Visible; }; return(view); }
public ActionResult GetQuestionDetail(int id) { QuestionViewModel qvm = questionService.GetQuestionById(id); List <LevelViewModel> levels = levelService.GetLevel(); List <LearningOutcomeViewModel> learningOutcomes = learningOutcomeService.GetLearningOutcomeByCourseId(qvm.CourseId); List <CategoryViewModel> categories = categoryService.GetCategoriesByCourseId(qvm.CourseId); QuestionDetailViewModel qdvm = new QuestionDetailViewModel() { Question = qvm, Levels = levels, LearningOutcomes = learningOutcomes, Categories = categories }; TempData["active"] = "Course"; return(View("EditQuestion", qdvm)); }
public ActionResult UpdateQuestion(QuestionViewModel ques) { QuestionDetailViewModel questionDetailViewModel = new QuestionDetailViewModel(); if (!ques.QuestionContent.Trim().Equals("[html]") || (ques.ImagesInput != null && ques.ImagesInput.Count() > 0)) { bool result = questionService.UpdateQuestion(ques); // bool optionResult = optionService.UpdateOptions(ques.Options); ViewBag.Modal = "#success-modal"; return(RedirectToAction("CourseDetail", "Course", new { courseId = ques.CourseId })); } if (ques.QuestionContent.Trim().Equals("[html]")) { ModelState.AddModelError(string.Empty, "Please enter Question Content"); } foreach (var item in ques.Options) { if (item.OptionContent.Trim().Equals("[html]")) { ModelState.AddModelError(string.Empty, "Please enter Option Content"); } } //ModelState.AddModelError(string.Empty, "Question Content is required"); //ModelState.AddModelError(string.Empty, "Option Content is required"); List <LevelViewModel> levels = levelService.GetLevel(); List <LearningOutcomeViewModel> learningOutcomes = learningOutcomeService.GetLearningOutcomeByCourseId(ques.CourseId); questionDetailViewModel = new QuestionDetailViewModel() { Question = ques, Levels = levels, LearningOutcomes = learningOutcomes }; return(View("EditQuestion", questionDetailViewModel)); }
public ActionResult Delete(QuestionDetailViewModel viewModel) { var currentUserId = User.Identity.GetUserId(); var answer = _unitOfWork.AnswerRepository.Single(a => a.Id == viewModel.UserAnswerId); if (answer.AppUserId != currentUserId) { return(new HttpUnauthorizedResult()); } _unitOfWork.AnswerRepository.Remove(answer); var activity = _unitOfWork.ActivityRepository.SingleOrDefault(a => a.Type == ActivityType.AnswerQuestion && a.AppUserId == currentUserId && a.AnswerId == viewModel.UserAnswerId); if (activity != null) { _unitOfWork.ActivityRepository.Remove(activity); } _unitOfWork.Complete(); return(RedirectToAction("Detail", "Question", new { id = viewModel.Question.Id })); }
public void SetUp() { _pageService = new Mock <IPageService>(); _dialog = new Mock <IUserDialogs>(); _form = new NewFormViewModel(_dialog.Object, _pageService.Object); _formAnswer = new ForumDEG.Models.FormAnswer { CoordinatorId = "12345678", FormId = "0001", DiscursiveAnswers = new List <ForumDEG.Models.DiscursiveQuestion> { new ForumDEG.Models.DiscursiveQuestion { Question = "Questão Discursiva", Answer = "Resposta Discursiva" } }, MultipleChoiceAnswers = new List <ForumDEG.Models.MultipleChoiceAnswer> { new ForumDEG.Models.MultipleChoiceAnswer { Question = "Questão Múltipla", Answers = new List <string> { "Opção 1", "Opção 2" } } } }; discursive = new List <ForumDEG.Models.DiscursiveQuestion>(); discursive.Add(new ForumDEG.Models.DiscursiveQuestion { Question = "Chama, chama, chama" }); multipleChoice = new List <ForumDEG.Models.MultipleChoiceQuestion>(); multipleChoice.Add(new ForumDEG.Models.MultipleChoiceQuestion("Funcionaaa", false) { new ForumDEG.Models.Option { OptionText = "fun" }, new ForumDEG.Models.Option { OptionText = "ci" }, new ForumDEG.Models.Option { OptionText = "o" }, new ForumDEG.Models.Option { OptionText = "na" }, }); multipleChoice.Add(new ForumDEG.Models.MultipleChoiceQuestion("lalala", true) { new ForumDEG.Models.Option { OptionText = "uma" }, new ForumDEG.Models.Option { OptionText = "duas" }, }); _form.Title = "Titulo"; _question1 = new QuestionDetailViewModel { Title = "pergunta1", MultipleAnswers = true }; _question1.Options.Add("reposta1"); _question1.Options.Add("reposta2"); _question2 = new QuestionDetailViewModel { Title = "pergunta2", MultipleAnswers = false }; _question2.Options.Add("reposta1"); _question2.Options.Add("reposta2"); _form.MultipleChoiceQuestions.Add(_question1); _form.MultipleChoiceQuestions.Add(_question2); _form.DiscursiveQuestionsTitles.Add("Chama, chama, chama"); }
public QuestionDetailPage(QuestionDetailViewModel questionDetailViewModel) { InitializeComponent(); BindingContext = viewModel = questionDetailViewModel; }