Beispiel #1
0
        public async Task <IActionResult> DisplayPartial(int id, long latest)
        {
            var latestTime = new DateTime(latest);

            var topic = DbContext.Topics.Find(id);

            if (topic is null || topic.Deleted)
            {
                throw new HttpNotFoundError();
            }

            await BoardRepository.GetTopicBoards(id);

            var messageIds = MessageRepository.GetMessageIds(id, latestTime);
            var messages   = await MessageRepository.GetMessages(messageIds);

            var latestMessageTime = messages.Max(r => r.RecordTime);
            await TopicRepository.MarkRead(id, latestMessageTime, messageIds);

            var viewModel = new ViewModels.Topics.TopicDisplayPartialPage {
                Latest   = DateTime.Now.Ticks,
                Messages = messages
            };

            return(await ForumViewResult.ViewResult(this, "DisplayPartial", viewModel));
        }
Beispiel #2
0
        public async Task <IActionResult> Display(int id)
        {
            var message = DbContext.Messages.Find(id);

            if (message is null || message.Deleted)
            {
                throw new HttpNotFoundError();
            }

            var topicId = message.TopicId;
            await BoardRepository.GetTopicBoards(topicId);

            var messageIds = new List <int> {
                id
            };
            var messages = await MessageRepository.GetMessages(messageIds);

            var viewModel = new ViewModels.Topics.TopicDisplayPartialPage {
                Latest   = DateTime.Now.Ticks,
                Messages = messages
            };

            return(await ForumViewResult.ViewResult(this, "../Topics/DisplayPartial", viewModel));
        }
Beispiel #3
0
        public async Task <IActionResult> Display(int id, int page = 1, int target = -1)
        {
            var topic = await DbContext.Topics.FindAsync(id);

            if (topic is null || topic.Deleted)
            {
                throw new HttpNotFoundError();
            }

            if (page < 1)
            {
                var redirectUrl = Url.Action(nameof(Display), new { id, page = 1, target });
                return(Redirect(redirectUrl));
            }

            var messageIds = MessageRepository.GetMessageIds(topic.Id);

            if (target >= 0)
            {
                var targetPage = MessageRepository.GetPageNumber(target, messageIds);

                if (targetPage != page)
                {
                    return(Redirect(GetRedirectPath(id, targetPage, target)));
                }
            }

            var take           = CurrentUser.ApplicationUser.MessagesPerPage;
            var skip           = take * (page - 1);
            var totalPages     = Convert.ToInt32(Math.Ceiling(1.0 * messageIds.Count / take));
            var pageMessageIds = messageIds.Skip(skip).Take(take).ToList();

            var viewModel = new ViewModels.Topics.TopicDisplayPage {
                Id              = topic.Id,
                FirstMessageId  = topic.FirstMessageId,
                Subject         = string.IsNullOrEmpty(topic.FirstMessageShortPreview) ? "No subject" : topic.FirstMessageShortPreview,
                AssignedBoards  = new List <ViewModels.Boards.IndexBoard>(),
                IsAuthenticated = CurrentUser.IsAuthenticated,
                IsOwner         = topic.FirstMessagePostedById == CurrentUser.Id,
                IsAdmin         = CurrentUser.IsAdmin,
                IsPinned        = topic.Pinned,
                ShowFavicons    = CurrentUser.ApplicationUser.ShowFavicons,
                TotalPages      = totalPages,
                ReplyCount      = topic.ReplyCount,
                ViewCount       = topic.ViewCount,
                CurrentPage     = page,
                ReplyForm       = new ViewModels.Messages.ReplyForm {
                    Id        = "0",
                    TopicId   = topic.Id.ToString(),
                    ElementId = "topic-reply"
                }
            };

            await isBookmarked();
            await loadMessages();
            await loadCategories();
            await loadTopicBoards();
            await loadSmileyViewData();

            return(await ForumViewResult.ViewResult(this, viewModel));

            async Task isBookmarked()
            {
                viewModel.IsBookmarked = await BookmarkRepository.IsBookmarked(topic.Id);
            }

            async Task loadMessages()
            {
                viewModel.Messages = await MessageRepository.GetMessages(pageMessageIds);

                var latestMessageTime = viewModel.Messages.Max(r => r.RecordTime);
                await TopicRepository.MarkRead(topic.Id, latestMessageTime, pageMessageIds);

                topic.ViewCount++;
                DbContext.Update(topic);
                await DbContext.SaveChangesAsync();
            }

            async Task loadCategories()
            {
                viewModel.Categories = await BoardRepository.CategoryIndex();
            }

            async Task loadTopicBoards()
            {
                var topicBoards = await BoardRepository.GetTopicBoards(topic.Id);

                foreach (var topicBoard in topicBoards)
                {
                    var indexBoard = await BoardRepository.GetIndexBoard(topicBoard);

                    viewModel.AssignedBoards.Add(indexBoard);
                }
            }

            async Task loadSmileyViewData()
            {
                ViewData[Constants.InternalKeys.SmileyViewData] = await SmileyRepository.GetSelectorList();
            }
        }