Skip to content

Commit 7dd0c24

Browse files
authored
Merge pull request #1363 from johnhenley/issues/tabid-stack-overflow-1343
FIX: TabId property stackoverflow in ForumInfo/ForumGroupInfo
2 parents 384110d + a8b119d commit 7dd0c24

13 files changed

+74
-39
lines changed

Dnn.CommunityForums/Controllers/PermissionController.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,10 +66,10 @@ internal class PermissionController : DotNetNuke.Modules.ActiveForums.Controller
6666
internal void UpdateSecurityForSocialGroupForum(DotNetNuke.Modules.ActiveForums.Entities.ForumInfo forum)
6767
{
6868
var permissions = this.GetById(forum.PermissionsId, forum.ModuleId);
69-
Hashtable htSettings = DotNetNuke.Entities.Modules.ModuleController.Instance.GetModule(moduleId: forum.ModuleId, tabId: forum.TabId, ignoreCache: false).TabModuleSettings;
69+
Hashtable htSettings = DotNetNuke.Entities.Modules.ModuleController.Instance.GetModule(moduleId: forum.ModuleId, tabId: forum.GetTabId(), ignoreCache: false).TabModuleSettings;
7070
if (htSettings == null || htSettings.Count == 0)
7171
{
72-
htSettings = DotNetNuke.Entities.Modules.ModuleController.Instance.GetModule(moduleId: forum.ModuleId, tabId: forum.TabId, ignoreCache: false).ModuleSettings;
72+
htSettings = DotNetNuke.Entities.Modules.ModuleController.Instance.GetModule(moduleId: forum.ModuleId, tabId: forum.GetTabId(), ignoreCache: false).ModuleSettings;
7373
}
7474

7575
if (htSettings == null || htSettings.Count == 0 || !htSettings.ContainsKey("ForumConfig"))

Dnn.CommunityForums/Controllers/ReplyController.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -192,19 +192,19 @@ public int Reply_Save(int portalId, int moduleId, DotNetNuke.Modules.ActiveForum
192192
// if existing topic, update associated journal item
193193
if (ri.ReplyId > 0)
194194
{
195-
string fullURL = new ControlUtils().BuildUrl(portalId, ri.Forum.TabId, moduleId, ri.Forum.ForumGroup.PrefixURL, ri.Forum.PrefixURL, ri.Forum.ForumGroupId, ri.ForumId, ri.TopicId, ri.Topic.TopicUrl, -1, -1, string.Empty, 1, ri.ReplyId, ri.Forum.SocialGroupId);
195+
string fullURL = new ControlUtils().BuildUrl(portalId, ri.Forum.GetTabId(), moduleId, ri.Forum.ForumGroup.PrefixURL, ri.Forum.PrefixURL, ri.Forum.ForumGroupId, ri.ForumId, ri.TopicId, ri.Topic.TopicUrl, -1, -1, string.Empty, 1, ri.ReplyId, ri.Forum.SocialGroupId);
196196

197197
if (fullURL.Contains("~/"))
198198
{
199-
fullURL = Utilities.NavigateURL(ri.Forum.TabId, string.Empty, new string[] { $"{ParamKeys.TopicId}={ri.TopicId}", $"{ParamKeys.ContentJumpId}={ri.ReplyId}", });
199+
fullURL = Utilities.NavigateURL(ri.Forum.GetTabId(), string.Empty, new string[] { $"{ParamKeys.TopicId}={ri.TopicId}", $"{ParamKeys.ContentJumpId}={ri.ReplyId}", });
200200
}
201201

202202
if (fullURL.EndsWith("/"))
203203
{
204204
fullURL += Utilities.UseFriendlyURLs(moduleId) ? $"#{ri.ReplyId}" : $"{ParamKeys.ContentJumpId}={ri.ReplyId}";
205205
}
206206

207-
new Social().UpdateJournalItemForPost(ri.PortalId, ri.ModuleId, ri.Forum.TabId, ri.ForumId, ri.TopicId, ri.ReplyId, ri.Author.AuthorId, fullURL, ri.Content.Subject, string.Empty, ri.Content.Body);
207+
new Social().UpdateJournalItemForPost(ri.PortalId, ri.ModuleId, ri.Forum.GetTabId(), ri.ForumId, ri.TopicId, ri.ReplyId, ri.Author.AuthorId, fullURL, ri.Content.Subject, string.Empty, ri.Content.Body);
208208
}
209209

210210
int replyId = Convert.ToInt32(DotNetNuke.Modules.ActiveForums.DataProvider.Instance().Reply_Save(portalId, ri.TopicId, ri.ReplyId, ri.ReplyToId, ri.StatusId, ri.IsApproved, ri.IsDeleted, ri.Content.Subject.Trim(), ri.Content.Body.Trim(), ri.Content.DateCreated, ri.Content.DateUpdated, ri.Content.AuthorId, ri.Content.AuthorName, ri.Content.IPAddress));

Dnn.CommunityForums/Controllers/TopicController.cs

+5-5
Original file line numberDiff line numberDiff line change
@@ -200,10 +200,10 @@ public static DotNetNuke.Modules.ActiveForums.Entities.TopicInfo Approve(int mod
200200

201201
if (ti.Forum.FeatureSettings.ModApproveTemplateId > 0 & ti.Author.AuthorId > 0)
202202
{
203-
DotNetNuke.Modules.ActiveForums.Controllers.EmailController.SendEmail(ti.Forum.FeatureSettings.ModApproveTemplateId, ti.PortalId, ti.ModuleId, ti.Forum.TabId, ti.ForumId, topicId, 0, ti.Author);
203+
DotNetNuke.Modules.ActiveForums.Controllers.EmailController.SendEmail(ti.Forum.FeatureSettings.ModApproveTemplateId, ti.PortalId, ti.ModuleId, ti.Forum.GetTabId(), ti.ForumId, topicId, 0, ti.Author);
204204
}
205205

206-
DotNetNuke.Modules.ActiveForums.Controllers.TopicController.QueueApprovedTopicAfterAction(portalId: ti.PortalId, tabId: ti.Forum.TabId, moduleId: ti.Forum.ModuleId, forumGroupId: ti.Forum.ForumGroupId, forumId: ti.ForumId, topicId: topicId, replyId: -1, contentId: ti.ContentId, userId: userId, authorId: ti.Content.AuthorId);
206+
DotNetNuke.Modules.ActiveForums.Controllers.TopicController.QueueApprovedTopicAfterAction(portalId: ti.PortalId, tabId: ti.Forum.GetTabId(), moduleId: ti.Forum.ModuleId, forumGroupId: ti.Forum.ForumGroupId, forumId: ti.ForumId, topicId: topicId, replyId: -1, contentId: ti.ContentId, userId: userId, authorId: ti.Content.AuthorId);
207207
return ti;
208208
}
209209

@@ -240,7 +240,7 @@ public static void Move(int moduleId, int userId, int topicId, int newForumId)
240240

241241
if (oldForum.FeatureSettings.ModMoveTemplateId > 0 & ti?.Author?.AuthorId > 0)
242242
{
243-
DotNetNuke.Modules.ActiveForums.Controllers.EmailController.SendEmail(oldForum.FeatureSettings.ModMoveTemplateId, ti.PortalId, ti.ModuleId, ti.Forum.TabId, forumId: ti.Forum.ForumID, topicId: ti.TopicId, replyId: -1, author: ti.Author);
243+
DotNetNuke.Modules.ActiveForums.Controllers.EmailController.SendEmail(oldForum.FeatureSettings.ModMoveTemplateId, ti.PortalId, ti.ModuleId, ti.Forum.GetTabId(), forumId: ti.Forum.ForumID, topicId: ti.TopicId, replyId: -1, author: ti.Author);
244244
}
245245

246246
new DotNetNuke.Modules.ActiveForums.Controllers.ProcessQueueController().Add(ProcessType.UpdateForumLastUpdated, ti.PortalId, tabId: -1, moduleId: ti.ModuleId, forumGroupId: oldForum.ForumGroupId, forumId: oldForum.ForumID, topicId: topicId, replyId: -1, contentId: ti.ContentId, authorId: ti.Content.AuthorId, userId: userId, requestUrl: null);
@@ -283,8 +283,8 @@ public static int Save(DotNetNuke.Modules.ActiveForums.Entities.TopicInfo ti)
283283
// if existing topic, update associated journal item
284284
if (ti.TopicId > 0)
285285
{
286-
string sUrl = new ControlUtils().BuildUrl(ti.PortalId, ti.Forum.TabId, ti.ModuleId, ti.Forum.ForumGroup.PrefixURL, ti.Forum.PrefixURL, ti.Forum.ForumGroupId, ti.ForumId, ti.TopicId, ti.TopicUrl, -1, -1, string.Empty, 1, -1, ti.Forum.SocialGroupId);
287-
new Social().UpdateJournalItemForPost(ti.PortalId, ti.ModuleId, ti.Forum.TabId, ti.ForumId, ti.TopicId, 0, ti.Author.AuthorId, sUrl, ti.Content.Subject, string.Empty, ti.Content.Body);
286+
string sUrl = new ControlUtils().BuildUrl(ti.PortalId, ti.Forum.GetTabId(), ti.ModuleId, ti.Forum.ForumGroup.PrefixURL, ti.Forum.PrefixURL, ti.Forum.ForumGroupId, ti.ForumId, ti.TopicId, ti.TopicUrl, -1, -1, string.Empty, 1, -1, ti.Forum.SocialGroupId);
287+
new Social().UpdateJournalItemForPost(ti.PortalId, ti.ModuleId, ti.Forum.GetTabId(), ti.ForumId, ti.TopicId, 0, ti.Author.AuthorId, sUrl, ti.Content.Subject, string.Empty, ti.Content.Body);
288288
}
289289

290290
// TODO: convert to use DAL2?

Dnn.CommunityForums/Controllers/UrlController.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,13 @@ internal static string BuildForumUrlSegment(int portalId, int moduleId, DotNetNu
9595
internal static string BuildForumUrl(INavigationManager navigationManager, DotNetNuke.Abstractions.Portals.IPortalSettings portalSettings, SettingsInfo mainSettings, DotNetNuke.Modules.ActiveForums.Entities.ForumInfo forumInfo)
9696
{
9797
// Build the forum Url
98-
return mainSettings.UseShortUrls ? navigationManager.NavigateURL(forumInfo.TabId, portalSettings, string.Empty, new[] { $"{ParamKeys.ForumId}={forumInfo.ForumID}" })
99-
: navigationManager.NavigateURL(forumInfo.TabId, portalSettings, string.Empty, new[] { $"{ParamKeys.ForumId}={forumInfo.ForumID}", $"{ParamKeys.ViewType}={Views.Topics}" });
98+
return mainSettings.UseShortUrls ? navigationManager.NavigateURL(forumInfo.GetTabId(), portalSettings, string.Empty, new[] { $"{ParamKeys.ForumId}={forumInfo.ForumID}" })
99+
: navigationManager.NavigateURL(forumInfo.GetTabId(), portalSettings, string.Empty, new[] { $"{ParamKeys.ForumId}={forumInfo.ForumID}", $"{ParamKeys.ViewType}={Views.Topics}" });
100100
}
101101

102102
internal static string BuildModeratorUrl(INavigationManager navigationManager, DotNetNuke.Abstractions.Portals.IPortalSettings portalSettings, SettingsInfo mainSettings, DotNetNuke.Modules.ActiveForums.Entities.ForumInfo forumInfo)
103103
{
104-
return navigationManager.NavigateURL(forumInfo.TabId, portalSettings, string.Empty, new[] { $"{ParamKeys.ViewType}={Views.ModerateTopics}", $"{ParamKeys.ForumId}={forumInfo.ForumID}" });
104+
return navigationManager.NavigateURL(forumInfo.GetTabId(), portalSettings, string.Empty, new[] { $"{ParamKeys.ViewType}={Views.ModerateTopics}", $"{ParamKeys.ForumId}={forumInfo.ForumID}" });
105105
}
106106
}
107107
}

Dnn.CommunityForums/CustomControls/UserControls/ForumView.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -356,11 +356,11 @@ private string ParseForumRow(string template, DotNetNuke.Modules.ActiveForums.En
356356
{
357357
if (template.Contains("[SUBFORUMS]") && template.Contains("[/SUBFORUMS]"))
358358
{
359-
template = this.GetSubForums(template, fi.ForumID, fi.TabId);
359+
template = this.GetSubForums(template, fi.ForumID, fi.GetTabId());
360360
}
361361
else
362362
{
363-
template = template.Replace("[SUBFORUMS]", this.GetSubForums(template: string.Empty, forumId: fi.ForumID, tabId: fi.TabId));
363+
template = template.Replace("[SUBFORUMS]", this.GetSubForums(template: string.Empty, forumId: fi.ForumID, tabId: fi.GetTabId()));
364364
}
365365

366366
string[] css = null;

Dnn.CommunityForums/Entities/ForumGroupInfo.cs

+23-8
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public partial class ForumGroupInfo : DotNetNuke.Services.Tokens.IPropertyAccess
4242
private DotNetNuke.Modules.ActiveForums.SettingsInfo mainSettings;
4343
private PortalSettings portalSettings;
4444
private ModuleInfo moduleInfo;
45+
private int? tabId;
4546

4647
public int ForumGroupId { get; set; }
4748

@@ -66,9 +67,12 @@ public partial class ForumGroupInfo : DotNetNuke.Services.Tokens.IPropertyAccess
6667

6768
[IgnoreColumn]
6869
public string RawUrl { get; set; }
69-
70+
7071
[IgnoreColumn]
71-
public int TabId => this.GetTabId();
72+
public int TabId
73+
{
74+
set => this.tabId = value;
75+
}
7276

7377
[IgnoreColumn]
7478
public string ThemeLocation => Utilities.ResolveUrl(SettingsBase.GetModuleSettings(this.ModuleId).ThemeLocation);
@@ -223,10 +227,7 @@ internal ModuleInfo LoadModuleInfo()
223227
[IgnoreColumn]
224228
public DotNetNuke.Services.Tokens.CacheLevel Cacheability
225229
{
226-
get
227-
{
228-
return DotNetNuke.Services.Tokens.CacheLevel.notCacheable;
229-
}
230+
get => DotNetNuke.Services.Tokens.CacheLevel.notCacheable;
230231
}
231232

232233
/// <inheritdoc/>
@@ -281,9 +282,23 @@ public string GetProperty(string propertyName, string format, System.Globalizati
281282
return string.Empty;
282283
}
283284

284-
private int GetTabId()
285+
internal int GetTabId()
285286
{
286-
return this.PortalSettings.ActiveTab.TabID == -1 || this.PortalSettings.ActiveTab.TabID == this.PortalSettings.HomeTabId ? this.TabId : this.PortalSettings.ActiveTab.TabID;
287+
if (this.PortalSettings.ActiveTab.TabID == -1 || this.PortalSettings.ActiveTab.TabID == this.PortalSettings.HomeTabId)
288+
{
289+
if (!this.tabId.Equals(null))
290+
{
291+
return (int)this.tabId;
292+
}
293+
else
294+
{
295+
return this.ModuleInfo.TabID;
296+
}
297+
}
298+
else
299+
{
300+
return this.PortalSettings.ActiveTab.TabID;
301+
}
287302
}
288303

289304
internal string GetCacheKey() => string.Format(this.cacheKeyTemplate, this.ModuleId, this.ForumGroupId);

Dnn.CommunityForums/Entities/ForumInfo.cs

+22-4
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public class ForumInfo : DotNetNuke.Services.Tokens.IPropertyAccess
5050
private ModuleInfo moduleInfo;
5151
private int? subscriberCount;
5252
private int? lastPostTopicId;
53+
private int? tabId;
5354
private string lastPostTopicUrl;
5455
private string rssLink;
5556
private List<PropertyInfo> properties;
@@ -67,7 +68,7 @@ public ForumInfo(int portalId)
6768
this.PortalSettings = Utilities.GetPortalSettings(portalId);
6869
this.UpdateCache();
6970
}
70-
71+
7172
public ForumInfo(DotNetNuke.Entities.Portals.PortalSettings portalSettings)
7273
{
7374
this.PortalSettings = portalSettings;
@@ -389,7 +390,10 @@ public int SubscriberCount
389390
public string ParentForumUrlPrefix => this.ParentForumId > 0 ? new Controllers.ForumController().GetById(this.ParentForumId, this.ModuleId).PrefixURL : string.Empty;
390391

391392
[IgnoreColumn]
392-
public int TabId => this.GetTabId();
393+
public int TabId
394+
{
395+
set => this.tabId = value;
396+
}
393397

394398
[IgnoreColumn]
395399
public string ForumURL => URL.ForumLink(this.GetTabId(), this);
@@ -984,9 +988,23 @@ public string GetProperty(string propertyName, string format, System.Globalizati
984988
return string.Empty;
985989
}
986990

987-
private int GetTabId()
991+
internal int GetTabId()
988992
{
989-
return this.PortalSettings.ActiveTab.TabID == -1 || this.PortalSettings.ActiveTab.TabID == this.PortalSettings.HomeTabId ? this.TabId : this.PortalSettings.ActiveTab.TabID;
993+
if (this.PortalSettings.ActiveTab.TabID == -1 || this.PortalSettings.ActiveTab.TabID == this.PortalSettings.HomeTabId)
994+
{
995+
if (!this.tabId.Equals(null))
996+
{
997+
return (int)this.tabId;
998+
}
999+
else
1000+
{
1001+
return this.ModuleInfo.TabID;
1002+
}
1003+
}
1004+
else
1005+
{
1006+
return this.PortalSettings.ActiveTab.TabID;
1007+
}
9901008
}
9911009

9921010
internal string GetCacheKey() => string.Format(this.cacheKeyTemplate, this.ModuleId, this.ForumID);

Dnn.CommunityForums/Entities/ReplyInfo.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,7 @@ public string GetProperty(string propertyName, string format, System.Globalizati
673673
[IgnoreColumn]
674674
private int GetTabId()
675675
{
676-
return this.Forum.PortalSettings.ActiveTab.TabID == -1 || this.Forum.PortalSettings.ActiveTab.TabID == this.Forum.PortalSettings.HomeTabId ? this.Forum.TabId : this.Forum.PortalSettings.ActiveTab.TabID;
676+
return this.Forum.PortalSettings.ActiveTab.TabID == -1 || this.Forum.PortalSettings.ActiveTab.TabID == this.Forum.PortalSettings.HomeTabId ? this.Forum.GetTabId() : this.Forum.PortalSettings.ActiveTab.TabID;
677677
}
678678

679679
[IgnoreColumn]

Dnn.CommunityForums/Entities/TopicInfo.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1483,7 +1483,7 @@ public string GetProperty(string propertyName, string format, System.Globalizati
14831483
[IgnoreColumn]
14841484
private int GetTabId()
14851485
{
1486-
return this.Forum.PortalSettings.ActiveTab.TabID == -1 || this.Forum.PortalSettings.ActiveTab.TabID == this.Forum.PortalSettings.HomeTabId ? this.Forum.TabId : this.Forum.PortalSettings.ActiveTab.TabID;
1486+
return this.Forum.PortalSettings.ActiveTab.TabID == -1 || this.Forum.PortalSettings.ActiveTab.TabID == this.Forum.PortalSettings.HomeTabId ? this.Forum.GetTabId() : this.Forum.PortalSettings.ActiveTab.TabID;
14871487
}
14881488

14891489
[IgnoreColumn]

Dnn.CommunityForums/Services/Controllers/TopicController.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ public HttpResponseMessage Pin(TopicDto1 dto)
171171
{
172172
new DotNetNuke.Modules.ActiveForums.Controllers.ProcessQueueController().Add(ProcessType.TopicPinned,
173173
portalId: ti.PortalId,
174-
tabId: ti.Forum.TabId,
174+
tabId: ti.Forum.GetTabId(),
175175
moduleId: ti.ModuleId,
176176
forumGroupId: ti.Forum.ForumGroupId,
177177
forumId: ti.ForumId,

Dnn.CommunityForums/Services/ModerationService.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ public HttpResponseMessage DeletePost(ModerationDTO dto)
185185
rc.Reply_Delete(this.PortalSettings.PortalId, this.forumId, this.topicId, this.replyId, ms.DeleteBehavior);
186186
if (fi.FeatureSettings.ModDeleteTemplateId > 0 && reply?.Content?.AuthorId > 0)
187187
{
188-
DotNetNuke.Modules.ActiveForums.Controllers.EmailController.SendEmail(fi.FeatureSettings.ModDeleteTemplateId, fi.PortalId, fi.ModuleId, fi.TabId, fi.ForumID, this.topicId, this.replyId, reply.Author);
188+
DotNetNuke.Modules.ActiveForums.Controllers.EmailController.SendEmail(fi.FeatureSettings.ModDeleteTemplateId, fi.PortalId, fi.ModuleId, fi.GetTabId(), fi.ForumID, this.topicId, this.replyId, reply.Author);
189189
}
190190
}
191191
else
@@ -198,7 +198,7 @@ public HttpResponseMessage DeletePost(ModerationDTO dto)
198198
new DotNetNuke.Modules.ActiveForums.Controllers.TopicController(this.moduleId).DeleteById(this.topicId);
199199
if (fi.FeatureSettings.ModDeleteTemplateId > 0 && ti?.Content?.AuthorId > 0)
200200
{
201-
DotNetNuke.Modules.ActiveForums.Controllers.EmailController.SendEmail(fi.FeatureSettings.ModDeleteTemplateId, fi.PortalId, fi.ModuleId, fi.TabId, fi.ForumID, this.topicId, this.replyId, ti.Author);
201+
DotNetNuke.Modules.ActiveForums.Controllers.EmailController.SendEmail(fi.FeatureSettings.ModDeleteTemplateId, fi.PortalId, fi.ModuleId, fi.GetTabId(), fi.ForumID, this.topicId, this.replyId, ti.Author);
202202
}
203203
}
204204

0 commit comments

Comments
 (0)