private GetForumsForUser ( string userRoles, int portalId, int moduleId, string permissionType = "CanView" ) : string | ||
userRoles | string | |
portalId | int | |
moduleId | int | |
permissionType | string | |
return | string |
private XmlRpcStruct GetTopicStatus(IEnumerable<int> topicIds) { var aftContext = ActiveForumsTapatalkModuleContext.Create(Context); if (aftContext == null || aftContext.Module == null) throw new XmlRpcFaultException(100, "Invalid Context"); Context.Response.AddHeader("Mobiquo_is_login", aftContext.UserId > 0 ? "true" : "false"); var portalId = aftContext.Module.PortalID; var forumModuleId = aftContext.ModuleSettings.ForumModuleId; var userId = aftContext.UserId; // Build a list of forums the user has access to var fc = new AFTForumController(); var forumIds = fc.GetForumsForUser(aftContext.ForumUser.UserRoles, portalId, forumModuleId, "CanRead"); var topicIdsString = topicIds.Aggregate(string.Empty, (current, topicId) => current + (topicId.ToString() + ";")); var unreadTopics = fc.GetTopicStatus(portalId, forumModuleId, userId, forumIds, topicIdsString).ToList(); return new XmlRpcStruct { {"result", true}, {"status", unreadTopics.Select(t => new TopicStatusStructure(){ TopicId = t.TopicId.ToString(), HasNewPosts = (t.LastReplyId < 0 && t.TopicId > t.UserLastTopicRead) || t.LastReplyId > t.UserLastReplyRead, IsLocked = t.IsLocked, IsSubscribed = t.SubscriptionType > 0, CanSubscribe = ActiveForums.Permissions.HasPerm(aftContext.ForumUser.UserRoles, fc.GetForumPermissions(t.ForumId).CanSubscribe), // GetforumPermissions uses cache so it shouldn't be a performance issue ReplyCount = t.ReplyCount, ViewCount = t.ViewCount, LastReplyDate = t.LastReplyDate }).ToArray()} }; }
public XmlRpcStruct MarkTopicsRead(IEnumerable<int> topicIds) { var aftContext = ActiveForumsTapatalkModuleContext.Create(Context); if (aftContext == null || aftContext.Module == null) throw new XmlRpcFaultException(100, "Invalid Context"); Context.Response.AddHeader("Mobiquo_is_login", aftContext.UserId > 0 ? "true" : "false"); var portalId = aftContext.Module.PortalID; var forumModuleId = aftContext.ModuleSettings.ForumModuleId; var userId = aftContext.UserId; // Build a list of forums the user has access to var fc = new AFTForumController(); var forumIds = fc.GetForumsForUser(aftContext.ForumUser.UserRoles, portalId, forumModuleId, "CanRead"); var topicIdsStr = topicIds.Aggregate(string.Empty, (current, topicId) => current + (topicId.ToString() + ";")); fc.MarkTopicsRead(portalId, forumModuleId, userId, forumIds, topicIdsStr); return new XmlRpcStruct { {"result", true} }; }
public XmlRpcStruct GetForumStatus(params object[] parameters) { var aftContext = ActiveForumsTapatalkModuleContext.Create(Context); if (aftContext == null || aftContext.Module == null) throw new XmlRpcFaultException(100, "Invalid Context"); Context.Response.AddHeader("Mobiquo_is_login", aftContext.UserId > 0 ? "true" : "false"); var portalId = aftContext.Module.PortalID; var forumModuleId = aftContext.ModuleSettings.ForumModuleId; var userId = aftContext.UserId; // Build a list of forums the user has access to var fc = new AFTForumController(); var forumIds = fc.GetForumsForUser(aftContext.ForumUser.UserRoles, portalId, forumModuleId, "CanRead") + string.Empty; // Clean up our forum id list before we split it up. forumIds = Regex.Replace(forumIds, @"\;+$", string.Empty); var forumIdList = !string.IsNullOrWhiteSpace(forumIds) ? forumIds.Split(';').Select(int.Parse).ToList() : new List<int>(); // Intersect requested forums with avialable forums var requestedForumIds = (parameters != null && parameters.Any()) ? ((object[])parameters[0]).Select(Convert.ToInt32).Where(forumIdList.Contains) : new int[] { }; // Convert the new list of forums back to a string for the proc. forumIds = requestedForumIds.Aggregate(string.Empty, (current, id) => current + (id.ToString() + ";")); var forumStatus = fc.GetForumStatus(portalId, forumModuleId, userId, forumIds).ToList(); return new XmlRpcStruct { {"forums", forumStatus.Select(f => new ListForumStructure { ForumId = f.ForumId.ToString(), ForumName = f.ForumName.ToBytes(), IsProtected = false, HasNewPosts = f.LastPostDate > f.LastAccessDate }).ToArray()} }; }
private XmlRpcStruct GetLatestTopics(int startIndex, int endIndex, string searchId, object filters) { var aftContext = ActiveForumsTapatalkModuleContext.Create(Context); if (aftContext == null || aftContext.Module == null) throw new XmlRpcFaultException(100, "Invalid Context"); Context.Response.AddHeader("Mobiquo_is_login", aftContext.UserId > 0 ? "true" : "false"); var portalId = aftContext.Module.PortalID; var forumModuleId = aftContext.ModuleSettings.ForumModuleId; var userId = aftContext.UserId; // Build a list of forums the user has access to var fc = new AFTForumController(); var forumIds = fc.GetForumsForUser(aftContext.ForumUser.UserRoles, portalId, forumModuleId, "CanRead"); var mainSettings = new SettingsInfo { MainSettings = new Entities.Modules.ModuleController().GetModuleSettings(forumModuleId) }; var maxRows = endIndex + 1 - startIndex; var latestTopics = fc.GetLatestTopics(portalId, forumModuleId, userId, forumIds, startIndex, maxRows).ToList(); return new XmlRpcStruct { {"result", true}, {"total_topic_num", latestTopics.Count > 0 ? latestTopics[0].TopicCount : 0}, {"topics", latestTopics.Select(t => new ExtendedTopicStructure{ TopicId = t.TopicId.ToString(), AuthorAvatarUrl = GetAvatarUrl(t.LastReplyAuthorId), AuthorId = t.LastReplyAuthorId.ToString(), AuthorName = GetLastReplyAuthorName(mainSettings, t).ToBytes(), ForumId = t.ForumId.ToString(), ForumName = t.ForumName.ToBytes(), HasNewPosts = (t.LastReplyId < 0 && t.TopicId > t.UserLastTopicRead) || t.LastReplyId > t.UserLastReplyRead, IsLocked = t.IsLocked, IsSubscribed = t.SubscriptionType > 0, CanSubscribe = ActiveForums.Permissions.HasPerm(aftContext.ForumUser.UserRoles, fc.GetForumPermissions(t.ForumId).CanSubscribe), // GetforumPermissions uses cache so it shouldn't be a performance issue ReplyCount = t.ReplyCount, Summary = GetSummary(null, t.LastReplyBody).ToBytes(), ViewCount = t.ViewCount, DateCreated = t.LastReplyDate, Title = HttpUtility.HtmlDecode(t.Subject + string.Empty).ToBytes() }).ToArray()} }; }
public XmlRpcStruct GetParticipatedForums() { var aftContext = ActiveForumsTapatalkModuleContext.Create(Context); if (aftContext == null || aftContext.Module == null) throw new XmlRpcFaultException(100, "Invalid Context"); Context.Response.AddHeader("Mobiquo_is_login", aftContext.UserId > 0 ? "true" : "false"); var portalId = aftContext.Module.PortalID; var forumModuleId = aftContext.ModuleSettings.ForumModuleId; var userId = aftContext.UserId; // Build a list of forums the user has access to var fc = new AFTForumController(); var forumIds = fc.GetForumsForUser(aftContext.ForumUser.UserRoles, portalId, forumModuleId, "CanRead"); var subscribedForums = fc.GetParticipatedForums(portalId, forumModuleId, userId, forumIds).ToList(); return new XmlRpcStruct { {"total_forums_num", subscribedForums.Count}, {"forums", subscribedForums.Select(f => new ListForumStructure { ForumId = f.ForumId.ToString(), ForumName = f.ForumName.ToBytes(), IsProtected = false, HasNewPosts = f.LastPostDate > f.LastAccessDate }).ToArray()} }; }
private ForumStructure[] GetForums(string forumId, bool includeDescription) { var aftContext = ActiveForumsTapatalkModuleContext.Create(Context); if (aftContext == null || aftContext.Module == null) throw new XmlRpcFaultException(100, "Invalid Context"); Context.Response.AddHeader("Mobiquo_is_login", aftContext.UserId > 0 ? "true" : "false"); var fc = new AFTForumController(); var forumIds = fc.GetForumsForUser(aftContext.ForumUser.UserRoles, aftContext.Module.PortalID, aftContext.ModuleSettings.ForumModuleId, "CanRead"); var forumTable = fc.GetForumView(aftContext.Module.PortalID, aftContext.ModuleSettings.ForumModuleId, aftContext.UserId, aftContext.ForumUser.IsSuperUser, forumIds); var forumSubscriptions = fc.GetSubscriptionsForUser(aftContext.ModuleSettings.ForumModuleId, aftContext.UserId, null, 0).ToList(); var result = new List<ForumStructure>(); // Note that all the fields in the DataTable are strings if they come back from the cache, so they have to be converted appropriately. // Get the distict list of groups /* var groups = forumTable.AsEnumerable() .Select(r => new { ID = Convert.ToInt32(r["ForumGroupId"]), Name = r["GroupName"].ToString(), SortOrder = Convert.ToInt32(r["GroupSort"]), Active = Convert.ToBoolean(r["GroupActive"]) }).Distinct().Where(o => o.Active).OrderBy(o => o.SortOrder); */ // Get all forums the user can read var visibleForums = forumTable.AsEnumerable() .Select(f => new { ID = Convert.ToInt32(f["ForumId"]), ForumGroupId = Convert.ToInt32(f["ForumGroupId"]), Name = f["ForumName"].ToString(), Description = f["ForumDesc"].ToString(), ParentForumId = Convert.ToInt32(f["ParentForumId"]), ReadRoles = f["CanRead"].ToString(), SubscribeRoles = f["CanSubscribe"].ToString(), LastRead = Convert.ToDateTime(f["LastRead"]), LastPostDate = Convert.ToDateTime(f["LastPostDate"]), SortOrder = Convert.ToInt32(f["ForumSort"]), Active = Convert.ToBoolean(f["ForumActive"]) }) .Where(o => o.Active && ActiveForums.Permissions.HasPerm(o.ReadRoles, aftContext.ForumUser.UserRoles)) .OrderBy(o => o.SortOrder).ToList(); if (forumId.StartsWith("G")) { var groupId = Convert.ToInt32(forumId.Substring(1)); foreach (var forum in visibleForums.Where(f => f.ForumGroupId == groupId && f.ParentForumId == 0)) { var forumStructure = new ForumStructure { ForumId = forum.ID.ToString(), Name = Utilities.StripHTMLTag(forum.Name).ToBytes(), Description = includeDescription ? Utilities.StripHTMLTag(forum.Description).ToBytes() : string.Empty.ToBytes(), ParentId = forumId, LogoUrl = null, HasNewPosts = aftContext.UserId > 0 && forum.LastPostDate > forum.LastRead, IsProtected = false, IsSubscribed = forumSubscriptions.Any(fs => fs.ForumId == forum.ID), CanSubscribe = ActiveForums.Permissions.HasPerm(forum.SubscribeRoles, aftContext.ForumUser.UserRoles), Url = null, IsGroup = false }; result.Add(forumStructure); } } else { foreach (var forum in visibleForums.Where(f => f.ParentForumId == int.Parse(forumId))) { var forumStructure = new ForumStructure { ForumId = forum.ID.ToString(), Name = Utilities.StripHTMLTag(forum.Name).ToBytes(), Description = includeDescription ? Utilities.StripHTMLTag(forum.Description).ToBytes() : string.Empty.ToBytes(), ParentId = forumId, LogoUrl = null, HasNewPosts = aftContext.UserId > 0 && forum.LastPostDate > forum.LastRead, IsProtected = false, IsSubscribed = forumSubscriptions.Any(fs => fs.ForumId == forum.ID), CanSubscribe = ActiveForums.Permissions.HasPerm(forum.SubscribeRoles, aftContext.ForumUser.UserRoles), Url = null, IsGroup = false }; result.Add(forumStructure); } } return result.ToArray(); }
private XmlRpcStruct SearchPosts(string searchString, int startIndex, int endIndex, string searchId) { var aftContext = ActiveForumsTapatalkModuleContext.Create(Context); if (aftContext == null || aftContext.Module == null) throw new XmlRpcFaultException(100, "Invalid Context"); Context.Response.AddHeader("Mobiquo_is_login", aftContext.UserId > 0 ? "true" : "false"); var portalId = aftContext.Module.PortalID; var forumModuleId = aftContext.ModuleSettings.ForumModuleId; var userId = aftContext.UserId; // Verify Search Permissions var searchPermissions = aftContext.ModuleSettings.SearchPermission; if (searchPermissions == ActiveForumsTapatalkModuleSettings.SearchPermissions.Disabled || (userId <= 0 && searchPermissions == ActiveForumsTapatalkModuleSettings.SearchPermissions.RegisteredUsers)) throw new XmlRpcFaultException(102, "Insufficent Search Permissions"); // Build a list of forums the user has access to var fc = new AFTForumController(); var forumIds = fc.GetForumsForUser(aftContext.ForumUser.UserRoles, portalId, forumModuleId, "CanRead"); var mainSettings = new SettingsInfo { MainSettings = new Entities.Modules.ModuleController().GetModuleSettings(forumModuleId) }; var maxRows = endIndex + 1 - startIndex; var searchResults = fc.SearchPosts(portalId, forumModuleId, userId, forumIds, searchString, startIndex, maxRows, searchId, mainSettings); if (searchResults == null) throw new XmlRpcFaultException(101, "Search Error"); return new XmlRpcStruct { {"total_post_num", searchResults.TotalPosts }, {"search_id", searchResults.SearchId.ToString() }, {"posts", searchResults.Topics.Select(t => new ExtendedPostStructure { TopicId = t.TopicId.ToString(), AuthorAvatarUrl = GetAvatarUrl(t.AuthorId), AuthorId = t.AuthorId.ToString(), AuthorName = GetAuthorName(mainSettings, t).ToBytes(), ForumId = t.ForumId.ToString(), ForumName = t.ForumName.ToBytes(), PostID = t.ContentId.ToString(), Summary = GetSummary(null, t.Body).ToBytes(), PostDate = t.DateCreated, TopicTitle = HttpUtility.HtmlDecode(t.Subject + string.Empty).ToBytes(), PostTitle = HttpUtility.HtmlDecode(t.PostSubject + string.Empty).ToBytes() }).ToArray()} }; }
private XmlRpcStruct GetSubscribedTopics(int startIndex, int endIndex) { var aftContext = ActiveForumsTapatalkModuleContext.Create(Context); if (aftContext == null || aftContext.Module == null) throw new XmlRpcFaultException(100, "Invalid Context"); Context.Response.AddHeader("Mobiquo_is_login", aftContext.UserId > 0 ? "true" : "false"); var portalId = aftContext.Module.PortalID; var forumModuleId = aftContext.ModuleSettings.ForumModuleId; var userId = aftContext.UserId; // Build a list of forums the user has access to var fc = new AFTForumController(); var forumIds = fc.GetForumsForUser(aftContext.ForumUser.UserRoles, portalId, forumModuleId, "CanRead"); var mainSettings = new SettingsInfo { MainSettings = new Entities.Modules.ModuleController().GetModuleSettings(forumModuleId) }; var profilePath = string.Format("{0}://{1}{2}", Context.Request.Url.Scheme, Context.Request.Url.Host, VirtualPathUtility.ToAbsolute("~/profilepic.ashx")); var maxRows = endIndex + 1 - startIndex; var subscribedTopics = fc.GetSubscribedTopics(portalId, forumModuleId, userId, forumIds, startIndex, maxRows).ToList(); return new XmlRpcStruct { {"total_topic_num", subscribedTopics.Count > 0 ? subscribedTopics[0].TopicCount : 0}, {"topics", subscribedTopics.Select(t => new ExtendedTopicStructure{ TopicId = t.TopicId.ToString(), AuthorAvatarUrl = string.Format("{0}?userId={1}&w=64&h=64", profilePath, t.LastReplyAuthorId), AuthorName = GetLastReplyAuthorName(mainSettings, t).ToBytes(), AuthorId = t.LastReplyAuthorId.ToString(), ForumId = t.ForumId.ToString(), ForumName = t.ForumName.ToBytes(), HasNewPosts = (t.LastReplyId < 0 && t.TopicId > t.UserLastTopicRead) || t.LastReplyId > t.UserLastReplyRead, IsLocked = t.IsLocked, ReplyCount = t.ReplyCount, Summary = GetSummary(null, t.LastReplyBody).ToBytes(), ViewCount = t.ViewCount, DateCreated = t.LastReplyDate, Title = HttpUtility.HtmlDecode(t.Subject + string.Empty).ToBytes() }).ToArray()} }; }
private ForumStructure[] GetForums(bool includeDescription) { var aftContext = ActiveForumsTapatalkModuleContext.Create(Context); if (aftContext == null || aftContext.Module == null) throw new XmlRpcFaultException(100, "Invalid Context"); Context.Response.AddHeader("Mobiquo_is_login", aftContext.UserId > 0 ? "true" : "false"); var fc = new AFTForumController(); var forumIds = fc.GetForumsForUser(aftContext.ForumUser.UserRoles, aftContext.Module.PortalID, aftContext.ModuleSettings.ForumModuleId, "CanRead"); var forumTable = fc.GetForumView(aftContext.Module.PortalID, aftContext.ModuleSettings.ForumModuleId, aftContext.UserId, aftContext.ForumUser.IsSuperUser, forumIds); var forumSubscriptions = fc.GetSubscriptionsForUser(aftContext.ModuleSettings.ForumModuleId, aftContext.UserId, null, 0).ToList(); var result = new List<ForumStructure>(); // Note that all the fields in the DataTable are strings if they come back from the cache, so they have to be converted appropriately. // Get the distict list of groups var groups = forumTable.AsEnumerable() .Select(r => new { ID = Convert.ToInt32(r["ForumGroupId"]), Name = r["GroupName"].ToString(), SortOrder = Convert.ToInt32(r["GroupSort"]), Active = Convert.ToBoolean(r["GroupActive"]) }).Distinct().Where(o => o.Active).OrderBy(o => o.SortOrder); // Get all forums the user can read var visibleForums = forumTable.AsEnumerable() .Select(f => new { ID = Convert.ToInt32(f["ForumId"]), ForumGroupId = Convert.ToInt32(f["ForumGroupId"]), Name = f["ForumName"].ToString(), Description = f["ForumDesc"].ToString(), ParentForumId = Convert.ToInt32(f["ParentForumId"]), ReadRoles = f["CanRead"].ToString(), SubscribeRoles = f["CanSubscribe"].ToString(), LastRead = Convert.ToDateTime(f["LastRead"]), LastPostDate = Convert.ToDateTime(f["LastPostDate"]), SortOrder = Convert.ToInt32(f["ForumSort"]), Active = Convert.ToBoolean(f["ForumActive"]) }) .Where(o => o.Active && ActiveForums.Permissions.HasPerm(o.ReadRoles, aftContext.ForumUser.UserRoles)) .OrderBy(o => o.SortOrder).ToList(); foreach (var group in groups) { // Find any root level forums for this group var groupForums = visibleForums.Where(vf => vf.ParentForumId == 0 && vf.ForumGroupId == group.ID).ToList(); if (!groupForums.Any()) continue; // Create the structure to represent the group var groupStructure = new ForumStructure() { ForumId = "G" + group.ID.ToString(), // Append G to distinguish between forums and groups with the same id. Name = group.Name.ToBytes(), Description = null, ParentId = "-1", LogoUrl = null, HasNewPosts = false, IsProtected = false, IsSubscribed = false, CanSubscribe = false, Url = null, IsGroup = true, }; // Add the Child Forums var groupChildren = new List<ForumStructure>(); foreach (var groupForum in groupForums) { var forumStructure = new ForumStructure { ForumId = groupForum.ID.ToString(), Name = Utilities.StripHTMLTag(groupForum.Name).ToBytes(), Description = includeDescription ? Utilities.StripHTMLTag(groupForum.Description).ToBytes() : string.Empty.ToBytes(), ParentId = 'G' + group.ID.ToString(), LogoUrl = null, HasNewPosts = aftContext.UserId > 0 && groupForum.LastPostDate > groupForum.LastRead, IsProtected = false, IsSubscribed = forumSubscriptions.Any(fs => fs.ForumId == groupForum.ID), CanSubscribe = ActiveForums.Permissions.HasPerm(groupForum.SubscribeRoles, aftContext.ForumUser.UserRoles), Url = null, IsGroup = false }; // Add any sub-forums var subForums = visibleForums.Where(vf => vf.ParentForumId == groupForum.ID).ToList(); if (subForums.Any()) { var forumChildren = new List<ForumStructure>(); foreach (var subForum in subForums) { forumChildren.Add(new ForumStructure { ForumId = subForum.ID.ToString(), Name = Utilities.StripHTMLTag(subForum.Name).ToBytes(), Description = includeDescription ? Utilities.StripHTMLTag(subForum.Description).ToBytes() : String.Empty.ToBytes(), ParentId = groupForum.ID.ToString(), LogoUrl = null, HasNewPosts = aftContext.UserId > 0 && subForum.LastPostDate > subForum.LastRead, IsProtected = false, IsSubscribed = forumSubscriptions.Any(fs => fs.ForumId == subForum.ID), CanSubscribe = ActiveForums.Permissions.HasPerm(subForum.SubscribeRoles, aftContext.ForumUser.UserRoles), Url = null, IsGroup = false }); } forumStructure.Children = forumChildren.ToArray(); } groupChildren.Add(forumStructure); } groupStructure.Children = groupChildren.ToArray(); result.Add(groupStructure); } return result.ToArray(); }