diff --git a/Dnn.CommunityForums/controls/admin_manageforums_forumeditor.ascx.cs b/Dnn.CommunityForums/controls/admin_manageforums_forumeditor.ascx.cs
index 18a2a6283..29a845e4f 100644
--- a/Dnn.CommunityForums/controls/admin_manageforums_forumeditor.ascx.cs
+++ b/Dnn.CommunityForums/controls/admin_manageforums_forumeditor.ascx.cs
@@ -26,8 +26,6 @@ namespace DotNetNuke.Modules.ActiveForums
using System.Web.UI.WebControls;
using DotNetNuke.Security.Roles;
- using AFSettings = DotNetNuke.Modules.ActiveForums.Settings;
-
public partial class admin_manageforums_forumeditor : ActiveAdminBase
{
public string imgOn;
@@ -440,7 +438,7 @@ private void cbEditorAction_Callback(object sender, Controls.CallBackEventArgs e
case "modulesettingssave":
{
- var sKey = $"M:{this.ModuleId}";
+ var sKey = $"M{this.ModuleId}";
this.SaveSettings(sKey, e.Parameters);
this.hidEditorResult.Value = this.ModuleId.ToString();
@@ -451,7 +449,7 @@ private void cbEditorAction_Callback(object sender, Controls.CallBackEventArgs e
case "forumsettingssave":
{
var forumId = Utilities.SafeConvertInt(e.Parameters[1]);
- var sKey = $"F:{forumId}";
+ var sKey = $"F{forumId}";
this.SaveSettings(sKey, e.Parameters);
this.hidEditorResult.Value = forumId.ToString();
@@ -462,7 +460,7 @@ private void cbEditorAction_Callback(object sender, Controls.CallBackEventArgs e
case "groupsettingssave":
{
var groupId = Utilities.SafeConvertInt(e.Parameters[1]);
- var sKey = $"G:{groupId}";
+ var sKey = $"G{groupId}";
this.SaveSettings(sKey, e.Parameters);
this.hidEditorResult.Value = groupId.ToString();
@@ -497,50 +495,50 @@ private void cbEditorAction_Callback(object sender, Controls.CallBackEventArgs e
private void SaveSettings(string sKey, string[] parameters)
{
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.TopicsTemplateId, parameters[2]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.TopicTemplateId, parameters[3]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EmailAddress, parameters[4]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.UseFilter, parameters[5]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowPostIcon, parameters[6]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowEmoticons, parameters[7]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowScript, parameters[8]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.IndexContent, parameters[9]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowRSS, parameters[10]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowAttach, parameters[11]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AttachCount, parameters[12]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AttachMaxSize, parameters[13]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AttachTypeAllowed, parameters[14]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EditorMobile, parameters[15]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowLikes, parameters[16]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ReplyPostCount, parameters[17]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AttachAllowBrowseSite, parameters[18]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AttachInsertAllowed, parameters[19]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.MaxAttachWidth, parameters[20]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.MaxAttachHeight, parameters[21]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ConvertingToJpegAllowed, parameters[22]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowHTML, parameters[23]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EditorType, parameters[24]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EditorHeight, parameters[25]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EditorWidth, parameters[26]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.CreatePostCount, parameters[27]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AutoSubscribeNewTopicsOnly, parameters[28]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EditorPermittedUsers, parameters[29]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.TopicFormId, parameters[30]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ReplyFormId, parameters[31]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AutoSubscribeRoles, parameters[32]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ProfileTemplateId, parameters[33]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.IsModerated, parameters[34]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.DefaultTrustLevel, parameters[35]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AutoTrustLevel, parameters[36]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ModApproveNotify, parameters[37]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ModRejectNotify, parameters[38]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ModMoveNotify, parameters[39]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ModDeleteNotify, parameters[40]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ModAlertNotify, parameters[41]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AutoSubscribeEnabled, parameters[42]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.QuickReplyFormId, parameters[43]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EmailNotificationSubjectTemplate, parameters[44]);
- AFSettings.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.TemplateFileNameSuffix, parameters[45]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.TopicsTemplateId, parameters[2]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.TopicTemplateId, parameters[3]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EmailAddress, parameters[4]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.UseFilter, parameters[5]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowPostIcon, parameters[6]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowEmoticons, parameters[7]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowScript, parameters[8]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.IndexContent, parameters[9]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowRSS, parameters[10]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowAttach, parameters[11]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AttachCount, parameters[12]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AttachMaxSize, parameters[13]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AttachTypeAllowed, parameters[14]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EditorMobile, parameters[15]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowLikes, parameters[16]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ReplyPostCount, parameters[17]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AttachAllowBrowseSite, parameters[18]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AttachInsertAllowed, parameters[19]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.MaxAttachWidth, parameters[20]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.MaxAttachHeight, parameters[21]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ConvertingToJpegAllowed, parameters[22]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AllowHTML, parameters[23]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EditorType, parameters[24]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EditorHeight, parameters[25]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EditorWidth, parameters[26]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.CreatePostCount, parameters[27]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AutoSubscribeNewTopicsOnly, parameters[28]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EditorPermittedUsers, parameters[29]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.TopicFormId, parameters[30]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ReplyFormId, parameters[31]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AutoSubscribeRoles, parameters[32]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ProfileTemplateId, parameters[33]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.IsModerated, parameters[34]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.DefaultTrustLevel, parameters[35]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AutoTrustLevel, parameters[36]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ModApproveNotify, parameters[37]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ModRejectNotify, parameters[38]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ModMoveNotify, parameters[39]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ModDeleteNotify, parameters[40]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.ModAlertNotify, parameters[41]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.AutoSubscribeEnabled, parameters[42]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.QuickReplyFormId, parameters[43]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.EmailNotificationSubjectTemplate, parameters[44]);
+ DotNetNuke.Modules.ActiveForums.Controllers.SettingsController.SaveSetting(this.ModuleId, sKey, ForumSettingKeys.TemplateFileNameSuffix, parameters[45]);
}
private void LoadForum(int forumId)
@@ -653,7 +651,7 @@ private void LoadDefaults(int groupId)
this.trGroups.Visible = false;
this.reqGroups.Enabled = false;
- this.LoadFeatureSettings(this.MainSettings.ForumFeatureSettings);
+ this.LoadFeatureSettings(this.MainSettings.DefaultFeatureSettings);
}
private void LoadFeatureSettings(DotNetNuke.Modules.ActiveForums.Entities.FeatureSettings featureSettings)
diff --git a/Dnn.CommunityForums/controls/admin_manageforums_home.ascx.cs b/Dnn.CommunityForums/controls/admin_manageforums_home.ascx.cs
index f46aa0f08..07a1bc412 100644
--- a/Dnn.CommunityForums/controls/admin_manageforums_home.ascx.cs
+++ b/Dnn.CommunityForums/controls/admin_manageforums_home.ascx.cs
@@ -84,7 +84,7 @@ private void BindForums()
{
inheritance = "
";
}
- else if (group.FeatureSettings.EqualSettings(SettingsBase.GetModuleSettings(this.ModuleId).ForumFeatureSettings))
+ else if (group.FeatureSettings.EqualSettings(SettingsBase.GetModuleSettings(this.ModuleId).DefaultFeatureSettings))
{
inheritance = "
";
}
diff --git a/Dnn.CommunityForums/controls/admin_ranks.ascx.cs b/Dnn.CommunityForums/controls/admin_ranks.ascx.cs
deleted file mode 100644
index 2e62bd7d6..000000000
--- a/Dnn.CommunityForums/controls/admin_ranks.ascx.cs
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (c) by DNN Community
-//
-// DNN Community licenses this file to you under the MIT license.
-//
-// See the LICENSE file in the project root for more information.
-//
-// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
-// documentation files (the "Software"), to deal in the Software without restriction, including without limitation
-// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
-// to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-//
-// The above copyright notice and this permission notice shall be included in all copies or substantial portions
-// of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
-// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
-// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-// DEALINGS IN THE SOFTWARE.
-
-namespace DotNetNuke.Modules.ActiveForums
-{
- using System;
- using System.Web.UI.WebControls;
-
- public partial class admin_ranks_new : ActiveAdminBase
- {
- public string ImagePath => this.Page.ResolveUrl(string.Concat(this.MainSettings.ThemeLocation, "/images"));
-
- protected override void OnInit(EventArgs e)
- {
- base.OnInit(e);
-
- this.agRanks.Callback += this.agRanks_Callback;
- this.agRanks.ItemBound += this.agRanks_ItemBound;
- }
-
- protected override void OnLoad(EventArgs e)
- {
- base.OnLoad(e);
-
- this.BindRankImages();
- }
-
- private void agRanks_Callback(object sender, Modules.ActiveForums.Controls.CallBackEventArgs e)
- {
- this.agRanks.Datasource = DataProvider.Instance().Ranks_List(this.PortalId, this.ModuleId);
- this.agRanks.Refresh(e.Output);
- }
-
- private void agRanks_ItemBound(object sender, Modules.ActiveForums.Controls.ItemBoundEventArgs e)
- {
- e.Item[4] = this.GetDisplay(e.Item[4].ToString(), e.Item[1].ToString());
- }
-
- public string GetDisplay(string display, string rankName)
- {
- return "
";
- }
-
- private void BindRankImages()
- {
- string[] fileCollection = null;
- System.IO.FileInfo myFileInfo = null;
- int i = 0;
-
- fileCollection = System.IO.Directory.GetFiles(Utilities.MapPath(Globals.ModulePath + "images/ranks"));
- for (i = 0; i < fileCollection.Length; i++)
- {
- string path = null;
- myFileInfo = new System.IO.FileInfo(fileCollection[i]);
- path = "DesktopModules/ActiveForums/images/ranks/" + myFileInfo.Name;
- this.drpRankImages.Items.Insert(i, new ListItem(myFileInfo.Name, path.ToLowerInvariant()));
- }
-
- this.drpRankImages.Items.Insert(0, new ListItem("[RESX:DropDownDefault]", "-1"));
-
- // drpRankImages.Items.Insert(1, New ListItem(Utilities.GetSharedResource("RankCustom.Text"), "0"))
- }
- }
-}
diff --git a/Dnn.CommunityForums/controls/admin_tags.ascx b/Dnn.CommunityForums/controls/admin_tags.ascx
index 52a1bd694..0fb512d7d 100644
--- a/Dnn.CommunityForums/controls/admin_tags.ascx
+++ b/Dnn.CommunityForums/controls/admin_tags.ascx
@@ -56,7 +56,7 @@ function amaf_deleteTag(row){
[RESX:TagName]
- [RESX:TagItems]
+ [RESX:Items]
|
diff --git a/Dnn.CommunityForums/controls/admin_templates.ascx.cs b/Dnn.CommunityForums/controls/admin_templates.ascx.cs
index 7c4d51a78..5c7fb5dfc 100644
--- a/Dnn.CommunityForums/controls/admin_templates.ascx.cs
+++ b/Dnn.CommunityForums/controls/admin_templates.ascx.cs
@@ -35,7 +35,7 @@ protected override void OnInit(EventArgs e)
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
- SettingsInfo moduleSettings = SettingsBase.GetModuleSettings(this.ModuleId);
+ ModuleSettings moduleSettings = SettingsBase.GetModuleSettings(this.ModuleId);
this.txtThemeName.Text = moduleSettings.Theme;
this.txtTemplateFolder.Text = this.Server.MapPath(moduleSettings.TemplatePath);
}
diff --git a/Dnn.CommunityForums/controls/af_assign_badge_users.ascx b/Dnn.CommunityForums/controls/af_assign_badge_users.ascx
new file mode 100644
index 000000000..10d291292
--- /dev/null
+++ b/Dnn.CommunityForums/controls/af_assign_badge_users.ascx
@@ -0,0 +1,31 @@
+<%@ control language="C#" autoeventwireup="false" codebehind="af_assign_badge_users.ascx.cs" inherits="DotNetNuke.Modules.ActiveForums.af_assign_badge_users" %>
+<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web" %>
+
+ [RESX:BadgeUsersAssigned]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Dnn.CommunityForums/controls/af_assign_badge_users.ascx.cs b/Dnn.CommunityForums/controls/af_assign_badge_users.ascx.cs
new file mode 100644
index 000000000..fe2a9fa0b
--- /dev/null
+++ b/Dnn.CommunityForums/controls/af_assign_badge_users.ascx.cs
@@ -0,0 +1,130 @@
+// Copyright (c) by DNN Community
+//
+// DNN Community licenses this file to you under the MIT license.
+//
+// See the LICENSE file in the project root for more information.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
+// documentation files (the "Software"), to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
+// to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all copies or substantial portions
+// of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+namespace DotNetNuke.Modules.ActiveForums
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+ using System.Web.UI;
+ using System.Web.UI.WebControls;
+
+ using DotNetNuke.Collections;
+ using DotNetNuke.Data;
+ using DotNetNuke.Modules.ActiveForums.Extensions.WebForms;
+
+ using static log4net.Appender.RollingFileAppender;
+
+ public partial class af_assign_badge_users : ForumBase
+ {
+ private int? badgeId { get; set; }
+
+ private DotNetNuke.Modules.ActiveForums.Entities.BadgeInfo badge { get; set; }
+
+ protected global::System.Web.UI.WebControls.Label lblBadgesAssigned;
+ protected global::System.Web.UI.WebControls.GridView dgrdBadgeUsers;
+
+ protected override void OnInit(EventArgs e)
+ {
+ base.OnInit(e);
+
+ this.badgeId = this.Request.QueryString[ParamKeys.BadgeId] != null ? Convert.ToInt32(this.Request.QueryString[ParamKeys.BadgeId]) : -1;
+ this.badge = new DotNetNuke.Modules.ActiveForums.Controllers.BadgeController().GetById((int)this.badgeId);
+ this.lblBadgesAssigned.Text = string.Format(DotNetNuke.Modules.ActiveForums.Utilities.GetSharedResource("[RESX:BadgeUsersAssigned]"), this.badge.Name);
+ this.dgrdBadgeUsers.Columns[3].HeaderText = DotNetNuke.Modules.ActiveForums.Utilities.GetSharedResource("[RESX:Username]");
+ this.dgrdBadgeUsers.Columns[4].HeaderText = DotNetNuke.Modules.ActiveForums.Utilities.GetSharedResource("[RESX:Date]", isAdmin: true) + " (UTC)";
+
+ this.dgrdBadgeUsers.RowDataBound += this.OnBadgeUsersGridRowDataBound;
+ }
+
+ protected override void OnLoad(EventArgs e)
+ {
+ base.OnLoad(e);
+ try
+ {
+ if (this.UserId > 0 && this.ForumUser.IsAdmin)
+ {
+ this.BindBadgeUsers();
+ }
+ }
+ catch (Exception ex)
+ {
+ Exceptions.LogException(ex);
+ }
+ }
+
+ private void BindBadgeUsers()
+ {
+ this.dgrdBadgeUsers.DataSource = this.GetBadges().ToList();
+ this.dgrdBadgeUsers.DataBind();
+ this.dgrdBadgeUsers.AllowPaging = false;
+ this.dgrdBadgeUsers.WrapGridViewInDataTableNet(this.PortalSettings, this.UserInfo);
+ }
+
+ private class UserList
+ {
+ public int UserId { get; set; }
+
+ public string DisplayName { get; set; }
+ }
+
+ private IEnumerable GetBadges()
+ {
+ var availableUsers = new DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController(this.ForumModuleId).GetActiveUsers(this.PortalId).Select(u => new UserList { UserId = u.UserId, DisplayName = u.DisplayName }).ToList();
+ var assignedBadges = new DotNetNuke.Modules.ActiveForums.Controllers.UserBadgeController(this.PortalId, this.ForumModuleId).GetForBadge((int)this.badgeId);
+ var assignedBadgeIds = assignedBadges.Select(userBadge =>
+ {
+ return new { userBadge.UserBadgeId, userBadge.UserId, userBadge.DateAssigned, };
+ });
+ var mergedBadges = from availUsers in availableUsers
+ join asgnedBadges in assignedBadgeIds on availUsers.UserId equals asgnedBadges.UserId into merged
+ from mrgdBadges in merged.DefaultIfEmpty()
+ select new DotNetNuke.Modules.ActiveForums.Entities.UserBadgeInfo(userBadgeId: mrgdBadges?.UserBadgeId ?? 0, userId: availUsers.UserId, userName: availUsers.DisplayName, badgeId: (int)this.badgeId, badgeName: this.badge.Name, portalId: this.PortalId, moduleId: this.ForumModuleId, dateAssigned: mrgdBadges?.DateAssigned, assigned: mrgdBadges != null);
+ return mergedBadges;
+ }
+
+ protected void OnBadgeUsersGridRowDataBound(object sender, GridViewRowEventArgs e)
+ {
+ if (e.Row.RowType == DataControlRowType.DataRow)
+ {
+ DotNetNuke.Modules.ActiveForums.Entities.UserBadgeInfo userBadgeInfo = e.Row.DataItem as DotNetNuke.Modules.ActiveForums.Entities.UserBadgeInfo;
+ if (userBadgeInfo.DateAssigned.Equals(DotNetNuke.Common.Utilities.Null.NullDate))
+ {
+ e.Row.Cells[4].Text = DotNetNuke.Modules.ActiveForums.Utilities.GetSharedResource("[RESX:BadgeNotAssigned]");
+ }
+ foreach (TableCell cell in e.Row.Cells)
+ {
+ foreach (Control cellControl in cell.Controls)
+ {
+ if (cellControl is CheckBox)
+ {
+ var chkBox = cellControl as CheckBox;
+ if (!(chkBox == null))
+ {
+ chkBox.Attributes.Add("onclick", $"amaf_badgeAssign({this.ForumModuleId},{userBadgeInfo.BadgeId},{userBadgeInfo.UserId},{userBadgeInfo.UserBadgeId},$('#{cellControl.ClientID}').is(':checked'));");
+ chkBox.Enabled = true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/Dnn.CommunityForums/controls/af_assign_user_badges.ascx b/Dnn.CommunityForums/controls/af_assign_user_badges.ascx
new file mode 100644
index 000000000..52669e973
--- /dev/null
+++ b/Dnn.CommunityForums/controls/af_assign_user_badges.ascx
@@ -0,0 +1,32 @@
+<%@ control language="C#" autoeventwireup="false" codebehind="af_assign_user_badges.ascx.cs" inherits="DotNetNuke.Modules.ActiveForums.af_assign_user_badges" %>
+<%@ Register TagPrefix="asp" Namespace="System.Web.UI" Assembly="System.Web" %>
+
+ [RESX:UserBadgesAssigned]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Dnn.CommunityForums/controls/af_assign_user_badges.ascx.cs b/Dnn.CommunityForums/controls/af_assign_user_badges.ascx.cs
new file mode 100644
index 000000000..672b666bc
--- /dev/null
+++ b/Dnn.CommunityForums/controls/af_assign_user_badges.ascx.cs
@@ -0,0 +1,125 @@
+// Copyright (c) by DNN Community
+//
+// DNN Community licenses this file to you under the MIT license.
+//
+// See the LICENSE file in the project root for more information.
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
+// documentation files (the "Software"), to deal in the Software without restriction, including without limitation
+// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
+// to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in all copies or substantial portions
+// of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+// DEALINGS IN THE SOFTWARE.
+
+namespace DotNetNuke.Modules.ActiveForums
+{
+ using System;
+ using System.Collections.Generic;
+ using System.Linq;
+ using System.Web.UI;
+ using System.Web.UI.WebControls;
+
+ using DotNetNuke.Collections;
+ using DotNetNuke.Modules.ActiveForums.Extensions.WebForms;
+
+ public partial class af_assign_user_badges : ForumBase
+ {
+ private int? userid { get; set; }
+
+ private DotNetNuke.Modules.ActiveForums.Entities.ForumUserInfo forumUser { get; set; }
+
+ protected global::System.Web.UI.WebControls.Label lblBadgesAssigned;
+ protected global::System.Web.UI.UpdatePanel upOptions;
+ protected global::System.Web.UI.WebControls.GridView dgrdUserBadges;
+
+ protected override void OnInit(EventArgs e)
+ {
+ base.OnInit(e);
+ this.userid = this.Request.QueryString[ParamKeys.UserId] != null ? Convert.ToInt32(this.Request.QueryString[ParamKeys.UserId]) : -1;
+ this.forumUser = new DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController(this.ForumModuleId).GetByUserId(this.PortalId, (int)this.userid);
+ this.lblBadgesAssigned.Text = string.Format(DotNetNuke.Modules.ActiveForums.Utilities.GetSharedResource("[RESX:UserBadgesAssigned]"), this.forumUser.DisplayName);
+ this.dgrdUserBadges.Columns[3].HeaderText = DotNetNuke.Modules.ActiveForums.Utilities.GetSharedResource("[RESX:Badge]");
+ this.dgrdUserBadges.Columns[4].HeaderText = DotNetNuke.Modules.ActiveForums.Utilities.GetSharedResource("[RESX:Date]", isAdmin: true) + " (UTC)";
+
+ this.dgrdUserBadges.RowDataBound += this.OnUserBadgesGridRowDataBound;
+ }
+
+ protected override void OnLoad(EventArgs e)
+ {
+ base.OnLoad(e);
+ try
+ {
+ if (this.userid > 0 && this.ForumUser.IsAdmin)
+ {
+ this.BindUserBadges();
+ }
+ }
+ catch (Exception ex)
+ {
+ Exceptions.LogException(ex);
+ }
+ }
+
+ private void BindUserBadges()
+ {
+ this.dgrdUserBadges.DataSource = this.GetBadges().ToList();
+ this.dgrdUserBadges.DataBind();
+ this.dgrdUserBadges.AllowPaging = false;
+ this.dgrdUserBadges.WrapGridViewInDataTableNet(this.PortalSettings, this.UserInfo);
+ }
+
+ private IEnumerable GetBadges()
+ {
+ var availableBadges = new DotNetNuke.Modules.ActiveForums.Controllers.BadgeController().Get(this.ForumModuleId).Select(badge =>
+ {
+ return new { badge.BadgeId, badge };
+ });
+
+ var assignedBadges = new DotNetNuke.Modules.ActiveForums.Controllers.UserBadgeController(this.PortalId, this.ForumModuleId).GetForUser(this.PortalId, (int)this.userid);
+ var assignedBadgeIds = assignedBadges.Select(userBadge =>
+ {
+ return new { userBadge.UserBadgeId, userBadge.BadgeId, userBadge.DateAssigned, };
+ });
+ var mergedBadges = from availBadges in availableBadges
+ join asgnedBadges in assignedBadgeIds
+ on availBadges.BadgeId equals asgnedBadges.BadgeId into merged
+ from mrgdBadges in merged.DefaultIfEmpty()
+ select new DotNetNuke.Modules.ActiveForums.Entities.UserBadgeInfo(userBadgeId: mrgdBadges?.UserBadgeId ?? 0, badgeId: availBadges.badge.BadgeId, badgeName: availBadges.badge.Name, userId: (int)this.userid, userName: this.forumUser.DisplayName, portalId: this.PortalId, moduleId: this.ForumModuleId, dateAssigned: mrgdBadges?.DateAssigned, assigned: mrgdBadges != null);
+ return mergedBadges;
+ }
+
+ protected void OnUserBadgesGridRowDataBound(object sender, GridViewRowEventArgs e)
+ {
+ if (e.Row.RowType == DataControlRowType.DataRow)
+ {
+ DotNetNuke.Modules.ActiveForums.Entities.UserBadgeInfo userBadgeInfo = e.Row.DataItem as DotNetNuke.Modules.ActiveForums.Entities.UserBadgeInfo;
+ if (userBadgeInfo.DateAssigned.Equals(DotNetNuke.Common.Utilities.Null.NullDate))
+ {
+ e.Row.Cells[4].Text = DotNetNuke.Modules.ActiveForums.Utilities.GetSharedResource("[RESX:BadgeNotAssigned]");
+ }
+ foreach (TableCell cell in e.Row.Cells)
+ {
+ foreach (Control cellControl in cell.Controls)
+ {
+ if (cellControl is CheckBox)
+ {
+ var chkBox = cellControl as CheckBox;
+ if (!(chkBox == null))
+ {
+ chkBox.Attributes.Add("onclick", $"amaf_badgeAssign({this.ForumModuleId},{userBadgeInfo.BadgeId},{userBadgeInfo.UserId},{userBadgeInfo.UserBadgeId},$('#{cellControl.ClientID}').is(':checked'));");
+ chkBox.Enabled = true;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/Dnn.CommunityForums/controls/af_grid.ascx.cs b/Dnn.CommunityForums/controls/af_grid.ascx.cs
index 233f3894c..b70d6fe9f 100644
--- a/Dnn.CommunityForums/controls/af_grid.ascx.cs
+++ b/Dnn.CommunityForums/controls/af_grid.ascx.cs
@@ -53,7 +53,7 @@ public partial class af_grid : ForumBase
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
- string template = DotNetNuke.Modules.ActiveForums.Controllers.TemplateController.Template_Get(this.ForumModuleId, Enums.TemplateType.TopicResults, SettingsBase.GetModuleSettings(this.ForumModuleId).ForumFeatureSettings.TemplateFileNameSuffix);
+ string template = DotNetNuke.Modules.ActiveForums.Controllers.TemplateController.Template_Get(this.ForumModuleId, Enums.TemplateType.TopicResults, SettingsBase.GetModuleSettings(this.ForumModuleId).DefaultFeatureSettings.TemplateFileNameSuffix);
try
{
@@ -120,7 +120,7 @@ private void TopicRepeaterOnItemDataBound(object sender, RepeaterItemEventArgs r
var topic = new DotNetNuke.Modules.ActiveForums.Controllers.TopicController(this.ForumModuleId).GetById(topicId);
if (topic != null)
{
- itemTemplate = Utilities.DecodeBrackets(DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.ReplaceTopicTokens(new StringBuilder(itemTemplate), topic, this.PortalSettings, this.MainSettings, new Services.URLNavigator().NavigationManager(), this.ForumUser, this.Request.Url, this.Request.RawUrl).ToString());
+ itemTemplate = Utilities.DecodeBrackets(DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.ReplaceTopicTokens(new StringBuilder(itemTemplate), topic, this.PortalSettings, this.ModuleSettings, new Services.URLNavigator().NavigationManager(), this.ForumUser, this.Request.Url, this.Request.RawUrl).ToString());
((LiteralControl)repeaterItemEventArgs.Item.Controls[0]).Text = itemTemplate;
}
}
@@ -147,7 +147,7 @@ private void RepeaterOnItemCreated(object sender, RepeaterItemEventArgs repeater
private void BindPosts(string sort = "ASC")
{
- this.pageSize = (this.UserId > 0) ? this.UserDefaultPageSize : this.MainSettings.PageSize;
+ this.pageSize = (this.UserId > 0) ? this.UserDefaultPageSize : this.ModuleSettings.PageSize;
if (this.pageSize < 5)
{
@@ -315,7 +315,7 @@ private void BindPosts(string sort = "ASC")
break;
}
- if (this.MainSettings.UseSkinBreadCrumb)
+ if (this.ModuleSettings.UseSkinBreadCrumb)
{
Environment.UpdateBreadCrumb(this.Page.Controls, $"{this.lblHeader.Text}");
}
@@ -432,16 +432,16 @@ private void BuildPager(PagerNav pager)
pager.PageMode = Modules.ActiveForums.Controls.PagerNav.Mode.Links;
- if (this.MainSettings.URLRewriteEnabled)
+ if (this.ModuleSettings.URLRewriteEnabled)
{
- if (!string.IsNullOrEmpty(this.MainSettings.PrefixURLBase))
+ if (!string.IsNullOrEmpty(this.ModuleSettings.PrefixURLBase))
{
- pager.BaseURL = "/" + this.MainSettings.PrefixURLBase;
+ pager.BaseURL = "/" + this.ModuleSettings.PrefixURLBase;
}
- if (!string.IsNullOrEmpty(this.MainSettings.PrefixURLOther))
+ if (!string.IsNullOrEmpty(this.ModuleSettings.PrefixURLOther))
{
- pager.BaseURL += "/" + this.MainSettings.PrefixURLOther;
+ pager.BaseURL += "/" + this.ModuleSettings.PrefixURLOther;
}
pager.BaseURL += "/" + this.Request.Params[ParamKeys.GridType] + "/";
@@ -454,7 +454,7 @@ private void BuildPager(PagerNav pager)
public string GetArrowPath()
{
- string theme = this.Page.ResolveUrl(this.MainSettings.ThemeLocation + "/images/miniarrow_down.png");
+ string theme = this.Page.ResolveUrl(this.ModuleSettings.ThemeLocation + "/images/miniarrow_down.png");
return theme;
}
diff --git a/Dnn.CommunityForums/controls/af_likes.ascx.cs b/Dnn.CommunityForums/controls/af_likes.ascx.cs
index d6dd07a55..cfd1c7fbc 100644
--- a/Dnn.CommunityForums/controls/af_likes.ascx.cs
+++ b/Dnn.CommunityForums/controls/af_likes.ascx.cs
@@ -84,7 +84,7 @@ protected override void OnInit(EventArgs e)
base.OnInit(e);
this.post = new DotNetNuke.Modules.ActiveForums.Controllers.ContentController().GetById(this.ContentId, this.ForumModuleId).Post;
- string template = DotNetNuke.Modules.ActiveForums.Controllers.TemplateController.Template_Get(this.ForumModuleId, Enums.TemplateType.Likes, this.post.Forum.FeatureSettings.TemplateFileNameSuffix ?? SettingsBase.GetModuleSettings(this.ForumModuleId).ForumFeatureSettings.TemplateFileNameSuffix);
+ string template = DotNetNuke.Modules.ActiveForums.Controllers.TemplateController.Template_Get(this.ForumModuleId, Enums.TemplateType.Likes, this.post.Forum.FeatureSettings.TemplateFileNameSuffix ?? SettingsBase.GetModuleSettings(this.ForumModuleId).DefaultFeatureSettings.TemplateFileNameSuffix);
try
{
@@ -136,7 +136,7 @@ protected override void OnLoad(EventArgs e)
{
if (this.post != null)
{
- template = DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.ReplacePostTokens(new StringBuilder(template), this.post, this.PortalSettings, this.MainSettings, new Services.URLNavigator().NavigationManager(), this.ForumUser, this.Request.Url, this.Request.RawUrl).ToString();
+ template = DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.ReplacePostTokens(new StringBuilder(template), this.post, this.PortalSettings, this.ModuleSettings, new Services.URLNavigator().NavigationManager(), this.ForumUser, this.Request.Url, this.Request.RawUrl).ToString();
if (control.GetType().FullName == "System.Web.UI.LiteralControl")
{
((System.Web.UI.LiteralControl)control).Text = template;
@@ -193,7 +193,7 @@ private void LikeRepeaterOnItemDataBound(object sender, RepeaterItemEventArgs re
if (this.post != null)
{
- itemTemplate = DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.ReplacePostTokens(new StringBuilder(itemTemplate), this.post, this.PortalSettings, this.MainSettings, new Services.URLNavigator().NavigationManager(), this.ForumUser, this.Request.Url, this.Request.RawUrl).ToString();
+ itemTemplate = DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.ReplacePostTokens(new StringBuilder(itemTemplate), this.post, this.PortalSettings, this.ModuleSettings, new Services.URLNavigator().NavigationManager(), this.ForumUser, this.Request.Url, this.Request.RawUrl).ToString();
if (control.GetType().FullName == "System.Web.UI.LiteralControl")
{
@@ -236,7 +236,7 @@ private void LikeRepeaterOnItemDataBound(object sender, RepeaterItemEventArgs re
{
if (like != null)
{
- itemTemplate = DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.ReplaceLikeTokens(new StringBuilder(itemTemplate), like, this.PortalSettings, this.MainSettings, new Services.URLNavigator().NavigationManager(), this.ForumUser, this.Request.Url, this.Request.RawUrl).ToString();
+ itemTemplate = DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.ReplaceLikeTokens(new StringBuilder(itemTemplate), like, this.PortalSettings, this.ModuleSettings, new Services.URLNavigator().NavigationManager(), this.ForumUser, this.Request.Url, this.Request.RawUrl).ToString();
if (control.GetType().FullName == "System.Web.UI.LiteralControl")
{
((System.Web.UI.LiteralControl)control).Text = itemTemplate;
@@ -258,7 +258,7 @@ private void LikeRepeaterOnItemDataBound(object sender, RepeaterItemEventArgs re
private void BindLikes()
{
- this.pageSize = (this.UserId > 0) ? this.UserDefaultPageSize : this.MainSettings.PageSize;
+ this.pageSize = (this.UserId > 0) ? this.UserDefaultPageSize : this.ModuleSettings.PageSize;
if (this.pageSize < 5)
{
@@ -346,13 +346,13 @@ private void BuildPager(PagerNav pager)
pager.CurrentPage = this.PageId;
pager.TabID = this.TabId;
pager.ForumID = this.ForumId;
- pager.UseShortUrls = this.MainSettings.UseShortUrls;
+ pager.UseShortUrls = this.ModuleSettings.UseShortUrls;
pager.ContentId = this.ContentId;
pager.PageText = Utilities.GetSharedResource("[RESX:Page]");
pager.OfText = Utilities.GetSharedResource("[RESX:PageOf]");
pager.View = Views.Likes;
pager.PageMode = PagerNav.Mode.Links;
- pager.BaseURL = URL.ForumLink(this.TabId, this.post.Forum) + this.post.Topic.TopicUrl + "/" + this.MainSettings.PrefixURLLikes + "/" + this.ContentId;
+ pager.BaseURL = URL.ForumLink(this.TabId, this.post.Forum) + this.post.Topic.TopicUrl + "/" + this.ModuleSettings.PrefixURLLikes + "/" + this.ContentId;
pager.Params = this.Parameters.ToArray();
}
diff --git a/Dnn.CommunityForums/controls/af_members.ascx.cs b/Dnn.CommunityForums/controls/af_members.ascx.cs
index 2c63f865a..4701f0d8c 100644
--- a/Dnn.CommunityForums/controls/af_members.ascx.cs
+++ b/Dnn.CommunityForums/controls/af_members.ascx.cs
@@ -29,7 +29,7 @@ protected override void OnLoad(EventArgs e)
base.OnLoad(e);
this.lblHeader.Text = Utilities.GetSharedResource("[RESX:MemberDirectory]");
- string sMode = this.MainSettings.MemberListMode;
+ string sMode = this.ModuleSettings.MemberListMode;
if (!this.UserInfo.IsSuperUser)
{
if (sMode == "DISABLED")
diff --git a/Dnn.CommunityForums/controls/af_modtopics.ascx.cs b/Dnn.CommunityForums/controls/af_modtopics.ascx.cs
index 0d66182ec..0792b3bcf 100644
--- a/Dnn.CommunityForums/controls/af_modtopics.ascx.cs
+++ b/Dnn.CommunityForums/controls/af_modtopics.ascx.cs
@@ -70,7 +70,7 @@ protected override void OnLoad(EventArgs e)
private void cbMod_Callback(object sender, Modules.ActiveForums.Controls.CallBackEventArgs e)
{
- SettingsInfo ms = SettingsBase.GetModuleSettings(this.ForumModuleId);
+ ModuleSettings ms = SettingsBase.GetModuleSettings(this.ForumModuleId);
DotNetNuke.Modules.ActiveForums.Entities.ForumInfo fi = null;
if (e.Parameters.Length > 0)
{
diff --git a/Dnn.CommunityForums/controls/af_post.ascx.cs b/Dnn.CommunityForums/controls/af_post.ascx.cs
index ce237359e..36ef464af 100644
--- a/Dnn.CommunityForums/controls/af_post.ascx.cs
+++ b/Dnn.CommunityForums/controls/af_post.ascx.cs
@@ -117,7 +117,7 @@ protected override void OnInit(EventArgs e)
this.ForumUser.TrustLevel = -1;
}
this.userIsTrusted = Utilities.IsTrusted((int)this.ForumInfo.FeatureSettings.DefaultTrustValue, this.ForumUser.TrustLevel, this.canTrust, this.ForumInfo.FeatureSettings.AutoTrustLevel, this.ForumUser.PostCount);
- this.themePath = this.Page.ResolveUrl(this.MainSettings.ThemeLocation);
+ this.themePath = this.Page.ResolveUrl(this.ModuleSettings.ThemeLocation);
this.Spinner = this.Page.ResolveUrl(this.themePath + "/images/loading.gif");
this.isApproved = !this.ForumInfo.FeatureSettings.IsModerated || this.userIsTrusted || this.canModApprove;
@@ -282,9 +282,9 @@ private void ctlForm_Click(object sender, EventArgs e)
this.Context.ApplicationInstance.CompleteRequest();
}
- if (!Utilities.HasFloodIntervalPassed(floodInterval: this.MainSettings.FloodInterval, forumUser: this.ForumUser, forumInfo: this.ForumInfo))
+ if (!Utilities.HasFloodIntervalPassed(floodInterval: this.ModuleSettings.FloodInterval, forumUser: this.ForumUser, forumInfo: this.ForumInfo))
{
- this.plhMessage.Controls.Add(new InfoMessage { Message = "" + string.Format(this.GetSharedResource("[RESX:Error:FloodControl]"), this.MainSettings.FloodInterval) + " " });
+ this.plhMessage.Controls.Add(new InfoMessage { Message = "" + string.Format(this.GetSharedResource("[RESX:Error:FloodControl]"), this.ModuleSettings.FloodInterval) + " " });
return;
}
if (!this.Page.IsValid || !Utilities.InputIsValid(this.ctlForm.Body.Trim()) || !Utilities.InputIsValid(this.ctlForm.Subject))
@@ -381,7 +381,7 @@ private void LoadTopic()
{
var im = new InfoMessage
{
- Message = "" + string.Format(this.GetSharedResource("[RESX:Message:EditIntervalNotReached]"), this.MainSettings.EditInterval) + " ",
+ Message = "" + string.Format(this.GetSharedResource("[RESX:Message:EditIntervalNotReached]"), this.ModuleSettings.EditInterval) + " ",
};
this.plhMessage.Controls.Add(im);
this.plhContent.Controls.Clear();
@@ -467,7 +467,7 @@ private void LoadReply()
{
var im = new Controls.InfoMessage
{
- Message = "" + string.Format(this.GetSharedResource("[RESX:Message:EditIntervalNotReached]"), this.MainSettings.EditInterval.ToString()) + " ",
+ Message = "" + string.Format(this.GetSharedResource("[RESX:Message:EditIntervalNotReached]"), this.ModuleSettings.EditInterval.ToString()) + " ",
};
this.plhMessage.Controls.Add(im);
this.plhContent.Controls.Clear();
@@ -503,7 +503,7 @@ private void PrepareTopic()
template = template.Replace("[RESX:CreateNewTopic]", "[RESX:EditingExistingTopic]");
}
- if (this.MainSettings.UseSkinBreadCrumb)
+ if (this.ModuleSettings.UseSkinBreadCrumb)
{
var sCrumb = "" + this.ForumInfo.GroupName + "|";
sCrumb += "" + this.ForumInfo.ForumName + "";
@@ -534,7 +534,7 @@ private void PrepareReply()
string template = DotNetNuke.Modules.ActiveForums.Controllers.TemplateController.Template_Get(this.ForumModuleId, Enums.TemplateType.ReplyEditor, this.ForumInfo.FeatureSettings.TemplateFileNameSuffix);
#region "Backward compatilbility -- remove in v10.00.00"
- template = DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.MapLegacyAuthorTokenSynonyms(new StringBuilder(template), this.PortalSettings, this.MainSettings, this.ForumUser.UserInfo?.Profile?.PreferredLocale).ToString();
+ template = DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.MapLegacyAuthorTokenSynonyms(new StringBuilder(template), this.PortalSettings, this.ModuleSettings, this.ForumUser.UserInfo?.Profile?.PreferredLocale).ToString();
template = DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.MapLegacyPostTokenSynonyms(new StringBuilder(template), this.PortalSettings, this.ForumUser.UserInfo?.Profile?.PreferredLocale).ToString();
#endregion "Backward compatilbility -- remove in v10.00.00"
@@ -543,7 +543,7 @@ private void PrepareReply()
template = template.Replace("[RESX:ReplyToTopic]", "[RESX:EditingExistingReply]");
}
- if (this.MainSettings.UseSkinBreadCrumb)
+ if (this.ModuleSettings.UseSkinBreadCrumb)
{
template = template.Replace("[AF:LINK:FORUMMAIN] > [AF:LINK:FORUMGROUP] > [AF:LINK:FORUMNAME] ", string.Empty);
}
@@ -614,7 +614,7 @@ private void PrepareReply()
if (post != null)
{
var sPostedBy = Utilities.GetSharedResource("[RESX:PostedBy]") + " {0} {1} {2}";
- sPostedBy = string.Format(sPostedBy, DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController.GetDisplayName(this.PortalSettings, this.MainSettings, false, false, post.Author.AuthorId, post.Author.Username, post.Author.FirstName, post.Author.LastName, post.Author.DisplayName), Utilities.GetSharedResource("On.Text"), Utilities.GetUserFormattedDateTime(post.Content.DateCreated, this.PortalId, this.UserId));
+ sPostedBy = string.Format(sPostedBy, DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController.GetDisplayName(this.PortalSettings, this.ModuleSettings, false, false, post.Author.AuthorId, post.Author.Username, post.Author.FirstName, post.Author.LastName, post.Author.DisplayName), Utilities.GetSharedResource("On.Text"), Utilities.GetUserFormattedDateTime(post.Content.DateCreated, this.PortalId, this.UserId));
var body = post.Content.Body;
if (this.allowHTML && this.editorType != EditorTypes.TEXTBOX)
{
@@ -682,7 +682,7 @@ private void SaveTopic()
if (this.Request.IsAuthenticated)
{
authorId = this.UserInfo.UserID;
- switch (this.MainSettings.UserNameDisplay.ToUpperInvariant())
+ switch (this.ModuleSettings.UserNameDisplay.ToUpperInvariant())
{
case "USERNAME":
authorName = this.UserInfo.Username.Trim(' ');
@@ -936,7 +936,7 @@ private void SaveReply()
if (this.Request.IsAuthenticated)
{
authorId = this.UserInfo.UserID;
- switch (this.MainSettings.UserNameDisplay.ToUpperInvariant())
+ switch (this.ModuleSettings.UserNameDisplay.ToUpperInvariant())
{
case "USERNAME":
authorName = this.UserInfo.Username.Trim(' ');
diff --git a/Dnn.CommunityForums/controls/af_profile.ascx.cs b/Dnn.CommunityForums/controls/af_profile.ascx.cs
index ed9e936fb..4388735e7 100644
--- a/Dnn.CommunityForums/controls/af_profile.ascx.cs
+++ b/Dnn.CommunityForums/controls/af_profile.ascx.cs
@@ -38,18 +38,18 @@ protected override void OnLoad(EventArgs e)
DotNetNuke.Entities.Users.UserInfo ui = DotNetNuke.Entities.Users.UserController.Instance.GetUser(this.PortalId, tUid);
if (ui != null)
{
- sDisplayName = DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController.GetDisplayName(this.PortalSettings, this.MainSettings, false, false, ui.UserID, ui.Username, ui.FirstName, ui.LastName, ui.DisplayName);
+ sDisplayName = DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController.GetDisplayName(this.PortalSettings, this.ModuleSettings, false, false, ui.UserID, ui.Username, ui.FirstName, ui.LastName, ui.DisplayName);
}
}
}
else
{
tUid = this.UserId;
- sDisplayName = DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController.GetDisplayName(this.PortalSettings, this.MainSettings, false, false, this.UserId, this.UserInfo.Username, this.UserInfo.FirstName, this.UserInfo.LastName, this.UserInfo.DisplayName);
+ sDisplayName = DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController.GetDisplayName(this.PortalSettings, this.ModuleSettings, false, false, this.UserId, this.UserInfo.Username, this.UserInfo.FirstName, this.UserInfo.LastName, this.UserInfo.DisplayName);
}
this.lblHeader.Text = string.Format(Utilities.GetSharedResource("[RESX:ProfileForUser]"), sDisplayName);
- if (this.MainSettings.UseSkinBreadCrumb)
+ if (this.ModuleSettings.UseSkinBreadCrumb)
{
Environment.UpdateBreadCrumb(this.Page.Controls, "" + this.lblHeader.Text + "");
}
diff --git a/Dnn.CommunityForums/controls/af_quickreply.ascx.cs b/Dnn.CommunityForums/controls/af_quickreply.ascx.cs
index 16e052bfc..0cb483752 100644
--- a/Dnn.CommunityForums/controls/af_quickreply.ascx.cs
+++ b/Dnn.CommunityForums/controls/af_quickreply.ascx.cs
@@ -218,7 +218,7 @@ private void SaveQuickReply()
if (!Utilities.HasFloodIntervalPassed(floodInterval: this.ForumInfo.MainSettings.FloodInterval, forumUser: this.ForumUser, forumInfo: forumInfo))
{
Controls.InfoMessage im = new Controls.InfoMessage();
- im.Message = "" + string.Format(Utilities.GetSharedResource("[RESX:Error:FloodControl]"), this.MainSettings.FloodInterval) + " ";
+ im.Message = "" + string.Format(Utilities.GetSharedResource("[RESX:Error:FloodControl]"), this.ModuleSettings.FloodInterval) + " ";
this.plhMessage.Controls.Add(im);
return;
}
@@ -259,7 +259,7 @@ private void SaveQuickReply()
string sUsername = string.Empty;
if (this.Request.IsAuthenticated)
{
- switch (this.MainSettings.UserNameDisplay.ToUpperInvariant())
+ switch (this.ModuleSettings.UserNameDisplay.ToUpperInvariant())
{
case "USERNAME":
sUsername = this.UserInfo.Username.Trim(' ');
diff --git a/Dnn.CommunityForums/controls/af_recycle_bin.ascx.cs b/Dnn.CommunityForums/controls/af_recycle_bin.ascx.cs
index 747528ba4..d4f0fc713 100644
--- a/Dnn.CommunityForums/controls/af_recycle_bin.ascx.cs
+++ b/Dnn.CommunityForums/controls/af_recycle_bin.ascx.cs
@@ -69,7 +69,6 @@ protected override void OnInit(EventArgs e)
this.dgrdRestoreView.Columns[6].HeaderText = DotNetNuke.Modules.ActiveForums.Utilities.GetSharedResource("[RESX:Author]");
this.dgrdRestoreView.Columns[7].HeaderText = DotNetNuke.Modules.ActiveForums.Utilities.GetSharedResource("[RESX:DateCreated]");
- //this.dgrdRestoreView.PageIndexChanging += this.RestoreViewGridRowPageIndexChanging;
this.dgrdRestoreView.RowCommand += this.RestoreViewGrid_OnRowCommand;
this.dgrdRestoreView.RowDataBound += this.OnRestoreViewGridRowDataBound;
this.btnEmptyRecycleBin.Click += this.btnEmptyRecycleBin_Click;
@@ -125,18 +124,6 @@ protected override void OnLoad(EventArgs e)
base.OnLoad(e);
try
{
- int _pageSize = this.MainSettings.PageSize;
- if (this.UserInfo.UserID > 0)
- {
- _pageSize = this.UserDefaultPageSize;
- }
-
- if (_pageSize < 5)
- {
- _pageSize = 10;
- }
-
-
if (this.UserId > 0 && this.ForumUser.GetIsMod(this.ForumModuleId))
{
this.BindRecycleData();
@@ -153,7 +140,6 @@ private void BindRecycleData()
var recycleData = this.GetData().ToList();
this.dgrdRestoreView.DataSource = recycleData;
this.dgrdRestoreView.DataBind();
- this.dgrdRestoreView.PageSize = this.dgrdRestoreView.Rows.Count;
this.btnEmptyRecycleBin.Enabled = recycleData.Any();
this.btnRestoreAll.Enabled = recycleData.Any();
this.dgrdRestoreView.WrapGridViewInDataTableNet(this.PortalSettings, this.UserInfo);
@@ -210,11 +196,5 @@ protected void OnRestoreViewGridRowDataBound(object sender, GridViewRowEventArgs
}
}
}
-
- //protected void RestoreViewGridRowPageIndexChanging(object sender, GridViewPageEventArgs e)
- //{
- // this.dgrdRestoreView.PageIndex = e.NewPageIndex;
- // this.dgrdRestoreView.DataBind();
- //}
}
}
diff --git a/Dnn.CommunityForums/controls/af_search.ascx.cs b/Dnn.CommunityForums/controls/af_search.ascx.cs
index e60f3883e..ac408880d 100644
--- a/Dnn.CommunityForums/controls/af_search.ascx.cs
+++ b/Dnn.CommunityForums/controls/af_search.ascx.cs
@@ -79,7 +79,7 @@ public partial class af_search : ForumBase
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
- string template = DotNetNuke.Modules.ActiveForums.Controllers.TemplateController.Template_Get(this.ForumModuleId, Enums.TemplateType.SearchResults, SettingsBase.GetModuleSettings(this.ForumModuleId).ForumFeatureSettings.TemplateFileNameSuffix);
+ string template = DotNetNuke.Modules.ActiveForums.Controllers.TemplateController.Template_Get(this.ForumModuleId, Enums.TemplateType.SearchResults, SettingsBase.GetModuleSettings(this.ForumModuleId).DefaultFeatureSettings.TemplateFileNameSuffix);
try
{
@@ -181,7 +181,7 @@ private void TopicRepeaterOnItemDataBound(object sender, RepeaterItemEventArgs r
var topic = new DotNetNuke.Modules.ActiveForums.Controllers.TopicController(this.ForumModuleId).GetById(topicId);
if (topic != null)
{
- itemTemplate = Utilities.DecodeBrackets(DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.ReplaceTopicTokens(new StringBuilder(itemTemplate), topic, this.PortalSettings, this.MainSettings, new Services.URLNavigator().NavigationManager(), this.ForumUser, this.Request.Url, this.Request.RawUrl).ToString());
+ itemTemplate = Utilities.DecodeBrackets(DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.ReplaceTopicTokens(new StringBuilder(itemTemplate), topic, this.PortalSettings, this.ModuleSettings, new Services.URLNavigator().NavigationManager(), this.ForumUser, this.Request.Url, this.Request.RawUrl).ToString());
((LiteralControl)repeaterItemEventArgs.Item.Controls[0]).Text = itemTemplate;
}
}
@@ -243,7 +243,7 @@ private void PostRepeaterOnItemDataBound(object sender, RepeaterItemEventArgs re
if (!string.IsNullOrEmpty(itemTemplate) && itemTemplate.Contains("["))
{
- itemTemplate = DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.ReplacePostTokens(new StringBuilder(itemTemplate), post, this.PortalSettings, this.MainSettings, new Services.URLNavigator().NavigationManager(), this.ForumUser, this.Request.Url, this.Request.RawUrl).ToString();
+ itemTemplate = DotNetNuke.Modules.ActiveForums.Services.Tokens.TokenReplacer.ReplacePostTokens(new StringBuilder(itemTemplate), post, this.PortalSettings, this.ModuleSettings, new Services.URLNavigator().NavigationManager(), this.ForumUser, this.Request.Url, this.Request.RawUrl).ToString();
if (control.GetType().FullName == "System.Web.UI.LiteralControl")
{
((System.Web.UI.LiteralControl)control).Text = itemTemplate;
@@ -528,7 +528,7 @@ private List Parameters
private void BindPosts()
{
- this.pageSize = (this.UserId > 0) ? this.UserDefaultPageSize : this.MainSettings.PageSize;
+ this.pageSize = (this.UserId > 0) ? this.UserDefaultPageSize : this.ModuleSettings.PageSize;
if (this.pageSize < 5)
{
@@ -565,7 +565,7 @@ private void BindPosts()
const int maxCacheHours = 1;
- var ds = DataProvider.Instance().Search(this.PortalId, this.ModuleId, this.UserId, this.SearchId, this.rowIndex, this.pageSize, this.SearchText, this.SearchType, this.SearchColumns, this.SearchDays, this.AuthorUserId, this.AuthorUsername, forumsToSearch, this.Tags, this.ResultType, this.Sort, maxCacheHours, this.MainSettings.FullText);
+ var ds = DataProvider.Instance().Search(this.PortalId, this.ModuleId, this.UserId, this.SearchId, this.rowIndex, this.pageSize, this.SearchText, this.SearchType, this.SearchColumns, this.SearchDays, this.AuthorUserId, this.AuthorUsername, forumsToSearch, this.Tags, this.ResultType, this.Sort, maxCacheHours, this.ModuleSettings.FullText);
var dtSummary = (ds != null) ? ds.Tables[0] : null;
diff --git a/Dnn.CommunityForums/controls/af_sendto.ascx.cs b/Dnn.CommunityForums/controls/af_sendto.ascx.cs
index 7e4b086af..f24f33ec7 100644
--- a/Dnn.CommunityForums/controls/af_sendto.ascx.cs
+++ b/Dnn.CommunityForums/controls/af_sendto.ascx.cs
@@ -58,21 +58,21 @@ protected override void OnLoad(EventArgs e)
this.txtRecipSubject.Text = subjectDefault;
string messageDefault = this.GetSharedResource("[RESX:EmailMessageDefault]");
string sURL = this.NavigateUrl(this.TabId, string.Empty, new string[] { ParamKeys.ForumId + "=" + this.ForumId, ParamKeys.ViewType + "=" + Views.Topic, ParamKeys.TopicId + "=" + this.TopicId });
- if (this.MainSettings.UseShortUrls)
+ if (this.ModuleSettings.UseShortUrls)
{
sURL = this.NavigateUrl(this.TabId, string.Empty, new string[] { ParamKeys.TopicId + "=" + this.TopicId });
}
messageDefault = messageDefault.Replace("[TOPICLINK]", sURL);
- messageDefault = messageDefault.Replace("[DISPLAYNAME]", $"{DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController.GetDisplayName(portalSettings: this.PortalSettings, mainSettings: this.MainSettings, isMod: false, isAdmin: false, userId: this.UserId, username: this.UserInfo.Username, firstName: this.UserInfo.FirstName, lastName: this.UserInfo.LastName, displayName: this.UserInfo.DisplayName)}");
+ messageDefault = messageDefault.Replace("[DISPLAYNAME]", $"{DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController.GetDisplayName(portalSettings: this.PortalSettings, mainSettings: this.ModuleSettings, isMod: false, isAdmin: false, userId: this.UserId, username: this.UserInfo.Username, firstName: this.UserInfo.FirstName, lastName: this.UserInfo.LastName, displayName: this.UserInfo.DisplayName)}");
this.txtMessage.Text = messageDefault;
}
}
- if (this.MainSettings.UseSkinBreadCrumb)
+ if (this.ModuleSettings.UseSkinBreadCrumb)
{
string sCrumb = "" + this.ForumInfo.GroupName + "|";
- if (this.MainSettings.UseShortUrls)
+ if (this.ModuleSettings.UseShortUrls)
{
sCrumb += "" + this.ForumInfo.ForumName + "";
sCrumb += "|" + topicSubject + "";
diff --git a/Dnn.CommunityForums/controls/af_topicscripts.ascx b/Dnn.CommunityForums/controls/af_topicscripts.ascx
index fcbfef217..1fe6c2385 100644
--- a/Dnn.CommunityForums/controls/af_topicscripts.ascx
+++ b/Dnn.CommunityForums/controls/af_topicscripts.ascx
@@ -39,7 +39,8 @@
// Create the user editor
$.fn.afUserEditor({
openTriggerSelector: ".af-button-edituser",
- servicesFramework: $.ServicesFramework(<%=ModuleId%>)
+ servicesFramework: $.ServicesFramework(<%=ModuleId%>),
+ baseUrl: '<%=GetBaseUrl()%>',
});
// Split selected posts
diff --git a/Dnn.CommunityForums/controls/af_topicscripts.ascx.cs b/Dnn.CommunityForums/controls/af_topicscripts.ascx.cs
index d24d13d75..ec200ae22 100644
--- a/Dnn.CommunityForums/controls/af_topicscripts.ascx.cs
+++ b/Dnn.CommunityForums/controls/af_topicscripts.ascx.cs
@@ -23,17 +23,23 @@ namespace DotNetNuke.Modules.ActiveForums.Controls
using System;
using DotNetNuke.Framework;
+ using DotNetNuke.UI.Utilities;
using DotNetNuke.Web.Client.ClientResourceManagement;
public partial class af_topicscripts : SettingsBase
{
+ public string GetBaseUrl()
+ {
+ return Utilities.NavigateURL(this.TabId, string.Empty);
+ }
+
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
ServicesFramework.Instance.RequestAjaxScriptSupport();
ServicesFramework.Instance.RequestAjaxAntiForgerySupport();
- ClientResourceManager.RegisterScript(this.Page, Globals.ModulePath + "scripts/usereditor.js");
+ ClientResourceManager.RegisterScript(this.Page, DotNetNuke.Modules.ActiveForums.Globals.ModulePath + "scripts/usereditor.js");
}
}
}
diff --git a/Dnn.CommunityForums/controls/af_usersonline.ascx.cs b/Dnn.CommunityForums/controls/af_usersonline.ascx.cs
index 35248c26b..dd68294ce 100644
--- a/Dnn.CommunityForums/controls/af_usersonline.ascx.cs
+++ b/Dnn.CommunityForums/controls/af_usersonline.ascx.cs
@@ -54,7 +54,7 @@ protected override void OnLoad(EventArgs e)
private void BindUsersOnline()
{
var user = new DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController(this.ForumModuleId).GetByUserId(this.PortalId, this.UserInfo.UserID);
- string sOnlineList = new DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController(this.ForumModuleId).GetUsersOnline(this.PortalSettings, this.MainSettings, this.ForumModuleId, user);
+ string sOnlineList = new DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController(this.ForumModuleId).GetUsersOnline(this.PortalSettings, this.ModuleSettings, this.ForumModuleId, user);
IDataReader dr = DataProvider.Instance().Profiles_GetStats(this.PortalId, 2);
int anonCount = 0;
int memCount = 0;
diff --git a/Dnn.CommunityForums/controls/profile_mypreferences.ascx b/Dnn.CommunityForums/controls/profile_mypreferences.ascx
index 5900c1a26..a49e0f7c4 100644
--- a/Dnn.CommunityForums/controls/profile_mypreferences.ascx
+++ b/Dnn.CommunityForums/controls/profile_mypreferences.ascx
@@ -37,7 +37,11 @@
+
diff --git a/Dnn.CommunityForums/controls/profile_mypreferences.ascx.cs b/Dnn.CommunityForums/controls/profile_mypreferences.ascx.cs
index 38240bd31..94ec70972 100644
--- a/Dnn.CommunityForums/controls/profile_mypreferences.ascx.cs
+++ b/Dnn.CommunityForums/controls/profile_mypreferences.ascx.cs
@@ -24,6 +24,20 @@ namespace DotNetNuke.Modules.ActiveForums
public partial class profile_mypreferences : ForumBase
{
+ protected global::System.Web.UI.UserControl lblHeader;
+ protected global::System.Web.UI.WebControls.DropDownList drpPrefDefaultSort;
+ protected global::System.Web.UI.WebControls.DropDownList drpPrefPageSize;
+ protected global::System.Web.UI.WebControls.CheckBox chkPrefJumpToLastPost;
+ protected global::System.Web.UI.WebControls.CheckBox chkPrefTopicSubscribe;
+ protected global::System.Web.UI.WebControls.CheckBox chkLikesNotificationsEnabled;
+ protected global::System.Web.UI.WebControls.CheckBox chkPinNotificationsEnabled;
+ protected global::System.Web.UI.WebControls.CheckBox chkBadgeNotificationsEnabled;
+ protected global::System.Web.UI.WebControls.CheckBox chkEnableNotificationsForOwnContent;
+ protected global::System.Web.UI.WebControls.CheckBox chkPrefBlockAvatars;
+ protected global::System.Web.UI.WebControls.CheckBox chkPrefBlockSignatures;
+ protected global::System.Web.UI.WebControls.TextBox txtSignature;
+ protected global::System.Web.UI.WebControls.LinkButton btnSave;
+
public int UID { get; set; }
protected override void OnLoad(EventArgs e)
@@ -53,6 +67,7 @@ protected override void OnLoad(EventArgs e)
this.chkPrefBlockSignatures.Checked = ui.PrefBlockSignatures;
this.chkLikesNotificationsEnabled.Checked = ui.LikeNotificationsEnabled;
this.chkPinNotificationsEnabled.Checked = ui.PinNotificationsEnabled;
+ this.chkBadgeNotificationsEnabled.Checked = ui.BadgeNotificationsEnabled;
this.chkEnableNotificationsForOwnContent.Checked = ui.EnableNotificationsForOwnContent;
this.txtSignature.Text = ui.Signature;
}
@@ -78,14 +93,15 @@ private void btnSave_Click(object sender, System.EventArgs e)
upi.PrefBlockSignatures = this.chkPrefBlockSignatures.Checked;
upi.LikeNotificationsEnabled = this.chkLikesNotificationsEnabled.Checked;
upi.PinNotificationsEnabled = this.chkPinNotificationsEnabled.Checked;
+ upi.BadgeNotificationsEnabled = this.chkBadgeNotificationsEnabled.Checked;
upi.EnableNotificationsForOwnContent = this.chkEnableNotificationsForOwnContent.Checked;
- if (this.MainSettings.AllowSignatures == 1 || this.MainSettings.AllowSignatures == 0)
+ if (this.ModuleSettings.AllowSignatures == 1 || this.ModuleSettings.AllowSignatures == 0)
{
upi.Signature = Utilities.XSSFilter(this.txtSignature.Text, true);
upi.Signature = Utilities.StripHTMLTag(upi.Signature);
upi.Signature = System.Net.WebUtility.HtmlEncode(upi.Signature);
}
- else if (this.MainSettings.AllowSignatures == 2)
+ else if (this.ModuleSettings.AllowSignatures == 2)
{
upi.Signature = Utilities.XSSFilter(this.txtSignature.Text, false);
}
diff --git a/Dnn.CommunityForums/controls/profile_mypreferences.ascx.designer.cs b/Dnn.CommunityForums/controls/profile_mypreferences.ascx.designer.cs
deleted file mode 100644
index 328115b6e..000000000
--- a/Dnn.CommunityForums/controls/profile_mypreferences.ascx.designer.cs
+++ /dev/null
@@ -1,111 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-namespace DotNetNuke.Modules.ActiveForums
-{
-
- public partial class profile_mypreferences
- {
- ///
- /// lblHeader control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.UserControl lblHeader;
- ///
- /// drpPrefDefaultSort control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.DropDownList drpPrefDefaultSort;
- ///
- /// drpPrefPageSize control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.DropDownList drpPrefPageSize;
- ///
- /// chkPrefJumpToLastPost control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.CheckBox chkPrefJumpToLastPost;
- ///
- /// chkPrefTopicSubscribe control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.CheckBox chkPrefTopicSubscribe;
- ///
- /// chkLikesNotificationsEnabled control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.CheckBox chkLikesNotificationsEnabled;
- ///
- /// chkPinNotificationsEnabled control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.CheckBox chkPinNotificationsEnabled;
- ///
- /// chkEnableNotificationsForOwnContent control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.CheckBox chkEnableNotificationsForOwnContent;
- ///
- /// chkPrefBlockAvatars control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.CheckBox chkPrefBlockAvatars;
- ///
- /// chkPrefBlockSignatures control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.CheckBox chkPrefBlockSignatures;
- ///
- /// txtSignature control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.TextBox txtSignature;
- ///
- /// btnSave control.
- ///
- ///
- /// Auto-generated field.
- /// To modify move field declaration from designer file to code-behind file.
- ///
- protected global::System.Web.UI.WebControls.LinkButton btnSave;
- }
-}
diff --git a/Dnn.CommunityForums/controls/profile_mysubscriptions.ascx b/Dnn.CommunityForums/controls/profile_mysubscriptions.ascx
index d8687eb37..580c8d120 100644
--- a/Dnn.CommunityForums/controls/profile_mysubscriptions.ascx
+++ b/Dnn.CommunityForums/controls/profile_mysubscriptions.ascx
@@ -7,8 +7,8 @@
[RESX:Topic] [RESX:Subscriptions]:
-
+
@@ -36,7 +36,7 @@
[RESX:Forum] [RESX:Subscriptions]:
-
diff --git a/Dnn.CommunityForums/controls/profile_mysubscriptions.ascx.cs b/Dnn.CommunityForums/controls/profile_mysubscriptions.ascx.cs
index 9b596fd11..afdc82739 100644
--- a/Dnn.CommunityForums/controls/profile_mysubscriptions.ascx.cs
+++ b/Dnn.CommunityForums/controls/profile_mysubscriptions.ascx.cs
@@ -49,8 +49,8 @@ protected override void OnInit(EventArgs e)
this.dgrdForumSubs.Columns[4].HeaderText = DotNetNuke.Modules.ActiveForums.Utilities.GetSharedResource("[RESX:Forum].Text");
this.dgrdForumSubs.Columns[5].HeaderText = DotNetNuke.Modules.ActiveForums.Utilities.GetSharedResource("[RESX:LastPost].Text");
- this.dgrdTopicSubs.RowDataBound += this.OnTopicSubsGridRowDataBound;
- this.dgrdForumSubs.RowDataBound += this.OnForumSubsGridRowDataBound;
+ this.dgrdTopicSubs.RowDataBound += this.GridRowDataBound;
+ this.dgrdForumSubs.RowDataBound += this.GridRowDataBound;
this.btnSubscribeAll.Click += this.btnSubscribeAll_Click;
}
@@ -82,7 +82,7 @@ private void BindTopicSubs()
});
this.dgrdTopicSubs.DataSource = subscribedTopics.ToList();
this.dgrdTopicSubs.DataBind();
- this.dgrdTopicSubs.PageSize = this.dgrdTopicSubs.Rows.Count;
+ this.dgrdTopicSubs.AllowPaging = false;
this.dgrdTopicSubs.WrapGridViewInDataTableNet(this.PortalSettings, this.UserInfo);
}
@@ -90,7 +90,7 @@ private void BindForumSubs()
{
this.dgrdForumSubs.DataSource = this.GetSubscriptions().ToList();
this.dgrdForumSubs.DataBind();
- this.dgrdForumSubs.PageSize = this.dgrdForumSubs.Rows.Count;
+ this.dgrdForumSubs.AllowPaging = false;
this.dgrdForumSubs.WrapGridViewInDataTableNet(this.PortalSettings, this.UserInfo);
}
@@ -105,12 +105,15 @@ private void btnSubscribeAll_Click(object sender, System.EventArgs e)
private IEnumerable GetSubscriptions()
{
- var userPermSet = new DotNetNuke.Modules.ActiveForums.Controllers.ForumUserController(this.ForumModuleId).GetByUserId(this.PortalId, this.UID).UserPermSet;
+ var availableForums = new List();
var availableForumsString = DotNetNuke.Modules.ActiveForums.Controllers.ForumController.GetForumsForUser(this.PortalId, this.ForumModuleId, this.ForumUser);
- var availableForums = availableForumsString.Split(separator: new[] { ';' }, options: StringSplitOptions.RemoveEmptyEntries).Select(forum =>
+ availableForumsString.Split(separator: new[] { ';' }, options: StringSplitOptions.RemoveEmptyEntries).ForEach(forumId =>
{
- var Forum = new DotNetNuke.Modules.ActiveForums.Controllers.ForumController().GetById(int.Parse(forum), this.ForumModuleId);
- return new { ForumId = int.Parse(forum), Forum };
+ var forum = new DotNetNuke.Modules.ActiveForums.Controllers.ForumController().GetById(int.Parse(forumId), this.ForumModuleId);
+ if (DotNetNuke.Modules.ActiveForums.Controllers.PermissionController.HasRequiredPerm(forum.Security.SubscribeRoleIds, this.ForumUser.UserRoleIds))
+ {
+ availableForums.Add(new { ForumId = int.Parse(forumId), Forum = forum });
+ }
});
var forumSubscriptions = new DotNetNuke.Modules.ActiveForums.Controllers.SubscriptionController().SubscribedForums(this.PortalId, this.ForumModuleId, this.UID);
@@ -127,30 +130,7 @@ from ms in merged.DefaultIfEmpty()
return mergedSubscriptions;
}
- protected void OnForumSubsGridRowDataBound(object sender, GridViewRowEventArgs e)
- {
- if (e.Row.RowType == DataControlRowType.DataRow)
- {
- DotNetNuke.Modules.ActiveForums.Entities.SubscriptionInfo subscriptionInfo = e.Row.DataItem as DotNetNuke.Modules.ActiveForums.Entities.SubscriptionInfo;
- foreach (TableCell cell in e.Row.Cells)
- {
- foreach (Control cellControl in cell.Controls)
- {
- if (cellControl is CheckBox)
- {
- var chkBox = cellControl as CheckBox;
- if (!(chkBox == null))
- {
- chkBox.Attributes.Add("onclick", "amaf_forumSubscribe(" + this.ForumModuleId + "," + subscriptionInfo.ForumId + ");");
- chkBox.Enabled = true;
- }
- }
- }
- }
- }
- }
-
- protected void OnTopicSubsGridRowDataBound(object sender, GridViewRowEventArgs e)
+ protected void GridRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
@@ -164,7 +144,14 @@ protected void OnTopicSubsGridRowDataBound(object sender, GridViewRowEventArgs e
var chkBox = cellControl as CheckBox;
if (!(chkBox == null))
{
- chkBox.Attributes.Add("onclick", "amaf_topicSubscribe(" + this.ForumModuleId + "," + subscriptionInfo.ForumId + "," + subscriptionInfo.TopicId + ");");
+ if (subscriptionInfo.TopicId > 0)
+ {
+ chkBox.Attributes.Add("onclick", "amaf_topicSubscribe(" + this.ForumModuleId + "," + subscriptionInfo.ForumId + "," + subscriptionInfo.TopicId + ");");
+ }
+ else
+ {
+ chkBox.Attributes.Add("onclick", "amaf_forumSubscribe(" + this.ForumModuleId + "," + subscriptionInfo.ForumId + ");");
+ }
chkBox.Enabled = true;
}
}
diff --git a/Dnn.CommunityForums/feeds.aspx.cs b/Dnn.CommunityForums/feeds.aspx.cs
index 9b6ac6f8b..6f4fb2389 100644
--- a/Dnn.CommunityForums/feeds.aspx.cs
+++ b/Dnn.CommunityForums/feeds.aspx.cs
@@ -188,7 +188,7 @@ private string BuildRSS(int portalId, int tabId, int moduleId, int intPosts, int
private string BuildItem(DataRow dr, int postTabID, int indent, bool includeBody, int portalId)
{
- SettingsInfo mainSettings = SettingsBase.GetModuleSettings(this.moduleID);
+ ModuleSettings mainSettings = SettingsBase.GetModuleSettings(this.moduleID);
StringBuilder sb = new StringBuilder(1024);
string[] @params = { ParamKeys.ForumId + "=" + dr["ForumID"].ToString(), ParamKeys.TopicId + "=" + dr["TopicId"].ToString(), ParamKeys.ViewType + "=" + Views.Topic };
string uRL = DotNetNuke.Modules.ActiveForums.Utilities.NavigateURL(postTabID, string.Empty, @params);
diff --git a/Dnn.CommunityForums/handlers/adminhelper.ashx.cs b/Dnn.CommunityForums/handlers/adminhelper.ashx.cs
index 93e975818..200942313 100644
--- a/Dnn.CommunityForums/handlers/adminhelper.ashx.cs
+++ b/Dnn.CommunityForums/handlers/adminhelper.ashx.cs
@@ -18,11 +18,14 @@
// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
+using DotNetNuke.Modules.ActiveForums.Enums;
+
namespace DotNetNuke.Modules.ActiveForums.Handlers
{
using System;
using System.Text;
using System.Web;
+ using Newtonsoft.Json.Linq;
public class adminhelper : HandlerBase
{
@@ -41,6 +44,9 @@ public enum Actions : int
FilterGet = 11,
FilterSave = 12,
FilterDelete = 13,
+ BadgeGet = 14,
+ BadgeSave = 15,
+ BadgeDelete = 16,
}
public override void ProcessRequest(HttpContext context)
@@ -100,7 +106,15 @@ public override void ProcessRequest(HttpContext context)
break;
case Actions.FilterDelete:
this.FilterDelete();
-
+ break;
+ case Actions.BadgeGet:
+ sOut = this.GetBadge();
+ break;
+ case Actions.BadgeSave:
+ this.BadgeSave();
+ break;
+ case Actions.BadgeDelete:
+ this.BadgeDelete();
break;
}
}
@@ -276,6 +290,154 @@ private void RankDelete()
rc.Reward_Delete(this.PortalId, this.ModuleId, rankId);
}
+ private string GetBadge()
+ {
+ int badgeId = -1;
+ if (this.Params.ContainsKey("BadgeId"))
+ {
+ badgeId = Convert.ToInt32(this.Params["BadgeId"]);
+ }
+
+ var badge = new DotNetNuke.Modules.ActiveForums.Controllers.BadgeController().GetById(badgeId, this.ModuleId);
+ var url = string.Empty;
+ if (badge.FileId > 0)
+ {
+ var objFileInfo = DotNetNuke.Services.FileSystem.FileManager.Instance.GetFile(badge.FileId);
+ if (!ReferenceEquals(objFileInfo, null))
+ {
+ url = objFileInfo.Folder + objFileInfo.FileName;
+ }
+ }
+
+ string sOut = "{";
+ sOut += Utilities.JSON.Pair("BadgeId", badge.BadgeId.ToString());
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("Name", badge.Name);
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("Description", badge.Description);
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("SortOrder", badge.SortOrder.ToString());
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("BadgeMetric", Convert.ToInt32(Enum.Parse(typeof(DotNetNuke.Modules.ActiveForums.Enums.BadgeMetric), badge.BadgeMetric.ToString())).ToString());
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("BadgeMetricEnumName", badge.BadgeMetricEnumName);
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("Threshold", badge.Threshold.ToString());
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("FileId", badge.FileId.ToString());
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("ImageMarkup", badge.ImageMarkup);
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("ImageUrl", badge.GetBadgeImageUrl(portalId: this.PortalId, size: 16));
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("OneTimeAward", badge.OneTimeAward.ToString());
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("IntervalDays", badge.IntervalDays.ToString());
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("SendAwardNotification", badge.SendAwardNotification.ToString());
+ sOut += ",";
+ sOut += Utilities.JSON.Pair("SuppresssAwardNotificationOnBackfill", badge.SuppresssAwardNotificationOnBackfill.ToString());
+ sOut += "}";
+ return sOut;
+ }
+
+ private void BadgeSave()
+ {
+ var badgeController = new DotNetNuke.Modules.ActiveForums.Controllers.BadgeController();
+ var badgeId = Utilities.SafeConvertInt(this.Params["BadgeId"]);
+ var badge = badgeController.GetById(badgeId, this.ModuleId);
+ if (badge == null)
+ {
+ badge = new DotNetNuke.Modules.ActiveForums.Entities.BadgeInfo();
+ badge.ModuleId = this.ModuleId;
+ }
+
+ if (this.Params.ContainsKey("BadgeId"))
+ {
+ badge.BadgeId = Utilities.SafeConvertInt(this.Params["BadgeId"]);
+ }
+
+ if (this.Params.ContainsKey("Name"))
+ {
+ badge.Name = this.Params["Name"].ToString();
+ }
+
+ if (this.Params.ContainsKey("Description"))
+ {
+ badge.Description = this.Params["Description"].ToString();
+ }
+
+ if (this.Params.ContainsKey("SortOrder"))
+ {
+ badge.SortOrder = Utilities.SafeConvertInt(this.Params["SortOrder"]);
+ }
+
+ if (this.Params.ContainsKey("BadgeMetric"))
+ {
+ badge.BadgeMetric = string.IsNullOrEmpty(this.Params["BadgeMetric"].ToString()) || this.Params["BadgeMetric"].ToString() == "null" ? BadgeMetric.BadgeMetricManual : (Enums.BadgeMetric)Enum.Parse(typeof(DotNetNuke.Modules.ActiveForums.Enums.BadgeMetric), this.Params["BadgeMetric"].ToString());
+ }
+
+ if (this.Params.ContainsKey("Threshold"))
+ {
+ badge.Threshold = Utilities.SafeConvertInt(this.Params["Threshold"]);
+ }
+
+ if (this.Params.ContainsKey("IntervalDays"))
+ {
+ badge.IntervalDays = Utilities.SafeConvertInt(this.Params["IntervalDays"]);
+ }
+
+ if (this.Params.ContainsKey("ImageMarkup"))
+ {
+ badge.ImageMarkup = this.Params["ImageMarkup"].ToString();
+ }
+
+ if (this.Params.ContainsKey("FileId"))
+ {
+ badge.FileId = Utilities.SafeConvertInt(this.Params["FileId"]);
+ }
+
+ if (this.Params.ContainsKey("OneTimeAward"))
+ {
+ badge.OneTimeAward = Utilities.SafeConvertBool(this.Params["OneTimeAward"].ToString());
+ }
+
+ if (this.Params.ContainsKey("SendAwardNotification"))
+ {
+ badge.SendAwardNotification = Utilities.SafeConvertBool(this.Params["SendAwardNotification"].ToString());
+ }
+
+ if (this.Params.ContainsKey("SuppresssAwardNotificationOnBackfill"))
+ {
+ badge.SuppresssAwardNotificationOnBackfill = Utilities.SafeConvertBool(this.Params["SuppresssAwardNotificationOnBackfill"].ToString());
+ }
+
+ if (badge.BadgeId == -1)
+ {
+ badgeController.Insert(badge);
+ }
+ else
+ {
+ badgeController.Update(badge);
+ }
+ }
+
+ private void BadgeDelete()
+ {
+ int badgeId = -1;
+ if (this.Params.ContainsKey("BadgeId"))
+ {
+ badgeId = Convert.ToInt32(this.Params["BadgeId"]);
+ }
+
+ if (badgeId == -1)
+ {
+ return;
+ }
+
+ new DotNetNuke.Modules.ActiveForums.Controllers.BadgeController().DeleteById(badgeId, this.ModuleId);
+ }
+
private void PropertySave()
{
DotNetNuke.Modules.ActiveForums.Entities.PropertyInfo pi = new DotNetNuke.Modules.ActiveForums.Entities.PropertyInfo();
diff --git a/Dnn.CommunityForums/images/badges/AvidPoster.png b/Dnn.CommunityForums/images/badges/AvidPoster.png
new file mode 100644
index 000000000..303824c0e
Binary files /dev/null and b/Dnn.CommunityForums/images/badges/AvidPoster.png differ
diff --git a/Dnn.CommunityForums/images/badges/AvidReader.png b/Dnn.CommunityForums/images/badges/AvidReader.png
new file mode 100644
index 000000000..54bc4453d
Binary files /dev/null and b/Dnn.CommunityForums/images/badges/AvidReader.png differ
diff --git a/Dnn.CommunityForums/images/badges/DedicatedUser.png b/Dnn.CommunityForums/images/badges/DedicatedUser.png
new file mode 100644
index 000000000..b2a5d0343
Binary files /dev/null and b/Dnn.CommunityForums/images/badges/DedicatedUser.png differ
diff --git a/Dnn.CommunityForums/images/badges/EngagedPoster.png b/Dnn.CommunityForums/images/badges/EngagedPoster.png
new file mode 100644
index 000000000..18fff4357
Binary files /dev/null and b/Dnn.CommunityForums/images/badges/EngagedPoster.png differ
diff --git a/Dnn.CommunityForums/images/badges/EngagedReader.png b/Dnn.CommunityForums/images/badges/EngagedReader.png
new file mode 100644
index 000000000..fa42f179c
Binary files /dev/null and b/Dnn.CommunityForums/images/badges/EngagedReader.png differ
diff --git a/Dnn.CommunityForums/images/badges/HelpfulReplier.png b/Dnn.CommunityForums/images/badges/HelpfulReplier.png
new file mode 100644
index 000000000..3eb5d6a8e
Binary files /dev/null and b/Dnn.CommunityForums/images/badges/HelpfulReplier.png differ
diff --git a/Dnn.CommunityForums/images/badges/LifeSaver.png b/Dnn.CommunityForums/images/badges/LifeSaver.png
new file mode 100644
index 000000000..2dbff6364
Binary files /dev/null and b/Dnn.CommunityForums/images/badges/LifeSaver.png differ
diff --git a/Dnn.CommunityForums/images/badges/MVP.png b/Dnn.CommunityForums/images/badges/MVP.png
new file mode 100644
index 000000000..3666250ea
Binary files /dev/null and b/Dnn.CommunityForums/images/badges/MVP.png differ
diff --git a/Dnn.CommunityForums/images/badges/MostLiked.png b/Dnn.CommunityForums/images/badges/MostLiked.png
new file mode 100644
index 000000000..d8f90828e
Binary files /dev/null and b/Dnn.CommunityForums/images/badges/MostLiked.png differ
diff --git a/Dnn.CommunityForums/images/badges/NewMember.png b/Dnn.CommunityForums/images/badges/NewMember.png
new file mode 100644
index 000000000..60783a8b9
Binary files /dev/null and b/Dnn.CommunityForums/images/badges/NewMember.png differ
diff --git a/Dnn.CommunityForums/images/badges/NewPoster.png b/Dnn.CommunityForums/images/badges/NewPoster.png
new file mode 100644
index 000000000..274b11082
Binary files /dev/null and b/Dnn.CommunityForums/images/badges/NewPoster.png differ
diff --git a/Dnn.CommunityForums/images/badges32.png b/Dnn.CommunityForums/images/badges32.png
new file mode 100644
index 000000000..4cb14fdae
Binary files /dev/null and b/Dnn.CommunityForums/images/badges32.png differ
diff --git a/Dnn.CommunityForums/module.css b/Dnn.CommunityForums/module.css
index 32a8ca9ac..e8111accb 100644
--- a/Dnn.CommunityForums/module.css
+++ b/Dnn.CommunityForums/module.css
@@ -1691,4 +1691,15 @@ div.dcf-mod-edit-wrap {
word-break: break-word;
overflow: hidden;
}
-
\ No newline at end of file
+
+ /* user badge display */
+.dcf-user-badges { padding: 0.1em; display: block; margin-bottom: 1em; }
+.dcf-user-badge-wrap { padding: 0.1em; display: inline-block; }
+.dcf-user-badge-wrap .dcf-user-badge-image img { border-style: none; }
+.dcf-user-badge-wrap .dcf-user-badge-image .dcf-user-badge-image-tooltip { --tooltip-color: #fff; --tooltip-bg-color: rgba(0,0,0, .8); --tooltip-icon-color: #ccc; display: block; text-decoration: none; cursor: pointer; position: relative; }
+.dcf-user-badge-wrap .dcf-user-badge-image .dcf-user-badge-image-tooltip::before { content: attr(data-tooltip); position: absolute; white-space: wrap; top: 3.8em; left: 0; color: var(--tooltip-color); background: var(--tooltip-bg-color); border-radius: 0.3em; padding: 0.2em 0.5em; }
+.dcf-user-badge-wrap .dcf-user-badge-image .dcf-user-badge-image-tooltip::before { opacity: 0; visibility: hidden; transition: opacity .3s ease-in-out; width: 20em; display: inline-block; }
+.dcf-user-badge-wrap .dcf-user-badge-image .dcf-user-badge-image-tooltip:hover { cursor:pointer !important; }
+.dcf-user-badge-wrap .dcf-user-badge-image .dcf-user-badge-image-tooltip:hover::before { opacity: 1; visibility: visible; }
+.dcf-user-badge-wrap .dcf-user-badge-image .dcf-user-badge-count { background-color: red; border-radius: 5px; color: white; padding: 1px 3px; font-size: 11px; position: relative; top: 10px; left: 20px; z-index: 9; }
+.dcf-user-badge-wrap .dcf-user-badge-image .dcf-user-badge-count:empty { padding:0; }
\ No newline at end of file
diff --git a/Dnn.CommunityForums/scripts/afcommon.js b/Dnn.CommunityForums/scripts/afcommon.js
index 2805ef41b..e899d2891 100644
--- a/Dnn.CommunityForums/scripts/afcommon.js
+++ b/Dnn.CommunityForums/scripts/afcommon.js
@@ -159,6 +159,26 @@ function amaf_forumSubscribe(mid, fid) {
alert('error subscribing to forum');
});
};
+function amaf_badgeAssign(mid, bid, uid, userBadgeId, assign) {
+ var sf = $.ServicesFramework(mid);
+ var params = {
+ badgeId: bid,
+ userId: uid,
+ userBadgeId: userBadgeId,
+ assign: assign
+ };
+ $.ajax({
+ type: "POST",
+ data: JSON.stringify(params),
+ contentType: "application/json",
+ dataType: "json",
+ url: dnn.getVar("sf_siteRoot", "/") + 'API/ActiveForums/UserBadge/Assign',
+ beforeSend: sf.setModuleHeaders
+ }).done(function (data) {
+ }).fail(function (xhr, status) {
+ alert('error assigning badge');
+ });
+};
function amaf_UpdateForumSubscriberCount(mid, fid) {
var u = document.getElementById('af-topicsview-forumsubscribercount');
if (u != null) {
diff --git a/Dnn.CommunityForums/scripts/usereditor.js b/Dnn.CommunityForums/scripts/usereditor.js
index 7b028cc84..2571477d9 100644
--- a/Dnn.CommunityForums/scripts/usereditor.js
+++ b/Dnn.CommunityForums/scripts/usereditor.js
@@ -59,6 +59,7 @@
open: function () { editUserDialog.find("#trustLevel").focus(); },
buttons: [
{ text: opts.updateText, click: updateUser },
+ { text: opts.updateBadges, click: redirectUpdateBadges },
{ text: opts.cancelText, click: function () { $(this).dialog("close"); } }
],
close: function () { }
@@ -67,7 +68,33 @@
editUserDialog.dialog('open');
};
+ function redirectUpdateBadges() {
+ window.location.replace(opts.baseUrl + "/afv/grid/afgt/userbadges?uid=" + userId);
+ }
+
+ $(opts.openTriggerSelector).button({ icons: { primary:'ui-icon-person' } });
+
+ $wrap.on('click', opts.openTriggerSelector, function (e) {
+
+ e.preventDefault();
+ e.stopPropagation();
+
+ userId = $(e.currentTarget).attr('data-id');
+ userName = $(e.currentTarget).attr('data-name');
+ $.ajax(
+ {
+ url: opts.serviceurlbase + "GetUserProfile?UserID=" + userId,
+ type: "GET",
+ contentType: "application/json",
+ dataType: "json",
+ beforeSend: opts.servicesFramework.setModuleHeaders
+ }).done(function (data) {
+ openEditUserDialog(data);
+ }).fail(function (xhr, status) {
+ alert('Error Retriving User Profile');
+ });
+ });
function updateUser() {
var params = {
@@ -129,6 +156,7 @@
signatureText: "Signature:",
rewardPointsText: "Reward Points:",
updateText: "Update User",
+ updateBadges: "Update Badges",
cancelText: "Cancel",
dialogClass: 'dnnFormPopup dnnClear',
autoOpen: false
diff --git a/Dnn.CommunityForums/sql/09.01.00.SqlDataProvider b/Dnn.CommunityForums/sql/09.01.00.SqlDataProvider
index fdc48db20..e833bb928 100644
--- a/Dnn.CommunityForums/sql/09.01.00.SqlDataProvider
+++ b/Dnn.CommunityForums/sql/09.01.00.SqlDataProvider
@@ -703,7 +703,6 @@ INCLUDE ( [TopicCount],
) WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF)
GO
-
/* activeforums_UserProfiles_Opt3 -- note index prefix name change from idx_ to IX_ */
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{objectQualifier}activeforums_UserProfiles') AND name = N'idx_{objectQualifier}activeforums_UserProfiles_Opt3')
DROP INDEX [idx_{objectQualifier}activeforums_UserProfiles_Opt3] ON {databaseOwner}{objectQualifier}activeforums_UserProfiles
@@ -1286,7 +1285,7 @@ CREATE TABLE {databaseOwner}[{objectQualifier}activeforums_Topics_Categories](
(
[TopicCategoryId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
-)
+)
GO
@@ -1432,10 +1431,10 @@ CREATE UNIQUE NONCLUSTERED INDEX IX_{objectQualifier}activeforums_Topics_Categor
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{databaseOwner}{objectQualifier}activeforums_Topics_Categories') AND name = N'IX_{objectQualifier}activeforums_Topics_Categories_UniqueAlt2')
CREATE UNIQUE NONCLUSTERED INDEX IX_{objectQualifier}activeforums_Topics_Categories_UniqueAlt2 ON {databaseOwner}[{objectQualifier}activeforums_Topics_Categories]
- (
+ (
TopicId,
CategoryId
- )
+ )
GO
IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'{databaseOwner}[FK_{objectQualifier}activeforums_Topics_Categories_Categories]') AND parent_object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Topics_Categories]'))
@@ -1908,7 +1907,7 @@ WHERE Portalid = @PortalId AND
)
SELECT * FROM {databaseOwner}{objectQualifier}activeforums_Categories WHERE Portalid = @PortalId AND ModuleId = @ModuleId
AND
- (
+ (
(@ForumId = -1 AND @ForumGroupId = -1)
OR
(@ForumId > 0 AND ForumId = @ForumId)
@@ -1916,7 +1915,7 @@ SELECT * FROM {databaseOwner}{objectQualifier}activeforums_Categories WHERE Port
(@ForumGroupId > 0 AND ForumGroupId = @ForumGroupId)
OR
(ForumId = -1 AND ForumGroupId = -1)
- )
+ )
ORDER BY CategoryName
GO
@@ -2774,3 +2773,4 @@ GO
/* issue 1557 - end - forum viewer issues */
/* --------------------- */
+
diff --git a/Dnn.CommunityForums/sql/09.02.00.SqlDataProvider b/Dnn.CommunityForums/sql/09.02.00.SqlDataProvider
new file mode 100644
index 000000000..ea0200c84
--- /dev/null
+++ b/Dnn.CommunityForums/sql/09.02.00.SqlDataProvider
@@ -0,0 +1,2366 @@
+SET NOCOUNT ON
+GO
+
+/* issue 1582 - begin - settings table overhaul */
+
+
+/* drop old activeforums_Settings indexes and replace with new indexes */
+
+IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{databaseOwner}{objectQualifier}activeforums_Settings') AND name = N'idx_{objectQualifier}activeforums_Settings_Opt1')
+DROP INDEX [idx_{objectQualifier}activeforums_Settings_Opt1] ON {databaseOwner}{objectQualifier}activeforums_Settings
+GO
+IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{databaseOwner}{objectQualifier}activeforums_Settings') AND name = N'idx_{objectQualifier}activeforums_Settings_Opt2')
+DROP INDEX [idx_{objectQualifier}activeforums_Settings_Opt2] ON {databaseOwner}{objectQualifier}activeforums_Settings
+GO
+
+IF (OBJECT_ID(N'{databaseOwner}[PK_{objectQualifier}activeforums_Settings]', 'PK') IS NOT NULL)
+BEGIN
+ ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_Settings] DROP CONSTRAINT [PK_{objectQualifier}activeforums_Settings]
+END
+GO
+
+IF NOT EXISTS(SELECT * FROM SYS.COLUMNS WHERE Name = N'SettingsId' and Object_ID = Object_ID(N'{databaseOwner}[{objectQualifier}activeforums_Settings]'))
+BEGIN
+ ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_Settings]
+ ADD SettingsId INT IDENTITY(1,1)
+END
+GO
+
+ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_Settings]
+ ADD CONSTRAINT [PK_{objectQualifier}activeforums_Settings] PRIMARY KEY CLUSTERED ( [SettingsId] ASC )
+ WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
+
+GO
+
+
+IF EXISTS(SELECT * FROM sys.columns WHERE [name] = N'GroupKey' AND [object_id] = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Settings]'))
+exec sp_rename '{databaseOwner}{objectQualifier}activeforums_Settings.GroupKey', 'SettingsKey', 'COLUMN'
+GO
+
+
+IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{databaseOwner}{objectQualifier}activeforums_Settings') AND name = N'IX_{objectQualifier}activeforums_Settings_Opt1')
+DROP INDEX [IX_{objectQualifier}activeforums_Settings_Opt1]
+ ON {databaseOwner}[{objectQualifier}activeforums_Settings];
+GO
+
+CREATE UNIQUE NONCLUSTERED INDEX [IX_{objectQualifier}activeforums_Settings_Opt1]
+ ON {databaseOwner}[{objectQualifier}activeforums_Settings]
+ (
+ [ModuleId] ASC,
+ [SettingsKey] ASC,
+ [SettingName] ASC
+ )
+ INCLUDE([SettingValue]);
+GO
+
+
+
+/* activeforums_Groups_Delete */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Groups_Delete]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Groups_Delete]
+GO
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Groups_Delete]
+@ModuleId int,
+@ForumGroupId int
+AS
+DECLARE @GroupSettingsKey nvarchar(25)
+SET @GroupSettingsKey = (SELECT GroupSettingsKey FROM {databaseOwner}{objectQualifier}activeforums_Groups WHERE ForumGroupId = @ForumGroupId AND ModuleId = @ModuleId)
+
+/*DELETE REPLY ATTACHMENTS*/
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Attachments
+ WHERE AttachId IN (
+ SELECT ca.AttachId FROM {databaseOwner}{objectQualifier}activeforums_Content_Attachments as ca
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Content as c on c.ContentId = ca.ContentId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Replies as r on c.ContentId = r.ContentId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft on ft.TopicId = r.TopicId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as f on f.ForumId = ft.ForumId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Groups as g on g.ForumGroupId = f.ForumGroupId
+ WHERE g.ForumGroupId = @ForumGroupId)
+/*DELETE TOPIC ATTACHMENTS*/
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Attachments
+ WHERE AttachId IN (
+ SELECT ca.AttachId FROM {databaseOwner}{objectQualifier}activeforums_Content_Attachments as ca
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Content as c on c.ContentId = ca.ContentId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Topics as t on c.ContentId = t.ContentId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft on ft.TopicId = t.TopicId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as f on f.ForumId = ft.ForumId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Groups as g on g.ForumGroupId = f.ForumGroupId
+ WHERE g.ForumGroupId = @ForumGroupId)
+
+/*DELETE REPLY CONTENT */
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Content WHERE ContentId IN (
+ Select r.ContentId FROM {databaseOwner}{objectQualifier}activeforums_Replies as r
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft on ft.TopicId = r.TopicId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as f on f.ForumId = ft.ForumId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Groups as g on g.ForumGroupId = f.ForumGroupId
+ WHERE g.ForumGroupId = @ForumGroupId)
+
+/*DELETE REPLIES */
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Replies
+ WHERE TopicId IN (
+ SELECT ft.TopicId FROM {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as f ON f.ForumId = ft.ForumID
+ WHERE f.ForumGroupId = @ForumGroupId)
+
+/*DELETE TOPIC CONTENT */
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Content WHERE ContentId IN (
+ Select t.ContentId FROM {databaseOwner}{objectQualifier}activeforums_Topics as t
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft on ft.TopicId = t.TopicId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as f on f.ForumId = ft.ForumId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Groups as g on g.ForumGroupId = f.ForumGroupId
+ WHERE g.ForumGroupId = @ForumGroupId)
+/*DELETE TOPICS*/
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Topics WHERE TopicId IN (
+ SELECT ft.TopicId FROM {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Forums as f on f.ForumId = ft.ForumId
+ WHERE f.ForumGroupId = @ForumGroupId)
+
+/*DELETE FORUM TRACKING*/
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Forums_Tracking
+ WHERE ForumId IN (
+ SELECT ForumId FROM {databaseOwner}{objectQualifier}activeforums_Forums WHERE ForumGroupId = @ForumGroupId)
+/*DELETE FORUM SETTINGS */
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Settings
+ WHERE ModuleId = @ModuleId AND SettingsKey IN (
+ SELECT ForumSettingsKey FROM {databaseOwner}{objectQualifier}activeforums_Forums WHERE ForumGroupId = @ForumGroupId)
+/*DELETE FORUM SUBSCRIPTIONS */
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Subscriptions
+ WHERE ForumId IN (
+ SELECT ForumId FROM {databaseOwner}{objectQualifier}activeforums_Forums WHERE ForumGroupId = @ForumGroupId)
+/*DELETE TOPICS CATEGORIES */
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Topics_Categories
+ WHERE TopicId IN (
+ SELECT ft.TopicId FROM {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as f on f.ForumId = ft.ForumId WHERE f.ForumGroupId = @ForumGroupId)
+/*DELETE TOPICS TAGS */
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Topics_Tags
+ WHERE TopicId IN (
+ SELECT ft.TopicId FROM {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as f on f.ForumId = ft.ForumId WHERE f.ForumGroupId = @ForumGroupId)
+/*DELETE TOPICS TRACKING */
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Topics_Tracking
+ WHERE TopicId IN (
+ SELECT ft.TopicId FROM {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as f on f.ForumId = ft.ForumId WHERE f.ForumGroupId = @ForumGroupId)
+/*DELETE TOPICS RATINGS */
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Topics_Ratings
+ WHERE TopicId IN (
+ SELECT ft.TopicId FROM {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as f on f.ForumId = ft.ForumId WHERE f.ForumGroupId = @ForumGroupId)
+/*DELETE FORUMTOPICS TABLE */
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_ForumTopics
+ WHERE ForumId IN (
+ SELECT f.ForumId FROM {databaseOwner}{objectQualifier}activeforums_Forums as f WHERE f.ForumGroupId = @ForumGroupId)
+/*DELETE FORUMS */
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Forums WHERE ForumGroupId = @ForumGroupId
+
+
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE SettingsKey = @GroupSettingsKey AND ModuleId = @ModuleId
+
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Groups WHERE ForumGroupId = @ForumGroupId AND ModuleId = @ModuleId
+GO
+
+
+
+/* activeforums_UI_ForumView */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_UI_ForumView]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_UI_ForumView]
+GO
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_UI_ForumView]
+@PortalId int,
+@ModuleId int,
+@UserId int,
+@IsSuperUser bit = 0,
+@ParentForumId int = -1,
+@ForumIds nvarchar(2000) = ''
+AS
+IF @ParentForumId = -1
+BEGIN
+SELECT G.ForumGroupId, G.ModuleId, G.GroupName, F.ForumId, F.ForumName, F.ForumDesc, F.Active AS ForumActive, F.Hidden AS ForumHidden, F.TotalTopics,
+ F.TotalReplies, F.ParentForumId, G.SortOrder AS GroupSort,
+ F.SortOrder AS ForumSort, G.Active AS GroupActive, G.Hidden AS GroupHidden,
+ F.LastTopicId,
+ F.LastReplyId,
+ IsNull(c.Subject,'') as LastPostSubject,
+ IsNull(c.AuthorName,'') as LastPostAuthorName,
+ IsNull(c.AuthorId,-1) as LastPostAuthorId,
+ IsNull(c.DateCreated,'') as LastPostDate,
+ ISNULL(g.PrefixURL,'') as GroupPrefixURL,
+ ISNULL(f.PrefixURL, '') as PrefixURL,
+ LastRead = IsNull((SELECT LastAccessDate FROM {databaseOwner}{objectQualifier}activeforums_Forums_Tracking WHERE UserId = @UserId AND ForumId = F.ForumId),''),
+ "AllowRSS" = (SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE ModuleId = F.ModuleId AND SettingsKey = F.ForumSettingsKey AND SettingName = 'ALLOWRSS'),
+ P.*,
+ ISNULL(t.URL,'') as TopicURL,
+ COALESCE((SELECT COUNT(*)
+ FROM {databaseOwner}{objectQualifier}activeforums_Subscriptions
+ WHERE (ForumId = F.ForumId) AND (TopicId = 0)) , 0) AS ForumSubscriberCount
+ FROM
+ {databaseOwner}{objectQualifier}activeforums_Groups AS G INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Forums AS F ON G.ForumGroupId = F.ForumGroupId INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Permissions as p ON f.PermissionsId = p.PermissionsId INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Functions_Split(@ForumIds,';') as ft ON ft.id = f.ForumId LEFT OUTER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Topics as t ON t.TopicId = f.LastTopicId LEFT OUTER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Content as c ON c.ContentId = t.ContentId
+ WHERE G.ModuleId = @ModuleId AND (G.Active = 1 AND F.Active = 1) AND (@ParentForumId = -1 OR (@ParentForumId > 0 AND F.ParentForumId = @ParentForumId))
+ ORDER BY GroupSort, ForumSort
+END
+ELSE
+BEGIN
+SELECT G.ForumGroupId, G.ModuleId, G.GroupName, F.ForumId, F.ForumName, F.ForumDesc, F.Active AS ForumActive, F.Hidden AS ForumHidden, F.TotalTopics,
+ F.TotalReplies, F.ParentForumId, G.SortOrder AS GroupSort, F.SortOrder AS ForumSort, G.Active AS GroupActive, G.Hidden AS GroupHidden,
+ F.LastTopicId,
+ F.LastReplyId,
+ IsNull(c.Subject,'') as LastPostSubject,
+ IsNull(c.AuthorName,'') as LastPostAuthorName,
+ IsNull(c.AuthorId,-1) as LastPostAuthorId,
+ IsNull(c.DateCreated,'') as LastPostDate,
+ ISNULL(g.PrefixURL,'') as GroupPrefixURL,
+ ISNULL(f.PrefixURL, '') as PrefixURL,
+ ISNULL(t.URL, '') as TopicURL,
+ COALESCE((SELECT COUNT(*)
+ FROM {databaseOwner}{objectQualifier}activeforums_Subscriptions
+ WHERE (ForumId = F.ForumId) AND (TopicId = 0)) , 0) AS ForumSubscriberCount,
+ LastRead = IsNull((SELECT LastAccessDate FROM {databaseOwner}{objectQualifier}activeforums_Forums_Tracking WHERE UserId = @UserId AND ForumId = F.ForumId),''),
+ "AllowRSS" = (SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE ModuleId = F.ModuleId AND SettingsKey = F.ForumSettingsKey AND SettingName = 'ALLOWRSS'),
+ P.*
+ FROM
+ {databaseOwner}{objectQualifier}activeforums_Groups AS G INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Forums AS F ON G.ForumGroupId = F.ForumGroupId INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Permissions as p ON f.PermissionsId = p.PermissionsId LEFT OUTER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Topics as t ON t.TopicId = f.LastTopicId LEFT OUTER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Content as c ON c.ContentId = t.ContentId
+
+ WHERE G.ModuleId = @ModuleId AND (G.Active = 1 AND F.Active = 1) AND (@ParentForumId = -1 OR (@ParentForumId > 0 AND F.ParentForumId = @ParentForumId))
+ ORDER BY GroupSort, ForumSort
+END
+If @UserId > 0 AND @ParentForumId =-1
+ BEGIN
+ SELECT TopicCount, ReplyCount, ViewCount, AnswerCount, RewardPoints, DateLastActivity,
+ DateLastPost, SignatureDisabled, TrustLevel, AdminWatch, AttachDisabled, PrefDefaultSort, PrefDefaultShowReplies,
+ PrefJumpLastPost, PrefTopicSubscribe, PrefSubscriptionType, PrefEmailFormat, PrefBlockAvatars, PrefBlockSignatures, PrefPageSize
+
+ FROM {databaseOwner}{objectQualifier}activeforums_UserProfiles WHERE UserId = @UserId AND PortalId = @PortalId
+ END
+
+
+GO
+
+
+/* activeforums_UI_TopicView -- remove LastPostId */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_UI_TopicView]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_UI_TopicView]
+GO
+CREATE PROCEDURE {databaseOwner}{objectQualifier}activeforums_UI_TopicView
+@PortalId int,
+@ModuleId int,
+@ForumId int,
+@TopicId int,
+@UserId int,
+@RowIndex int,
+@MaxRows int,
+@IsSuperUser bit = 0,
+@Sort varchar(10) = 'ASC'
+AS
+--Forum/Group/Topic Info
+DECLARE @LastPostId int
+DECLARE @ReplyCount int
+SET @ReplyCount = (Select Count(ReplyId) from {databaseOwner}{objectQualifier}activeforums_Replies WHERE TopicId = @TopicId AND IsDeleted = 0 AND IsApproved = 1)
+DECLARE @Tags nvarchar(1000)
+SET @Tags= RTRIM(IsNull({databaseOwner}{objectQualifier}activeforums_Topics_GetTags(@TopicId),''))
+BEGIN
+SELECT
+ v.ForumGroupId,
+ v.ModuleId,
+ v.GroupName,
+ v.GroupActive,
+ v.GroupHidden,
+ v.ForumId,
+ v.ParentForumId,
+ v.ForumName,
+ v.ForumDesc,
+ v.ForumActive,
+ v.ForumHidden,
+ v.TotalTopics,
+ ISNULL(v.TotalReplies, 0) AS TotalReplies,
+ v.GroupSettingsKey,
+ v.ForumSettingsKey,
+ TopicTemplateId = IsNull((SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE SettingName = 'TOPICTEMPLATEID' and SettingsKey = v.ForumSettingsKey),0),
+
+ IsNull((SELECT SettingValue
+ FROM {databaseOwner}{objectQualifier}activeforums_Settings AS {objectQualifier}activeforums_Settings_1
+ WHERE (SettingName = 'ALLOWRSS') AND (SettingsKey = v.ForumSettingsKey)),0) AS AllowRSS,
+ IsNull((SELECT SettingValue
+ FROM {databaseOwner}{objectQualifier}activeforums_Settings AS {objectQualifier}activeforums_Settings_3
+ WHERE (SettingName = 'ALLOWHTML') AND (SettingsKey = v.ForumSettingsKey)),0) AS AllowHTML,
+ IsNull((SELECT SettingValue
+ FROM {databaseOwner}{objectQualifier}activeforums_Settings AS activeforums_Settings_3
+ WHERE (SettingName = 'ALLOWLIKES') AND (SettingsKey = v.ForumSettingsKey)),0) AS AllowLikes,
+ IsNull((SELECT SettingValue
+ FROM {databaseOwner}{objectQualifier}activeforums_Settings AS {objectQualifier}activeforums_Settings_2
+ WHERE (SettingName = 'ALLOWSCRIPT') AND (SettingsKey = v.ForumSettingsKey)),0) AS AllowScript,
+ IsNull((SELECT SettingValue
+ FROM {databaseOwner}{objectQualifier}activeforums_Settings
+ WHERE (SettingName = 'ALLOWTAGS') AND (SettingsKey = v.ForumSettingsKey)),0) AS AllowTags,
+ FT.TopicId,
+ (SELECT ISNULL(AVG(Rating), 0) AS Expr1
+ FROM {databaseOwner}{objectQualifier}activeforums_Topics_Ratings
+ WHERE (TopicId = @TopicId)) AS TopicRating,
+ CASE WHEN FT.LastReplyId is NULL THEN IsNull(T.DateCreated,'') ELSE IsNull(R.DateCreated,'') END AS LastPostDate,
+ CASE WHEN FT.LastReplyId is NULL THEN IsNull(T.AuthorId,'') ELSE IsNull(R.AuthorId,'') END AS LastPostAuthorId,
+ CASE WHEN FT.LastReplyId is NULL THEN IsNull(T.AuthorName,'') ELSE IsNull(R.AuthorName,'') END AS LastPostAuthorName,
+ CASE WHEN FT.LastReplyId is NULL THEN IsNull(T.UserName,'') ELSE IsNull(R.Username,'') END AS LastPostUserName,
+ CASE WHEN FT.LastReplyId is NULL THEN IsNull(T.FirstName,'') ELSE IsNull(R.FirstName,'') END AS LastPostFirstName,
+ CASE WHEN FT.LastReplyId is NULL THEN IsNull(T.LastName,'') ELSE IsNull(R.LastName,'') END AS LastPostLastName,
+ CASE WHEN FT.LastReplyId is NULL THEN IsNull(T.DisplayName,'') ELSE IsNull(R.DisplayName,'') END AS LastPostDisplayName,
+ T.Subject, T.Summary, T.Body, T.AuthorId, T.AuthorName, T.Username, T.FirstName, T.LastName,
+ T.DisplayName, T.DateCreated, T.DateUpdated, T.ViewCount, @ReplyCount as ReplyCount, T.IsPinned, T.IsLocked, T.StatusId, T.TopicIcon, T.TopicType, @Tags as Tags,ISNULL(t.TopicData,'') as TopicData,
+ {databaseOwner}{objectQualifier}activeforums_Poll.PollID,
+ aft.NextTopic,
+ aft.PrevTopic,
+ t.URL,
+ T.AuthorName as TopicAuthor,
+ aft.IsAnnounce, aft.AnnounceStart, aft.AnnounceEnd, aft.IsApproved, aft.IsDeleted, aft.IsRejected, aft.IsArchived, aft.IsLocked, aft.IsPinned, aft.TopicIcon, aft.TopicType, aft.Priority,
+ aft.ContentId, C.IPAddress,
+ COALESCE((SELECT COUNT(*)
+ FROM {databaseOwner}{objectQualifier}activeforums_Subscriptions
+ WHERE (ForumId = @ForumId) AND (TopicId = @TopicId)), 0) AS TopicSubscriberCount,
+ COALESCE((SELECT COUNT(*)
+ FROM {databaseOwner}{objectQualifier}activeforums_Subscriptions
+ WHERE (ForumId = @ForumId) AND (TopicId = 0)), 0) AS ForumSubscriberCount
+FROM
+ {databaseOwner}{objectQualifier}activeforums_Topics aft INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_ForumTopics AS FT ON aft.TopicId = FT.TopicId INNER JOIN
+ {databaseOwner}{objectQualifier}vw_activeforums_GroupForum AS v ON FT.ForumId = v.ForumId INNER JOIN
+ {databaseOwner}{objectQualifier}vw_activeforums_ForumTopics AS T ON FT.TopicId = T.TopicId LEFT OUTER JOIN
+ {databaseOwner}{objectQualifier}vw_activeforums_ForumReplies AS R ON FT.LastReplyId = R.ReplyId AND FT.LastReplyId IS NOT NULL LEFT OUTER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Poll ON T.TopicId = {databaseOwner}{objectQualifier}activeforums_Poll.TopicId
+ LEFT OUTER JOIN {databaseOwner}{objectQualifier}activeforums_Content AS C ON C.ContentId = aft.ContentId
+WHERE (v.ForumActive = 1) AND (v.ModuleId = @ModuleId) AND (v.ForumId = @ForumId) AND (FT.TopicId = @TopicId)
+END
+--Forum Security
+BEGIN
+ Select p.* from {databaseOwner}{objectQualifier}activeforums_Permissions as p INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as f ON f.PermissionsId = p.PermissionsId WHERE f.ForumId = @ForumId
+
+END
+--Get Topic and Replies
+ SELECT ForumId, TopicId, ReplyId, [Subject], Summary, AuthorId, StatusId, AuthorName, UserName, FirstName, LastName,
+ DisplayName, DateCreated, DateUpdated, Body, TopicCount, ReplyCount, ViewCount, AnswerCount,
+ RewardPoints, UserDateCreated, DateLastActivity, UserCaption, [Signature], SignatureDisabled,
+ UserPostCount, UserTotalPoints,IPAddress,AvatarDisabled,MemberSince,
+ ContentId,IsUserOnline,ReplyToId, UserRoles = {databaseOwner}{objectQualifier}activeforums_UserProfiles_GetUserRoles(AuthorId, @PortalID, GETUTCDATE(),0),IsApproved,
+ @Tags as Tags
+
+ FROM
+(
+ SELECT T.ForumId, T.TopicId, T.ReplyId, T.Subject, T.Summary, T.AuthorId, T.StatusId, IsNull(T.AuthorName,'anon') as AuthorName, IsNull(T.Username,IsNull(T.AuthorName,'anon')) as Username,
+ IsNull(T.FirstName,'') as FirstName, IsNull(T.LastName,'') as LastName,
+ IsNull(T.DisplayName,T.AuthorName) as DisplayName,
+ T.DateCreated, T.DateUpdated, C.Body, IsNull(P.TopicCount,0) as TopicCount, IsNull(P.ReplyCount,0) as ReplyCount,
+ IsNull(P.ViewCount,0) as ViewCount, IsNull(P.AnswerCount,0) as AnswerCount, IsNull(P.RewardPoints,0) as RewardPoints,
+ IsNull(P.DateCreated,'') AS UserDateCreated, IsNull(P.DateLastActivity,'') as DateLastActivity,
+ IsNull(P.UserCaption,'') as UserCaption, IsNull(P.Signature,'') as [Signature], IsNull(P.SignatureDisabled,0) as SignatureDisabled,
+ UserPostCount = (IsNull(P.TopicCount,0) + IsNull(P.ReplyCount,0)),
+ UserTotalPoints = (IsNull(P.TopicCount,0) + IsNull(P.ReplyCount,0) + IsNull(P.AnswerCount,0) + IsNull(P.RewardPoints,0)),
+ C.IPAddress, IsNull(P.AvatarDisabled,0) as AvatarDisabled,
+ IsNull(P.DateCreated,'') as MemberSince,
+ C.ContentId, IsUserOnline = (CASE WHEN DATEDIFF(mi,p.DateLastActivity,GETUTCDATE()) <=1 THEN 1 ELSE 0 END),T.ReplyToId,
+ 1 AS IsApproved /* only approved content is returned from vw_activeforums_TopicView */,
+ ROW_NUMBER() OVER (Order By
+ CASE
+ WHEN @Sort = 'DESC' THEN T.DateCreated END DESC,
+ CASE
+ WHEN @Sort = 'ASC' THEN T.DateCreated END ASC
+ ) as RowRank
+ FROM {databaseOwner}{objectQualifier}vw_activeforums_TopicView AS T INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Content AS C ON T.ContentId = C.ContentId LEFT OUTER JOIN
+ {databaseOwner}{objectQualifier}activeforums_UserProfiles AS P ON C.AuthorId = P.UserId AND P.PortalId = @PortalId
+ WHERE (T.TopicId = @TopicId)
+)
+ AS TopicWithRowNumbers
+ WHERE RowRank > @RowIndex AND RowRank <= (@RowIndex + @MaxRows)
+
+--Get Attachments
+SELECT A.AttachId, A.ContentId, A.UserID, A.[FileName], A.ContentType, A.FileSize, A.FileID
+FROM {databaseOwner}{objectQualifier}activeforums_Attachments AS A inner join
+ {databaseOwner}{objectQualifier}vw_activeforums_TopicView AS T ON A.ContentId = T.ContentId
+WHERE (T.TopicId = @TopicId AND (A.AllowDownload = 1 OR A.AllowDownload IS NULL))
+
+--Update View Count
+UPDATE {databaseOwner}{objectQualifier}activeforums_Topics SET ViewCount = (ViewCount+1) WHERE TopicId = @TopicId
+If @UserId > 0
+BEGIN
+SELECT @LastPostId = IsNull(LastReplyId,0) FROM {databaseOwner}{objectQualifier}activeforums_ForumTopics WHERE ForumId = @ForumId AND TopicId = @TopicId
+exec {databaseOwner}{objectQualifier}activeforums_Forums_Tracking_UpdateUser @ModuleId, @UserId, @ForumId
+SET @LastPostId = IsNull(@LastPostId,0)
+exec {databaseOwner}{objectQualifier}activeforums_Topics_Tracking_UpdateUser @ForumId, @TopicId, @LastPostId, @UserId
+exec {databaseOwner}{objectQualifier}activeforums_UserProfiles_UpdateActivity @PortalId, @UserId
+END
+
+GO
+
+
+/*activeforums_UI_TopicsView */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[activeforums_UI_TopicsView]') AND type in (N'P', N'PC'))
+DROP PROCEDURE [dbo].[activeforums_UI_TopicsView]
+GO
+CREATE PROCEDURE [dbo].[activeforums_UI_TopicsView]
+@PortalId int,
+@ModuleId int,
+@ForumId int,
+@UserId int,
+@RowIndex int = 0,
+@MaxRows int = 20,
+@IsSuperUser bit = 0,
+@SortColumn nvarchar(25) = 'ReplyCreated'
+AS
+--Forum/Group Info
+DECLARE @PrefixURL nvarchar(255)
+DECLARE @GroupPrefix nvarchar(255)
+SET @GroupPrefix = (SELECT g.PrefixURL from [dbo].activeforums_Groups as g INNER JOIN [dbo].activeforums_Forums as f ON f.ForumGroupId = g.ForumGroupId WHERE f.ForumId=@ForumId)
+SET @PrefixURL = (SELECT PRefixURL from [dbo].activeforums_Forums WHERE ForumId = @ForumId)
+IF @PrefixURL <> '' OR @PrefixURL IS NOT NULL
+ SET @PrefixURL = '/' + @PrefixURL + '/'
+IF @GroupPrefix <> '' OR @GroupPrefix IS NOT NULL
+ SET @PrefixURL = '/' + @GroupPrefix + @PrefixURL
+BEGIN
+ SELECT v.ForumName, v.GroupName, v.ForumGroupId, v.ForumDesc,
+ TopicsTemplateId = IsNull((SELECT SettingValue FROM [dbo].activeforums_Settings WHERE ModuleId = @ModuleId AND SettingName = 'TOPICSTEMPLATEID' and SettingsKey = v.ForumSettingsKey),0),
+ AllowRSS = IsNull((SELECT SettingValue FROM [dbo].activeforums_Settings WHERE ModuleId = @ModuleId AND SettingName = 'ALLOWRSS' and SettingsKey = v.ForumSettingsKey),0),
+ TopicRowCount = IsNull((SELECT Count(t.TopicId) FROM [dbo].activeforums_Topics as t inner join [dbo].activeforums_ForumTopics as ft on t.topicid = ft.topicid WHERE ft.ForumId = @ForumId AND t.IsApproved = 1 and t.IsDeleted = 0),0),
+ IsSubscribedForum = IsNull((SELECT ID FROM [dbo].activeforums_Subscriptions WHERE ModuleId = @ModuleId AND ForumId = @ForumId AND TopicId = 0 AND UserId = @UserId),0),
+ COALESCE((SELECT COUNT(*)
+ FROM [dbo].activeforums_Subscriptions
+ WHERE (ModuleId = @ModuleId) AND (ForumId = @ForumId) AND (TopicId = 0)), 0) AS ForumSubscriberCount
+
+ FROM [dbo].vw_activeforums_GroupForum as v WHERE v.ForumActive = 1 AND v.ModuleId = @ModuleId AND v.ForumId = @ForumId
+END
+--Forum Security
+BEGIN
+ Select p.* from [dbo].activeforums_Permissions as p INNER JOIN [dbo].activeforums_Forums as f ON f.PermissionsId = p.PermissionsId WHERE f.ModuleId = @ModuleId AND f.ForumId = @ForumId
+
+END
+--Get Sub Forums
+ exec [dbo].activeforums_UI_ForumView @PortalId, @ModuleId,@UserId,@IsSuperUser, @ForumId
+
+--Get Topics
+
+SELECT
+ ForumId,
+ LastReplyId,
+ TopicId,
+ ContentId,
+ TopicContentId,
+ ViewCount,
+ ReplyCount,
+ IsLocked,
+ IsPinned,
+ IsApproved,
+ IsDeleted,
+ IsRejected,
+ IsArchived,
+ TopicIcon,
+ StatusId,
+ IsAnnounce,
+ AnnounceStart,
+ AnnounceEnd,
+ TopicType,
+ Priority,
+ [Subject],
+ Summary,
+ AuthorId,
+ AuthorName,
+ Body,
+ DateCreated,
+ AuthorUserName,
+ AuthorFirstName,
+ AuthorLastName,
+ AuthorDisplayName,
+ LastReplyContentId,
+ LastReplySubject,
+ LastReplySummary,
+ LastReplyAuthorId,
+ LastReplyAuthorName,
+ LastReplyUserName,
+ LastReplyFirstName,
+ LastReplyLastName,
+ LastReplyDisplayName,
+ LastReplyDate,
+ TopicRating,
+ UserLastReplyRead,
+ UserLastTopicRead,
+ TopicURL,
+ TopicData,
+ FullURL,
+ TopicSubscriberCount,
+ ForumSubscriberCount
+ FROM (
+
+SELECT
+ f.ForumId,
+ IsNull(f.LastReplyId,0) as LastReplyId,
+ t.TopicId,
+ CASE WHEN rc.ContentId IS NULL THEN c.ContentId ELSE rc.ContentId END as ContentId,
+ t.ContentId as TopicContentId,
+ t.ViewCount,
+ t.ReplyCount,
+ t.IsLocked,
+ t.IsPinned,
+ t.IsApproved,
+ t.IsDeleted,
+ t.IsRejected,
+ t.IsArchived,
+ IsNull(t.TopicIcon,'') as TopicIcon,
+ t.StatusId,
+ t.IsAnnounce,
+ t.AnnounceStart,
+ t.AnnounceEnd,
+ t.TopicType,
+ t.Priority,
+ c.Subject,
+ IsNull(c.Summary,'') as Summary,
+ IsNull(c.AuthorId,-1) as AuthorId,
+ IsNull(c.AuthorName,'') as AuthorName,
+ c.Body,
+ c.DateCreated,
+ IsNull(u.Username,'') as AuthorUserName,
+ IsNull(u.FirstName,'') as AuthorFirstName,
+ IsNull(u.LastName,'') as AuthorLastName,
+ IsNull(u.DisplayName,'') as AuthorDisplayName,
+ CASE WHEN rc.ContentId IS NULL THEN c.ContentId ELSE rc.ContentId END as LastReplyContentId,
+ CASE WHEN rc.Subject IS NULL THEN c.Subject ELSE rc.Subject END as LastReplySubject,
+ CASE WHEN rc.Summary IS NULL THEN IsNull(c.Summary,'') ELSE rc.Summary END as LastReplySummary,
+ CASE WHEN rc.AuthorId IS NULL THEN c.AuthorId ELSE rc.AuthorId END as LastReplyAuthorId,
+ CASE WHEN rc.AuthorName IS NULL THEN IsNull(c.AuthorName,'') ELSE rc.AuthorName END as LastReplyAuthorName,
+ CASE WHEN ru.Username IS NULL THEN IsNull(u.UserName,'') ELSE ru.UserName END as LastReplyUserName,
+ CASE WHEN ru.FirstName IS NULL THEN IsNULL(u.FirstName,'') ELSE ru.FirstName END as LastReplyFirstName,
+ CASE WHEN ru.LastName IS NULL THEN IsNull(u.LastName,'') ELSE ru.LastName END as LastReplyLastName,
+ CASE WHEN ru.DisplayName IS NULL THEN IsNull(IsNull(u.DisplayName,rc.AuthorName),'') ELSE ru.DisplayName END as LastReplyDisplayName,
+ CASE WHEN rc.DateCreated IS NULL THEN c.DateCreated ELSE rc.DateCreated END as LastReplyDate,
+ CASE WHEN FT.MaxReplyRead > TT.LastReplyId OR TT.LastReplyID IS NULL THEN ISNULL(FT.MaxReplyRead,0) ELSE TT.LastReplyId END AS UserLastReplyRead,
+ CASE WHEN FT.MaxTopicRead > TT.TopicId OR TT.TopicId IS NULL THEN ISNULL(FT.MaxTopicRead,0) ELSE TT.TopicId END AS UserLastTopicRead,
+ t.URL as TopicURL,
+ IsNull(t.TopicData,'') as TopicData,
+ CASE WHEN ISNULL(t.URL,'') <> '' THEN @PrefixURL + t.URL ELSE '' END as FullURL,
+ (SELECT ISNULL(AVG(Rating), 0) AS Expr1
+ FROM [dbo].activeforums_Topics_Ratings
+ WHERE (TopicId = T.TopicId)) AS TopicRating,
+ ROW_NUMBER() OVER (ORDER BY T.IsPinned DESC, T.Priority DESC,
+ CASE
+ WHEN @SortColumn = 'ReplyCreated' THEN
+ CASE WHEN rc.DateCreated IS NULL THEN c.DateCreated ELSE rc.DateCreated END
+ WHEN @SortColumn = 'TopicCreated' THEN
+ c.DateCreated
+ END DESC) as RowRank,
+ COALESCE((SELECT COUNT(*)
+ FROM [dbo].activeforums_Subscriptions
+ WHERE (ModuleId = @ModuleId) AND (ForumId = @ForumId) AND (TopicId = T.TopicId)), 0) AS TopicSubscriberCount,
+ COALESCE((SELECT COUNT(*)
+ FROM [dbo].activeforums_Subscriptions
+ WHERE (ModuleId = @ModuleId) AND (ForumId = @ForumId) AND (TopicId = 0)), 0) AS ForumSubscriberCount
+
+ FROM [dbo].activeforums_ForumTopics AS f INNER JOIN
+ [dbo].activeforums_Topics as t on f.TopicId = t.TopicId INNER JOIN
+ [dbo].activeforums_Content as c on t.ContentId = c.ContentId LEFT OUTER JOIN
+ [dbo].Users as u on c.AuthorId = u.UserId LEFT OUTER JOIN
+ [dbo].activeforums_Replies as r on f.LastReplyId = r.ReplyId LEFT OUTER JOIN
+ [dbo].activeforums_Content as rc on r.ContentId = rc.ContentId LEFT OUTER JOIN
+ [dbo].Users as ru on rc.AuthorId = ru.UserId LEFT OUTER JOIN
+ [dbo].activeforums_Topics_Tracking AS TT ON T.TopicId = TT.TopicId AND TT.UserId = @UserId LEFT OUTER JOIN
+ [dbo].activeforums_Forums_Tracking as FT ON f.ForumId = FT.ForumId AND FT.UserId = @UserId
+
+ WHERE (f.ForumId = @ForumId AND t.IsApproved = 1 AND t.IsDeleted = 0)
+ ) AS TopicsWithRowNumbers
+ WHERE RowRank > @RowIndex AND RowRank <= (@RowIndex + @MaxRows)
+ IF @RowIndex = 0
+ BEGIN
+ SELECT
+ f.ForumId,
+ IsNull(f.LastReplyId,0) as LastReplyId,
+ t.TopicId,
+ CASE WHEN rc.ContentId IS NULL THEN c.ContentId ELSE rc.ContentId END as ContentId,
+ t.ContentId AS TopicContentId,
+ t.ViewCount,
+ t.ReplyCount,
+ t.IsLocked,
+ t.IsPinned,
+ t.IsApproved,
+ t.IsDeleted,
+ t.IsRejected,
+ t.IsArchived,
+ IsNull(t.TopicIcon,'') as TopicIcon,
+ t.StatusId,
+ t.IsAnnounce,
+ t.AnnounceStart,
+ t.AnnounceEnd,
+ t.TopicType,
+ t.Priority,
+ c.Subject,
+ IsNull(c.Summary,'') as Summary,
+ IsNull(c.AuthorId,-1) as AuthorId,
+ IsNull(c.AuthorName,'') as AuthorName,
+ c.Body,
+ c.DateCreated,
+ IsNull(u.Username,'') as AuthorUserName,
+ IsNull(u.FirstName,'') as AuthorFirstName,
+ IsNull(u.LastName,'') as AuthorLastName,
+ IsNull(u.DisplayName,'') as AuthorDisplayName,
+ CASE WHEN rc.ContentId IS NULL THEN c.ContentId ELSE rc.ContentId END as LastReplyContentId,
+ CASE WHEN rc.Subject IS NULL THEN c.Subject ELSE rc.Subject END as LastReplySubject,
+ CASE WHEN rc.Summary IS NULL THEN IsNull(c.Summary,'') ELSE rc.Summary END as LastReplySummary,
+ CASE WHEN rc.AuthorId IS NULL THEN c.AuthorId ELSE rc.AuthorId END as LastReplyAuthorId,
+ CASE WHEN rc.AuthorName IS NULL THEN IsNull(c.AuthorName,'') ELSE rc.AuthorName END as LastReplyAuthorName,
+ CASE WHEN ru.Username IS NULL THEN IsNull(u.UserName,'') ELSE ru.UserName END as LastReplyUserName,
+ CASE WHEN ru.FirstName IS NULL THEN IsNULL(u.FirstName,'') ELSE ru.FirstName END as LastReplyFirstName,
+ CASE WHEN ru.LastName IS NULL THEN IsNull(u.LastName,'') ELSE ru.LastName END as LastReplyLastName,
+ CASE WHEN ru.DisplayName IS NULL THEN IsNull(IsNull(u.DisplayName,rc.AuthorName),'') ELSE ru.DisplayName END as LastReplyDisplayName,
+ CASE WHEN rc.DateCreated IS NULL THEN c.DateCreated ELSE rc.DateCreated END as LastReplyDate,
+ CASE WHEN FT.MaxReplyRead > TT.LastReplyId OR TT.LastReplyID IS NULL THEN ISNULL(FT.MaxReplyRead,0) ELSE TT.LastReplyId END AS UserLastReplyRead,
+ CASE WHEN FT.MaxTopicRead > TT.TopicId OR TT.TopicId IS NULL THEN ISNULL(FT.MaxTopicRead,0) ELSE TT.TopicId END AS UserLastTopicRead,
+ t.URL as TopicURL,
+ IsNull(t.TopicData,'') as TopicData,
+ CASE WHEN ISNULL(t.URL,'') <> '' THEN @PrefixURL + t.URL ELSE '' END as FullURL,
+ (SELECT ISNULL(AVG(Rating), 0) AS Expr1
+ FROM [dbo].activeforums_Topics_Ratings
+ WHERE (TopicId = T.TopicId)) AS TopicRating,
+ ROW_NUMBER() OVER (ORDER BY T.IsPinned DESC,
+ CASE
+ WHEN rc.DateCreated IS NULL THEN c.DateCreated ELSE rc.DateCreated END DESC
+ ) as RowRank,
+ COALESCE((SELECT COUNT(*)
+ FROM [dbo].activeforums_Subscriptions
+ WHERE (ModuleId = @ModuleId) AND (ForumId = @ForumId) AND (TopicId = T.TopicId)), 0) AS TopicSubscriberCount,
+ COALESCE((SELECT COUNT(*)
+ FROM [dbo].activeforums_Subscriptions
+ WHERE (ModuleId = @ModuleId) AND (ForumId = @ForumId) AND (TopicId = 0)), 0) AS ForumSubscriberCount
+
+ FROM [dbo].activeforums_ForumTopics AS f INNER JOIN
+ [dbo].activeforums_Topics as t on f.TopicId = t.TopicId INNER JOIN
+ [dbo].activeforums_Content as c on t.ContentId = c.ContentId LEFT OUTER JOIN
+ [dbo].Users as u on c.AuthorId = u.UserId LEFT OUTER JOIN
+ [dbo].activeforums_Replies as r on f.LastReplyId = r.ReplyId LEFT OUTER JOIN
+ [dbo].activeforums_Content as rc on r.ContentId = rc.ContentId LEFT OUTER JOIN
+ [dbo].Users as ru on rc.AuthorId = ru.UserId LEFT OUTER JOIN
+ [dbo].activeforums_Topics_Tracking AS TT ON T.TopicId = TT.TopicId AND TT.UserId = @UserId LEFT OUTER JOIN
+ [dbo].activeforums_Forums_Tracking as FT ON f.ForumId = FT.ForumId AND FT.UserId = @UserId
+
+ WHERE (f.ForumId = @ForumId AND t.IsApproved = 1 AND t.IsDeleted = 0 AND T.IsAnnounce = 1 AND T.AnnounceStart <= GETUTCDATE() AND T.AnnounceEnd >= GETUTCDATE())
+ ORDER BY T.IsPinned DESC, c.DateCreated DESC, rc.DateCreated DESC
+ END
+BEGIN
+If @UserId > 0
+ BEGIN
+ exec [dbo].activeforums_Forums_Tracking_UpdateUser @ModuleId, @UserId, @ForumId
+ exec [dbo].activeforums_UserProfiles_UpdateActivity @PortalId, @UserId
+ END
+END
+
+GO
+
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Subscriptions_Subscribers]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Subscriptions_Subscribers]
+GO
+
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Subscriptions_Subscribers](@PortalId int, @ForumId int, @TopicId int, @SubType int)
+AS
+
+DECLARE @CanSubscribe nvarchar(256)
+SET @CanSubscribe = (
+ SELECT p.CanSubscribe
+ FROM {databaseOwner}{objectQualifier}activeforums_Forums as f
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Permissions as p
+ ON p.PermissionsId = f.PermissionsId
+ WHERE f.ForumId = @ForumId
+ )
+
+DECLARE @subs TABLE (userid int, email nvarchar(255), topicsubscriber bit)
+
+/* get topic subscribers who are not superusers so need to check against roles allowed to be subscribers */
+INSERT INTO @subs
+ (userid, email, topicsubscriber)
+ (SELECT s.UserId, u.Email, 1 AS topicsubscriber
+ FROM {databaseOwner}{objectQualifier}activeforums_Subscriptions AS s
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums AS f
+ ON f.ForumId = s.ForumId
+ INNER JOIN {databaseOwner}{objectQualifier}Users AS u
+ ON u.UserID = s.UserId
+ AND u.IsSuperUser = 0
+ AND u.IsDeleted = 0
+ INNER JOIN {databaseOwner}{objectQualifier}UserPortals AS up
+ ON up.UserId = u.UserID
+ AND up.PortalId = @PortalId
+ AND up.IsDeleted = 0
+ AND up.Authorised = 1
+ INNER JOIN {databaseOwner}{objectQualifier}UserRoles AS ur
+ ON ur.UserID = u.UserID
+ AND (
+ (ur.EffectiveDate IS NULL AND ur.ExpiryDate >= GETDATE()) /* DNN platform user roles still use native GETDATE() not GETUTCDATE() */
+ OR (ur.EffectiveDate IS NULL AND ur.ExpiryDate IS NULL)
+ OR (ur.EffectiveDate <= GETDATE() AND ur.ExpiryDate IS NULL)
+ OR (ur.EffectiveDate <= GETDATE() AND ur.ExpiryDate >= GETDATE())
+ )
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Functions_Split(@CanSubscribe,';') AS r
+ ON r.ID = ur.RoleId
+ WHERE (s.Mode = @SubType)
+ AND (s.TopicId = @TopicId)
+ AND (NOT EXISTS (SELECT * FROM @subs WHERE userid = s.UserId))
+ )
+
+/* get forum subscribers who are not superusers so need to check against roles allowed to be subscribers */
+INSERT INTO @subs
+ (userid, email, topicsubscriber)
+ (SELECT s.UserId, u.Email, 0 AS topicsubscriber
+ FROM {databaseOwner}{objectQualifier}activeforums_Subscriptions AS s
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums AS f
+ ON f.ForumId = s.ForumId
+ INNER JOIN {databaseOwner}{objectQualifier}Users AS u
+ ON u.UserID = s.UserId
+ AND u.IsSuperUser = 0
+ AND u.IsDeleted = 0
+ INNER JOIN {databaseOwner}{objectQualifier}UserPortals AS up
+ ON up.UserId = u.UserID
+ AND up.PortalId = @PortalId
+ AND up.IsDeleted = 0
+ AND up.Authorised = 1
+ INNER JOIN {databaseOwner}{objectQualifier}UserRoles AS ur
+ ON ur.UserID = u.UserID
+ AND (
+ (ur.EffectiveDate IS NULL AND ur.ExpiryDate >= GETDATE()) /* DNN platform user roles still use native GETDATE() not GETUTCDATE() */
+ OR (ur.EffectiveDate IS NULL AND ur.ExpiryDate IS NULL)
+ OR (ur.EffectiveDate <= GETDATE() AND ur.ExpiryDate IS NULL)
+ OR (ur.EffectiveDate <= GETDATE() AND ur.ExpiryDate >= GETDATE())
+ )
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Functions_Split(@CanSubscribe,';') AS r
+ ON r.ID = ur.RoleId
+ WHERE (s.Mode = @SubType)
+ AND (S.ForumId = @ForumId AND S.TopicId = 0)
+ AND (NOT EXISTS (SELECT * FROM @subs WHERE userid = s.UserId))
+ )
+
+
+/* get topic subscribers who are superusers */
+INSERT INTO @subs
+ (userid, email, topicsubscriber)
+ (SELECT s.UserId, u.Email, 1 AS topicsubscriber
+ FROM {databaseOwner}{objectQualifier}activeforums_Subscriptions AS s
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums AS f
+ ON f.ForumId = s.ForumId
+ INNER JOIN {databaseOwner}{objectQualifier}Users AS u
+ ON u.UserID = s.UserId
+ AND u.IsSuperUser = 1
+ AND u.IsDeleted = 0
+ INNER JOIN {databaseOwner}{objectQualifier}UserPortals AS up
+ ON up.UserId = u.UserID
+ AND up.PortalId = @PortalId
+ AND up.IsDeleted = 0
+ AND up.Authorised = 1
+ WHERE (s.Mode = @SubType)
+ AND (s.TopicId = @TopicId)
+ AND (NOT EXISTS (SELECT * FROM @subs WHERE userid = s.UserId))
+ )
+
+/* get forum subscribers who are superusers */
+INSERT INTO @subs
+ (userid, email, topicsubscriber)
+ (SELECT s.UserId, u.Email, 0 AS topicsubscriber
+ FROM {databaseOwner}{objectQualifier}activeforums_Subscriptions AS s
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums AS f
+ ON f.ForumId = s.ForumId
+ INNER JOIN {databaseOwner}{objectQualifier}Users AS u
+ ON u.UserID = s.UserId
+ AND u.IsSuperUser = 1
+ AND u.IsDeleted = 0
+ INNER JOIN {databaseOwner}{objectQualifier}UserPortals AS up
+ ON up.UserId = u.UserID
+ AND up.PortalId = @PortalId
+ AND up.IsDeleted = 0
+ AND up.Authorised = 1
+ WHERE (s.Mode = @SubType)
+ AND (S.ForumId = @ForumId AND S.TopicId = 0)
+ AND (NOT EXISTS (SELECT * FROM @subs WHERE userid = s.UserId))
+ )
+
+/* get auto subscriptions based on roles */
+DECLARE @AutoSubscribe bit
+DECLARE @AutoSubscribeRoles nvarchar(255)
+DECLARE @TopicsOnly bit
+DECLARE @IsNewTopic bit
+SET @AutoSubscribe = IsNull((SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings as S INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as F ON F.ForumSettingsKey = S.SettingsKey WHERE S.SettingName = 'AUTOSUBSCRIBEENABLED' AND F.ForumId = @ForumId),0)
+SET @AutoSubscribeRoles = IsNull((SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings as S INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as F ON F.ForumSettingsKey = S.SettingsKey WHERE S.SettingName = 'AUTOSUBSCRIBEROLES' AND F.ForumId = @ForumId),'')
+SET @TopicsOnly = IsNull((SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings as S INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums as F ON F.ForumSettingsKey = S.SettingsKey WHERE S.SettingName = 'AUTOSUBSCRIBENEWTOPICSONLY' AND F.ForumId = @ForumId),0)
+SET @IsNewTopic = 0
+IF (SELECT ReplyCount FROM {databaseOwner}{objectQualifier}activeforums_Topics WHERE TopicId = @TopicId) > 0
+ SET @IsNewTopic = 1
+
+If (@TopicsOnly = 1 AND @IsNewTopic = 0) OR (@TopicsOnly = 0)
+ BEGIN
+ IF @AutoSubscribe = 1 AND @AutoSubscribeRoles <> ''
+ BEGIN
+
+ INSERT INTO @subs
+ (userid, email, topicsubscriber)
+ (SELECT u.UserID, u.Email, 0 AS topicsubscriber /*auto subscribers are never topic-specific subscribers */
+ FROM {databaseOwner}{objectQualifier}Users AS u
+ INNER JOIN {databaseOwner}{objectQualifier}UserPortals AS up
+ ON up.UserId = u.UserID
+ AND up.PortalId = @PortalId
+ AND up.IsDeleted = 0
+ AND up.Authorised = 1
+ INNER JOIN {databaseOwner}{objectQualifier}UserRoles AS ur
+ ON ur.UserID = u.UserID
+ AND (
+ (ur.EffectiveDate IS NULL AND ur.ExpiryDate >= GETDATE()) /* DNN platform user roles still use native GETDATE() not GETUTCDATE() */
+ OR (ur.EffectiveDate IS NULL AND ur.ExpiryDate IS NULL)
+ OR (ur.EffectiveDate <= GETDATE() AND ur.ExpiryDate IS NULL)
+ OR (ur.EffectiveDate <= GETDATE() AND ur.ExpiryDate >= GETDATE())
+ )
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Functions_Split(@AutoSubscribeRoles,';') AS r
+ ON r.ID = ur.RoleId
+ WHERE (u.IsDeleted = 0)
+ AND (NOT EXISTS (SELECT * FROM @subs WHERE userid = u.UserID))
+ )
+
+ END
+ END
+
+/* return the results */
+SELECT DISTINCT userid, email, topicsubscriber FROM @subs
+GO
+
+
+
+/* activeforums_Forums_List */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Forums_List]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Forums_List]
+GO
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Forums_List]
+@ModuleId int,
+@ForumGroupId int,
+@ParentForumId int,
+@FillLastPost bit
+AS
+IF @ForumGroupId = -1 AND @ParentForumId = -1 AND @FillLastPost = 0
+ --Return all Forums
+SELECT IsNull(F.ForumId,-1) as ForumId, G.ModuleId, G.ForumGroupId, IsNull(F.ParentForumId,'-1') as ParentForumId, IsNull(F.ForumName,'') as ForumName, F.ForumDesc, F.SortOrder, F.Active, F.Hidden, F.TotalTopics,
+ F.TotalReplies, F.LastTopicId, F.LastReplyId, F.ForumSettingsKey, G.GroupName, ISNULL(P.ForumName, '') AS ParentForumName,
+ TopicsTemplateId = IsNull((SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE SettingName = 'TOPICSTEMPLATEID' and SettingsKey = F.ForumSettingsKey),0),
+ TopicTemplateId = IsNull((SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE SettingName = 'TOPICTEMPLATEID' and SettingsKey = F.ForumSettingsKey),0)
+FROM {databaseOwner}{objectQualifier}activeforums_Forums AS F RIGHT OUTER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Groups AS G ON F.ForumGroupId = G.ForumGroupId LEFT OUTER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Forums AS P ON F.ParentForumId = P.ForumId
+WHERE (G.ModuleId = @ModuleId)
+ORDER BY G.SortOrder, F.SortOrder
+
+ELSE
+ IF @ForumGroupId > 0 AND @ParentForumId = -1 AND @FillLastPost = 0
+ --Return Forums in Group
+ SELECT F.ForumId, F.ModuleId, F.ForumGroupId, F.ParentForumId, F.ForumName, F.ForumDesc, F.SortOrder, F.Active, F.Hidden, F.TotalTopics,
+ F.TotalReplies, F.LastTopicId, F.LastReplyId, F.ForumSettingsKey, G.GroupName, ISNULL(P.ForumName, '') AS ParentForumName,
+ TopicsTemplateId = IsNull((SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE SettingName = 'TOPICSTEMPLATEID' and SettingsKey = F.ForumSettingsKey),0),
+ TopicTemplateId = IsNull((SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE SettingName = 'TOPICTEMPLATEID' and SettingsKey = F.ForumSettingsKey),0)
+ FROM {databaseOwner}{objectQualifier}activeforums_Forums AS F INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Groups AS G ON F.ForumGroupId = G.ForumGroupId LEFT OUTER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Forums AS P ON F.ParentForumId = P.ForumId
+ WHERE F.ModuleId = @ModuleId AND F.ForumGroupId = @ForumGroupId
+ ORDER By F.SortOrder
+ ELSE
+ If @ForumGroupId > 0 AND @ParentForumId > 0 AND @FillLastPost = 0
+ --Return Sub Forums
+
+ SELECT F.ForumId, F.ModuleId, F.ForumGroupId, F.ParentForumId, F.ForumName, F.ForumDesc, F.SortOrder, F.Active, F.Hidden, F.TotalTopics,
+ F.TotalReplies, F.LastTopicId, F.LastReplyId, F.ForumSettingsKey, G.GroupName, ISNULL(P.ForumName, '') AS ParentForumName,
+ TopicsTemplateId = IsNull((SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE SettingName = 'TOPICSTEMPLATEID' and SettingsKey = F.ForumSettingsKey),0),
+ TopicTemplateId = IsNull((SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE SettingName = 'TOPICTEMPLATEID' and SettingsKey = F.ForumSettingsKey),0)
+ FROM {databaseOwner}{objectQualifier}activeforums_Forums AS F INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Groups AS G ON F.ForumGroupId = G.ForumGroupId LEFT OUTER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Forums AS P ON F.ParentForumId = P.ForumId
+ WHERE F.ModuleId = @ModuleId AND F.ParentForumId = @ParentForumId
+ ORDER By G.SortOrder, F.SortOrder
+ ELSE
+ ---Returns Forums In Group with Last Post Info
+SELECT F.ForumId, F.ModuleId, F.ForumGroupId, F.ParentForumId, F.ForumName, F.ForumDesc, F.SortOrder, F.Active, F.Hidden, F.TotalTopics,
+ F.TotalReplies, F.LastTopicId, F.LastReplyId, F.ForumSettingsKey, G.GroupName, ISNULL(P.ForumName, '') AS ParentForumName, ISNULL(U.FirstName, '')
+ AS LastPostFirstName, ISNULL(U.LastName, '') AS LastPostLastName, ISNULL(C.AuthorId, - 1) AS LastPostUserId, ISNULL(C.AuthorName, '') AS LastPostUserName,
+ C.Subject AS LastPostSubject, C.DateCreated AS LastPostDateTime,
+ TopicsTemplateId = IsNull((SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE SettingName = 'TOPICSTEMPLATEID' and SettingsKey = F.ForumSettingsKey),0),
+ TopicTemplateId = IsNull((SELECT SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE SettingName = 'TOPICTEMPLATEID' and SettingsKey = F.ForumSettingsKey),0)
+FROM {databaseOwner}{objectQualifier}activeforums_Content AS C INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Topics AS T ON C.ContentId = T.ContentId INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_UserProfiles AS UD INNER JOIN
+ {databaseOwner}{objectQualifier}Users AS U ON UD.UserID = U.UserID ON C.AuthorId = UD.UserID RIGHT OUTER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Forums AS F INNER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Groups AS G ON F.ForumGroupId = G.ForumGroupId ON T.TopicId = F.LastTopicId LEFT OUTER JOIN
+ {databaseOwner}{objectQualifier}activeforums_Forums AS P ON F.ParentForumId = P.ForumId
+WHERE (F.ModuleId = @ModuleId) AND (F.ForumGroupId = @ForumGroupId)
+ORDER BY G.SortOrder, F.SortOrder
+GO
+
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_MC_Forums]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_MC_Forums]
+GO
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_MC_Forums]
+AS
+DECLARE @SettingName nvarchar(100)
+DECLARE @SettingValue nvarchar(100)
+SET @SettingName = 'MCENABLED'
+SET @SettingValue = 'true'
+DECLARE @MailForums table (forumid int)
+INSERT INTO @MailForums(forumid)
+Select f.ForumId From {databaseOwner}{objectQualifier}activeforums_Forums as F
+ INNER JOIN {databaseOwner}{objectQualifier}Modules as M ON F.ModuleId = M.ModuleId
+ INNER JOIN {databaseOwner}{objectQualifier}activeforums_Settings as S ON S.SettingsKey = F.ForumSettingsKey
+WHERE M.IsDeleted = 0 AND F.Active = 1 AND S.SettingValue = @SettingValue
+
+SELECT *, TM.TabId from {databaseOwner}{objectQualifier}activeforums_Forums as F INNER JOIN @MailForums as M ON M.forumid = F.ForumId
+ INNER JOIN {databaseOwner}{objectQualifier}TabModules as TM ON F.ModuleId = TM.ModuleId
+GO
+
+
+
+/* activeforums_Forum_ConfigCleanUp */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}{objectQualifier}activeforums_Forum_ConfigCleanUp') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}{objectQualifier}activeforums_Forum_ConfigCleanUp
+GO
+CREATE PROCEDURE {databaseOwner}{objectQualifier}activeforums_Forum_ConfigCleanUp
+@ModuleId int,
+@ForumSettingsKey nvarchar(25)
+AS
+DELETE FROM {databaseOwner}{objectQualifier}activeforums_Settings WHERE SettingsKey = @ForumSettingsKey AND ModuleId = @ModuleId
+GO
+
+
+
+/* begin: activeforums_Search_GetSearchItemsFromBegDate */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Search_GetSearchItemsFromBegDate]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Search_GetSearchItemsFromBegDate]
+GO
+
+CREATE PROCEDURE {databaseOwner}{objectQualifier}activeforums_Search_GetSearchItemsFromBegDate(@ModuleId int, @beginDateUtc datetime)
+AS
+SELECT F.ForumGroupId, FT.ForumId, X.TopicId, X.ReplyId, X.ContentId, X.DateCreated, X.DateUpdated, X.Summary, X.Subject, X.AuthorId, X.Body , X.IsDeleted, X.IsApproved,
+RTRIM(IsNull([dbo].activeforums_Topics_GetTags(X.TopicId),'')) AS Tags, X.TopicURL, F.PrefixURL AS ForumUrlPrefix, G.PrefixURL AS ForumGroupUrlPrefix
+FROM
+(
+SELECT
+T.TopicId, -1 AS ReplyId, C.ContentId, C.DateCreated, C.DateUpdated, C.Summary, C.Subject, C.AuthorId, C.Body, T.IsDeleted, T.IsApproved, T.URL AS TopicUrl
+FROM {databaseOwner}{objectQualifier}activeforums_Topics T
+INNER JOIN {databaseOwner}{objectQualifier}activeforums_Content C ON C.ContentId = T.ContentId
+WHERE C.DateUpdated BETWEEN @beginDateUtc AND GETUTCDATE()
+UNION
+SELECT
+R.TopicId, R.ReplyId, C.ContentId, C.DateCreated, C.DateUpdated, C.Summary, C.Subject, C.AuthorId, C.Body, R.IsDeleted, R.IsApproved, T.URL AS TopicUrl
+FROM {databaseOwner}{objectQualifier}activeforums_Replies R
+INNER JOIN {databaseOwner}{objectQualifier}activeforums_Content C ON C.ContentId = R.ContentId
+LEFT OUTER JOIN {databaseOwner}{objectQualifier}activeforums_Topics T ON T.TopicId = R.TopicId
+WHERE C.DateUpdated BETWEEN @beginDateUtc AND GETUTCDATE()
+) X
+INNER JOIN {databaseOwner}{objectQualifier}activeforums_Topics T ON T.TopicId = X.TopicId
+INNER JOIN {databaseOwner}{objectQualifier}activeforums_ForumTopics FT ON FT.TopicId = T.TopicId
+INNER JOIN {databaseOwner}{objectQualifier}activeforums_Forums F ON F.ForumId = FT.ForumId
+INNER JOIN {databaseOwner}{objectQualifier}activeforums_Groups G ON G.ForumGroupId = F.ForumGroupId
+INNER JOIN {databaseOwner}{objectQualifier}activeforums_settings S ON S.SettingsKey = F.ForumSettingsKey AND S.SettingName = 'INDEXCONTENT'
+WHERE F.Active = 1 AND S.SettingValue = 'true' AND F.ModuleId = @ModuleId
+GO
+
+
+/* activeforums_Settings_Delete */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Settings_Delete]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Settings_Delete]
+GO
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Settings_Delete]
+(
+ @ModuleId int,
+ @SettingsKey nvarchar(25),
+ @SettingName nvarchar(50)
+)
+AS
+DELETE FROM {databaseOwner}[{objectQualifier}activeforums_Settings] WHERE ModuleId = @ModuleId AND SettingName = @SettingName AND SettingsKey = @SettingsKey
+GO
+
+/* activeforums_Settings_Save */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Settings_Save]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Settings_Save]
+GO
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Settings_Save]
+(
+ @ModuleId int,
+ @SettingsKey nvarchar(25),
+ @SettingName nvarchar(50),
+ @SettingValue nvarchar(2000)
+)
+AS
+If EXISTS(SELECT SettingName FROM {databaseOwner}[{objectQualifier}activeforums_Settings] WHERE ModuleId = @ModuleId AND SettingName = @SettingName AND SettingsKey = @SettingsKey)
+ BEGIN
+ UPDATE {databaseOwner}[{objectQualifier}activeforums_Settings]
+ SET SettingValue = @SettingValue
+ WHERE ModuleId = @ModuleId AND SettingName = @SettingName AND SettingsKey = @SettingsKey
+ END
+ELSE
+ INSERT INTO {databaseOwner}[{objectQualifier}activeforums_Settings]
+ (ModuleId, SettingsKey, SettingName, SettingValue)
+ VALUES
+ (@ModuleId, @SettingsKey, @SettingName, @SettingValue)
+
+GO
+
+/* activeforums_Settings_Delete */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Settings_Get]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Settings_Get]
+GO
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Settings_Get]
+(
+ @ModuleId int,
+ @SettingsKey nvarchar(25),
+ @SettingName nvarchar(50)
+)
+AS
+SELECT SettingValue FROM {databaseOwner}[{objectQualifier}activeforums_Settings] WHERE ModuleId = @ModuleId AND SettingName = @SettingName AND SettingsKey = @SettingsKey
+GO
+
+/* activeforums_Settings_List */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Settings_List]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Settings_List]
+GO
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Settings_List]
+(
+ @ModuleId int,
+ @SettingsKey nvarchar(25)
+)
+AS
+SELECT SettingName, SettingValue FROM {databaseOwner}{objectQualifier}activeforums_Settings
+WHERE ModuleId = @ModuleId AND SettingsKey = @SettingsKey
+GO
+
+
+/* activeforums_Settings_ListAll */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Settings_ListAll]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Settings_ListAll]
+GO
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Settings_ListAll]
+ @ModuleId INT
+
+AS
+SELECT SettingName ,
+ SettingValue,
+ SettingsKey
+FROM {databaseOwner}{objectQualifier}activeforums_Settings
+WHERE ModuleId = @ModuleId
+GO
+
+
+
+/*drop activeforums_ForumsList*/
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_ForumsList]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_ForumsList]
+GO
+
+/* drop activeforums_SettingsTable */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_SettingsTable]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
+DROP FUNCTION {databaseOwner}[{objectQualifier}activeforums_SettingsTable]
+GO
+
+
+/* issue 1582 - end - settings table overhaul */
+
+/* --------------------- */
+
+
+
+/* issue 1599 - begin - don't update UserProfile Reply count from activeforums_Reply_Save */
+
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Reply_Save]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Reply_Save]
+GO
+
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Reply_Save]
+@PortalId int,
+@TopicId int,
+@ReplyId int,
+@ReplyToId int,
+@StatusId int,
+@IsApproved bit,
+@IsDeleted bit,
+@Subject nvarchar(255),
+@Body nvarchar(max),
+@DateCreated datetime,
+@DateUpdated datetime,
+@AuthorId int,
+@AuthorName nvarchar(150),
+@IPAddress nvarchar(50)
+AS
+DECLARE @ContentId int
+DECLARE @IsEdit bit
+SET @IsEdit = 0
+DECLARE @ApprovedStatus bit
+SET @ApprovedStatus = @IsApproved
+
+-- This part is a work around for Quick Reply feature not working for Tapatalk STARTS
+
+DECLARE @TopicSubject NVARCHAR(255) = (
+ SELECT top 1 afc.Subject FROM {databaseOwner}[{objectQualifier}activeforums_Topics] aft
+ JOIN {databaseOwner}[{objectQualifier}activeforums_Content] afc ON aft.ContentId = afc.ContentId
+ WHERE TopicId = @TopicId
+ )
+
+SET @Subject = ISNULL(NULLIF(@Subject, ''), 'RE: ' + @TopicSubject)
+
+IF (@Subject NOT LIKE 'RE:%')
+BEGIN
+ SET @Subject = 'RE: ' + @Subject
+END
+-- This part is a work around for Quick Reply feature not working for Tapatalk ENDS
+
+
+IF EXISTS(SELECT ContentId FROM {databaseOwner}{objectQualifier}activeforums_Replies WHERE ReplyId = @ReplyId)
+BEGIN
+ SELECT @ContentId = ContentId, @ApprovedStatus = IsApproved FROM {databaseOwner}{objectQualifier}activeforums_Replies WHERE ReplyId = @ReplyId
+
+ BEGIN
+ SET @IsEdit = 1
+ UPDATE {databaseOwner}{objectQualifier}activeforums_Content
+ SET Subject = @Subject,
+ Body = @Body,
+ DateCreated = @DateCreated,
+ DateUpdated = @DateUpdated,
+ AuthorId = @AuthorId,
+ AuthorName = @AuthorName,
+ IsDeleted = @IsDeleted,
+ IPAddress = @IPAddress
+ WHERE ContentId = @ContentId
+ UPDATE {databaseOwner}{objectQualifier}activeforums_Replies
+ SET StatusId = @StatusId,
+ TopicId = @TopicId,
+ IsApproved = @IsApproved,
+ IsDeleted = @IsDeleted,
+ ReplyToId = @ReplyToId
+ WHERE ReplyId = @ReplyId
+END
+ END
+ELSE
+--INSERT
+BEGIN
+ BEGIN
+ INSERT INTO {databaseOwner}{objectQualifier}activeforums_Content
+ (Subject, Body, DateCreated, DateUpdated, AuthorId, AuthorName, IsDeleted, IPAddress)
+ VALUES
+ (@Subject, @Body, @DateCreated, @DateUpdated, @AuthorId, @AuthorName, @IsDeleted, @IPAddress)
+ SET @ContentId = SCOPE_IDENTITY()
+ END
+ BEGIN
+ INSERT INTO {databaseOwner}{objectQualifier}activeforums_Replies
+ (ContentId, TopicId, StatusId, IsApproved, IsDeleted, ReplyToId)
+ VALUES
+ (@ContentId, @TopicId, @StatusId, @IsApproved, @IsDeleted, @ReplyToId)
+ SET @ReplyId = SCOPE_IDENTITY()
+
+ END
+
+
+END
+IF @IsApproved = 1
+ BEGIN
+ DECLARE @ForumId int
+ SELECT @ForumId = ForumId FROM {databaseOwner}{objectQualifier}activeforums_ForumTopics WHERE TopicId = @TopicId
+ DECLARE @TotalReplies int
+ SET @TotalReplies = (SELECT Count(ReplyId) from {databaseOwner}{objectQualifier}activeforums_replies as r inner join {databaseOwner}{objectQualifier}activeforums_topics as t on t.topicid = r.topicid and r.isapproved = 1 and r.isdeleted = 0 INNER JOIN {databaseOwner}{objectQualifier}activeforums_forumtopics as ft on t.topicid = ft.topicid WHERE ft.forumid = @ForumId)
+ UPDATE {databaseOwner}{objectQualifier}activeforums_Forums
+ SET LastTopicId = IsNull(@TopicId,0), LastReplyId = IsNull(@ReplyId,0), TotalReplies = ISNULL(@TotalReplies,0)
+ WHERE ForumId = @ForumId
+ UPDATE {databaseOwner}{objectQualifier}activeforums_Topics
+ SET ReplyCount = (Select Count(ReplyId) from {databaseOwner}{objectQualifier}activeforums_Replies WHERE TopicId = @TopicId AND IsDeleted = 0 AND IsApproved = 1)
+ WHERE TopicId = @TopicId
+ END
+
+
+/* populate ModuleId in activeforums_Content */
+UPDATE c
+SET c.ModuleId = f.ModuleId
+FROM {databaseOwner}[{objectQualifier}activeforums_Content] c
+LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Replies] r
+ON r.ContentId = c.ContentId
+LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_ForumTopics] ft
+ON ft.TopicId = r.TopicId
+LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f
+ON f.ForumId = ft.ForumId
+WHERE c.ModuleId IS NULL AND r.ReplyId = @ReplyId
+
+
+SELECT @ReplyId
+GO
+/* issue 1599 - end - don't update UserProfile Reply count from activeforums_Reply_Save */
+/* --------------------- */
+
+
+/* Issue 1594 - Begin - update activeforums_Topics_Move procedure to remove previously-removed LastPostId from activeforums_Forums */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Topics_Move]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Topics_Move]
+GO
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Topics_Move]
+@PortalId int,
+@ModuleId int,
+@ForumId int,
+@TopicId int
+AS
+DECLARE @OldForumId int
+SELECT @OldForumId = ForumId FROM {databaseOwner}{objectQualifier}activeforums_ForumTopics WHERE TopicId = @TopicId
+If @OldForumId <> @ForumId
+ BEGIN
+ UPDATE {databaseOwner}{objectQualifier}activeforums_ForumTopics SET ForumId = @ForumId WHERE TopicId = @TopicId AND ForumId = @OldForumId
+
+ DECLARE @LastReplyId int
+ DECLARE @LastTopicId int
+
+ -- set last topic / reply on new Forum
+ SET @LastReplyId = (SELECT MAX(r.ReplyId) FROM {databaseOwner}{objectQualifier}activeforums_Replies as r inner join {databaseOwner}{objectQualifier}activeforums_topics as t on r.topicid = t.topicid inner join {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft on t.topicid = ft.topicid WHERE r.IsApproved = 1 AND r.IsDeleted = 0 AND ft.forumid = @ForumId)
+ SET @LastTopicId = (SELECT MAX(t.TopicId) FROM {databaseOwner}{objectQualifier}activeforums_Topics as t inner join {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft on t.topicid = ft.topicid WHERE t.IsApproved = 1 AND t.IsDeleted = 0 AND ft.forumid = @ForumId)
+ UPDATE {databaseOwner}{objectQualifier}activeforums_Forums SET LastReplyId = IsNull(@LastReplyId,0), LastTopicId = ISNULL(@LastTopicId,0) WHERE ForumId = @ForumId
+
+ -- set last topic / reply on old Forum
+ SET @LastReplyId = (SELECT MAX(r.ReplyId) FROM {databaseOwner}{objectQualifier}activeforums_Replies as r inner join {databaseOwner}{objectQualifier}activeforums_topics as t on r.topicid = t.topicid inner join {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft on t.topicid = ft.topicid WHERE r.IsApproved = 1 AND r.IsDeleted = 0 AND ft.forumid = @OldForumId )
+ SET @LastTopicId = (SELECT MAX(t.TopicId) FROM {databaseOwner}{objectQualifier}activeforums_Topics as t inner join {databaseOwner}{objectQualifier}activeforums_ForumTopics as ft on t.topicid = ft.topicid WHERE t.IsApproved = 1 AND t.IsDeleted = 0 AND ft.forumid = @OldForumId )
+ UPDATE {databaseOwner}{objectQualifier}activeforums_Forums SET LastReplyId = IsNull(@LastReplyId,0), LastTopicId = ISNULL(@LastTopicId,0) WHERE ForumId = @OldForumId
+
+ -- clean up tracking records for the old forum pointing to this topic
+ DELETE FROM {databaseOwner}{objectQualifier}activeforums_Forums_Tracking WHERE ForumId = @OldForumId AND MaxTopicRead = @TopicId
+ UPDATE {databaseOwner}{objectQualifier}activeforums_Topics_Tracking SET ForumId = @ForumId WHERE TopicId = @TopicId AND ForumId = @OldForumId
+
+ -- move any subscriptions for this topic from the old forum to the new forum
+ UPDATE {databaseOwner}{objectQualifier}activeforums_Subscriptions SET ForumId = @ForumId WHERE TopicId = @TopicId AND ForumId = @OldForumId
+ END
+GO
+/* Issue 1594 - End - update activeforums_Topics_Move procedure to remove previously-removed LastPostId from activeforums_Forums */
+
+/* --------------------- */
+
+/* issue 1479 - begin - add badge notification option to user profile */
+
+/* add BadgeNotificationsEnabled to activeforums_UserProfiles */
+IF NOT EXISTS(SELECT * FROM SYS.COLUMNS WHERE Name = N'BadgeNotificationsEnabled' and Object_ID = Object_ID(N'{databaseOwner}[{objectQualifier}activeforums_UserProfiles]'))
+BEGIN
+ ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_UserProfiles] ADD
+ [BadgeNotificationsEnabled] [bit] NOT NULL CONSTRAINT [DF_{objectQualifier}activeforums_UserProfiles_BadgeNotificationsEnabled] DEFAULT(1)
+END
+GO
+
+/* issue 1479 - end - add badge notification option to user profile */
+
+/* --------------------- */
+
+/* issue 1480 - begin - badges */
+
+
+/* activeforums_Badges */
+IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Badges]') AND type in (N'U'))
+CREATE TABLE {databaseOwner}[{objectQualifier}activeforums_Badges] (
+ BadgeId INT IDENTITY(1,1) NOT NULL,
+ ModuleId INT NOT NULL,
+ Name NVARCHAR(100) NOT NULL,
+ Description NVARCHAR(MAX) NULL,
+ ImageMarkup NVARCHAR(MAX) NULL,
+ FileId INT NOT NULL,
+ BadgeMetric INT NOT NULL,
+ SortOrder INT NOT NULL,
+ Threshold INT NOT NULL,
+ IntervalDays INT NOT NULL,
+ OneTimeAward BIT NOT NULL CONSTRAINT DF_{objectQualifier}activeforums_Badges_OneTimeAward DEFAULT(1),
+ SendAwardNotification BIT NOT NULL CONSTRAINT DF_{objectQualifier}activeforums_Badges_SendAwardNotification DEFAULT(1),
+ SuppresssAwardNotificationOnBackfill BIT NOT NULL CONSTRAINT DF_{objectQualifier}activeforums_Badges_SuppresssAwardNotificationOnBackfill DEFAULT(1),
+ InitialBackfillCompletedDate DATETIME NULL,
+ CONSTRAINT PK_{objectQualifier}activeforums_Badges PRIMARY KEY CLUSTERED (BadgeId ASC)
+)
+GO
+
+/* activeforums_UserBadges */
+IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_UserBadges]') AND type in (N'U'))
+CREATE TABLE {databaseOwner}[{objectQualifier}activeforums_UserBadges] (
+ UserBadgeId INT IDENTITY(1,1) NOT NULL,
+ PortalId INT NOT NULL,
+ ModuleId INT NOT NULL,
+ UserId INT NOT NULL,
+ BadgeId INT NOT NULL,
+ DateAssigned DATETIME NOT NULL,
+ CONSTRAINT PK_{objectQualifier}activeforums_UserBadges PRIMARY KEY CLUSTERED (UserBadgeId ASC)
+);
+
+/*DF_activeforums_UserBadges_DateAssigned*/
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}DF_{objectQualifier}activeforums_UserBadges_DateAssigned') AND type = 'D')
+ ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_UserBadges] DROP CONSTRAINT [DF_{objectQualifier}activeforums_UserBadges_DateAssigned];
+GO
+ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_UserBadges] ADD CONSTRAINT [DF_{objectQualifier}activeforums_UserBadges_DateAssigned] DEFAULT (GETUTCDATE()) FOR [DateAssigned];
+GO
+
+/* activeforums_Badges - cascade delete from Modules */
+IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'{databaseOwner}[FK_{objectQualifier}activeforums_Badges_Modules]') AND parent_object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Badges]'))
+ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_Badges] DROP CONSTRAINT
+[FK_{objectQualifier}activeforums_Badges_Modules]
+GO
+ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_Badges] ADD CONSTRAINT
+ [FK_{objectQualifier}activeforums_Badges_Modules] FOREIGN KEY (ModuleId)
+ REFERENCES {databaseOwner}[{objectQualifier}Modules] (ModuleID)
+ ON DELETE CASCADE
+GO
+
+/* activeforums_Badges - cascade delete from Modules */
+/* drop constraint */
+IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'{databaseOwner}[FK_{objectQualifier}activeforums_Badges_Modules]') AND parent_object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Badges]'))
+ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_Badges] DROP CONSTRAINT
+[FK_{objectQualifier}activeforums_Badges_Modules]
+GO
+
+/* activeforums_UserBadges - cascade delete from activeforums_UserProfiles */
+/* drop constraint */
+IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'{databaseOwner}[FK_{objectQualifier}activeforums_UserBadges_UserProfiles]') AND parent_object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_UserBadges]'))
+ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_UserBadges] DROP CONSTRAINT
+[FK_{objectQualifier}activeforums_UserBadges_UserProfiles]
+GO
+
+/* drop/create index IX_activeforums_UserProfiles_Opt3 -- Needs to be unique */
+IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{objectQualifier}activeforums_UserProfiles') AND name = N'IX_{objectQualifier}activeforums_UserProfiles_Opt3')
+DROP INDEX [IX_{objectQualifier}activeforums_UserProfiles_Opt3] ON {databaseOwner}{objectQualifier}activeforums_UserProfiles
+GO
+CREATE UNIQUE NONCLUSTERED INDEX [IX_{objectQualifier}activeforums_UserProfiles_Opt3] ON {databaseOwner}{objectQualifier}activeforums_UserProfiles
+ (
+ [PortalId] ASC,
+ [UserId] ASC
+ )
+INCLUDE ( [ProfileId],
+[TopicCount],
+[ReplyCount],
+[ViewCount],
+[AnswerCount],
+[RewardPoints],
+[UserCaption],
+[DateCreated],
+[DateUpdated],
+[DateLastActivity],
+[Signature],
+[SignatureDisabled],
+[TrustLevel],
+[AdminWatch],
+[AttachDisabled],
+[AvatarDisabled],
+[PrefDefaultSort],
+[PrefDefaultShowReplies],
+[PrefJumpLastPost],
+[PrefTopicSubscribe],
+[PrefSubscriptionType],
+[PrefEmailFormat],
+[PrefBlockAvatars],
+[PrefBlockSignatures],
+[PrefPageSize],
+[DateLastPost]) WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF)
+GO
+
+/* drop/create index IX_activeforums_UserBadges_Alt1 */
+IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{databaseOwner}{objectQualifier}activeforums_UserBadges') AND name = N'IX_{objectQualifier}activeforums_UserBadges_Alt1')
+DROP INDEX [IX_{objectQualifier}activeforums_UserBadges_Alt1] ON {databaseOwner}{objectQualifier}activeforums_UserBadges
+GO
+CREATE NONCLUSTERED INDEX IX_{objectQualifier}activeforums_UserBadges_Alt1
+ ON {databaseOwner}[{objectQualifier}activeforums_UserBadges]
+ (
+ PortalId ASC,
+ UserId ASC,
+ BadgeId ASC,
+ DateAssigned ASC
+ )
+
+GO
+
+/* add constraint FK_activeforums_UserBadges_UserProfiles */
+ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_UserBadges] ADD CONSTRAINT
+ [FK_{objectQualifier}activeforums_UserBadges_UserProfiles] FOREIGN KEY (PortalId, UserId)
+ REFERENCES {databaseOwner}[{objectQualifier}activeforums_UserProfiles] (PortalId, UserId)
+ ON DELETE CASCADE
+GO
+
+/* activeforums_UserBadges - cascade delete from activeforums_Badges */
+/* drop constraint */
+IF EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'{databaseOwner}[FK_{objectQualifier}activeforums_UserBadges_Badges]') AND parent_object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_UserBadges]'))
+ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_UserBadges] DROP CONSTRAINT
+[FK_{objectQualifier}activeforums_UserBadges_Badges]
+GO
+
+/* drop/create index IX_activeforums_UserBadges_Alt2 */
+IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{databaseOwner}{objectQualifier}activeforums_UserBadges') AND name = N'IX_{objectQualifier}activeforums_UserBadges_Alt2')
+DROP INDEX [IX_{objectQualifier}activeforums_UserBadges_Alt2] ON {databaseOwner}{objectQualifier}activeforums_UserBadges
+GO
+CREATE NONCLUSTERED INDEX IX_{objectQualifier}activeforums_UserBadges_Alt2
+ ON {databaseOwner}[{objectQualifier}activeforums_UserBadges]
+ (
+ BadgeId ASC,
+ PortalId ASC,
+ UserId ASC,
+ DateAssigned ASC
+ )
+GO
+
+/* add constraint FK_activeforums_UserBadges_Badges */
+ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_UserBadges] ADD CONSTRAINT
+ [FK_{objectQualifier}activeforums_UserBadges_Badges] FOREIGN KEY (BadgeId)
+ REFERENCES {databaseOwner}[{objectQualifier}activeforums_Badges] (BadgeId)
+ ON DELETE CASCADE
+GO
+
+
+/* update activeforums_URL_Search for new view types for badges */
+
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_URL_Search]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_URL_Search]
+GO
+
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_URL_Search]
+@PortalId int,
+@Url nvarchar(max)
+AS
+DECLARE @views TABLE(id int,viewname nvarchar(50))
+INSERT INTO @views (id,viewname) VALUES (1,'unanswered');
+INSERT INTO @views (id,viewname) VALUES (2,'notread');
+INSERT INTO @views (id,viewname) VALUES (3,'mytopics');
+INSERT INTO @views (id,viewname) VALUES (4,'activetopics');
+INSERT INTO @views (id,viewname) VALUES (5,'afprofile');
+INSERT INTO @views (id,viewname) VALUES (6,'mostliked');
+INSERT INTO @views (id,viewname) VALUES (7,'mostreplies');
+INSERT INTO @views (id,viewname) VALUES (8,'afsubscriptions');
+INSERT INTO @views (id,viewname) VALUES (9,'announcements');
+INSERT INTO @views (id,viewname) VALUES (10,'unresolved');
+INSERT INTO @views (id,viewname) VALUES (11,'badgeusers');
+INSERT INTO @views (id,viewname) VALUES (12,'userbadges');
+INSERT INTO @views (id,viewname) VALUES (13,'recyclebin');
+SELECT TabId, ModuleID, ForumGroupId, ForumId, TopicId, Url,Archived,OtherId,UrlType FROM
+ (
+
+ /* this section handles topics on regular forum pages */
+
+ SELECT tb.TabID,m.ModuleId, g.ForumGroupId,f.ForumId,t.TopicId,
+ (CASE WHEN s.SettingValue <> '' THEN s.SettingValue + '/' Else '' END) + g.PrefixURL + '/' + f.PrefixURL + '/' + t.URL + '/' as URL, 0 as Archived,-1 as OtherId,0 as URLType
+ FROM {databaseOwner}[{objectQualifier}activeforums_Topics] as t
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_ForumTopics] as ft ON ft.TopicId = t.TopicId
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] as f ON f.ForumId = ft.ForumId
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Groups] as g ON g.ForumGroupId = f.ForumGroupId
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] as s ON s.ModuleId = f.ModuleId AND s.SettingName = 'URLBASE'
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = f.ModuleId
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] as tb ON tb.TabId = m.TabID
+ WHERE tb.PortalID = @PortalId AND ISNULL(g.PrefixURL,'') <> '' AND ISNULL(f.PrefixURL,'') <> '' AND ISNULL(t.URL,'') <> ''
+
+ UNION
+
+ /* this section handles topics on forum viewer pages */
+
+ SELECT tb.TabID,tb.ModuleId, g.ForumGroupId,f.ForumId,t.TopicId,
+ (CASE WHEN TB.TabPath <> '' THEN TB.TabPath + '/' Else '' END) + g.PrefixURL + '/' + f.PrefixURL + '/' + t.URL + '/' as URL, 0 as Archived,-1 as OtherId,0 as URLType
+ FROM {databaseOwner}[{objectQualifier}activeforums_Topics] as t
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_ForumTopics] as ft ON ft.TopicId = t.TopicId
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] as f ON f.ForumId = ft.ForumId
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Groups] as g ON g.ForumGroupId = f.ForumGroupId
+ INNER JOIN (
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0 ) TB
+ ON TB.ModuleId = f.ModuleId AND TB.ForumGroupId = f.ForumGroupId AND TB.ForumId = f.ForumId
+ WHERE tb.PortalID = @PortalId AND ISNULL(g.PrefixURL,'') <> '' AND ISNULL(f.PrefixURL,'') <> '' AND ISNULL(t.URL,'') <> ''
+
+ UNION
+
+ /* this section handles forums on regular forums pages */
+
+ SELECT tb.TabID,m.ModuleId,g.ForumGroupId,f.ForumId,-1,
+ (CASE WHEN s.SettingValue <> '' THEN s.SettingValue + '/' Else '' END) + g.PrefixURL + '/' + f.PrefixURL + '/' as URL, 0 as Archived,-1,0
+ FROM {databaseOwner}[{objectQualifier}activeforums_Forums] as f
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Groups] as g ON g.ForumGroupId = f.ForumGroupId
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] as s ON s.ModuleId = f.ModuleId AND s.SettingName = 'URLBASE'
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = f.ModuleId
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] as tb ON tb.TabId = m.TabID
+ WHERE tb.PortalID = @PortalId AND ISNULL(g.PrefixURL,'') <> '' AND ISNULL(f.PrefixURL,'') <> ''
+
+ UNION
+
+ /* this section handles forums on forum viewer pages */
+
+ SELECT tb.TabID,tb.ModuleId, g.ForumGroupId,f.ForumId,-1,
+ (CASE WHEN TB.TabPath <> '' THEN TB.TabPath + '/' Else '' END) + g.PrefixURL + '/' + f.PrefixURL + '/' as URL, 0 as Archived,-1 as OtherId,0 as URLType
+ FROM {databaseOwner}[{objectQualifier}activeforums_Forums] as f
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Groups] as g ON g.ForumGroupId = f.ForumGroupId
+ INNER JOIN (
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0) TB
+ ON TB.ModuleId = f.ModuleId AND TB.ForumGroupId = f.ForumGroupId AND TB.ForumId = f.ForumId
+ WHERE tb.PortalID = @PortalId AND ISNULL(g.PrefixURL,'') <> '' AND ISNULL(f.PrefixURL,'') <> ''
+
+ UNION
+
+ /* this section handles forum groups on regular forums pages */
+
+ SELECT tb.TabID,m.ModuleId,g.ForumGroupId,-1,-1,
+ (CASE WHEN s.SettingValue <> '' THEN s.SettingValue + '/' Else '' END) + g.PrefixURL + '/' as URL, 0 as Archived,-1,0
+ FROM {databaseOwner}[{objectQualifier}activeforums_Groups] as g
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] as s ON s.ModuleId = g.ModuleId AND s.SettingName = 'URLBASE'
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = g.ModuleId
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] as tb ON tb.TabId = m.TabID
+ WHERE tb.PortalID = @PortalId AND ISNULL(g.PrefixURL,'') <> ''
+
+ UNION
+
+ /* this section handles forum groups on forum viewer pages */
+
+ SELECT tb.TabID,tb.ModuleId, g.ForumGroupId,-1,-1,
+ (CASE WHEN TB.TabPath <> '' THEN TB.TabPath + '/' Else '' END) + g.PrefixURL + '/' as URL, 0 as Archived,-1 as OtherId,0 as URLType
+ FROM {databaseOwner}[{objectQualifier}activeforums_Groups] as g
+ INNER JOIN (
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0) TB
+ ON TB.ModuleId = g.ModuleId AND TB.ForumGroupId = g.ForumGroupId
+ WHERE tb.PortalID = @PortalId AND ISNULL(g.PrefixURL,'') <> ''
+
+ UNION
+ SELECT tb.TabID,m.ModuleId,-1,-1,-1,
+ (CASE WHEN s.SettingValue <> '' THEN s.SettingValue + '/' Else '' END) as URL, 0 as Archived,-1,0
+ FROM {databaseOwner}[{objectQualifier}ModuleSettings] as s
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = s.ModuleId AND s.SettingName = 'URLBASE'
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] as tb ON tb.TabId = m.TabID
+ WHERE tb.PortalID = @PortalId AND s.SettingValue <> ''
+ UNION
+
+ SELECT tb.TabID,tb.ModuleId, -1,-1,-1,
+ (CASE WHEN TB.TabPath <> '' THEN TB.TabPath + '/' Else '' END) as URL, 0 as Archived,-1 as OtherId,0 as URLType
+ FROM (SELECT t.PortalID, t.TabID, CAST(SettingValue as int) AS ModuleId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms ON ms.ModuleID = m.ModuleID AND ms.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(SettingValue as int) AS ModuleId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms ON ms.ModuleID = m.ModuleID AND ms.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(SettingValue as int) AS ModuleId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms ON ms.ModuleID = m.ModuleID AND ms.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0) TB
+ WHERE tb.PortalID = @PortalId
+
+ UNION
+
+ SELECT m.TabID,m.ModuleID,u.ForumGroupId,u.ForumId,u.TopicId,(CASE WHEN s.SettingValue <> '' THEN s.SettingValue + '/' Else '' END) + u.URL as URL, 1 as Archived,-1,0
+ FROM {databaseOwner}[{objectQualifier}activeforums_URL] as u
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Groups] as g ON u.ForumGroupId = g.ForumGroupId
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = g.ModuleId
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] as s ON s.ModuleId = g.ModuleId AND s.SettingName = 'URLBASE'
+ WHERE u.PortalId = @PortalId
+
+ UNION
+ SELECT tb.TabID, tb.ModuleId, u.ForumGroupId,u.ForumId,u.TopicId, (CASE WHEN TB.TabPath <> '' THEN TB.TabPath + '/' Else '' END) + u.URL AS URL, 1 as Archived,-1,0
+ FROM {databaseOwner}[{objectQualifier}activeforums_URL] as u
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Groups] as g ON u.ForumGroupId = g.ForumGroupId
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = g.ModuleId
+ INNER JOIN (
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0 ) TB
+ ON TB.ModuleId = g.ModuleId AND TB.ForumGroupId = u.ForumGroupId AND TB.ForumId = u.ForumId
+ WHERE u.PortalId = @PortalId
+
+ UNION
+
+ /* this section handles other url types on regular module page */
+
+ SELECT TabId, ModuleId,-1 as ForumGroupId,-1 as ForumId,-1 as TopicId,
+ (CASE WHEN UrlBase <> '' THEN UrlBase + '/' Else '' END) + UrlOther + '/' + v.viewname + '/' as URL,0 as Archived,v.id,1 from (
+ SELECT m.TabId, ss.ModuleId, SettingValue,SettingName FROM {databaseOwner}[{objectQualifier}ModuleSettings] as ss
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = ss.ModuleId
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] as tb ON tb.TabId = m.TabID
+ WHERE (SettingName = 'URLBASE' OR SettingName = 'URLOTHER') AND tb.PortalID = @PortalId
+ ) as s
+ PIVOT (MAX(SettingValue) for SettingName in (urlbase,UrlOther)) as pu,@views as v
+
+ UNION
+
+ /* this section handles other url types on viewer module page */
+
+ SELECT TabId, ModuleId,-1 as ForumGroupId,-1 as ForumId,-1 as TopicId,
+ (CASE WHEN UrlBase <> '' THEN UrlBase + '/' Else '' END) + UrlOther + '/' + v.viewname + '/' as URL,0 as Archived,v.id,1 from (
+ SELECT m.TabId, ss.ModuleId, SettingValue,SettingName FROM {databaseOwner}[{objectQualifier}ModuleSettings] as ss
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = ss.ModuleId
+ INNER JOIN (
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0 ) TB
+ ON TB.ModuleId = m.ModuleId
+ WHERE (SettingName = 'URLBASE' OR SettingName = 'URLOTHER') AND tb.PortalID = @PortalId
+ ) as s
+ PIVOT (MAX(SettingValue) for SettingName in (urlbase,UrlOther)) as pu,@views as v
+
+ UNION
+
+ /* this section handles categories on regular module page */
+
+ SELECT TabId, pu.ModuleId,-1 as ForumGroupId,-1 as ForumId,-1 as TopicId,
+ (CASE WHEN UrlBase <> '' THEN UrlBase + '/' Else '' END) + URLCATS + '/' + REPLACE(LOWER(t.TagName),' ','-') + '/' as URL,0 as Archived,t.TagId,2 from (
+ SELECT m.TabId, ss.ModuleId, SettingValue,SettingName FROM {databaseOwner}[{objectQualifier}ModuleSettings] as ss
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = ss.ModuleId
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] as tb ON tb.TabId = m.TabID
+ WHERE (SettingName = 'URLBASE' OR SettingName = 'URLCATS') AND tb.PortalID = @PortalId
+ ) as s
+ PIVOT (MAX(SettingValue) for SettingName in (urlbase,URLCATS)) as pu
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Tags] as t ON t.ModuleId = pu.ModuleId
+
+ UNION
+
+ /* this section handles categories on viewer module pages */
+
+ SELECT TabId, pu.ModuleId,-1 as ForumGroupId,-1 as ForumId,-1 as TopicId,
+ (CASE WHEN TabPath <> '' THEN TabPath + '/' Else '' END) + URLCATS + '/' + REPLACE(LOWER(t.TagName),' ','-') + '/' as URL,0 as Archived,t.TagId,2 from (
+ SELECT m.TabId, ss.ModuleId, SettingValue,SettingName,tb.TabPath FROM {databaseOwner}[{objectQualifier}ModuleSettings] as ss
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = ss.ModuleId
+ INNER JOIN (
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0 ) TB
+ ON TB.ModuleId = m.ModuleId
+ WHERE (SettingName = 'URLBASE' OR SettingName = 'URLCATS') AND tb.PortalID = @PortalId
+ ) as s
+ PIVOT (MAX(SettingValue) for SettingName in (urlbase,URLCATS)) as pu
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Tags] as t ON t.ModuleId = pu.ModuleId
+
+ UNION
+
+ /* this section handles tags on forums module pages */
+
+ SELECT TabId, pu.ModuleId,-1 as ForumGroupId,-1 as ForumId,-1 as TopicId,
+ (CASE WHEN UrlBase <> '' THEN UrlBase + '/' Else '' END) + URLTAGS + '/' + REPLACE(LOWER(t.TagName),' ','-') + '/' as URL,0 as Archived,t.TagId,3 from (
+ SELECT m.TabId, ss.ModuleId, SettingValue,SettingName FROM {databaseOwner}[{objectQualifier}ModuleSettings] as ss
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = ss.ModuleId
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] as tb ON tb.TabId = m.TabID
+ WHERE (SettingName = 'URLBASE' OR SettingName = 'URLTAGS') AND tb.PortalID = @PortalId
+ ) as s
+ PIVOT (MAX(SettingValue) for SettingName in (urlbase,URLTAGS)) as pu
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Tags] as t ON t.ModuleId = pu.ModuleId
+
+ UNION
+
+ /* this section handles tags on viewer module pages */
+
+ SELECT TabId, pu.ModuleId,-1 as ForumGroupId,-1 as ForumId,-1 as TopicId,
+ (CASE WHEN TabPath <> '' THEN TabPath + '/' Else '' END) + URLTAGS + '/' + REPLACE(LOWER(t.TagName),' ','-') + '/' as URL,0 as Archived,t.TagId,3 from (
+ SELECT m.TabId, ss.ModuleId, SettingValue,SettingName, TB.TabPath FROM {databaseOwner}[{objectQualifier}ModuleSettings] as ss
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = ss.ModuleId
+ INNER JOIN (
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0 ) TB
+ ON TB.ModuleId = m.ModuleId
+ WHERE (SettingName = 'URLBASE' OR SettingName = 'URLTAGS') AND tb.PortalID = @PortalId
+ ) as s
+ PIVOT (MAX(SettingValue) for SettingName in (urlbase,URLTAGS)) as pu
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Tags] as t ON t.ModuleId = pu.ModuleId
+
+ UNION
+
+ /* this section handles likes on forums module pages */
+
+ SELECT DISTINCT tb.TabID,m.ModuleId, g.ForumGroupId,f.ForumId ,COALESCE(t.TopicId, r.TopicId) AS TopicId,
+ (CASE WHEN s1.SettingValue <> '' THEN s1.SettingValue + '/' Else '' END) + g.PrefixURL + '/' + f.PrefixURL + '/' + ISNULL(ISNULL(rt.URL,t.URL),'') + '/' + COALESCE('likes',s2.SettingValue) + '/' + LTRIM(STR(c.ContentId)) + '/' as URL, 0 as Archived,c.ContentId AS OtherId,4 as URLType
+ FROM {databaseOwner}[{objectQualifier}activeforums_Content] as c
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Topics] as t ON t.ContentId = c.ContentId
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Replies] as r ON r.ContentId = c.ContentId
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Topics] as rt ON rt.TopicId = r.TopicId
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_ForumTopics] as ft ON ft.TopicId = COALESCE(t.TopicId, r.TopicId)
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] as f ON f.ForumId = ft.ForumId
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Groups] as g ON g.ForumGroupId = f.ForumGroupId
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] as s1 ON s1.ModuleId = f.ModuleId AND s1.SettingName = 'URLBASE'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] as s2 ON s2.ModuleId = f.ModuleId AND s2.SettingName = 'URLLIKES'
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = f.ModuleId
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] as tb ON tb.TabId = m.TabID
+ WHERE c.IsDeleted = 0 AND tb.PortalID = @PortalId AND ISNULL(ISNULL(rt.URL,t.URL),'') <> '' AND ISNULL(f.PrefixURL,'') <> ''
+
+ UNION
+
+ /* this section handles likes on viewer module pages */
+
+ SELECT DISTINCT tb.TabID,f.ModuleId, f.ForumGroupId,f.ForumId ,COALESCE(t.TopicId, r.TopicId) AS TopicId,
+ (CASE WHEN TB.TabPath <> '' THEN TB.TabPath + '/' Else '' END) + g.PrefixURL + '/' + f.PrefixURL + '/' + ISNULL(ISNULL(rt.URL,t.URL),'') + '/' + COALESCE('likes',s2.SettingValue) + '/' + LTRIM(STR(c.ContentId)) + '/' as URL, 0 as Archived,c.ContentId AS OtherId,4 as URLType
+ FROM {databaseOwner}[{objectQualifier}activeforums_Content] as c
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Topics] as t ON t.ContentId = c.ContentId
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Replies] as r ON r.ContentId = c.ContentId
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Topics] as rt ON rt.TopicId = r.TopicId
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_ForumTopics] as ft ON ft.TopicId = COALESCE(t.TopicId, r.TopicId)
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] as f ON f.ForumId = ft.ForumId
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Groups] as g ON g.ForumGroupId = f.ForumGroupId
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] as s1 ON s1.ModuleId = f.ModuleId AND s1.SettingName = 'URLBASE'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] as s2 ON s2.ModuleId = f.ModuleId AND s2.SettingName = 'URLLIKES'
+ INNER JOIN {databaseOwner}[{objectQualifier}TabModules] as m ON m.ModuleID = f.ModuleId
+ INNER JOIN (
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, COALESCE(f.ForumGroupId, -1) AS ForumGroupId, CAST(ms3.SettingValue as int) AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID' AND ms2.SettingValue = 'TOPICS'
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}activeforums_Forums] f ON f.ForumId = CAST(ms3.SettingValue as int)
+ WHERE m.DefinitionName = 'Active Forums Viewer' AND t.IsDeleted = 0 and m.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(t.TabPath,3,LEN(t.TabPath)-2),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(REPLACE(t.TabName,' ','-'),'--','-') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0
+
+ UNION
+ SELECT t.PortalID, t.TabID, CAST(ms1.SettingValue as int) AS ModuleId, CAST(ms3.SettingValue as int) ForumGroupId, -1 AS ForumId,
+ REPLACE(SUBSTRING(tu.Url,2,LEN(tu.Url)-1),'//','/') AS TabPath
+ FROM {databaseOwner}[{objectQualifier}vw_Modules] m
+ INNER JOIN {databaseOwner}[{objectQualifier}Tabs] t ON t.TabID = m.TabID
+ LEFT OUTER JOIN {databaseOwner}[{objectQualifier}TabUrls] tu ON tu.TabId = t.TabID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms1 ON ms1.ModuleID = m.ModuleID AND ms1.SettingName = 'AFForumModuleID'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms2 ON ms2.ModuleID = m.ModuleID AND ms2.SettingName = 'AFViewType' AND ms2.SettingValue = 'AFGROUP'
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleSettings] ms3 ON ms3.ModuleID = m.ModuleID AND ms3.SettingName = 'AFForumGroupID'
+ WHERE m.DefinitionName = 'Active Forums Viewer' and m.IsDeleted = 0 AND t.IsDeleted = 0 ) TB
+ ON TB.ModuleId = g.ModuleId AND TB.ForumGroupId = f.ForumGroupId AND TB.ForumId = f.ForumId
+ WHERE c.IsDeleted = 0 AND tb.PortalID = @PortalId AND ISNULL(ISNULL(rt.URL,t.URL),'') <> '' AND ISNULL(f.PrefixURL,'') <> ''
+ ) as urls
+ WHERE LOWER(urls.URL) = @URL
+GO
+
+/* issue 1480 - end - badges */
+
+/* --------------------- */
+
+/* issue 1487 - begin - add BadgeId to activeforums_ProcessQueue */
+
+IF NOT EXISTS(SELECT * FROM SYS.COLUMNS WHERE Name = N'BadgeId' and Object_ID = Object_ID(N'{databaseOwner}[{objectQualifier}activeforums_ProcessQueue]'))
+BEGIN
+ ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_ProcessQueue] ADD
+ [BadgeId] [int] NOT NULL CONSTRAINT [DF_{objectQualifier}activeforums_ProcessQueue_BadgeId] DEFAULT(-1)
+END
+GO
+
+/* issue 1487 - end - add BadgeId to activeforums_ProcessQueue */
+/* --------------------- */
+
+
+
+/* issue 1483 - begin - add badge UI to control panel */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Badges_List]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Badges_List]
+GO
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Badges_List]
+ @ModuleId int
+AS
+BEGIN
+ SELECT Count(*) FROM {databaseOwner}{objectQualifier}activeforums_Badges WHERE ModuleId = @ModuleId
+END
+BEGIN
+ SELECT *, '' AS ImageUrl, '' AS BadgeMetricEnumName FROM {databaseOwner}{objectQualifier}activeforums_Badges WHERE ModuleId = @ModuleId ORDER BY SortOrder
+END
+GO
+/* issue 1483 - end - add badge UI to control panel */
+/* --------------------- */
+
+
+/* issue 1484 start -- create scheduler entry for badge award queue */
+
+IF NOT EXISTS (Select * From {databaseOwner}{objectQualifier}Schedule WHERE TypeFullName = 'DotNetNuke.Modules.ActiveForums.Services.Badges.BadgeAwardQueue, DotNetNuke.Modules.ActiveForums')
+ INSERT INTO {databaseOwner}{objectQualifier}Schedule (TypeFullName,TimeLapse,TimeLapseMeasurement,RetryTimeLapse,RetryTimeLapseMeasurement,RetainHistoryNum,AttachToEvent,CatchUpEnabled,Enabled,ObjectDependencies,Servers,FriendlyName)
+ VALUES('DotNetNuke.Modules.ActiveForums.Services.Badges.BadgeAwardQueue, DotNetNuke.Modules.ActiveForums',1,'d',1,'d',100,'',1,1,'','','DNN Community Forums Badge Award Queue')
+
+/* issue 1484 end -- create scheduler entry for badge award queue */
+
+/* issue 1535 - start -- add DateCreated to activeforums_Likes and set default for existing records to created date from content; set default for future records to GETUTCDATE() */
+
+DECLARE @addDateCreated bit = 0
+SET @addDateCreated = (SELECT COUNT(*) FROM SYS.COLUMNS WHERE Name = N'DateCreated' and Object_ID = Object_ID(N'{databaseOwner}[{objectQualifier}activeforums_Likes]'))
+
+/* issue 1535 - start -- add DateCreated to activeforums_Likes */
+IF @addDateCreated = 0
+BEGIN
+ ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_Likes] ADD DateCreated datetime NULL
+END
+GO
+DECLARE @addDateCreated bit = 0
+SET @addDateCreated = (SELECT COUNT(*) FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF_{objectQualifier}activeforums_Likes_DateCreated]') AND type = 'D')
+IF @addDateCreated = 0
+BEGIN
+ UPDATE l SET DateCreated = c.DateCreated
+ FROM {databaseOwner}[{objectQualifier}activeforums_Likes] l
+ INNER JOIN {databaseOwner}[{objectQualifier}activeforums_Content] c ON c.ContentId = l.PostId
+END
+IF @addDateCreated = 0
+BEGIN
+ ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_Likes] ADD CONSTRAINT [DF_{objectQualifier}activeforums_Likes_DateCreated] DEFAULT (GETUTCDATE()) FOR [DateCreated]
+END
+IF @addDateCreated = 0
+BEGIN
+ ALTER TABLE {databaseOwner}[{objectQualifier}activeforums_Likes]
+ ALTER COLUMN [DateCreated] [datetime] NOT NULL
+END
+GO
+/* issue 1535 - end -- add DateCreated to activeforums_Likes */
+
+/* --------------------- */
+
+/* issue 1547 - begin - remove colon from settings keys */
+
+UPDATE {databaseOwner}[{objectQualifier}activeforums_Forums] SET ForumSettingsKey = REPLACE(ForumSettingsKey, ':', '')
+GO
+
+UPDATE {databaseOwner}[{objectQualifier}activeforums_Groups] SET GroupSettingsKey = REPLACE(GroupSettingsKey, ':', '')
+GO
+
+UPDATE ms
+SET SettingValue = REPLACE(SettingValue, ':', '')
+FROM {databaseOwner}[{objectQualifier}ModuleSettings] ms
+INNER JOIN {databaseOwner}[{objectQualifier}Modules] m
+ON m.ModuleID = ms.ModuleID
+INNER JOIN {databaseOwner}[{objectQualifier}ModuleDefinitions] md
+ON md.ModuleDefID = m.ModuleDefID
+WHERE md.DefinitionName = 'DNN Community Forums'
+AND ms.SettingName = 'DEFAULTSETTINGSKEY'
+GO
+
+UPDATE {databaseOwner}[{objectQualifier}activeforums_Settings] SET SettingsKey = REPLACE(SettingsKey, ':', '')
+GO
+
+/* remove any orphaned settings */
+
+DELETE s
+FROM {databaseOwner}[{objectQualifier}activeforums_Settings] s
+LEFT OUTER JOIN
+(
+SELECT
+DISTINCT SettingsKey FROM
+(
+SELECT ForumSettingsKey AS SettingsKey FROM {databaseOwner}[{objectQualifier}activeforums_Forums]
+UNION
+SELECT GroupSettingsKey AS Settings FROM {databaseOwner}[{objectQualifier}activeforums_Groups]
+UNION
+SELECT SettingValue AS SettingsKey
+FROM {databaseOwner}[{objectQualifier}ModuleSettings] ms
+INNER JOIN {databaseOwner}[{objectQualifier}Modules] m
+ON m.ModuleID = ms.ModuleID
+INNER JOIN {databaseOwner}[{objectQualifier}ModuleDefinitions] md
+ON md.ModuleDefID = m.ModuleDefID
+WHERE md.DefinitionName = 'DNN Community Forums'
+AND ms.SettingName = 'DEFAULTSETTINGSKEY'
+) x
+) used
+ON s.SettingsKey = used.SettingsKey
+WHERE used.SettingsKey IS NULL
+GO
+
+/* activeforums_Groups_Save --remove colon from settings keys */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Groups_Save]') AND type in (N'P', N'PC'))
+DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Groups_Save]
+GO
+CREATE PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Groups_Save]
+@PortalId int,
+@ModuleId int,
+@ForumGroupId int,
+@GroupName nvarchar(150),
+@SortOrder int,
+@Active bit,
+@Hidden bit,
+@PermissionsId int,
+@PrefixURL nvarchar(50),
+@GroupSettingsKey varchar(255) = ''
+AS
+IF @PrefixURL <> '' AND @ForumGroupId >0
+ BEGIN
+ DECLARE @currURL nvarchar(1000)
+ SET @currURL = {databaseOwner}{objectQualifier}fn_activeforums_GetURL(@ModuleId,@ForumGroupId, -1,-1,-1,-1)
+ DECLARE @newURL nvarchar(1000)
+ SET @currURL = {databaseOwner}{objectQualifier}fn_activeforums_GetURL(@ModuleId,-1, -1,-1,-1,-1) + @PrefixURL + '/'
+ IF LTRIM(RTRIM(LOWER(@newURL))) <> LTRIM(RTRIM(LOWER(@currURL)))
+ BEGIN
+ exec {databaseOwner}{objectQualifier}activeforums_URL_Archive @PortalId,@ForumGroupId, -1, -1, @currURL
+ END
+ END
+IF EXISTS(Select ForumGroupId FROM {databaseOwner}{objectQualifier}activeforums_Groups WHERE ForumGroupId = @ForumGroupId AND ModuleId = @ModuleId)
+ UPDATE {databaseOwner}{objectQualifier}activeforums_Groups
+ SET GroupName=@GroupName, Active=@Active,Hidden=@Hidden, PermissionsId = @PermissionsId,PrefixURL = @PrefixURL
+ WHERE ForumGroupId = @ForumGroupId and ModuleId = @ModuleId
+ELSE
+ BEGIN
+ BEGIN
+ SELECT @SortOrder = Max(SortOrder) + 1 From {databaseOwner}{objectQualifier}activeforums_Groups WHERE ModuleID=@ModuleID
+ If @SortOrder IS NULL
+ SET @SortOrder = 1
+ END
+ INSERT INTO {databaseOwner}{objectQualifier}activeforums_Groups
+ (ModuleId, GroupName, SortOrder,GroupSettingsKey,Active,Hidden, PermissionsId,PrefixURL)
+ VALUES
+ (@ModuleId, @GroupName, @SortOrder,'',@Active,@Hidden, @PermissionsId,@PrefixURL)
+ SET @ForumGroupId = SCOPE_IDENTITY()
+ END
+BEGIN
+ IF @GroupSettingsKey = ''
+ UPDATE {databaseOwner}{objectQualifier}activeforums_Groups SET GroupSettingsKey = 'G' + CAST(@ForumGroupId as varchar(50)) WHERE ForumGroupId = @ForumGroupId
+ ELSE
+ UPDATE {databaseOwner}{objectQualifier}activeforums_Groups SET GroupSettingsKey = @GroupSettingsKey WHERE ForumGroupId = @ForumGroupId
+ END
+SELECT @ForumGroupId
+GO
+
+/* issue 1547 - end - remove colon from settings keys */
+
+/* --------------------- */
diff --git a/Dnn.CommunityForums/sql/Uninstall.SqlDataProvider b/Dnn.CommunityForums/sql/Uninstall.SqlDataProvider
index eccf8e190..d894b9b6e 100644
--- a/Dnn.CommunityForums/sql/Uninstall.SqlDataProvider
+++ b/Dnn.CommunityForums/sql/Uninstall.SqlDataProvider
@@ -492,11 +492,11 @@ GO
IF EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}vw_activeforums_TopicRatings]'))
DROP VIEW {databaseOwner}[{objectQualifier}vw_activeforums_TopicRatings]
GO
-IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{databaseOwner}{objectQualifier}activeforums_Settings') AND name = N'idx_{objectQualifier}activeforums_Settings_Opt1')
-DROP INDEX [idx_{objectQualifier}activeforums_Settings_Opt1] ON {databaseOwner}{objectQualifier}activeforums_Settings
+IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{databaseOwner}{objectQualifier}activeforums_Settings') AND name = N'IX_{objectQualifier}activeforums_Settings_Opt1')
+DROP INDEX [IX_{objectQualifier}activeforums_Settings_Opt1] ON {databaseOwner}{objectQualifier}activeforums_Settings
GO
-IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{databaseOwner}{objectQualifier}activeforums_Settings') AND name = N'idx_{objectQualifier}activeforums_Settings_Opt2')
-DROP INDEX [idx_{objectQualifier}activeforums_Settings_Opt2] ON {databaseOwner}{objectQualifier}activeforums_Settings
+IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{databaseOwner}{objectQualifier}activeforums_Settings') AND name = N'IX_{objectQualifier}activeforums_Settings_Opt2')
+DROP INDEX [IX_{objectQualifier}activeforums_Settings_Opt2] ON {databaseOwner}{objectQualifier}activeforums_Settings
GO
IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'{databaseOwner}{objectQualifier}activeforums_Topics') AND name = N'idx_{objectQualifier}activeforums_Topics_Opt1')
DROP INDEX [idx_{objectQualifier}activeforums_Topics_Opt1] ON {databaseOwner}{objectQualifier}activeforums_Topics
@@ -772,16 +772,21 @@ GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Topics]') AND type in (N'U'))
DROP TABLE {databaseOwner}[{objectQualifier}activeforums_Topics]
GO
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_UserBadges]') AND type in (N'U'))
+DROP TABLE {databaseOwner}[{objectQualifier}activeforums_UserBadges]
+GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_UserProfiles]') AND type in (N'U'))
DROP TABLE {databaseOwner}[{objectQualifier}activeforums_UserProfiles]
GO
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Badges]') AND type in (N'U'))
+DROP TABLE {databaseOwner}[{objectQualifier}activeforums_Badges]
+GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Queue]') AND type in (N'U'))
DROP TABLE {databaseOwner}[{objectQualifier}activeforums_Queue]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Content]') AND type in (N'U'))
DROP TABLE {databaseOwner}[{objectQualifier}activeforums_Content]
GO
-
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Security]') AND type in (N'U'))
DROP TABLE {databaseOwner}[{objectQualifier}activeforums_Security]
GO
@@ -1014,3 +1019,13 @@ IF EXISTS (Select * From {databaseOwner}{objectQualifier}Schedule WHERE TypeFull
GO
/* end 09.01.00 */
+
+/* begin 09.02.00 */
+IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'{databaseOwner}[{objectQualifier}activeforums_Badges_List]') AND type in (N'P', N'PC'))
+ DROP PROCEDURE {databaseOwner}[{objectQualifier}activeforums_Badges_List]
+GO
+IF EXISTS (Select * From {databaseOwner}{objectQualifier}Schedule WHERE TypeFullName = 'DotNetNuke.Modules.ActiveForums.Services.Badges.BadgeAwardQueue, DotNetNuke.Modules.ActiveForums')
+ DELETE FROM {databaseOwner}{objectQualifier}Schedule WHERE TypeFullName = 'DotNetNuke.Modules.ActiveForums.Services.Badges.BadgeAwardQueue, DotNetNuke.Modules.ActiveForums'
+GO
+
+/* end 09.02.00 */
\ No newline at end of file
diff --git a/Dnn.CommunityForums/themes/community-bootstrap/templates/ProfileInfo.ascx b/Dnn.CommunityForums/themes/community-bootstrap/templates/ProfileInfo.ascx
index 3c3bebe08..5f4a96ebf 100644
--- a/Dnn.CommunityForums/themes/community-bootstrap/templates/ProfileInfo.ascx
+++ b/Dnn.CommunityForums/themes/community-bootstrap/templates/ProfileInfo.ascx
@@ -28,5 +28,8 @@
[FORUMAUTHOR:RANKDISPLAY]
+
+ [FORUMAUTHOR:BADGES:10]
+
\ No newline at end of file
diff --git a/Dnn.CommunityForums/themes/community-default/templates/ProfileInfo.ascx b/Dnn.CommunityForums/themes/community-default/templates/ProfileInfo.ascx
index 388327743..a97043adb 100644
--- a/Dnn.CommunityForums/themes/community-default/templates/ProfileInfo.ascx
+++ b/Dnn.CommunityForums/themes/community-default/templates/ProfileInfo.ascx
@@ -28,5 +28,8 @@
[FORUMAUTHOR:RANKDISPLAY]
+
+ [FORUMAUTHOR:BADGES:10]
+
\ No newline at end of file
diff --git a/Dnn.CommunityForums/viewer.aspx.cs b/Dnn.CommunityForums/viewer.aspx.cs
index fbac8808c..d56fcf1c6 100644
--- a/Dnn.CommunityForums/viewer.aspx.cs
+++ b/Dnn.CommunityForums/viewer.aspx.cs
@@ -24,6 +24,7 @@ namespace DotNetNuke.Modules.ActiveForums
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
+ using System.Net.Http.Headers;
using DotNetNuke.Modules.ActiveForums.Extensions;
using DotNetNuke.Services.FileSystem;
@@ -91,20 +92,17 @@ protected override void OnLoad(EventArgs e)
// Get the filename with the unique identifier prefix removed.
var filename = Regex.Replace(attachment.FileName.TextOrEmpty(), @"__\d+__\d+__", string.Empty);
+ // Handle legacy inline attachments a bit differently
+ string contentDispositionType = (attachmentId > 0) ? "attachment" : "inline";
+ var contentDispositionValue = new ContentDispositionHeaderValue(contentDispositionType);
+ contentDispositionValue.FileName = filename;
+ string contentDisposition = contentDispositionValue.ToString();
+
// Some legacy attachments may still be stored in the DB.
if (attachment.FileData != null)
{
this.Response.ContentType = attachment.ContentType;
-
- if (attachmentId > 0)
- {
- this.Response.AddHeader("Content-Disposition", "attachment; filename=" + this.Server.HtmlEncode(filename));
- }
- else // Handle legacy inline attachments a bit differently
- {
- this.Response.AddHeader("Content-Disposition", "filename=" + this.Server.HtmlEncode(filename));
- }
-
+ this.Response.AddHeader("Content-Disposition", contentDisposition);
this.Response.BinaryWrite(attachment.FileData);
this.Response.End();
return;
@@ -154,15 +152,7 @@ protected override void OnLoad(EventArgs e)
this.Response.Clear();
this.Response.ContentType = attachment.ContentType;
- if (attachmentId > 0)
- {
- this.Response.AddHeader("Content-Disposition", "attachment; filename=" + this.Server.HtmlEncode(filename));
- }
- else // Handle legacy inline attachments a bit differently
- {
- this.Response.AddHeader("Content-Disposition", "filename=" + this.Server.HtmlEncode(filename));
- }
-
+ this.Response.AddHeader("Content-Disposition", contentDisposition);
this.Response.AddHeader("Content-Length", length.ToString());
this.Response.WriteFile(filePath);
this.Response.Flush();
diff --git a/Dnn.CommunityForumsTests/TestBase.cs b/Dnn.CommunityForumsTests/TestBase.cs
index e29eae258..27b16a411 100644
--- a/Dnn.CommunityForumsTests/TestBase.cs
+++ b/Dnn.CommunityForumsTests/TestBase.cs
@@ -56,7 +56,7 @@ public class TestBase
internal Mock mockModule;
- internal Mock MainSettings;
+ internal Mock MainSettings;
[SetUp]
@@ -81,7 +81,7 @@ public void SetUp()
MockComponentProvider.CreateNew();
MockComponentProvider.CreateEventLogController();
- this.MainSettings = new Mock();
+ this.MainSettings = new Mock();
this.SetupMainSettings();
this.mockHostController = new Mock();
diff --git a/Dnn.CommunityForumsTests/WebApiTests/WebApiForumGroupTests1.http b/Dnn.CommunityForumsTests/WebApiTests/WebApiForumGroupTests1.http
new file mode 100644
index 000000000..132ec6dca
--- /dev/null
+++ b/Dnn.CommunityForumsTests/WebApiTests/WebApiForumGroupTests1.http
@@ -0,0 +1,39 @@
+## These tests assume you have a DNN instance with DNN Community Forums installed and configured
+
+## change values in http-client.env.json to match your environment / browser session
+
+### first test is to verify a simple endpoint is reachable; we have a "Hello World" endpoint on each controller for this purpose"
+### the HelloWorld endpoint does not require authentication but does require TabId and ModuleId headers for 'supported modules' check
+GET {{hostname}}/API/ActiveForums/ForumGorup/HelloWorld
+TabId: {{TabId}}
+ModuleId: {{Moduleid}}
+
+### test to get a forum
+GET {{hostname}}/API/ActiveForums/ForumGorup/Get?ForumId=1
+tabid: {{TabId}}
+moduleid: {{Moduleid}}
+requestverificationtoken: {{requestverificationtoken}}
+cookie: .DOTNETNUKE={{.DOTNETNUKE}};__RequestVerificationToken={{__RequestVerificationToken}}
+
+### test to get a forum list
+GET {{hostname}}/API/ActiveForums/ForumGorup/List
+tabid: {{TabId}}
+moduleid: {{Moduleid}}
+requestverificationtoken: {{requestverificationtoken}}
+cookie: .DOTNETNUKE={{.DOTNETNUKE}};__RequestVerificationToken={{__RequestVerificationToken}}
+
+### test to subscribe to a forum
+POST {{hostname}}/API/ActiveForums/ForumGorup/Subscribe
+tabid: {{TabId}}
+moduleid: {{Moduleid}}
+requestverificationtoken: {{requestverificationtoken}}
+cookie: .DOTNETNUKE={{.DOTNETNUKE}};__RequestVerificationToken={{__RequestVerificationToken}}
+content-type: application/json
+content: {"forumid":"1"}
+
+### test to get subscriber count to a forum
+GET {{hostname}}/API/ActiveForums/ForumGorup/SubscriberCount?ForumId=1
+tabid: {{TabId}}
+moduleid: {{Moduleid}}
+requestverificationtoken: {{requestverificationtoken}}
+cookie: .DOTNETNUKE={{.DOTNETNUKE}};__RequestVerificationToken={{__RequestVerificationToken}}
diff --git a/Dnn.CommunityForumsTests/WebApiTests/WebApiForumTests1.http b/Dnn.CommunityForumsTests/WebApiTests/WebApiForumTests1.http
new file mode 100644
index 000000000..d84a67b31
--- /dev/null
+++ b/Dnn.CommunityForumsTests/WebApiTests/WebApiForumTests1.http
@@ -0,0 +1,39 @@
+## These tests assume you have a DNN instance with DNN Community Forums installed and configured
+
+## change values in http-client.env.json to match your environment / browser session
+
+### first test is to verify a simple endpoint is reachable; we have a "Hello World" endpoint on each controller for this purpose"
+### the HelloWorld endpoint does not require authentication but does require TabId and ModuleId headers for 'supported modules' check
+GET {{hostname}}/API/ActiveForums/Forum/HelloWorld
+TabId: {{TabId}}
+ModuleId: {{Moduleid}}
+
+### test to get a forum
+GET {{hostname}}/API/ActiveForums/Forum/Get?ForumId=1
+tabid: {{TabId}}
+moduleid: {{Moduleid}}
+requestverificationtoken: {{requestverificationtoken}}
+cookie: .DOTNETNUKE={{.DOTNETNUKE}};__RequestVerificationToken={{__RequestVerificationToken}}
+
+### test to get a forum list
+GET {{hostname}}/API/ActiveForums/Forum/List
+tabid: {{TabId}}
+moduleid: {{Moduleid}}
+requestverificationtoken: {{requestverificationtoken}}
+cookie: .DOTNETNUKE={{.DOTNETNUKE}};__RequestVerificationToken={{__RequestVerificationToken}}
+
+### test to subscribe to a forum
+POST {{hostname}}/API/ActiveForums/Forum/Subscribe
+tabid: {{TabId}}
+moduleid: {{Moduleid}}
+requestverificationtoken: {{requestverificationtoken}}
+cookie: .DOTNETNUKE={{.DOTNETNUKE}};__RequestVerificationToken={{__RequestVerificationToken}}
+content-type: application/json
+content: {"forumid":"1"}
+
+### test to get subscriber count to a forum
+GET {{hostname}}/API/ActiveForums/Forum/SubscriberCount?ForumId=1
+tabid: {{TabId}}
+moduleid: {{Moduleid}}
+requestverificationtoken: {{requestverificationtoken}}
+cookie: .DOTNETNUKE={{.DOTNETNUKE}};__RequestVerificationToken={{__RequestVerificationToken}}
diff --git a/Dnn.CommunityForumsTests/WebApiTests/WebApiUserTests1.http b/Dnn.CommunityForumsTests/WebApiTests/WebApiUserTests1.http
new file mode 100644
index 000000000..34dadfd92
--- /dev/null
+++ b/Dnn.CommunityForumsTests/WebApiTests/WebApiUserTests1.http
@@ -0,0 +1,25 @@
+## These tests assume you have a DNN instance with DNN Community Forums installed and configured
+
+## change values in http-client.env.json to match your environment / browser session
+
+### first test is to verify a simple endpoint is reachable; we have a "Hello World" endpoint on each controller for this purpose"
+### the HelloWorld endpoint does not require authentication but does require TabId and ModuleId headers for 'supported modules' check
+GET {{hostname}}/API/ActiveForums/User/HelloWorld
+TabId: {{TabId}}
+ModuleId: {{Moduleid}}
+
+
+### test to get online users - requires authentication
+
+GET {{hostname}}/API/ActiveForums/User/GetUsersOnline
+TabId: {{TabId}}
+ModuleId: {{Moduleid}}
+requestverificationtoken: {{requestverificationtoken}}
+
+### test to update online users - requires authentication
+
+POST {{hostname}}/API/ActiveForums/User/UpdateUserIsOnline
+tabid: {{TabId}}
+moduleid: {{Moduleid}}
+requestverificationtoken: {{requestverificationtoken}}
+cookie: .DOTNETNUKE={{.DOTNETNUKE}};__RequestVerificationToken={{__RequestVerificationToken}}
diff --git a/Dnn.CommunityForumsTests/WebApiTests/http-client.env.json b/Dnn.CommunityForumsTests/WebApiTests/http-client.env.json
new file mode 100644
index 000000000..13964805f
--- /dev/null
+++ b/Dnn.CommunityForumsTests/WebApiTests/http-client.env.json
@@ -0,0 +1,22 @@
+/*
+
+ These tests assume you have a DNN instance with DNN Community Forums installed and configured
+
+ change values in this file (http-client.env.json) to match your environment / browser session
+ 1. capture moduleid, tabid, and requestverificationtoken from browser tools header request and insert here
+ 2. capture .DOTNETNUKE cookie value from browser tools application cookies and insert here
+ 3. capture __RequestVerificationToken cookie value from browser tools application cookies and insert here
+
+ */
+
+{
+ "$shared": {
+
+ "hostname": "https://dnndev.me",
+ "tabid": 34,
+ "moduleid": 382,
+ "requestverificationtoken": "6F0eqq5Pzh2fbzUTxWR7r4_WJ7eyaT6757hIXMCFjyWSfHQnMy_OZ18ANFCaYehlNo9URvDSWExlCgiZ0", /* from header request */
+ ".DOTNETNUKE": "0456C0ECED94253A50C6084161E1CC2B15247C67C9899BA32434188FB8D752ED157F3CF1558EBA48C7CD3CB4615099C28C5F0D9846BCAC5C4EED0E8260625DD72448E14B", /* from application cookies */
+ "__RequestVerificationToken": "JYRC09S-5Rq9QZ-l-djN9jCdxldMF4i_joDbtnOrj8ZYCcgBLtMaxR8I6XPFqYbjdplZCQ2" /* from application cookies */
+ }
+}
diff --git a/Dnn.CommunityForumsTests/class/UtilitiesTests.cs b/Dnn.CommunityForumsTests/class/UtilitiesTests.cs
index 17fd8351d..79a1c554c 100644
--- a/Dnn.CommunityForumsTests/class/UtilitiesTests.cs
+++ b/Dnn.CommunityForumsTests/class/UtilitiesTests.cs
@@ -512,5 +512,142 @@ public void EncodeCodeBlocks_MultipleCodeBlocks_EncodesAll()
Assert.That(result.Contains(expected2), Is.True);
});
}
+
+ [Test]
+ public void RemoveScriptTags_NullInput_ReturnsNull()
+ {
+ // Arrange
+ string input = null;
+
+ // Act
+ string result = Utilities.RemoveScriptTags(input);
+
+ // Assert
+ Assert.That(result, Is.Null);
+ }
+
+ [Test]
+ public void RemoveScriptTags_EmptyInput_ReturnsEmptyString()
+ {
+ // Arrange
+ string input = string.Empty;
+
+ // Act
+ string result = Utilities.RemoveScriptTags(input);
+
+ // Assert
+ Assert.That(result, Is.Empty);
+ }
+
+ [Test]
+ public void RemoveScriptTags_NoScriptTags_ReturnsSameText()
+ {
+ // Arrange
+ string input = "This is regular text with some HTML but no script tags.";
+
+ // Act
+ string result = Utilities.RemoveScriptTags(input);
+
+ // Assert
+ Assert.That(result, Is.EqualTo(input));
+ }
+
+ [Test]
+ public void RemoveScriptTags_WithScriptTags_RemovesScriptTags()
+ {
+ // Arrange
+ string input = "Text before text after";
+ string expected = "Text before text after";
+
+ // Act
+ string result = Utilities.RemoveScriptTags(input);
+
+ // Assert
+ Assert.That(result, Is.EqualTo(expected));
+ }
+
+ [Test]
+ public void RemoveScriptTags_MultipleScriptTags_RemovesAllScriptTags()
+ {
+ // Arrange
+ string input = "middle";
+ string expected = "middle";
+
+ // Act
+ string result = Utilities.RemoveScriptTags(input);
+
+ // Assert
+ Assert.That(result, Is.EqualTo(expected));
+ }
+
+ [Test]
+ public void RemoveScriptTags_ScriptTagsWithAttributes_RemovesEntireTag()
+ {
+ // Arrange
+ string input = "";
+ string expected = "";
+
+ // Act
+ string result = Utilities.RemoveScriptTags(input);
+
+ // Assert
+ Assert.That(result, Is.EqualTo(expected));
+ }
+
+ [Test]
+ public void RemoveScriptTags_ScriptInsideCodeBlock_PreservesScript()
+ {
+ // Arrange
+ string input = "Before After";
+ string expected = input;
+
+ // Act
+ string result = Utilities.RemoveScriptTags(input);
+
+ // Assert
+ Assert.That(result, Is.EqualTo(expected));
+ }
+
+ [Test]
+ public void RemoveScriptTags_ScriptInsidePreBlock_PreservesScript()
+ {
+ // Arrange
+ string input = "Before After";
+ string expected = input;
+
+ // Act
+ string result = Utilities.RemoveScriptTags(input);
+
+ // Assert
+ Assert.That(result, Is.EqualTo(expected));
+ }
+
+ [Test]
+ public void RemoveScriptTags_EncodedScriptTags_RemovesEncodedTags()
+ {
+ // Arrange
+ string input = "Before <script>alert('test');</script> After";
+ string expected = "Before After";
+
+ // Act
+ string result = Utilities.RemoveScriptTags(input);
+
+ // Assert
+ Assert.That(result, Is.EqualTo(expected));
+ }
+
+ [Test]
+ public void RemoveScriptTags_MixedRegularAndEncodedTags_RemovesBoth()
+ {
+ // Arrange
+ string input = " normal <script>alert(2);</script>";
+ string expected = " normal ";
+
+ // Act
+ string result = Utilities.RemoveScriptTags(input);
+
+ // Assert
+ Assert.That(result, Is.EqualTo(expected));
+ }
}
}
diff --git a/DnnCommunityForums.sln b/DnnCommunityForums.sln
index 176855f43..c97fe3a63 100644
--- a/DnnCommunityForums.sln
+++ b/DnnCommunityForums.sln
@@ -8,6 +8,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Configuration", "Configurat
.editorconfig = .editorconfig
.gitattributes = .gitattributes
.gitignore = .gitignore
+ .github\copilot-instructions.md = .github\copilot-instructions.md
LICENSE = LICENSE
README.md = README.md
stylecop.json = stylecop.json
|