public ActionResult AllQuestion(string sort, string search, int?page) { int DiscussionCategoryId = 0; string s = sort; int result; if (int.TryParse(s, out result)) { DiscussionCategoryId = Convert.ToInt32(sort); } else { } ViewBag.NewestSort = sort == "newestsearch" ? "newest_desc" : "newest_search"; ViewBag.OldestSort = sort == "oldestsearch" ? "oldest_asec" : "oldest_search"; ViewBag.DiscussionCategory = sort == "discussioncategory" ? "discuss_cat" : "discussion_category"; ViewBag.CurrentSort = sort; ViewBag.CurrentSearch = search; AllQuestionListViewModel mainModel = new AllQuestionListViewModel(); var listModel = new List <QuestionListWithOwnerAndLastParticipantViewModel>(); var reportList = new List <TopTenReport>(); var topQList = new List <TopSevenQuestions>(); var likeList = new List <MostLikeQuestion>(); if (!String.IsNullOrEmpty(search)) { var questions = _applicationDbContext.Questions.Include(dc => dc.DiscussionCategory).Where(d => d.Title.ToLower().Contains(search) || d.QuestionText.ToLower().Contains(search) || d.Tag.ToLower().Contains(search)).ToList(); foreach (var q in questions) { var answers = _applicationDbContext.AnswerToQuestions.Where(id => id.QuestionId == q.QuestionId).ToList(); QuestionListWithOwnerAndLastParticipantViewModel model = new QuestionListWithOwnerAndLastParticipantViewModel(); model.QuestionId = q.QuestionId; model.Title = q.Title; model.DiscussionCategory = q.DiscussionCategory.Name; model.DateAsked = q.DateAsked.ToString("d,MMMM yy"); DateTime commentDate = DateTime.UtcNow.Date; DateTime answerDate = DateTime.UtcNow.Date; var userName = _applicationDbContext.Users.Find(q.UserId); var getQuestionComment = _applicationDbContext.QuestionComments.Where(id => id.QuestionId == q.QuestionId).OrderByDescending(p => p.QuestionCommentId).FirstOrDefault(); var getAnswerComment = _applicationDbContext.AnswerToQuestions.Where(id => id.QuestionId == q.QuestionId).OrderByDescending(p => p.AnswerToQuestionId).FirstOrDefault(); model.QuestionOwner = userName.NameExtension; if (answers != null) { model.AnswerCount = answers.Count; } else { model.AnswerCount = 0; } if (getQuestionComment == null) { model.LastParticipantOwner = userName.NameExtension; model.LastParticipantDate = q.DateAsked.ToString("d,MMMM yy"); commentDate = q.DateAsked; } else { commentDate = getQuestionComment.DateCommented; } if (getAnswerComment == null) { model.LastParticipantOwner = userName.NameExtension; model.LastParticipantDate = q.DateAsked.ToString("d,MMM yy"); answerDate = q.DateAsked; } else { answerDate = getAnswerComment.DateAnswered; } if (getQuestionComment != null) { if (commentDate >= answerDate) { var commentOwner = _applicationDbContext.Users.Find(getQuestionComment.UserId); model.LastParticipantOwner = commentOwner.NameExtension; model.LastParticipantDate = getQuestionComment.DateCommented.ToString("d,MMMM yy"); } } if (getAnswerComment != null) { if (commentDate <= answerDate) { var questionOwner = _applicationDbContext.Users.Find(getAnswerComment.UserId); model.LastParticipantOwner = questionOwner.NameExtension; model.LastParticipantDate = getAnswerComment.DateAnswered.ToString("d,MMMM yy"); } } listModel.Add(model); } } else { var questions = _applicationDbContext.Questions.Include(dc => dc.DiscussionCategory).OrderByDescending(d => d.DateAsked).ToList(); foreach (var q in questions) { var answers = _applicationDbContext.AnswerToQuestions.Where(id => id.QuestionId == q.QuestionId).ToList(); QuestionListWithOwnerAndLastParticipantViewModel model = new QuestionListWithOwnerAndLastParticipantViewModel(); model.QuestionId = q.QuestionId; model.Title = q.Title; model.DiscussionCategory = q.DiscussionCategory.Name; model.DateAsked = q.DateAsked.ToString("d,MMMM yy"); DateTime commentDate = DateTime.UtcNow.Date; DateTime answerDate = DateTime.UtcNow.Date; var userName = _applicationDbContext.Users.Find(q.UserId); var getQuestionComment = _applicationDbContext.QuestionComments.Where(id => id.QuestionId == q.QuestionId).OrderByDescending(p => p.QuestionCommentId).FirstOrDefault(); var getAnswerComment = _applicationDbContext.AnswerToQuestions.Where(id => id.QuestionId == q.QuestionId).OrderByDescending(p => p.AnswerToQuestionId).FirstOrDefault(); model.QuestionOwner = userName.NameExtension; if (answers != null) { model.AnswerCount = answers.Count; } else { model.AnswerCount = 0; } if (getQuestionComment == null) { model.LastParticipantOwner = userName.NameExtension; model.LastParticipantDate = q.DateAsked.ToString("d,MMMM yy"); commentDate = q.DateAsked; } else { commentDate = getQuestionComment.DateCommented; } if (getAnswerComment == null) { model.LastParticipantOwner = userName.NameExtension; model.LastParticipantDate = q.DateAsked.ToString("d,MMM yy"); answerDate = q.DateAsked; } else { answerDate = getAnswerComment.DateAnswered; } if (getQuestionComment != null) { if (commentDate >= answerDate) { var commentOwner = _applicationDbContext.Users.Find(getQuestionComment.UserId); model.LastParticipantOwner = commentOwner.NameExtension; model.LastParticipantDate = getQuestionComment.DateCommented.ToString("d,MMMM yy"); } } if (getAnswerComment != null) { if (commentDate <= answerDate) { var questionOwner = _applicationDbContext.Users.Find(getAnswerComment.UserId); model.LastParticipantOwner = questionOwner.NameExtension; model.LastParticipantDate = getAnswerComment.DateAnswered.ToString("d,MMMM yy"); } } listModel.Add(model); } } HtmlToText convert = new HtmlToText(); var topReport = _applicationDbContext.Reports .OrderByDescending(dt => dt.DateCreated) .Take(7); foreach (var top in topReport) { TopTenReport rmodel = new TopTenReport(); rmodel.ReportText = convert.Convert(top.ReportText); rmodel.ReportId = top.ReportId; rmodel.Title = top.Title; rmodel.ReportDate = top.DateCreated; reportList.Add(rmodel); } var mostLikedQuestion = _applicationDbContext.QuestionLikes.ToList(); var itemsWithTotals = mostLikedQuestion .GroupBy(item => item.QuestionId) .Select(groupByQId => new { QuestionId = groupByQId.Key, Total = groupByQId.Count() }) .OrderByDescending(t => t.Total) .Take(7); foreach (var item in itemsWithTotals) { var getQuestion = this._applicationDbContext.Questions.SingleOrDefault(id => id.QuestionId == item.QuestionId); MostLikeQuestion mModel = new MostLikeQuestion(); mModel.QuestionId = item.QuestionId; mModel.QuestionLikeCount = item.Total; mModel.QuestionTitle = getQuestion.Title; mModel.QuestionText = getQuestion.QuestionText; mModel.DateAsked = getQuestion.DateAsked; likeList.Add(mModel); } var topSevenQuestion = _applicationDbContext.Questions .OrderByDescending(dt => dt.DateAsked) .Take(7); foreach (var qs in topSevenQuestion) { TopSevenQuestions qmodel = new TopSevenQuestions(); qmodel.QuestionId = qs.QuestionId; qmodel.QuestionTitle = qs.Title; qmodel.QuestionText = convert.Convert(qs.QuestionText); qmodel.DateAsked = qs.DateAsked; topQList.Add(qmodel); } int pageSize = 50; int pageNumber = page ?? 1; ViewBag.DiscussionCategory = new SelectList(_applicationDbContext.DiscussionCategories, "DiscussionCategoryId", "Name"); mainModel.TopTenReports = reportList; mainModel.TopSevenQuestions = topQList; mainModel.MostLikeQuestions = likeList; mainModel.QuestionListWithOwnerAndLastParticipantViewModels = listModel.ToPagedList <QuestionListWithOwnerAndLastParticipantViewModel>(pageNumber, pageSize); return(View(mainModel)); }
public ActionResult QuestionList(int q, string sort, string search, int?page) { QuestionAndReportViewModel mainModel = new QuestionAndReportViewModel(); HtmlToText convert = new HtmlToText(); ViewBag.NewestSort = sort == "newestsearch" ? "newest_desc" : "newest_search"; ViewBag.OldestSort = sort == "oldestsearch" ? "oldest_asec" : "oldest_search"; ViewBag.CurrentSort = sort; ViewBag.CurrentSearch = search; var questModel = _applicationDbContext.Questions.Where(catId => catId.DiscussionCategoryId == q).Include(d => d.DiscussionCategory) .OrderByDescending(dt => dt.DateAsked).ToList(); var questList = new List <QuestionListViewModel>(); var reportList = new List <TopTenReport>(); var topQList = new List <TopSevenQuestions>(); var likeList = new List <MostLikeQuestion>(); foreach (var quest in questModel) { if (!String.IsNullOrEmpty(search)) { if (quest.Title.ToLower().Contains(search) || quest.Title.ToLower().Contains(search) || quest.Tag.ToLower().Contains(search)) { QuestionListViewModel model = new QuestionListViewModel(); var answers = _applicationDbContext.AnswerToQuestions.Where(id => id.QuestionId == quest.QuestionId).ToList(); model.QuestionId = quest.QuestionId; model.Title = quest.Title; model.DiscussionCategory = quest.DiscussionCategory.Name; model.DateAsked = quest.DateAsked.ToString("d,MMMM yy"); DateTime commentDate = DateTime.UtcNow.Date; DateTime answerDate = DateTime.UtcNow.Date; var userName = _applicationDbContext.Users.Find(quest.UserId); var getQuestionComment = _applicationDbContext.QuestionComments.Where(id => id.QuestionId == quest.QuestionId).OrderByDescending(p => p.QuestionCommentId).FirstOrDefault(); var getAnswerComment = _applicationDbContext.AnswerToQuestions.Where(id => id.QuestionId == quest.QuestionId).OrderByDescending(p => p.AnswerToQuestionId).FirstOrDefault(); model.QuestionOwner = userName.NameExtension; if (answers != null) { model.AnswerCount = answers.Count; } else { model.AnswerCount = 0; } if (getQuestionComment == null) { model.LastParticipantOwner = userName.NameExtension; model.LastParticipantDate = quest.DateAsked.ToString("d,MMMM yy"); commentDate = quest.DateAsked; } else { commentDate = getQuestionComment.DateCommented; } if (getAnswerComment == null) { model.LastParticipantOwner = userName.NameExtension; model.LastParticipantDate = quest.DateAsked.ToString("d,MMM yy"); answerDate = quest.DateAsked; } else { answerDate = getAnswerComment.DateAnswered; } if (getQuestionComment != null) { if (commentDate >= answerDate) { var commentOwner = _applicationDbContext.Users.Find(getQuestionComment.UserId); model.LastParticipantOwner = commentOwner.NameExtension; model.LastParticipantDate = getQuestionComment.DateCommented.ToString("d,MMMM yy"); } } if (getAnswerComment != null) { if (commentDate <= answerDate) { var questionOwner = _applicationDbContext.Users.Find(getAnswerComment.UserId); model.LastParticipantOwner = questionOwner.NameExtension; model.LastParticipantDate = getAnswerComment.DateAnswered.ToString("d,MMMM yy"); } } questList.Add(model); string title = quest.DiscussionCategory.Description; string PageTitle = Regex.Replace(title, "[^A-Za-z0-9]", "-"); ViewBag.PageTitle = PageTitle; } else { } } else { QuestionListViewModel model = new QuestionListViewModel(); var answers = _applicationDbContext.AnswerToQuestions.Where(id => id.QuestionId == quest.QuestionId).ToList(); model.QuestionId = quest.QuestionId; model.Title = quest.Title; model.DiscussionCategory = quest.DiscussionCategory.Name; model.DateAsked = quest.DateAsked.ToString("d,MMMM yy"); DateTime commentDate = DateTime.UtcNow.Date; DateTime answerDate = DateTime.UtcNow.Date; var userName = _applicationDbContext.Users.Find(quest.UserId); var getQuestionComment = _applicationDbContext.QuestionComments.Where(id => id.QuestionId == quest.QuestionId).OrderByDescending(p => p.QuestionCommentId).FirstOrDefault(); var getAnswerComment = _applicationDbContext.AnswerToQuestions.Where(id => id.QuestionId == quest.QuestionId).OrderByDescending(p => p.AnswerToQuestionId).FirstOrDefault(); model.QuestionOwner = userName.NameExtension; if (answers != null) { model.AnswerCount = answers.Count; } else { model.AnswerCount = 0; } if (getQuestionComment == null) { model.LastParticipantOwner = userName.NameExtension; model.LastParticipantDate = quest.DateAsked.ToString("d,MMMM yy"); commentDate = quest.DateAsked; } else { commentDate = getQuestionComment.DateCommented; } if (getAnswerComment == null) { model.LastParticipantOwner = userName.NameExtension; model.LastParticipantDate = quest.DateAsked.ToString("d,MMM yy"); answerDate = quest.DateAsked; } else { answerDate = getAnswerComment.DateAnswered; } if (getQuestionComment != null) { if (commentDate >= answerDate) { var commentOwner = _applicationDbContext.Users.Find(getQuestionComment.UserId); model.LastParticipantOwner = commentOwner.NameExtension; model.LastParticipantDate = getQuestionComment.DateCommented.ToString("d,MMMM yy"); } } if (getAnswerComment != null) { if (commentDate <= answerDate) { var questionOwner = _applicationDbContext.Users.Find(getAnswerComment.UserId); model.LastParticipantOwner = questionOwner.NameExtension; model.LastParticipantDate = getAnswerComment.DateAnswered.ToString("d,MMMM yy"); } } questList.Add(model); string title = quest.DiscussionCategory.Description; string PageTitle = Regex.Replace(title, "[^A-Za-z0-9]", "-"); ViewBag.PageTitle = PageTitle; } } if (questList.Count == 0) { mainModel.QuestionCount = 0; } if (questList.Count > 0) { mainModel.QuestionCount = 1; } var CategoryName = _applicationDbContext.DiscussionCategories.SingleOrDefault(d => d.DiscussionCategoryId == q); var topReport = _applicationDbContext.Reports .OrderByDescending(dt => dt.DateCreated) .Take(7); foreach (var top in topReport) { TopTenReport rmodel = new TopTenReport(); rmodel.ReportText = convert.Convert(top.ReportText); rmodel.ReportId = top.ReportId; rmodel.Title = top.Title; rmodel.ReportDate = top.DateCreated; reportList.Add(rmodel); } var mostLikedQuestion = _applicationDbContext.QuestionLikes.ToList(); var itemsWithTotals = mostLikedQuestion .GroupBy(item => item.QuestionId) .Select(groupByQId => new { QuestionId = groupByQId.Key, Total = groupByQId.Count() }) .OrderByDescending(t => t.Total) .Take(7); foreach (var item in itemsWithTotals) { var getQuestion = this._applicationDbContext.Questions.SingleOrDefault(id => id.QuestionId == item.QuestionId); MostLikeQuestion mModel = new MostLikeQuestion(); mModel.QuestionId = item.QuestionId; mModel.QuestionLikeCount = item.Total; mModel.QuestionTitle = getQuestion.Title; mModel.QuestionText = getQuestion.QuestionText; mModel.DateAsked = getQuestion.DateAsked; likeList.Add(mModel); } var topSevenQuestion = _applicationDbContext.Questions .OrderByDescending(dt => dt.DateAsked) .Take(7); foreach (var qs in topSevenQuestion) { TopSevenQuestions qmodel = new TopSevenQuestions(); qmodel.QuestionId = qs.QuestionId; qmodel.QuestionTitle = qs.Title; qmodel.QuestionText = convert.Convert(qs.QuestionText); topQList.Add(qmodel); } int pageSize = 50; int pageNumber = page ?? 1; ViewBag.Category = CategoryName.Name; ViewBag.q = q; mainModel.TopTenReports = reportList; mainModel.TopSevenQuestions = topQList; mainModel.MostLikeQuestions = likeList; mainModel.QuestionListViewModels = questList.ToPagedList <QuestionListViewModel>(pageNumber, pageSize); return(View(mainModel)); }