diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 74b877ef906..2371ac1a32d 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -49,6 +49,7 @@ updates:
Cake-Issues:
patterns:
- "Cake.Issues*"
+ - "Cake.Frosting.Issues*"
DependencyInjection:
patterns:
- "Microsoft.Extensions.DependencyInjection*"
diff --git a/DNN Platform/Modules/DnnExportImportLibrary/DnnExportImportLibrary.csproj b/DNN Platform/Modules/DnnExportImportLibrary/DnnExportImportLibrary.csproj
index 196b094939c..1af2992222f 100644
--- a/DNN Platform/Modules/DnnExportImportLibrary/DnnExportImportLibrary.csproj
+++ b/DNN Platform/Modules/DnnExportImportLibrary/DnnExportImportLibrary.csproj
@@ -48,8 +48,9 @@
CS0618,SA1600
-
- ..\..\..\packages\LiteDB.5.0.13\lib\net45\LiteDB.dll
+
+ ..\..\..\packages\LiteDB.5.0.19\lib\net45\LiteDB.dll
+ True
diff --git a/DNN Platform/Modules/DnnExportImportLibrary/packages.config b/DNN Platform/Modules/DnnExportImportLibrary/packages.config
index 18c69b7bd71..16de3c79427 100644
--- a/DNN Platform/Modules/DnnExportImportLibrary/packages.config
+++ b/DNN Platform/Modules/DnnExportImportLibrary/packages.config
@@ -1,6 +1,6 @@
-
+
diff --git a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-edit-folder/dnn-rm-edit-folder.tsx b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-edit-folder/dnn-rm-edit-folder.tsx
index 043187f1c7f..c7b88989f8f 100644
--- a/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-edit-folder/dnn-rm-edit-folder.tsx
+++ b/DNN Platform/Modules/ResourceManager/ResourceManager.Web/src/components/dnn-rm-edit-folder/dnn-rm-edit-folder.tsx
@@ -3,7 +3,7 @@ import { IRole } from '@dnncommunity/dnn-elements/dist/types/components/dnn-perm
import { Component, Element, Event, EventEmitter, Host, h, State, Prop } from '@stencil/core';
import state from '../../store/store';
import { FolderDetails, ItemsClient, SaveFolderDetailsRequest } from '../../services/ItemsClient';
-import { IPermissions, IRolePermission, IUserPermission } from '@dnncommunity/dnn-elements/dist/types/components/dnn-permissions-grid/permissions-interface';
+import { IPermissionDefinition, IPermissions, IRolePermission, IUserPermission } from '@dnncommunity/dnn-elements/dist/types/components/dnn-permissions-grid/permissions-interface';
import { ISearchedUser } from '@dnncommunity/dnn-elements/dist/types/components/dnn-permissions-grid/searched-user-interface';
@Component({
tag: 'dnn-rm-edit-folder',
@@ -28,6 +28,7 @@ export class DnnRmEditFolder {
@State() folderIconUrl: string;
@State() folderDetails: FolderDetails;
@State() foundUsers: ISearchedUser[];
+ @State() lastPermissions: IPermissions;
private itemsClient: ItemsClient;
@@ -90,6 +91,7 @@ export class DnnRmEditFolder {
],
},
};
+ this.lastPermissions = {...this.folderDetails.permissions};
})
.catch(error => alert(error));
@@ -130,128 +132,107 @@ export class DnnRmEditFolder {
}
private handlePermissionsChanged(newPermissions: IPermissions): void {
- newPermissions.rolePermissions.forEach(rolePermission => this.adjustRelatedPermissions(rolePermission));
- newPermissions.userPermissions.forEach(userPermission => this.adjustRelatedPermissions(userPermission));
+ // Get previous role permissions and adjust related permissions
+ newPermissions.rolePermissions.forEach(rolePermission => {
+ const previousPermissions = this.lastPermissions?.rolePermissions?.find(p => p.roleId === rolePermission.roleId).permissions ?? [];
+ this.adjustRelatedPermissions(rolePermission, previousPermissions);
+ });
+
+ // Get previous user permissions and adjust related permissions
+ newPermissions.userPermissions.forEach(userPermission => {
+ const previousPermissions = this.lastPermissions?.userPermissions?.find(p => p.userId === userPermission.userId).permissions ?? [];
+ this.adjustRelatedPermissions(userPermission, previousPermissions);
+ });
+
+ // Update the folder details with the new permissions
this.folderDetails = {
...this.folderDetails,
permissions: newPermissions,
};
+
+ // Update the last known permissions state
+ this.lastPermissions = newPermissions;
}
- private adjustRelatedPermissions(permission: IRolePermission | IUserPermission): void {
- const permissionId =
- {
+ private adjustRelatedPermissions(permission: IRolePermission | IUserPermission, previousPermissions: IPermissionDefinition[]): void {
+ const permissionIds = {
view: this.folderDetails.permissions.permissionDefinitions.find(p => p.permissionName === 'View Folder').permissionId,
browse: this.folderDetails.permissions.permissionDefinitions.find(p => p.permissionName === 'Browse Folder').permissionId,
write: this.folderDetails.permissions.permissionDefinitions.find(p => p.permissionName === 'Write to Folder').permissionId,
};
+
+ const viewPermission = permission.permissions.find(p => p.permissionId === permissionIds.view);
+ const browsePermission = permission.permissions.find(p => p.permissionId === permissionIds.browse);
+ const writePermission = permission.permissions.find(p => p.permissionId === permissionIds.write);
+
+ // Check if specific permissions have changed from the last known state
+ const viewChanged = viewPermission && this.hasPermissionChanged(previousPermissions, viewPermission, permissionIds.view);
+ const browseChanged = browsePermission && this.hasPermissionChanged(previousPermissions, browsePermission, permissionIds.browse);
+ const writeChanged = writePermission && this.hasPermissionChanged(previousPermissions, writePermission, permissionIds.write);
- const viewPermission = permission.permissions.find(p => p.permissionId == permissionId.view);
// If view permission is denied, then deny all other permissions
- if (viewPermission && viewPermission.allowAccess == false){
- // Deny all permissions
- permission.permissions = [
- {
- allowAccess: false,
- fullControl: false,
- permissionId: permissionId.view,
- permissionCode: null,
- permissionKey: null,
- permissionName: "View Folder",
- view: false,
- },
- {
- allowAccess: false,
- fullControl: false,
- permissionId: permissionId.browse,
- permissionCode: null,
- permissionKey: null,
- permissionName: "Browse Folder",
- view: false,
- },
- {
- allowAccess: false,
- fullControl: false,
- permissionId: permissionId.write,
- permissionCode: null,
- permissionKey: null,
- permissionName: "Write to Folder",
- view: false,
- },
- ]
+ if (viewChanged && !viewPermission.allowAccess) {
+ if (browsePermission) {
+ browsePermission.allowAccess = false;
+ }
+ if (writePermission) {
+ writePermission.allowAccess = false;
+ }
}
-
+
// If browse was denied, then deny write
- const browsePermission = permission.permissions.find(p => p.permissionId == permissionId.browse);
- if (browsePermission && browsePermission.allowAccess == false){
- // Deny write
- permission.permissions = [
- ...permission.permissions.filter(p => p.permissionId != permissionId.write),
- {
- allowAccess: false,
- fullControl: false,
- permissionId: permissionId.write,
- permissionCode: null,
- permissionKey: null,
- permissionName: "Write to Folder",
- view: false,
- }
- ]
+ if (browseChanged && !browsePermission.allowAccess && writePermission) {
+ writePermission.allowAccess = false;
}
-
+
// If browse was allowed, then allow view
- if (browsePermission && browsePermission.allowAccess == true){
- // Allow browse
- permission.permissions = [
- {
+ if (browseChanged && browsePermission.allowAccess) {
+ if (!viewPermission) {
+ // Create a new list with all existing permissions plus the new view permission
+ permission.permissions = [...permission.permissions, {
+ permissionId: permissionIds.view,
allowAccess: true,
fullControl: false,
- permissionId: permissionId.view,
permissionCode: null,
permissionKey: null,
- permissionName: "Browse Folder",
+ permissionName: "View Folder",
view: false,
- },
- ...permission.permissions.filter(p => p.permissionId != permissionId.view),
- ];
+ }];
+ } else {
+ viewPermission.allowAccess = true;
+ }
}
-
+
// If write was allowed, then allow all other permissions
- const writePermission = permission.permissions.find(p => p.permissionId == permissionId.write);
- if (writePermission && writePermission.allowAccess == true){
- // Allow all permissions
+ if (writeChanged && writePermission.allowAccess) {
permission.permissions = [
+ ...permission.permissions.filter(p => ![permissionIds.view, permissionIds.browse].includes(p.permissionId)),
{
+ permissionId: permissionIds.view,
allowAccess: true,
fullControl: false,
- permissionId: permissionId.view,
permissionCode: null,
permissionKey: null,
permissionName: "View Folder",
view: false,
},
{
- allowAccess: true,
- fullControl: false,
- permissionId: permissionId.browse,
- permissionCode: null,
- permissionKey: null,
- permissionName: "Browse Folder",
- view: false,
- },
- {
- allowAccess: true,
- fullControl: false,
- permissionId: permissionId.write,
- permissionCode: null,
- permissionKey: null,
- permissionName: "Write to Folder",
- view: false,
- },
- ]
+ permissionId: permissionIds.browse,
+ allowAccess: true,
+ fullControl: false,
+ permissionCode: null,
+ permissionKey: null,
+ permissionName: "Browse Folder",
+ view: false,
+ }];
}
}
+ private hasPermissionChanged(lastPermissions: IPermissionDefinition[], currentPermission: IPermissionDefinition, permissionId: number): boolean {
+ const lastPermission = lastPermissions.find(p => p.permissionId === permissionId)
+ return !lastPermission || JSON.stringify(lastPermission) !== JSON.stringify(currentPermission);
+ }
+
private handleUserSearchQueryChanged(detail: string): void {
this.itemsClient.searchUsers(detail)
.then(data => this.foundUsers = data)
diff --git a/DNN Platform/Tests/DNN.Integration.Test.Framework/DNN.Integration.Test.Framework.csproj b/DNN Platform/Tests/DNN.Integration.Test.Framework/DNN.Integration.Test.Framework.csproj
index 7fe724c1e75..7e531cacb6a 100644
--- a/DNN Platform/Tests/DNN.Integration.Test.Framework/DNN.Integration.Test.Framework.csproj
+++ b/DNN Platform/Tests/DNN.Integration.Test.Framework/DNN.Integration.Test.Framework.csproj
@@ -50,8 +50,8 @@
..\..\..\packages\Castle.Core.5.1.1\lib\net462\Castle.Core.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
diff --git a/DNN Platform/Tests/DNN.Integration.Test.Framework/packages.config b/DNN Platform/Tests/DNN.Integration.Test.Framework/packages.config
index 58d62943ea9..cd0a5c42111 100644
--- a/DNN Platform/Tests/DNN.Integration.Test.Framework/packages.config
+++ b/DNN Platform/Tests/DNN.Integration.Test.Framework/packages.config
@@ -6,7 +6,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.AspNetCCP/DotNetNuke.Tests.AspNetCCP.csproj b/DNN Platform/Tests/DotNetNuke.Tests.AspNetCCP/DotNetNuke.Tests.AspNetCCP.csproj
index a3b07e96264..0e900b28927 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.AspNetCCP/DotNetNuke.Tests.AspNetCCP.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.AspNetCCP/DotNetNuke.Tests.AspNetCCP.csproj
@@ -50,8 +50,8 @@
..\..\..\packages\SharpZipLib.0.86.0\lib\20\ICSharpCode.SharpZipLib.dll
True
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\NUnit.3.13.3\lib\net45\nunit.framework.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.AspNetCCP/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.AspNetCCP/packages.config
index 50be2a31776..097dba9884d 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.AspNetCCP/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.AspNetCCP/packages.config
@@ -1,7 +1,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Authentication/DotNetNuke.Tests.Authentication.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Authentication/DotNetNuke.Tests.Authentication.csproj
index 8529f044fa7..0ba6b0c9eab 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Authentication/DotNetNuke.Tests.Authentication.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Authentication/DotNetNuke.Tests.Authentication.csproj
@@ -70,8 +70,8 @@
..\..\..\packages\Castle.Core.5.1.1\lib\net462\Castle.Core.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\NUnit.3.13.3\lib\net45\nunit.framework.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Authentication/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.Authentication/packages.config
index 50be2a31776..097dba9884d 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Authentication/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Authentication/packages.config
@@ -1,7 +1,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Content/DotNetNuke.Tests.Content.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Content/DotNetNuke.Tests.Content.csproj
index 92a088262ec..f5d21c80c41 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Content/DotNetNuke.Tests.Content.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Content/DotNetNuke.Tests.Content.csproj
@@ -75,8 +75,8 @@
..\..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Content/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.Content/packages.config
index 7f67eb789df..7dcc4841562 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Content/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Content/packages.config
@@ -3,7 +3,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Core/DotNetNuke.Tests.Core.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Core/DotNetNuke.Tests.Core.csproj
index eef43699581..c7cb3b9a914 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Core/DotNetNuke.Tests.Core.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Core/DotNetNuke.Tests.Core.csproj
@@ -97,8 +97,8 @@
..\..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\NUnit.3.13.3\lib\net45\nunit.framework.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Core/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.Core/packages.config
index 65402d60430..f610885a9cc 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Core/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Core/packages.config
@@ -3,7 +3,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Data/DotNetNuke.Tests.Data.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Data/DotNetNuke.Tests.Data.csproj
index 6c1918079ca..bc87faf6551 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Data/DotNetNuke.Tests.Data.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Data/DotNetNuke.Tests.Data.csproj
@@ -83,8 +83,8 @@
..\..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
True
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\NUnit.3.13.3\lib\net45\nunit.framework.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Data/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.Data/packages.config
index 0014c76bae6..f8e8a201c99 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Data/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Data/packages.config
@@ -4,7 +4,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Integration/DotNetNuke.Tests.Integration.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Integration/DotNetNuke.Tests.Integration.csproj
index fa2d2c53332..069bb4f6f6c 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Integration/DotNetNuke.Tests.Integration.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Integration/DotNetNuke.Tests.Integration.csproj
@@ -77,8 +77,8 @@
..\..\..\packages\Fare.2.2.1\lib\net35\Fare.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Integration/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.Integration/packages.config
index c4093286651..76a6c6e374c 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Integration/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Integration/packages.config
@@ -7,7 +7,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Mail/DotNetNuke.Tests.Mail.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Mail/DotNetNuke.Tests.Mail.csproj
index bc449466ff5..e6bc08af6df 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Mail/DotNetNuke.Tests.Mail.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Mail/DotNetNuke.Tests.Mail.csproj
@@ -52,8 +52,8 @@
..\..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Mail/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.Mail/packages.config
index a6d4160b423..ea83afff9d0 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Mail/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Mail/packages.config
@@ -3,7 +3,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Modules/DotNetNuke.Tests.Modules.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Modules/DotNetNuke.Tests.Modules.csproj
index 7088b1b2010..e949034e2ea 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Modules/DotNetNuke.Tests.Modules.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Modules/DotNetNuke.Tests.Modules.csproj
@@ -70,8 +70,8 @@
..\..\..\packages\Castle.Core.5.1.1\lib\net462\Castle.Core.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\NUnit.3.13.3\lib\net45\nunit.framework.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Modules/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.Modules/packages.config
index 50be2a31776..097dba9884d 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Modules/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Modules/packages.config
@@ -1,7 +1,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.UI/DotNetNuke.Tests.UI.csproj b/DNN Platform/Tests/DotNetNuke.Tests.UI/DotNetNuke.Tests.UI.csproj
index 5aa649162a1..d18581dde30 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.UI/DotNetNuke.Tests.UI.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.UI/DotNetNuke.Tests.UI.csproj
@@ -69,8 +69,8 @@
..\..\..\packages\Castle.Core.5.1.1\lib\net462\Castle.Core.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\NUnit.3.13.3\lib\net45\nunit.framework.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.UI/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.UI/packages.config
index 50be2a31776..097dba9884d 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.UI/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.UI/packages.config
@@ -1,7 +1,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Urls/DotNetNuke.Tests.Urls.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Urls/DotNetNuke.Tests.Urls.csproj
index 0e7ef072fdb..0166c3cd2f0 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Urls/DotNetNuke.Tests.Urls.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Urls/DotNetNuke.Tests.Urls.csproj
@@ -65,8 +65,8 @@
..\..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
True
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\NUnit.3.13.3\lib\net45\nunit.framework.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Urls/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.Urls/packages.config
index 04117f3a209..ce1a3a1920c 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Urls/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Urls/packages.config
@@ -5,7 +5,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Utilities/DotNetNuke.Tests.Utilities.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Utilities/DotNetNuke.Tests.Utilities.csproj
index d37e66e423f..b3c4002dc8b 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Utilities/DotNetNuke.Tests.Utilities.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Utilities/DotNetNuke.Tests.Utilities.csproj
@@ -84,8 +84,8 @@
False
..\..\..\..\..\Windows\System32\inetsrv\Microsoft.Web.Administration.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\NUnit.3.13.3\lib\net45\nunit.framework.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Utilities/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.Utilities/packages.config
index 9d6d346a2fe..f977d816747 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Utilities/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Utilities/packages.config
@@ -8,7 +8,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Web.Mvc/DotNetNuke.Tests.Web.Mvc.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Web.Mvc/DotNetNuke.Tests.Web.Mvc.csproj
index 453bbb8c1ed..017d833bc19 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Web.Mvc/DotNetNuke.Tests.Web.Mvc.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Web.Mvc/DotNetNuke.Tests.Web.Mvc.csproj
@@ -56,8 +56,8 @@
True
..\..\..\packages\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Web.Mvc/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.Web.Mvc/packages.config
index 10ac4c45a84..73411fb3013 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Web.Mvc/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Web.Mvc/packages.config
@@ -7,7 +7,7 @@
-
+
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Web/DotNetNuke.Tests.Web.csproj b/DNN Platform/Tests/DotNetNuke.Tests.Web/DotNetNuke.Tests.Web.csproj
index e90b3ccc383..62370f3ee22 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Web/DotNetNuke.Tests.Web.csproj
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Web/DotNetNuke.Tests.Web.csproj
@@ -56,8 +56,8 @@
..\..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
..\..\..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Web/packages.config b/DNN Platform/Tests/DotNetNuke.Tests.Web/packages.config
index 2e464281e7e..dcf14c2dd02 100644
--- a/DNN Platform/Tests/DotNetNuke.Tests.Web/packages.config
+++ b/DNN Platform/Tests/DotNetNuke.Tests.Web/packages.config
@@ -7,7 +7,7 @@
-
+
diff --git a/DNN Platform/Website/DotNetNuke.Website.csproj b/DNN Platform/Website/DotNetNuke.Website.csproj
index 7247bf427b5..1f2f76df4ba 100644
--- a/DNN Platform/Website/DotNetNuke.Website.csproj
+++ b/DNN Platform/Website/DotNetNuke.Website.csproj
@@ -1254,6 +1254,7 @@
+
web.config
diff --git a/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/09.13.04.SqlDataProvider b/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/09.13.04.SqlDataProvider
new file mode 100644
index 00000000000..8b3f37f3196
--- /dev/null
+++ b/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/09.13.04.SqlDataProvider
@@ -0,0 +1,115 @@
+/************************************************************/
+/***** SqlDataProvider *****/
+/***** *****/
+/***** *****/
+/***** Note: To manually execute this script you must *****/
+/***** perform a search and replace operation *****/
+/***** for {databaseOwner} and {objectQualifier} *****/
+/***** *****/
+/************************************************************/
+
+/* update procedure GetFolderPermissionsByPortalAndPath to lookup null values for portalID */
+/*******************************************/
+
+if exists (select * from dbo.sysobjects where id = object_id(N'{databaseOwner}[{objectQualifier}GetFolderPermissionsByPortalAndPath]') AND type in (N'P', N'PC'))
+ DROP PROCEDURE {databaseOwner}[{objectQualifier}GetFolderPermissionsByPortalAndPath]
+GO
+
+ CREATE PROCEDURE {databaseOwner}[{objectQualifier}GetFolderPermissionsByPortalAndPath]
+ @portalid int,
+ @FolderPath nvarchar(300)
+ AS
+ BEGIN
+
+ SELECT *
+ FROM {databaseOwner}[{objectQualifier}vw_FolderPermissions]
+ WHERE (PortalID = IsNull(@portalid, -1) OR (@portalid IS NULL AND PortalID IS NULL)) AND (FolderPath = @FolderPath OR @FolderPath IS NULL)
+ END
+
+GO
+
+
+/* Fix Deleted Date for Recycle Bin Items #6074 */
+/**************************************/
+
+IF OBJECT_ID(N'{databaseOwner}[{objectQualifier}vw_Modules]', N'V') IS NOT NULL
+ DROP VIEW {databaseOwner}[{objectQualifier}vw_Modules]
+GO
+
+CREATE VIEW {databaseOwner}[{objectQualifier}vw_Modules]
+AS
+ SELECT
+ M.PortalID AS [OwnerPortalID],
+ DM.PackageID,
+ T.PortalID,
+ TM.TabID,
+ TM.TabModuleID,
+ M.ModuleID,
+ M.ModuleDefID,
+ TM.ModuleOrder,
+ TM.PaneName,
+ TM.ModuleTitle,
+ TM.CacheTime,
+ TM.CacheMethod,
+ TM.Alignment,
+ TM.Color,
+ TM.Border,
+ CASE WHEN TM.IconFile LIKE 'fileid=%'
+ THEN (SELECT IsNull(Folder, '') + [FileName] FROM {databaseOwner}[{objectQualifier}vw_Files]
+ WHERE FileId = CAST(SUBSTRING(TM.IconFile, 8, 10) AS Int))
+ ELSE Coalesce(TM.IconFile,'')
+ END AS IconFile,
+ TM.Visibility,
+ TM.Header,
+ TM.Footer,
+ TM.ContainerSrc,
+ TM.DisplayTitle,
+ TM.DisplayPrint,
+ TM.DisplaySyndicate,
+ TM.IsWebSlice,
+ TM.WebSliceTitle,
+ TM.WebSliceExpiryDate,
+ TM.WebSliceTTL,
+ TM.UniqueId,
+ TM.VersionGuid,
+ TM.DefaultLanguageGuid,
+ TM.LocalizedVersionGuid,
+ TM.CultureCode,
+ M.AllTabs,
+ M.StartDate,
+ M.EndDate,
+ T.StartDate AS TabStartDate,
+ T.EndDate AS TabEndDate,
+ M.InheritViewPermissions,
+ M.IsShareable,
+ M.IsShareableViewOnly,
+ TM.CreatedByUserID,
+ TM.CreatedOnDate,
+ TM.LastModifiedByUserID,
+ TM.LastModifiedOnDate,
+ M.LastContentModifiedOnDate,
+ MD.DesktopModuleID,
+ MD.DefaultCacheTime,
+ MD.DefinitionName,
+ MC.ModuleControlID,
+ DM.BusinessControllerClass,
+ DM.IsAdmin,
+ DM.SupportedFeatures,
+ CI.ContentItemID,
+ CI.Content,
+ CI.ContentTypeID,
+ CI.ContentKey,
+ CI.Indexed,
+ CI.StateID,
+ TM.IsDeleted AS IsDeleted,
+ M.IsDeleted AS IsModuleDeleted,
+ T.IsDeleted AS IsTabDeleted
+ FROM {databaseOwner}[{objectQualifier}ModuleDefinitions] AS MD
+ INNER JOIN {databaseOwner}[{objectQualifier}Modules] AS M ON M.ModuleDefID = MD.ModuleDefID
+ INNER JOIN {databaseOwner}[{objectQualifier}ModuleControls] AS MC ON MD.ModuleDefID = MC.ModuleDefID
+ INNER JOIN {databaseOwner}[{objectQualifier}DesktopModules] AS DM ON MD.DesktopModuleID = DM.DesktopModuleID
+ LEFT JOIN {databaseOwner}[{objectQualifier}ContentItems] AS CI ON M.ContentItemID = CI.ContentItemID
+ LEFT JOIN {databaseOwner}[{objectQualifier}TabModules] AS TM ON M.ModuleID = TM.ModuleID
+ LEFT JOIN {databaseOwner}[{objectQualifier}Tabs] AS T ON TM.TabID = T.TabID
+ WHERE (MC.ControlKey IS NULL)
+GO
diff --git a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json
index 072ab444017..43768e32d68 100644
--- a/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/AdminLogs.Web/package.json
@@ -31,7 +31,7 @@
"i18n-webpack-plugin": "1.0.0",
"jwt-decode": "2.2.0",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"prop-types": "15.8.1",
"raw-loader": "2.0.0",
"react": "^16.14.0",
diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json
index 308cda14890..1ea736627c3 100644
--- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json
@@ -34,7 +34,7 @@
"json-loader": "^0.5.7",
"jwt-decode": "2.2.0",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"moment": "^2.29.4",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json
index 5cde338ba75..4c88ce8dbc7 100644
--- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json
+++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/package.json
@@ -73,7 +73,7 @@
"eslint-plugin-spellcheck": "0.0.11",
"file-loader": "3.0.1",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
"react": "^16.14.0",
diff --git a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json
index 53240352cdc..b791d6cb7f6 100644
--- a/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Extensions.Web/package.json
@@ -26,7 +26,7 @@
"eslint-plugin-spellcheck": "0.0.11",
"file-loader": "3.0.1",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
"react": "^16.14.0",
diff --git a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json
index 56856559a16..63d39f9ce94 100644
--- a/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Licensing.Web/package.json
@@ -29,7 +29,7 @@
"file-loader": "3.0.1",
"jwt-decode": "2.2.0",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
"react-hot-loader": "4.13.1",
diff --git a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json
index d376cb503fc..cc1b49ed542 100644
--- a/Dnn.AdminExperience/ClientSide/Pages.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Pages.Web/package.json
@@ -47,7 +47,7 @@
"file-loader": "3.0.1",
"jest": "^28.1.3",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"lodash": "4.17.21",
"raw-loader": "2.0.0",
"react-custom-scrollbars": "4.2.1",
diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json
index bc9a5d303dd..d84da60f96b 100644
--- a/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/package.json
@@ -44,7 +44,7 @@
"jest": "^28.1.3",
"jwt-decode": "2.2.0",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"localization": "^1.0.2",
"object-assign": "*",
"optimize-css-assets-webpack-plugin": "^5.0.8",
diff --git a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json
index 83bb7f0912c..c6ff180dae4 100644
--- a/Dnn.AdminExperience/ClientSide/Roles.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Roles.Web/package.json
@@ -31,7 +31,7 @@
"file-loader": "3.0.1",
"jwt-decode": "2.2.0",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
"react": "^16.14.0",
diff --git a/Dnn.AdminExperience/ClientSide/Security.Web/package.json b/Dnn.AdminExperience/ClientSide/Security.Web/package.json
index e57af888100..9255aa24116 100644
--- a/Dnn.AdminExperience/ClientSide/Security.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Security.Web/package.json
@@ -27,7 +27,7 @@
"file-loader": "3.0.1",
"jwt-decode": "2.2.0",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
"react": "^16.14.0",
diff --git a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json
index 6aeb7df2fc1..4bfdabf7945 100644
--- a/Dnn.AdminExperience/ClientSide/Seo.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Seo.Web/package.json
@@ -32,7 +32,7 @@
"file-loader": "3.0.1",
"jwt-decode": "2.2.0",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
"react": "^16.14.0",
diff --git a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json
index b9e9947bf6d..27a1fd0cbe6 100644
--- a/Dnn.AdminExperience/ClientSide/Servers.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Servers.Web/package.json
@@ -30,7 +30,7 @@
"eslint-plugin-spellcheck": "0.0.11",
"file-loader": "3.0.1",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"null-loader": "^4.0.1",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
diff --git a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json
index a3c973d8af6..96c68656f1d 100644
--- a/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/SiteGroups.Web/package.json
@@ -27,7 +27,7 @@
"eslint-plugin-spellcheck": "0.0.11",
"file-loader": "3.0.1",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
"react": "^16.14.0",
diff --git a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json
index ea4f401d75e..03b5980212d 100644
--- a/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/SiteImportExport.Web/package.json
@@ -32,7 +32,7 @@
"i18n-webpack-plugin": "1.0.0",
"jwt-decode": "2.2.0",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"localization": "^1.0.2",
"prop-types": "^15.8.1",
"raw-loader": "^2.0.0",
diff --git a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json
index 373a9437324..a2bac279dd3 100644
--- a/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/SiteSettings.Web/package.json
@@ -33,7 +33,7 @@
"jest": "^28.1.3",
"jwt-decode": "2.2.0",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
"react": "^16.14.0",
diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json
index 9a0923fb573..02bc014a76a 100644
--- a/Dnn.AdminExperience/ClientSide/Sites.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Sites.Web/package.json
@@ -27,7 +27,7 @@
"eslint-plugin-spellcheck": "0.0.11",
"file-loader": "3.0.1",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
"react": "^16.14.0",
diff --git a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json
index 0a49d0c2b9f..88ddff563a0 100644
--- a/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json
+++ b/Dnn.AdminExperience/ClientSide/Sites.Web/src/_exportables/package.json
@@ -29,7 +29,7 @@
"eslint-plugin-react": "7.33.0",
"eslint-plugin-spellcheck": "0.0.11",
"less": "4.1.3",
- "less-loader": "4.1.0",
+ "less-loader": "12.2.0",
"null-loader": "^4.0.1",
"prop-types": "^15.8.1",
"react": "^16.14.0",
diff --git a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json
index aa8e6315dea..a386beb1556 100644
--- a/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/TaskScheduler.Web/package.json
@@ -32,7 +32,7 @@
"file-loader": "3.0.1",
"jwt-decode": "2.2.0",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
"react": "^16.14.0",
diff --git a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json
index 82ad1299144..a038c6a2068 100644
--- a/Dnn.AdminExperience/ClientSide/Themes.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Themes.Web/package.json
@@ -28,7 +28,7 @@
"eslint-plugin-spellcheck": "0.0.11",
"file-loader": "3.0.1",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
"react": "^16.14.0",
diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/package.json
index c5ff8366ca7..7fe28204ff7 100644
--- a/Dnn.AdminExperience/ClientSide/Users.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Users.Web/package.json
@@ -27,7 +27,7 @@
"file-loader": "3.0.1",
"jest": "^28.1.3",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"null-loader": "^4.0.1",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
diff --git a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json
index ac8761db30e..5f621282c25 100644
--- a/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json
+++ b/Dnn.AdminExperience/ClientSide/Users.Web/src/_exportables/package.json
@@ -29,7 +29,7 @@
"eslint-plugin-react": "7.33.0",
"eslint-plugin-spellcheck": "0.0.11",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"localization": "^1.0.2",
"null-loader": "^4.0.1",
"prop-types": "15.8.1",
diff --git a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json
index 4228bdadbc1..25f7a8180b3 100644
--- a/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json
+++ b/Dnn.AdminExperience/ClientSide/Vocabularies.Web/package.json
@@ -32,7 +32,7 @@
"file-loader": "3.0.1",
"jwt-decode": "2.2.0",
"less": "4.1.3",
- "less-loader": "5.0.0",
+ "less-loader": "12.2.0",
"object-path": "0.11.8",
"prop-types": "^15.8.1",
"raw-loader": "2.0.0",
diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Components/Recyclebin/IRecyclebinController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Components/Recyclebin/IRecyclebinController.cs
index 8147f220d26..dd773b11712 100644
--- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Components/Recyclebin/IRecyclebinController.cs
+++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Components/Recyclebin/IRecyclebinController.cs
@@ -36,10 +36,10 @@ public interface IRecyclebinController
bool RestoreUser(UserInfo user, out string resultmessage);
- List GetDeletedTabs(out int totalRecords, int pageIndex = -1, int pageSize = -1);
+ List GetDeletedTabs(out int totalRecords, int pageIndex = -1, int pageSize = -1, string sortType = "", string sortDirection = "");
- List GetDeletedModules(out int totalRecords, int pageIndex = -1, int pageSize = -1);
+ List GetDeletedModules(out int totalRecords, int pageIndex = -1, int pageSize = -1, string sortType = "", string sortDirection = "");
- List GetDeletedUsers(out int totalRecords, int pageIndex = -1, int pageSize = -1);
+ List GetDeletedUsers(out int totalRecords, int pageIndex = -1, int pageSize = -1, string sortType = "", string sortDirection = "");
}
}
diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Components/Recyclebin/RecyclebinController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Components/Recyclebin/RecyclebinController.cs
index a6efc6f214d..cea4f5cf09a 100644
--- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Components/Recyclebin/RecyclebinController.cs
+++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Components/Recyclebin/RecyclebinController.cs
@@ -214,24 +214,49 @@ public bool RestoreModule(int moduleId, int tabId, out string errorMessage)
}
///
- public List GetDeletedTabs(out int totalRecords, int pageIndex = -1, int pageSize = -1)
+ public List GetDeletedTabs(out int totalRecords, int pageIndex = -1, int pageSize = -1, string sortType = "", string sortDirection = "")
{
var adminTabId = PortalSettings.AdminTabId;
var tabs = TabController.GetPortalTabs(PortalSettings.PortalId, adminTabId, true, true, true, true);
var deletedtabs =
tabs.Where(t => t.ParentId != adminTabId && t.IsDeleted && TabPermissionController.CanDeletePage(t));
+ if (sortType == "tab")
+ {
+ deletedtabs = sortDirection == "asc" ? deletedtabs = deletedtabs.OrderBy(tab => tab.TabName) : deletedtabs = deletedtabs.OrderByDescending(tab => tab.TabName);
+ }
+
+ if (sortType == "date")
+ {
+ deletedtabs = sortDirection == "asc" ? deletedtabs = deletedtabs.OrderBy(tab => tab.LastModifiedOnDate) : deletedtabs = deletedtabs.OrderByDescending(tab => tab.LastModifiedOnDate);
+ }
+
totalRecords = deletedtabs.Count();
return pageIndex == -1 || pageSize == -1 ? deletedtabs.ToList() : deletedtabs.Skip(pageIndex * pageSize).Take(pageSize).ToList();
}
///
- public List GetDeletedModules(out int totalRecords, int pageIndex = -1, int pageSize = -1)
+ public List GetDeletedModules(out int totalRecords, int pageIndex = -1, int pageSize = -1, string sortType = "", string sortDirection = "")
{
var deletedModules = this.moduleController.GetModules(PortalSettings.PortalId)
.Cast()
.Where(module => module.IsDeleted && (
TabPermissionController.CanAddContentToPage(TabController.Instance.GetTab(module.TabID, module.PortalID)) ||
ModulePermissionController.CanDeleteModule(module)));
+ if (sortType == "title")
+ {
+ deletedModules = sortDirection == "asc" ? deletedModules = deletedModules.OrderBy(module => module.ModuleTitle) : deletedModules = deletedModules.OrderByDescending(module => module.ModuleTitle);
+ }
+
+ if (sortType == "tab")
+ {
+ deletedModules = sortDirection == "asc" ? deletedModules = deletedModules.OrderBy(module => module.ParentTab.TabName) : deletedModules = deletedModules.OrderByDescending(module => module.ParentTab.TabName);
+ }
+
+ if (sortType == "date")
+ {
+ deletedModules = sortDirection == "asc" ? deletedModules = deletedModules.OrderBy(module => module.LastModifiedOnDate) : deletedModules = deletedModules.OrderByDescending(module => module.LastModifiedOnDate);
+ }
+
totalRecords = deletedModules.Count();
return pageIndex == -1 || pageSize == -1 ? deletedModules.ToList() : deletedModules.Skip(pageIndex * pageSize).Take(pageSize).ToList();
}
@@ -248,9 +273,24 @@ public string GetTabStatus(TabInfo tab)
}
///
- public List GetDeletedUsers(out int totalRecords, int pageIndex = -1, int pageSize = -1)
+ public List GetDeletedUsers(out int totalRecords, int pageIndex = -1, int pageSize = -1, string sortType = "", string sortDirection = "")
{
var deletedusers = UserController.GetDeletedUsers(PortalSettings.PortalId).Cast().Where(this.CanManageUser);
+ if (sortType == "username")
+ {
+ deletedusers = sortDirection == "asc" ? deletedusers = deletedusers.OrderBy(user => user.Username) : deletedusers = deletedusers.OrderByDescending(user => user.Username);
+ }
+
+ if (sortType == "displayname")
+ {
+ deletedusers = sortDirection == "asc" ? deletedusers = deletedusers.OrderBy(user => user.DisplayName) : deletedusers = deletedusers.OrderByDescending(user => user.DisplayName);
+ }
+
+ if (sortType == "date")
+ {
+ deletedusers = sortDirection == "asc" ? deletedusers = deletedusers.OrderBy(user => user.LastModifiedOnDate) : deletedusers = deletedusers.OrderByDescending(user => user.LastModifiedOnDate);
+ }
+
totalRecords = deletedusers.Count();
return pageIndex == -1 || pageSize == -1 ? deletedusers.ToList() : deletedusers.Skip(pageIndex * pageSize).Take(pageSize).ToList();
}
diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/RecyclebinController.cs b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/RecyclebinController.cs
index db030af3662..93fdcdc167e 100644
--- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/RecyclebinController.cs
+++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/Services/RecyclebinController.cs
@@ -34,10 +34,10 @@ public class RecyclebinController : PersonaBarApiController
[HttpGet]
[AdvancedPermission(MenuName = Components.Constants.MenuName, Permission = Components.Constants.RecycleBinPagesView)]
- public HttpResponseMessage GetDeletedPageList(int pageIndex = -1, int pageSize = -1)
+ public HttpResponseMessage GetDeletedPageList(int pageIndex = -1, int pageSize = -1, string sortType = "", string sortDirection = "")
{
var totalRecords = 0;
- var tabs = Components.RecyclebinController.Instance.GetDeletedTabs(out totalRecords, pageIndex, pageSize);
+ var tabs = Components.RecyclebinController.Instance.GetDeletedTabs(out totalRecords, pageIndex, pageSize, sortType, sortDirection);
var deletedtabs = from t in tabs
select this.ConvertToPageItem(t, tabs);
var response = new
@@ -52,10 +52,10 @@ public HttpResponseMessage GetDeletedPageList(int pageIndex = -1, int pageSize =
[HttpGet]
[AdvancedPermission(MenuName = Components.Constants.MenuName, Permission = Components.Constants.RecycleBinModulesView)]
- public HttpResponseMessage GetDeletedModuleList(int pageIndex = -1, int pageSize = -1)
+ public HttpResponseMessage GetDeletedModuleList(int pageIndex = -1, int pageSize = -1, string sortType = "", string sortDirection = "")
{
var totalRecords = 0;
- var mods = Components.RecyclebinController.Instance.GetDeletedModules(out totalRecords, pageIndex, pageSize);
+ var mods = Components.RecyclebinController.Instance.GetDeletedModules(out totalRecords, pageIndex, pageSize, sortType, sortDirection);
var deletedmodules = from t in mods select this.ConvertToModuleItem(t);
var response = new
{
@@ -69,10 +69,10 @@ public HttpResponseMessage GetDeletedModuleList(int pageIndex = -1, int pageSize
[HttpGet]
[AdvancedPermission(MenuName = Components.Constants.MenuName, Permission = Components.Constants.RecycleBinUsersView)]
- public HttpResponseMessage GetDeletedUserList(int pageIndex = -1, int pageSize = -1)
+ public HttpResponseMessage GetDeletedUserList(int pageIndex = -1, int pageSize = -1, string sortType = "", string sortDirection = "")
{
var totalRecords = 0;
- var users = Components.RecyclebinController.Instance.GetDeletedUsers(out totalRecords, pageIndex, pageSize);
+ var users = Components.RecyclebinController.Instance.GetDeletedUsers(out totalRecords, pageIndex, pageSize, sortType, sortDirection);
var deletedusers = from t in users select this.ConvertToUserItem(t);
var response = new
{
diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/App_LocalResources/Recyclebin.resx b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/App_LocalResources/Recyclebin.resx
index 26b157e60f6..1e7a9faa630 100644
--- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/App_LocalResources/Recyclebin.resx
+++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/App_LocalResources/Recyclebin.resx
@@ -133,7 +133,7 @@
Yes
- Date
+ Deletion Date
Empty Recycle Bin
diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/Recyclebin.html b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/Recyclebin.html
index 672fc4b4e0a..3a34af87650 100644
--- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/Recyclebin.html
+++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/Recyclebin.html
@@ -32,8 +32,8 @@
@@ -54,9 +54,9 @@
@@ -77,9 +77,9 @@
diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/css/RecycleBin.css b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/css/RecycleBin.css
index aa1c5a537ab..7b59d69253e 100644
--- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/css/RecycleBin.css
+++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/css/RecycleBin.css
@@ -457,6 +457,23 @@ div#recycleBin-header.socialpanelheader .actions {
background: #F2F2F2;
}
+ .recycleBinContainer #pages table.dnnRBGrid tr.dnnRBGridHeader td.pagename,
+ .recycleBinContainer #pages table.dnnRBGrid tr.dnnRBGridHeader td.deleteddate {
+ cursor: pointer;
+ }
+
+ .recycleBinContainer #modules table.dnnRBGrid tr.dnnRBGridHeader td.mtitle,
+ .recycleBinContainer #modules table.dnnRBGrid tr.dnnRBGridHeader td.mpage,
+ .recycleBinContainer #modules table.dnnRBGrid tr.dnnRBGridHeader td.deleteddate {
+ cursor: pointer;
+ }
+
+ .recycleBinContainer #users table.dnnRBGrid tr.dnnRBGridHeader td.username,
+ .recycleBinContainer #users table.dnnRBGrid tr.dnnRBGridHeader td.displayname,
+ .recycleBinContainer #users table.dnnRBGrid tr.dnnRBGridHeader td.deleteddate {
+ cursor: pointer;
+ }
+
.recycleBinContainer table.dnnRBGrid tr.dnnRBGridBody td.thumbnail,
.recycleBinContainer table.dnnRBGrid tr.dnnRBGridBody td.title,
.recycleBinContainer table.dnnRBGrid tr.dnnRBGridBody td.pagename,
diff --git a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/scripts/RecycleBin.ViewModel.js b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/scripts/RecycleBin.ViewModel.js
index e706fbaef99..fdc8bf13422 100644
--- a/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/scripts/RecycleBin.ViewModel.js
+++ b/Dnn.AdminExperience/Dnn.PersonaBar.Extensions/admin/personaBar/Dnn.Recyclebin/scripts/RecycleBin.ViewModel.js
@@ -233,7 +233,7 @@ define(['jquery', 'knockout',
restorePageHandler, removePageHandler, restoreModuleHandler, removeModuleHandler, emptyRecycleBinHandler,
restoreUserHandler, removeUserHandler, restoreSelectedUsersHandler, removeSelectedUsersHandler, userRestoreRevomeOperationsCallback,
Paginate, getDeletedPageList, getDeletedModuleList, getDeletedUserList,
- getService, getViewModel, tabActivated;
+ getService, getViewModel, tabActivated, sortBy;
/* Class properties */
DnnPageRecycleBin.class = 'DnnPageRecycleBin';
@@ -671,7 +671,7 @@ define(['jquery', 'knockout',
var TotalResults = {}
var timeout = null;
- var pageSize=15;
+ var pageSize=20;
Paginate = function(API_METHOD, viewModelProp, elementId){
var element = $(elementId).jScrollPane();
@@ -697,7 +697,7 @@ define(['jquery', 'knockout',
TotalResults[viewModelProp].paginationRequestCount = TotalResults[viewModelProp].paginationRequestCount || 1;
- getService().get(API_METHOD, {pageIndex: TotalResults[viewModelProp].paginationRequestCount++, pageSize: pageSize }, function (data) {
+ getService().get(API_METHOD, {pageIndex: TotalResults[viewModelProp].paginationRequestCount++, pageSize: pageSize, sortType: viewModel.sortType(), sortDirection: viewModel.sortDirection() }, function (data) {
var results = data.Results;
var conditional = TotalResults[viewModelProp].remainingPages-results.length > 0;
@@ -713,29 +713,29 @@ define(['jquery', 'knockout',
var treeOfPages = getTreesOfPages(temp);
treeOfPages.forEach(function(pageTemp) {
viewModel[viewModelProp].push(pageTemp);
- });
- break;
+ });
+ break;
case 'deletedusersList':
results.forEach(function(tempUser){
var user = new UserInfo(tempUser);
viewModel[viewModelProp].push(user)
});
- break;
+ break;
case 'deletedtemplatesList':
results.forEach(function(tempTemplate){
var template = new TemplateInfo(tempTemplate);
viewModel[viewModelProp].push(template);
});
- break;
+ break;
case 'deletedmodulesList':
results.forEach(function(tempModule){
var module = new ModuleInfo(tempModule);
viewModel[viewModelProp].push(module);
});
- break;
+ break;
}
api.reinitialise();
@@ -772,7 +772,7 @@ define(['jquery', 'knockout',
viewModel.deletedpagesList.removeAll();
- getService().get('GetDeletedPageList', {pageIndex:0, pageSize:pageSize}, function (data) {
+ getService().get('GetDeletedPageList', {pageIndex:0, pageSize:pageSize, sortType:viewModel.sortType(), sortDirection:viewModel.sortDirection() }, function (data) {
var results = data.Results;
var viewModelProp = "deletedpagesList";
TotalResults[viewModelProp]={};
@@ -807,7 +807,7 @@ define(['jquery', 'knockout',
viewModel.deletedmodulesList.removeAll();
- getService().get('GetDeletedModuleList', {pageIndex:0, pageSize:pageSize}, function (data) {
+ getService().get('GetDeletedModuleList', {pageIndex:0, pageSize:pageSize, sortType:viewModel.sortType(), sortDirection:viewModel.sortDirection()}, function (data) {
var results = data.Results;
var viewModelPropName = 'deletedmodulesList';
@@ -841,7 +841,7 @@ define(['jquery', 'knockout',
viewModel.deletedUsersReady(false);
viewModel.deletedusersList.removeAll();
- getService().get('GetDeletedUserList', {pageIndex:0, pageSize:pageSize}, function (data) {
+ getService().get('GetDeletedUserList', {pageIndex:0, pageSize:pageSize, sortType:viewModel.sortType(), sortDirection:viewModel.sortDirection()}, function (data) {
var results = data.Results;
var viewModelPropName = "deletedusersList";
TotalResults[viewModelPropName]={};
@@ -879,12 +879,31 @@ define(['jquery', 'knockout',
getViewModel().activeTab(activeTab);
};
+ sortBy = function (section, type, direction) {
+ getViewModel().sortDirection(direction);
+ getViewModel().sortType(type);
+ switch (section) {
+ case "pages":
+ getDeletedPageList(false);
+ break;
+ case "modules":
+ getDeletedModuleList(false);
+ break;
+ case "users":
+ getDeletedUserList(false);
+ break;
+ }
+ }
+
getViewModel = function () {
if (!_viewModel) {
_viewModel = {
resx: _resx,
settings: _settings,
+ sortType: ko.observable(""),
+ sortDirection: ko.observable(""),
+
activeTab: ko.observable(0),
deletedPagesReady: ko.observable(false),
deletedModulesReady: ko.observable(false),
@@ -922,7 +941,10 @@ define(['jquery', 'knockout',
emptyRecycleBin: emptyRecycleBinHandler,
- tabActivated: tabActivated
+ tabActivated: tabActivated,
+
+ sortBy: sortBy
+
};
if (_settings.canViewPages && _settings.canManagePages) {
_viewModel.selectAllPages.subscribe(function (newValue) {
@@ -955,7 +977,7 @@ define(['jquery', 'knockout',
_options = $.extend({}, RECYCLE_BIN_DEFAULT_OPTIONS, _options);
var viewModel = getViewModel();
ko.applyBindings(viewModel, wrapper[0]);
- initPagination();
+ initPagination();
};
DnnPageRecycleBin.prototype.show = function () {
diff --git a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.ConfigConsole.Tests/Dnn.PersonaBar.ConfigConsole.Tests.csproj b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.ConfigConsole.Tests/Dnn.PersonaBar.ConfigConsole.Tests.csproj
index c1ce8e42a08..bcd5cd41737 100644
--- a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.ConfigConsole.Tests/Dnn.PersonaBar.ConfigConsole.Tests.csproj
+++ b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.ConfigConsole.Tests/Dnn.PersonaBar.ConfigConsole.Tests.csproj
@@ -53,8 +53,9 @@
..\..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.1.1\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
+ True
..\..\..\packages\NUnit.3.13.3\lib\net45\nunit.framework.dll
diff --git a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.ConfigConsole.Tests/packages.config b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.ConfigConsole.Tests/packages.config
index 2803397a5de..64025b29336 100644
--- a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.ConfigConsole.Tests/packages.config
+++ b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.ConfigConsole.Tests/packages.config
@@ -4,7 +4,7 @@
-
+
diff --git a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Pages.Tests/Dnn.PersonaBar.Pages.Tests.csproj b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Pages.Tests/Dnn.PersonaBar.Pages.Tests.csproj
index dc345190c18..a88596359e8 100644
--- a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Pages.Tests/Dnn.PersonaBar.Pages.Tests.csproj
+++ b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Pages.Tests/Dnn.PersonaBar.Pages.Tests.csproj
@@ -44,8 +44,9 @@
..\..\..\packages\Castle.Core.5.1.1\lib\net462\Castle.Core.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
+ True
..\..\..\packages\NUnit.3.13.3\lib\net45\nunit.framework.dll
diff --git a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Pages.Tests/packages.config b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Pages.Tests/packages.config
index 50be2a31776..097dba9884d 100644
--- a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Pages.Tests/packages.config
+++ b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Pages.Tests/packages.config
@@ -1,7 +1,7 @@
-
+
diff --git a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Security.Tests/Dnn.PersonaBar.Security.Tests.csproj b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Security.Tests/Dnn.PersonaBar.Security.Tests.csproj
index 3bcbb013aaa..4bafd482692 100644
--- a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Security.Tests/Dnn.PersonaBar.Security.Tests.csproj
+++ b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Security.Tests/Dnn.PersonaBar.Security.Tests.csproj
@@ -44,8 +44,9 @@
..\..\..\packages\Castle.Core.5.1.1\lib\net462\Castle.Core.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
+ True
..\..\..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll
diff --git a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Security.Tests/packages.config b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Security.Tests/packages.config
index bf6b7f680c0..06f4cb0160d 100644
--- a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Security.Tests/packages.config
+++ b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Security.Tests/packages.config
@@ -3,7 +3,7 @@
-
+
diff --git a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Users.Tests/Dnn.PersonaBar.Users.Tests.csproj b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Users.Tests/Dnn.PersonaBar.Users.Tests.csproj
index 9a8fb4c7a3a..971353ec9d3 100644
--- a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Users.Tests/Dnn.PersonaBar.Users.Tests.csproj
+++ b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Users.Tests/Dnn.PersonaBar.Users.Tests.csproj
@@ -45,8 +45,9 @@
..\..\..\packages\Castle.Core.5.1.1\lib\net462\Castle.Core.dll
-
- ..\..\..\packages\Moq.4.18.4\lib\net462\Moq.dll
+
+ ..\..\..\packages\Moq.4.20.70\lib\net462\Moq.dll
+ True
..\..\..\packages\NUnit.3.13.3\lib\net45\nunit.framework.dll
diff --git a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Users.Tests/packages.config b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Users.Tests/packages.config
index 50be2a31776..097dba9884d 100644
--- a/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Users.Tests/packages.config
+++ b/Dnn.AdminExperience/Tests/Dnn.PersonaBar.Users.Tests/packages.config
@@ -1,7 +1,7 @@
-
+
diff --git a/build.ps1 b/build.ps1
index 2c6bffad84c..fde701f22bb 100644
--- a/build.ps1
+++ b/build.ps1
@@ -1,2 +1,2 @@
-dotnet run --project build/Build.csproj -- $args
-exit $LASTEXITCODE;
\ No newline at end of file
+dotnet run --project Build/Build.csproj -- $args
+exit $LASTEXITCODE;
diff --git a/build.sh b/build.sh
index dfd6b854b72..b250f3fb4e5 100644
--- a/build.sh
+++ b/build.sh
@@ -1 +1 @@
-dotnet run --project ./build/Build.csproj -- "$@"
+dotnet run --project ./Build/Build.csproj -- "$@"
diff --git a/yarn.lock b/yarn.lock
index b4278711bd3..311b6e52d3d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1777,7 +1777,7 @@ __metadata:
file-loader: "npm:3.0.1"
interact.js: "npm:^1.2.8"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
react: "npm:^16.14.0"
@@ -5107,7 +5107,7 @@ __metadata:
i18n-webpack-plugin: "npm:1.0.0"
jwt-decode: "npm:2.2.0"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
prop-types: "npm:15.8.1"
raw-loader: "npm:2.0.0"
react: "npm:^16.14.0"
@@ -8239,13 +8239,6 @@ __metadata:
languageName: node
linkType: hard
-"clone@npm:^2.1.1":
- version: 2.1.2
- resolution: "clone@npm:2.1.2"
- checksum: d9c79efba655f0bf601ab299c57eb54cbaa9860fb011aee9d89ed5ac0d12df1660ab7642fddaabb9a26b7eff0e117d4520512cb70798319ff5d30a111b5310c2
- languageName: node
- linkType: hard
-
"clsx@npm:^1.1.0, clsx@npm:^1.1.1":
version: 1.2.1
resolution: "clsx@npm:1.2.1"
@@ -9748,7 +9741,7 @@ __metadata:
eslint-plugin-spellcheck: "npm:0.0.11"
file-loader: "npm:3.0.1"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
react: "npm:^16.14.0"
@@ -9787,7 +9780,7 @@ __metadata:
eslint-plugin-react: "npm:7.33.0"
eslint-plugin-spellcheck: "npm:0.0.11"
less: "npm:4.1.3"
- less-loader: "npm:4.1.0"
+ less-loader: "npm:12.2.0"
null-loader: "npm:^4.0.1"
prop-types: "npm:^15.8.1"
react: "npm:^16.14.0"
@@ -9822,7 +9815,7 @@ __metadata:
eslint-plugin-react: "npm:7.33.0"
eslint-plugin-spellcheck: "npm:0.0.11"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
localization: "npm:^1.0.2"
null-loader: "npm:^4.0.1"
prop-types: "npm:15.8.1"
@@ -11165,7 +11158,7 @@ __metadata:
json-loader: "npm:^0.5.7"
jwt-decode: "npm:2.2.0"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
moment: "npm:^2.29.4"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
@@ -11293,7 +11286,7 @@ __metadata:
eslint-plugin-spellcheck: "npm:0.0.11"
file-loader: "npm:3.0.1"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
react: "npm:^16.14.0"
@@ -11791,12 +11784,12 @@ __metadata:
linkType: hard
"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.15.4":
- version: 1.15.5
- resolution: "follow-redirects@npm:1.15.5"
+ version: 1.15.6
+ resolution: "follow-redirects@npm:1.15.6"
peerDependenciesMeta:
debug:
optional: true
- checksum: d467f13c1c6aa734599b8b369cd7a625b20081af358f6204ff515f6f4116eb440de9c4e0c49f10798eeb0df26c95dd05d5e0d9ddc5786ab1a8a8abefe92929b4
+ checksum: 70c7612c4cab18e546e36b991bbf8009a1a41cf85354afe04b113d1117569abf760269409cb3eb842d9f7b03d62826687086b081c566ea7b1e6613cf29030bf7
languageName: node
linkType: hard
@@ -15383,31 +15376,19 @@ __metadata:
languageName: node
linkType: hard
-"less-loader@npm:4.1.0":
- version: 4.1.0
- resolution: "less-loader@npm:4.1.0"
- dependencies:
- clone: "npm:^2.1.1"
- loader-utils: "npm:^1.1.0"
- pify: "npm:^3.0.0"
+"less-loader@npm:12.2.0":
+ version: 12.2.0
+ resolution: "less-loader@npm:12.2.0"
peerDependencies:
- less: ^2.3.1 || ^3.0.0
- webpack: ^2.0.0 || ^3.0.0 || ^4.0.0
- checksum: a5b4664b1006b796c6668ef88e62edc53dec24a1e0072acc69d2430a54b562d4150d98a18066b077092414505d6f056eb4bdecacd22f5b1c4a5d087a79dfbebc
- languageName: node
- linkType: hard
-
-"less-loader@npm:5.0.0":
- version: 5.0.0
- resolution: "less-loader@npm:5.0.0"
- dependencies:
- clone: "npm:^2.1.1"
- loader-utils: "npm:^1.1.0"
- pify: "npm:^4.0.1"
- peerDependencies:
- less: ^2.3.1 || ^3.0.0
- webpack: ^2.0.0 || ^3.0.0 || ^4.0.0
- checksum: 0dabdfb2e4d961b3fcbfe3e124dee6c63e10f8b0d9903b07bbc3c2d0eb61bcb2ae2cc7b9c94269d0a05b570d536ec571db2be66f625cd547db4b5a7c2bf770b5
+ "@rspack/core": 0.x || 1.x
+ less: ^3.5.0 || ^4.0.0
+ webpack: ^5.0.0
+ peerDependenciesMeta:
+ "@rspack/core":
+ optional: true
+ webpack:
+ optional: true
+ checksum: b9527053460aa82668f33bfbcfc23dbcb9023a9cd55f2f04fa9620e020acc3f032eb2dcb3625a1c3dd8852782c41490e6fde342e3185a477fa41d2f5eb35ca6f
languageName: node
linkType: hard
@@ -15515,7 +15496,7 @@ __metadata:
file-loader: "npm:3.0.1"
jwt-decode: "npm:2.2.0"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
react-hot-loader: "npm:4.13.1"
@@ -18086,7 +18067,7 @@ __metadata:
file-loader: "npm:3.0.1"
jest: "npm:^28.1.3"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
lodash: "npm:4.17.21"
promise: "npm:^8.3.0"
prop-types: "npm:^15.8.1"
@@ -19255,7 +19236,7 @@ __metadata:
jest: "npm:^28.1.3"
jwt-decode: "npm:2.2.0"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
localization: "npm:^1.0.2"
object-assign: "npm:*"
optimize-css-assets-webpack-plugin: "npm:^5.0.8"
@@ -21111,7 +21092,7 @@ __metadata:
file-loader: "npm:3.0.1"
jwt-decode: "npm:2.2.0"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
react: "npm:^16.14.0"
@@ -21384,7 +21365,7 @@ __metadata:
file-loader: "npm:3.0.1"
jwt-decode: "npm:2.2.0"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
react: "npm:^16.14.0"
@@ -21535,7 +21516,7 @@ __metadata:
file-loader: "npm:3.0.1"
jwt-decode: "npm:2.2.0"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
react: "npm:^16.14.0"
@@ -21640,7 +21621,7 @@ __metadata:
eslint-plugin-spellcheck: "npm:0.0.11"
file-loader: "npm:3.0.1"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
null-loader: "npm:^4.0.1"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
@@ -21968,7 +21949,7 @@ __metadata:
i18n-webpack-plugin: "npm:1.0.0"
jwt-decode: "npm:2.2.0"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
localization: "npm:^1.0.2"
prop-types: "npm:^15.8.1"
raw-loader: "npm:^2.0.0"
@@ -22022,7 +22003,7 @@ __metadata:
jest: "npm:^28.1.3"
jwt-decode: "npm:2.2.0"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
react: "npm:^16.14.0"
@@ -22065,7 +22046,7 @@ __metadata:
eslint-plugin-spellcheck: "npm:0.0.11"
file-loader: "npm:3.0.1"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
react: "npm:^16.14.0"
@@ -23106,7 +23087,7 @@ __metadata:
file-loader: "npm:3.0.1"
jwt-decode: "npm:2.2.0"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
react: "npm:^16.14.0"
@@ -23148,7 +23129,7 @@ __metadata:
file-loader: "npm:3.0.1"
jwt-decode: "npm:2.2.0"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
object-path: "npm:0.11.8"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
@@ -23386,7 +23367,7 @@ __metadata:
eslint-plugin-spellcheck: "npm:0.0.11"
file-loader: "npm:3.0.1"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
prop-types: "npm:^15.8.1"
raw-loader: "npm:2.0.0"
react: "npm:^16.14.0"
@@ -24300,7 +24281,7 @@ __metadata:
file-loader: "npm:3.0.1"
jest: "npm:^28.1.3"
less: "npm:4.1.3"
- less-loader: "npm:5.0.0"
+ less-loader: "npm:12.2.0"
localization: "npm:^1.0.2"
null-loader: "npm:^4.0.1"
prop-types: "npm:^15.8.1"
@@ -25233,8 +25214,8 @@ __metadata:
linkType: hard
"ws@npm:^7.3.1":
- version: 7.5.9
- resolution: "ws@npm:7.5.9"
+ version: 7.5.10
+ resolution: "ws@npm:7.5.10"
peerDependencies:
bufferutil: ^4.0.1
utf-8-validate: ^5.0.2
@@ -25243,7 +25224,7 @@ __metadata:
optional: true
utf-8-validate:
optional: true
- checksum: 171e35012934bd8788150a7f46f963e50bac43a4dc524ee714c20f258693ac4d3ba2abadb00838fdac42a47af9e958c7ae7e6f4bc56db047ba897b8a2268cf7c
+ checksum: 9c796b84ba80ffc2c2adcdfc9c8e9a219ba99caa435c9a8d45f9ac593bba325563b3f83edc5eb067cc6d21b9a6bf2c930adf76dd40af5f58a5ca6859e81858f0
languageName: node
linkType: hard