public void UndeleteTopic(Topic topic, User user) { if (user.IsInRole(PermanentRoles.Moderator)) { _moderationLogService.LogTopic(user, ModerationType.TopicUndelete, topic, null); _topicRepository.UndeleteTopic(topic.TopicID); RecalculateReplyCount(topic); var forum = _forumService.Get(topic.ForumID); _forumService.UpdateCounts(forum); _forumService.UpdateLast(forum); } else throw new InvalidOperationException("User must be Moderator to undelete topic."); }
public void UpdateTitleAndForum(Topic topic, Forum forum, string newTitle, User user) { if (user.IsInRole(PermanentRoles.Moderator)) { var oldTopic = _topicRepository.Get(topic.TopicID); if (oldTopic.ForumID != forum.ForumID) _moderationLogService.LogTopic(user, ModerationType.TopicMoved, topic, forum, String.Format("Moved from {0} to {1}", oldTopic.ForumID, forum.ForumID)); if (oldTopic.Title != newTitle) _moderationLogService.LogTopic(user, ModerationType.TopicRenamed, topic, forum, String.Format("Renamed from \"{0}\" to \"{1}\"", oldTopic.Title, newTitle)); var urlName = newTitle.ToUniqueUrlName(_topicRepository.GetUrlNamesThatStartWith(newTitle.ToUrlName())); topic.UrlName = urlName; _topicRepository.UpdateTitleAndForum(topic.TopicID, forum.ForumID, newTitle, urlName); _topicRepository.MarkTopicForIndexing(topic.TopicID); _forumService.UpdateCounts(forum); _forumService.UpdateLast(forum); var oldForum = _forumService.Get(oldTopic.ForumID); _forumService.UpdateCounts(oldForum); _forumService.UpdateLast(oldForum); } else throw new InvalidOperationException("User must be Moderator to update topic title or move topic."); }
public void HardDeleteTopic(Topic topic, User user) { if (user.IsInRole(PermanentRoles.Admin)) { _moderationLogService.LogTopic(user, ModerationType.TopicDeletePermanently, topic, null); _searchRepository.DeleteAllIndexedWordsForTopic(topic.TopicID); _topicRepository.HardDeleteTopic(topic.TopicID); var forum = _forumService.Get(topic.ForumID); _forumService.UpdateCounts(forum); _forumService.UpdateLast(forum); } else throw new InvalidOperationException("User must be Admin to hard delete topic."); }
public void UnpinTopic(Topic topic, User user) { if (user.IsInRole(PermanentRoles.Moderator)) { _moderationLogService.LogTopic(user, ModerationType.TopicUnpin, topic, null); _topicRepository.UnpinTopic(topic.TopicID); } else throw new InvalidOperationException("User must be Moderator to unpin topic."); }
public void Undelete(Post post, User user) { if (user.IsInRole(PermanentRoles.Moderator)) { _moderationLogService.LogPost(user, ModerationType.PostUndelete, post, String.Empty, String.Empty); post.IsDeleted = false; post.LastEditTime = DateTime.UtcNow; post.LastEditName = user.Name; post.IsEdited = true; _postRepository.Update(post); var topic = _topicService.Get(post.TopicID); _topicService.RecalculateReplyCount(topic); _topicService.UpdateLast(topic); var forum = _forumService.Get(topic.ForumID); _forumService.UpdateCounts(forum); _forumService.UpdateLast(forum); } else throw new InvalidOperationException("User must be Moderator to undelete post."); }
public ForumPermissionContext GetPermissionContext(Forum forum, User user, Topic topic) { var context = new ForumPermissionContext { DenialReason = String.Empty }; var viewRestrictionRoles = _forumRepository.GetForumViewRoles(forum.ForumID); var postRestrictionRoles = _forumRepository.GetForumPostRoles(forum.ForumID); // view if (viewRestrictionRoles.Count == 0) context.UserCanView = true; else { context.UserCanView = false; if (user != null && viewRestrictionRoles.Where(user.IsInRole).Count() > 0) context.UserCanView = true; } // post if (user == null || !context.UserCanView) { context.UserCanPost = false; context.DenialReason = Resources.LoginToPost; } else if (!user.IsApproved) { context.DenialReason += "You can't post until you have verified your account. "; context.UserCanPost = false; } else { if (postRestrictionRoles.Count == 0) context.UserCanPost = true; else { if (postRestrictionRoles.Where(user.IsInRole).Count() > 0) context.UserCanPost = true; else { context.DenialReason += Resources.ForumNoPost + ". "; context.UserCanPost = false; } } } if (topic != null && topic.IsClosed) { context.UserCanPost = false; context.DenialReason += Resources.Closed + ". "; } if (topic != null && topic.IsDeleted) { if (user == null || !user.IsInRole(PermanentRoles.Moderator)) context.UserCanView = false; context.DenialReason += "Topic is deleted. "; } if (forum.IsArchived) { context.UserCanPost = false; context.DenialReason += Resources.Archived + ". "; } // moderate context.UserCanModerate = false; if (user != null && (user.IsInRole(PermanentRoles.Admin) || user.IsInRole(PermanentRoles.Moderator))) context.UserCanModerate = true; return context; }
public Post GetFirstUnreadPost(User user, Topic topic) { if (topic == null) throw new ArgumentException("Can't use a null topic.", "topic"); var includeDeleted = false; if (user != null && user.IsInRole(PermanentRoles.Moderator)) includeDeleted = true; var postIDs = _postRepository.GetPostIDsWithTimes(topic.TopicID, includeDeleted).Select(d => new { PostID = d.Key, PostTime = d.Value }).ToList(); if (user == null) return _postRepository.Get(postIDs[0].PostID); var lastRead = _lastReadRepository.GetLastReadTimeForTopic(user.UserID, topic.TopicID); if (!lastRead.HasValue) lastRead = _lastReadRepository.GetLastReadTimesForForum(user.UserID, topic.ForumID); if (!lastRead.HasValue || !postIDs.Any(p => p.PostTime > lastRead.Value)) return _postRepository.Get(postIDs[0].PostID); var firstNew = postIDs.First(p => p.PostTime > lastRead.Value); return _postRepository.Get(firstNew.PostID); }