diff --git a/OurUmbraco.Site/Views/MacroPartials/Members/QuickMenu.cshtml b/OurUmbraco.Site/Views/MacroPartials/Members/QuickMenu.cshtml index 690fb639..1051fb79 100644 --- a/OurUmbraco.Site/Views/MacroPartials/Members/QuickMenu.cshtml +++ b/OurUmbraco.Site/Views/MacroPartials/Members/QuickMenu.cshtml @@ -18,8 +18,7 @@ var roles = System.Web.Security.Roles.GetRolesForUser(); - //TODO: This is apparently for topics that the current user has been active in?? This is certainly not the case. - var latestTopics = topicService.GetAll(maxCount: 100); + var latestTopics = topicService.GetLatestTopicsForMember(member.Id, maxCount: 100);
Close @@ -78,30 +77,29 @@ @foreach (var topic in latestTopics) { - if (topic.MemberId == member.Id || topic.LatestReplyAuthor == member.Id) - { - var forum = Umbraco.TypedContent(topic.ParentId); + var forum = Umbraco.TypedContent(topic.ParentId); - -
- diff --git a/our.umbraco.org/Examine/ForumDataService.cs b/our.umbraco.org/Examine/ForumDataService.cs index 8fd50655..84938872 100644 --- a/our.umbraco.org/Examine/ForumDataService.cs +++ b/our.umbraco.org/Examine/ForumDataService.cs @@ -74,7 +74,7 @@ namespace our.Examine { var ts = new TopicService(ApplicationContext.Current.DatabaseContext); - foreach (var topic in ts.GetAll(maxCount:int.MaxValue)) + foreach (var topic in ts.QueryAll(maxCount:int.MaxValue)) { //Add the item to the index.. var simpleDataSet = new SimpleDataSet { NodeDefinition = new IndexedNode(), RowData = new Dictionary() }; diff --git a/uForum/Services/TopicService.cs b/uForum/Services/TopicService.cs index fe450c65..f2c057e6 100644 --- a/uForum/Services/TopicService.cs +++ b/uForum/Services/TopicService.cs @@ -48,6 +48,43 @@ namespace uForum.Services return _databaseContext.Database.Page(page, take, sql); } + /// + /// Returns an in-memory collection of topics that a given member has participated in + /// + /// + /// + /// + /// + public IEnumerable GetLatestTopicsForMember(int memberId, bool ignoreSpam = true, int maxCount = 100) + { + var sql = new Sql().Select("TOP " + maxCount + " " + + @"forumTopics.*, u1.[text] as LastReplyAuthorName, u2.[text] as AuthorName, + forumComments.body as commentBody, forumComments.created as commentCreated, forumComments.haschildren, + forumComments.id as commentId, forumComments.isSpam as commentIsSpam, forumComments.memberId as commentMemberId, forumComments.parentCommentId, + forumComments.position, forumComments.score, forumComments.topicId") + .From("forumTopics") + .LeftOuterJoin("forumComments").On("forumTopics.id = forumComments.topicId") + .LeftOuterJoin("umbracoNode u1").On("(forumTopics.latestReplyAuthor = u1.id AND u1.nodeObjectType = '39EB0F98-B348-42A1-8662-E7EB18487560')") + .LeftOuterJoin("umbracoNode u2").On("(forumTopics.memberId = u2.id AND u2.nodeObjectType = '39EB0F98-B348-42A1-8662-E7EB18487560')") + .Where(topic => topic.LatestReplyAuthor == memberId || topic.MemberId == memberId); + + if (ignoreSpam) + { + sql.Where(x => x.IsSpam != true); + sql.Where("forumComments.id IS NULL OR (forumComments.isSpam <> 1)"); + } + + sql + .OrderByDescending(x => x.Updated) + .OrderByDescending(comment => comment.Created); + + var result = _databaseContext.Database.Fetch( + new TopicCommentRelator().Map, + sql); + + return result; + } + /// /// Returns a READER of all topics to be iterated over /// @@ -56,7 +93,7 @@ namespace uForum.Services /// Default is 1000 /// /// - public IEnumerable GetAll(bool ignoreSpam = true, int maxCount = 1000) + public IEnumerable QueryAll(bool ignoreSpam = true, int maxCount = 1000) { var sql = new Sql().Select("TOP " + maxCount + " " + @"forumTopics.*, u1.[text] as LastReplyAuthorName, u2.[text] as AuthorName, @@ -76,7 +113,10 @@ namespace uForum.Services sql.Where("forumComments.id IS NULL OR (forumComments.[parentCommentId] = 0)"); - sql.OrderBy(x => x.Updated).OrderByDescending(comment => comment.Created); + //start with the most recent + sql + .OrderByDescending(x => x.Updated) + .OrderByDescending(comment => comment.Created); var result = _databaseContext.Database.Query( new TopicCommentRelator().Map,