Пример #1
0
        public ActionResult PostLink(int id)
        {
            var includeDeleted = false;
            var user           = _userRetrievalShim.GetUser(HttpContext);

            if (user != null && user.IsInRole(PermanentRoles.Moderator))
            {
                includeDeleted = true;
            }
            var post = _postService.Get(id);

            if (post == null || (post.IsDeleted && (user == null || !user.IsInRole(PermanentRoles.Moderator))))
            {
                return(NotFound());
            }
            Topic topic;
            var   page    = _postService.GetTopicPageForPost(post, includeDeleted, out topic);
            var   forum   = _forumService.Get(topic.ForumID);
            var   adapter = new ForumAdapterFactory(forum);

            if (adapter.IsAdapterEnabled)
            {
                var result = adapter.ForumAdapter.AdaptPostLink(this, post, topic, forum);
                if (result != null)
                {
                    return(result);
                }
            }
            var url = Url.Action("Topic", new { id = topic.UrlName, page }) + "#" + post.PostID;

            return(Redirect(url));
        }
Пример #2
0
        public static void ClassInit(TestContext context)
        {
            serviceProvider = TestStartup.ConfigureServices();

            pageProvider        = serviceProvider.GetRequiredService <IPageProvider>();
            forumAdapterFactory = serviceProvider.GetRequiredService <ForumAdapterFactory>();
        }
Пример #3
0
        public ActionResult Index(string urlName, int page = 1)
        {
            var forum = _forumService.Get(urlName);

            if (forum == null)
            {
                return(this.NotFound("NotFound", null));
            }
            var user = this.CurrentUser();
            var permissionContext = _forumService.GetPermissionContext(forum, user);

            if (!permissionContext.UserCanView)
            {
                return(this.Forbidden("Forbidden", null));
            }
            var closureDate = _categoryService.GetValue().ClosureDate.Date;

            if (DateTime.Now.Date > closureDate)
            {
                permissionContext.NotPost = true;
            }
            PagerContext pagerContext;
            var          topics = _topicService.GetTopics(forum, permissionContext.UserCanModerate, page, out pagerContext);

            if (this.CurrentUser().UserType == 1)
            {
                foreach (var item in topics)
                {
                    item.ReplyCount = _postService.GetReplyCountByStudent(item.TopicID, false, 0);
                }
            }
            var container = new ForumTopicContainer {
                Forum = forum, Topics = topics, PagerContext = pagerContext, PermissionContext = permissionContext
            };

            _lastReadService.GetTopicReadStatus(user, container);
            var adapter = new ForumAdapterFactory(forum);

            if (adapter.IsAdapterEnabled)
            {
                adapter.ForumAdapter.AdaptForum(this, container);
                if (String.IsNullOrWhiteSpace(adapter.ForumAdapter.ViewName))
                {
                    return(View(adapter.ForumAdapter.Model));
                }
                return(View(adapter.ForumAdapter.ViewName, adapter.ForumAdapter.Model));
            }
            if (forum.IsQAForum)
            {
                return(View("IndexQA", container));
            }
            return(View(container));
        }
Пример #4
0
        public ActionResult Index(string urlName, int page = 1)
        {
            if (String.IsNullOrWhiteSpace(urlName))
            {
                return(NotFound());
            }
            var forum = _forumService.Get(urlName);

            if (forum == null)
            {
                return(NotFound());
            }
            var user = _userRetrievalShim.GetUser(HttpContext);
            var permissionContext = _forumService.GetPermissionContext(forum, user);

            if (!permissionContext.UserCanView)
            {
                return(Forbid());
            }

            PagerContext pagerContext;
            var          topics    = _topicService.GetTopics(forum, permissionContext.UserCanModerate, page, out pagerContext);
            var          container = new ForumTopicContainer {
                Forum = forum, Topics = topics, PagerContext = pagerContext, PermissionContext = permissionContext
            };

            _lastReadService.GetTopicReadStatus(user, container);
            var adapter = new ForumAdapterFactory(forum);

            if (adapter.IsAdapterEnabled)
            {
                adapter.ForumAdapter.AdaptForum(this, container);
                if (String.IsNullOrWhiteSpace(adapter.ForumAdapter.ViewName))
                {
                    return(View(adapter.ForumAdapter.Model));
                }
                return(View(adapter.ForumAdapter.ViewName, adapter.ForumAdapter.Model));
            }
            if (forum.IsQAForum)
            {
                return(View("IndexQA", container));
            }
            return(View(container));
        }
Пример #5
0
        public async Task <ActionResult> Index(string urlName, int pageNumber = 1)
        {
            if (string.IsNullOrWhiteSpace(urlName))
            {
                return(NotFound());
            }
            var forum = await _forumService.Get(urlName);

            if (forum == null)
            {
                return(NotFound());
            }
            var user = _userRetrievalShim.GetUser();
            var permissionContext = await _forumPermissionService.GetPermissionContext(forum, user);

            if (!permissionContext.UserCanView)
            {
                return(StatusCode(403));
            }

            var(topics, pagerContext) = await _topicService.GetTopics(forum, permissionContext.UserCanModerate, pageNumber);

            var container = new ForumTopicContainer {
                Forum = forum, Topics = topics, PagerContext = pagerContext, PermissionContext = permissionContext
            };
            await _lastReadService.GetTopicReadStatus(user, container);

            var adapter = new ForumAdapterFactory(forum);

            if (adapter.IsAdapterEnabled)
            {
                adapter.ForumAdapter.AdaptForum(this, container);
                if (string.IsNullOrWhiteSpace(adapter.ForumAdapter.ViewName))
                {
                    return(View(adapter.ForumAdapter.Model));
                }
                return(View(adapter.ForumAdapter.ViewName, adapter.ForumAdapter.Model));
            }
            if (forum.IsQAForum)
            {
                return(View("IndexQA", container));
            }
            return(View(container));
        }
Пример #6
0
        public TallyOutput(
            IVoteCounter counter,
            RankVoteCounterFactory rankVoteCounterFactory,
            ForumAdapterFactory forumAdapterFactory,
            IGeneralOutputOptions options)
        {
            voteCounter   = counter;
            outputOptions = options;

            rankVoteCounter = rankVoteCounterFactory.CreateRankVoteCounter(options.RankVoteCounterMethod);

            if (voteCounter.Quest != null)
            {
                quest        = voteCounter.Quest;
                forumAdapter = forumAdapterFactory.CreateForumAdapter(quest.ForumType, quest.ThreadUri);
            }
            else
            {
                quest        = new Quest();
                forumAdapter = forumAdapterFactory.CreateForumAdapter(ForumType.Unknown, Quest.InvalidThreadUri);
            }
        }
Пример #7
0
        public ActionResult Topic(string id, int page = 1)
        {
            var topic = _topicService.Get(id);

            if (topic == null)
            {
                return(NotFound());
            }
            var forum = _forumService.Get(topic.ForumID);

            if (forum == null)
            {
                throw new Exception(String.Format("TopicID {0} references ForumID {1}, which does not exist.", topic.TopicID, topic.ForumID));
            }

            var user              = _userRetrievalShim.GetUser(HttpContext);
            var adapter           = new ForumAdapterFactory(forum);
            var permissionContext = _forumService.GetPermissionContext(forum, user, topic);

            if (!permissionContext.UserCanView)
            {
                return(Forbid());
            }

            PagerContext pagerContext = null;
            var          isSubscribed = false;
            var          isFavorite   = false;
            DateTime?    lastReadTime = DateTime.UtcNow;

            if (user != null)
            {
                lastReadTime = _lastReadService.GetLastReadTime(user, topic);
                isFavorite   = _favoriteTopicService.IsTopicFavorite(user, topic);
                isSubscribed = _subService.IsTopicSubscribed(user, topic);
                if (isSubscribed)
                {
                    _subService.MarkSubscribedTopicViewed(user, topic);
                }
                if (!adapter.IsAdapterEnabled || (adapter.IsAdapterEnabled && adapter.ForumAdapter.MarkViewedTopicRead))
                {
                    _lastReadService.MarkTopicRead(user, topic);
                }
                if (user.IsInRole(PermanentRoles.Moderator))
                {
                    ViewBag.CategorizedForums = _forumService.GetCategorizedForumContainer();
                }
            }
            List <Post> posts;

            if (forum.IsQAForum)
            {
                posts = _postService.GetPosts(topic, permissionContext.UserCanModerate);
            }
            else
            {
                posts = _postService.GetPosts(topic, permissionContext.UserCanModerate, page, out pagerContext);
            }
            if (posts.Count == 0)
            {
                return(NotFound());
            }
            var signatures = _profileService.GetSignatures(posts);
            var avatars    = _profileService.GetAvatars(posts);
            var votedIDs   = _postService.GetVotedPostIDs(user, posts);
            var container  = ComposeTopicContainer(topic, forum, permissionContext, isSubscribed, posts, pagerContext, isFavorite, signatures, avatars, votedIDs, lastReadTime);

            _topicViewCountService.ProcessView(topic, HttpContext);
            if (adapter.IsAdapterEnabled)
            {
                adapter.ForumAdapter.AdaptTopic(this, container);
                if (String.IsNullOrWhiteSpace(adapter.ForumAdapter.ViewName))
                {
                    return(View(adapter.ForumAdapter.Model));
                }
                return(View(adapter.ForumAdapter.ViewName, adapter.ForumAdapter.Model));
            }
            if (forum.IsQAForum)
            {
                var containerForQA = _forumService.MapTopicContainerForQA(container);
                return(View("TopicQA", containerForQA));
            }
            return(View(container));
        }
Пример #8
0
        public async Task <ActionResult> Topic(string id, int pageNumber = 1)
        {
            var topic = await _topicService.Get(id);

            if (topic == null)
            {
                return(NotFound());
            }
            var forum = await _forumService.Get(topic.ForumID);

            if (forum == null)
            {
                throw new Exception($"TopicID {topic.TopicID} references ForumID {topic.ForumID}, which does not exist.");
            }

            var user              = _userRetrievalShim.GetUser();
            var adapter           = new ForumAdapterFactory(forum);
            var permissionContext = await _forumPermissionService.GetPermissionContext(forum, user, topic);

            if (!permissionContext.UserCanView)
            {
                return(NotFound());
            }

            PagerContext pagerContext = null;
            var          isSubscribed = false;
            var          isFavorite   = false;
            DateTime?    lastReadTime = DateTime.UtcNow;

            if (user != null)
            {
                lastReadTime = await _lastReadService.GetLastReadTime(user, topic);

                isFavorite = await _favoriteTopicService.IsTopicFavorite(user, topic);

                isSubscribed = await _subService.IsTopicSubscribed(user, topic);

                if (isSubscribed)
                {
                    await _subService.MarkSubscribedTopicViewed(user, topic);
                }
                if (!adapter.IsAdapterEnabled || (adapter.IsAdapterEnabled && adapter.ForumAdapter.MarkViewedTopicRead))
                {
                    await _lastReadService.MarkTopicRead(user, topic);
                }
                if (user.IsInRole(PermanentRoles.Moderator))
                {
                    var categorizedForums = await _forumService.GetCategorizedForumContainer();

                    var categorizedForumSelectList = new List <SelectListItem>();
                    foreach (var uncategorizedForum in categorizedForums.UncategorizedForums)
                    {
                        categorizedForumSelectList.Add(new SelectListItem {
                            Value = uncategorizedForum.ForumID.ToString(), Text = uncategorizedForum.Title, Selected = forum.ForumID == uncategorizedForum.ForumID
                        });
                    }
                    foreach (var categoryPair in categorizedForums.CategoryDictionary)
                    {
                        var group = new SelectListGroup {
                            Name = categoryPair.Key.Title
                        };
                        foreach (var categorizedForum in categoryPair.Value)
                        {
                            categorizedForumSelectList.Add(new SelectListItem {
                                Value = categorizedForum.ForumID.ToString(), Text = categorizedForum.Title, Selected = forum.ForumID == categorizedForum.ForumID, Group = group
                            });
                        }
                    }
                    ViewBag.CategorizedForums = categorizedForumSelectList;
                }
            }
            List <Post> posts;

            if (forum.IsQAForum)
            {
                posts = await _postService.GetPosts(topic, permissionContext.UserCanModerate);
            }
            else
            {
                (posts, pagerContext) = await _postService.GetPosts(topic, permissionContext.UserCanModerate, pageNumber);
            }
            if (posts.Count == 0)
            {
                return(NotFound());
            }
            var signatures = await _profileService.GetSignatures(posts);

            var avatars = await _profileService.GetAvatars(posts);

            var votedIDs = await _postService.GetVotedPostIDs(user, posts);

            var container = ComposeTopicContainer(topic, forum, permissionContext, isSubscribed, posts, pagerContext, isFavorite, signatures, avatars, votedIDs, lastReadTime);
            await _topicViewCountService.ProcessView(topic);

            await _topicViewLogService.LogView(user?.UserID, topic.TopicID);

            if (adapter.IsAdapterEnabled)
            {
                adapter.ForumAdapter.AdaptTopic(this, container);
                if (string.IsNullOrWhiteSpace(adapter.ForumAdapter.ViewName))
                {
                    return(View(adapter.ForumAdapter.Model));
                }
                return(View(adapter.ForumAdapter.ViewName, adapter.ForumAdapter.Model));
            }
            if (forum.IsQAForum)
            {
                var containerForQA = _forumService.MapTopicContainerForQA(container);
                return(View("TopicQA", containerForQA));
            }
            return(View(container));
        }
Пример #9
0
        public ViewResult Topic(string id, int page = 1)
        {
            var topic = _topicService.Get(id);

            if (topic == null)
            {
                return(this.NotFound("NotFound", null));
            }
            var forum = _forumService.Get(topic.ForumID);

            if (forum == null)
            {
                throw new Exception(String.Format("TopicID {0} references ForumID {1}, which does not exist.", topic.TopicID, topic.ForumID));
            }

            var adapter           = new ForumAdapterFactory(forum);
            var permissionContext = _forumService.GetPermissionContext(forum, this.CurrentUser(), topic);

            if (!permissionContext.UserCanView)
            {
                return(this.Forbidden("Forbidden", null));
            }
            //var category = _categoryService.Get(forum.CategoryID??0);
            //if (category.ClosureDate.Date < DateTime.Now.Date)
            //{
            //    topic.NotReply = true;
            //}
            var closureDate = _categoryService.GetValue();

            if (DateTime.Now.Date > closureDate.ClosureDate.Date)
            {
                topic.NotPostAll = true;
            }
            if (DateTime.Now.Date > closureDate.FinalClosureDate.Date)
            {
                topic.NotReply = true;
            }
            PagerContext pagerContext = null;
            var          isSubscribed = false;
            var          isFavorite   = false;
            var          user         = this.CurrentUser();

            if (user != null)
            {
                isFavorite   = _favoriteTopicService.IsTopicFavorite(user, topic);
                isSubscribed = _subService.IsTopicSubscribed(user, topic);
                if (isSubscribed)
                {
                    _subService.MarkSubscribedTopicViewed(user, topic);
                }
                if (!adapter.IsAdapterEnabled || (adapter.IsAdapterEnabled && adapter.ForumAdapter.MarkViewedTopicRead))
                {
                    _lastReadService.MarkTopicRead(user, topic);
                }
                if (user.IsInRole(PermanentRoles.Moderator))
                {
                    ViewBag.CategorizedForums = _forumService.GetCategorizedForumContainer();
                }
            }
            List <Post> posts;

            if (forum.IsQAForum)
            {
                posts = _postService.GetPosts(topic, permissionContext.UserCanModerate);
            }
            else
            {
                if (this.CurrentUser().UserType > 1) // manager, staff
                {
                    posts = _postService.GetPosts(topic, permissionContext.UserCanModerate, page, out pagerContext);
                }
                else //student
                {
                    posts = _postService.GetPosts(topic, permissionContext.UserCanModerate, page, out pagerContext).Where(a => a.UserType == 1).ToList();
                }
            }

            if (posts.Count == 0)
            {
                return(this.NotFound("NotFound", null));
            }
            var signatures = _profileService.GetSignatures(posts);
            var avatars    = _profileService.GetAvatars(posts);
            var votedIDs   = _postService.GetVotedPostIDs(this.CurrentUser(), posts);


            var container = ComposeTopicContainer(topic, forum, permissionContext, isSubscribed, posts, pagerContext, isFavorite, signatures, avatars, votedIDs);

            _topicViewCountService.ProcessView(topic, HttpContext);
            if (adapter.IsAdapterEnabled)
            {
                adapter.ForumAdapter.AdaptTopic(this, container);
                if (String.IsNullOrWhiteSpace(adapter.ForumAdapter.ViewName))
                {
                    return(View(adapter.ForumAdapter.Model));
                }
                return(View(adapter.ForumAdapter.ViewName, adapter.ForumAdapter.Model));
            }
            if (forum.IsQAForum)
            {
                var containerForQA = _forumService.MapTopicContainerForQA(container);
                return(View("TopicQA", containerForQA));
            }
            return(View(container));
        }