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 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(); }