Beispiel #1
0
        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);
        }
Beispiel #2
0
        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 }));
        }
Beispiel #3
0
 public ActionResult QuestionDetails(QuestionDetailViewModel questionDetailViewModel)
 {
     //var queston
     QBL.CreateAnswer(questionDetailViewModel);
     //emailHelper.notifyQuestionOwner(questionDetailViewModel);
     return(RedirectToAction("QuestionDetails", new { Id = questionDetailViewModel.QuestionId }));
 }
Beispiel #4
0
        public void NewFormViewModelTests_SelectedQuestion_Get_Set()
        {
            QuestionDetailViewModel test = new QuestionDetailViewModel();

            viewModel.SelectedQuestion = test;
            Assert.AreSame(test, viewModel.SelectedQuestion);
        }
Beispiel #5
0
        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);
            };
        }
Beispiel #9
0
        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);
            };
        }
Beispiel #11
0
        public QuestionDetailPage()
        {
            InitializeComponent();

            var question = new Question
            {
                QuestionText = "Test",
                Answers      = null
            };

            viewModel      = new QuestionDetailViewModel(question);
            BindingContext = viewModel;
        }
Beispiel #12
0
        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);
        }
Beispiel #13
0
        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));
        }
Beispiel #14
0
        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);
        }
Beispiel #16
0
        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());
        }
Beispiel #17
0
        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);
        }
Beispiel #18
0
        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);
        }
Beispiel #24
0
        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));
        }
Beispiel #25
0
        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));
        }
Beispiel #26
0
        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 }));
        }
Beispiel #27
0
        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");
        }
Beispiel #28
0
        public QuestionDetailPage(QuestionDetailViewModel questionDetailViewModel)
        {
            InitializeComponent();

            BindingContext = viewModel = questionDetailViewModel;
        }