Пример #1
0
        public ViewResult Message(int threadID, int page)
        {
            var thread = messageRepository
                         .Where((MessageThread t) => t.ID == threadID)
                         .First();

            var vm = new ViewThreadViewModel(thread, 10, page);

            messageService.MarkAsRead(threadID, SessionHelper.CurrentEntity.EntityID);

            return(View(vm));
        }
Пример #2
0
        //GET: Forum/ViewThread/{int}
        public ActionResult ViewThread(int?page, int?ID)
        {
            if (ID == null)
            {
                return(View("Error"));
            }
            var db          = new ApplicationDbContext();
            var posts       = db.Posts.Where(u => u.ThreadID == ID).OrderBy(u => u.TimeDate).ToList();
            var thread      = db.Threads.Where(u => u.ThreadID == ID).FirstOrDefault();
            var currentPage = page ?? 1;
            var model       = new ViewThreadViewModel
            {
                Thread = thread,
                Posts  = posts.ToPagedList(currentPage, DefaultPageSize)
            };

            return(View(model));
        }
Пример #3
0
        public ActionResult Message(int threadID)
        {
            var thread = messageRepository
                         .Where((MessageThread t) => t.ID == threadID)
                         .FirstOrDefault();

            if (thread == null)
            {
                return(RedirectToHomeWithError("Thread does not exist!"));
            }

            var vm = new ViewThreadViewModel();

            vm.InitPagingParams(thread, 10, 0);
            vm.Paging.PageNumber = vm.Paging.PageCount - 1;
            vm.Initialize(thread, 10);

            messageService.MarkAsRead(threadID, SessionHelper.CurrentEntity.EntityID);

            return(View(vm));
        }
Пример #4
0
        public ActionResult ViewThread(int ThreadID, int?PostID, bool LastPost = false, int Page = 1)
        {
            Thread thread = _threadServices.GetThread(ThreadID);

            if (!_permissionServices.CanView(thread.ForumID, _currentUser.UserID) && thread.Type != 4)
            {
                SetNotice("You can't view this forum");
                return(RedirectToAction("Index"));
            }

            if (User.Identity.IsAuthenticated)
            {
                _threadServices.ThreadViewed(ThreadID, _currentUser.UserID);
            }

            int PostCount   = thread.Posts.Count;
            int PageSize    = int.Parse(SiteConfig.PostsPerPage.Value);
            int PageCount   = (int)Math.Ceiling(((decimal)PostCount / PageSize));
            int CurrentPage = LastPost ? PageCount : Page;

            if (PostID != null)
            {
                Post post = _postServices.GetPost(PostID.Value);
                IEnumerable <Post> AllPosts = _threadServices.GetPosts(ThreadID);
                int Position = AllPosts.ToList().IndexOf(post) + 1;
                CurrentPage = (int)Math.Ceiling(((decimal)Position / PageSize));
            }

            SetBreadCrumb(thread.Title);

            Pagination Pagination = new Pagination(CurrentPage, PostCount, PageSize, "ViewThread", "Board", new { ThreadID = ThreadID });

            int lastPostId = thread.Posts.OrderByDescending(item => item.Date).FirstOrDefault().PostID;

            IEnumerable <Post> PagedPosts = _postServices.GetPagedPosts(ThreadID, CurrentPage, PageSize);

            bool hasPermissions = _roleServices.UserHasSpecialPermissions(_currentUser.UserID, SpecialPermissionValue.Administrator, SpecialPermissionValue.Moderator);
            bool canReply       = _permissionServices.CanReply(thread.ForumID, _currentUser.UserID);

            IEnumerable <PostRow> postRows = PagedPosts.Select((x, i) => new PostRow
            {
                Post            = x,
                CurrentUser     = _currentUser,
                Thread          = thread,
                CanEdit         = hasPermissions ? true : (x.UserID == _currentUser.UserID ? _postServices.CanEditPost(x.PostID, _currentUser.UserID) : false),
                CanDelete       = hasPermissions ? true : (x.UserID == _currentUser.UserID ? _postServices.CanDeletePost(x.PostID, _currentUser.UserID) : false),
                CanPost         = canReply,
                IsLastPost      = x.PostID == lastPostId,
                IsOdd           = i % 2 != 0,
                CurrentTheme    = _currentTheme,
                IsAuthenticated = User.Identity.IsAuthenticated
            });

            var model = new ViewThreadViewModel
            {
                Thread        = thread,
                Posts         = postRows,
                Pagination    = Pagination,
                CanCastVote   = _permissionServices.CanCastVote(thread.ForumID, _currentUser.UserID),
                HasVoted      = _pollServices.HasVoted(thread.ThreadID, _currentUser.UserID),
                IsSubscribed  = _threadServices.IsSubscribed(thread.ThreadID, _currentUser.UserID),
                ThreadActions = new ThreadActions
                {
                    CanLock     = _permissionServices.CanLock(thread.ThreadID, _currentUser.UserID),
                    CurrentUser = _currentUser,
                    Thread      = thread
                },
                CurrentUser = _currentUser,
            };

            if (thread.HasPoll)
            {
                var threadPoll = new ThreadPoll()
                {
                    CanCastVote = model.CanCastVote && !model.HasVoted && !thread.IsLocked,
                    CurrentUser = _currentUser,
                    Poll        = thread.Poll
                };

                model.ThreadPoll = threadPoll;
            }

            return(View(model));
        }