diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index a83ccf833c6..091b838f755 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -41,8 +41,9 @@ Provide any additional context that may be helpful in understanding and/or resol Please add X in at least one of the boxes as appropriate. In order for an issue to be accepted, a developer needs to be able to reproduce the issue on a currently supported version. If you are looking for a workaround for an issue with an older version, please visit the forums at https://dnncommunity.org/forums --> * [ ] 10.0.0 alpha build -* [ ] 9.5.0 alpha build -* [ ] 9.4.4 latest supported release +* [ ] 9.5.1 alpha build +* [ ] 9.5.0 latest supported release +* [ ] 9.4.4 ## Affected browser + + + + + + + + + + diff --git a/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/SimpleWebFarmSynchronizationHandler.cs b/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/SimpleWebFarmSynchronizationHandler.cs new file mode 100644 index 00000000000..9c9be2ed820 --- /dev/null +++ b/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/SimpleWebFarmSynchronizationHandler.cs @@ -0,0 +1,50 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information + +using System.Web; +using DotNetNuke.Common.Utilities; +using DotNetNuke.Entities.Host; +using DotNetNuke.Services.Cache; + +namespace DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider +{ + /// + /// This synchronization handler receives requests from other servers and passes them to the cache system for + /// processing. Error handling is purposefully allowed to bubble up from here to ensure the caller is notified + /// + public class SimpleWebFarmSynchronizationHandler : IHttpHandler + { + public void ProcessRequest(HttpContext context) + { + //Validate the request for required inputs, return if no action possible + if (string.IsNullOrWhiteSpace(context.Request.QueryString["command"])) + return; //No command we cannot process + + if (string.IsNullOrWhiteSpace(context.Request.QueryString["detail"])) + return; //No action we cannot return + + //Only continue if our provider is current + if (!(CachingProvider.Instance() is Caching.SimpleWebFarmCachingProvider.SimpleWebFarmCachingProvider)) + return; + + //Get the values, noting that if in debug we are not encrypted + var command = Host.DebugMode + ? context.Request.QueryString["command"] + : UrlUtils.DecryptParameter(context.Request.QueryString["command"], Host.GUID); + + var detail = Host.DebugMode + ? context.Request.QueryString["detail"] + : UrlUtils.DecryptParameter(context.Request.QueryString["detail"], Host.GUID); + + //Pass the action on, if the current caching provider is ours + var provider = (Caching.SimpleWebFarmCachingProvider.SimpleWebFarmCachingProvider) CachingProvider.Instance(); + provider.ProcessSynchronizationRequest(command, detail); + } + + /// + /// Indicates that this handler can be reused for multiple requests + /// + public bool IsReusable => true; + } +} \ No newline at end of file diff --git a/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/license.txt b/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/license.txt new file mode 100644 index 00000000000..f48f200456e --- /dev/null +++ b/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/license.txt @@ -0,0 +1,3 @@ +Licensed to the .NET Foundation under one or more agreements. +The .NET Foundation licenses this file to you under the MIT license. +See the LICENSE file in the project root for more information. \ No newline at end of file diff --git a/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/releaseNotes.txt b/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/releaseNotes.txt new file mode 100644 index 00000000000..5f282702bb0 --- /dev/null +++ b/DNN Platform/Providers/CachingProviders/DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider/releaseNotes.txt @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Messaging/MessagingControllerTests.cs b/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Messaging/MessagingControllerTests.cs index 56f3cefab1a..04717495aab 100644 --- a/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Messaging/MessagingControllerTests.cs +++ b/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Messaging/MessagingControllerTests.cs @@ -14,8 +14,10 @@ using DotNetNuke.Entities.Portals; using DotNetNuke.Entities.Portals.Internal; using DotNetNuke.Entities.Users; +using DotNetNuke.Security.Permissions; using DotNetNuke.Security.Roles; using DotNetNuke.Services.Cache; +using DotNetNuke.Services.FileSystem; using DotNetNuke.Services.Localization; using DotNetNuke.Services.Social.Messaging.Data; using DotNetNuke.Services.Social.Messaging; @@ -49,6 +51,9 @@ public class MessagingControllerTests private Mock _mockRoleProvider; private Mock _mockCacheProvider; private Mock _mockLocalizationProvider; + private Mock _folderManager; + private Mock _fileManager; + private Mock _folderPermissionController; private DataTable _dtMessages; private DataTable _dtMessageAttachment; @@ -91,12 +96,21 @@ public void SetUp() DataService.RegisterInstance(_mockDataService.Object); + _folderManager = new Mock(); + _fileManager = new Mock(); + _folderPermissionController = new Mock(); + + FolderManager.RegisterInstance(_folderManager.Object); + FileManager.RegisterInstance(_fileManager.Object); + FolderPermissionController.SetTestableInstance(_folderPermissionController.Object); + SetupDataProvider(); SetupRoleProvider(); SetupDataTables(); SetupUsers(); SetupPortalSettings(); SetupCachingProvider(); + SetupFileControllers(); _mockInternalMessagingController.Setup(m => m.GetLastSentMessage(It.IsAny())).Returns((Message)null); } @@ -178,6 +192,13 @@ private void SetupRoleProvider() _mockRoleProvider.Setup(rp => rp.GetUserRoles(It.Is(u => u.UserID == Constants.UserID_FirstSocialGroupOwner), It.IsAny())).Returns(new List { userFirstSocialGroupOwner }); } + private void SetupFileControllers() + { + _folderManager.Setup(f => f.GetFolder(It.IsAny())).Returns(new FolderInfo()); + _fileManager.Setup(f => f.GetFile(It.IsAny())).Returns(new FileInfo()); + _folderPermissionController.Setup(f => f.CanViewFolder(It.IsAny())).Returns(true); + } + #endregion #region Constructor Tests @@ -768,6 +789,8 @@ public void MessagingController_CreateMessage_Calls_DataService_SaveSocialMessag [Test] public void MessagingController_CreateMessage_Calls_DataService_CreateSocialMessageRecipientsForRole_On_Passing_Role_ByAdmin() { + InternalMessagingController.SetTestableInstance(_mockInternalMessagingController.Object); + //Arrange var message = new Message { Subject = "subject", Body = "body" }; var role = new RoleInfo { RoleName = Constants.RoleName_RegisteredUsers, RoleID = Constants.RoleID_RegisteredUsers }; diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Search/InternalSearchControllerTests.cs b/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Search/InternalSearchControllerTests.cs index 9595d5c18b9..1a4bf19a244 100644 --- a/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Search/InternalSearchControllerTests.cs +++ b/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Search/InternalSearchControllerTests.cs @@ -232,7 +232,7 @@ private IDataReader GetPortalCallBack(int portalId, string culture) const int homePage = 1; table.Rows.Add(portalId, null, "My Website", "Logo.png", "Copyright 2011 by DotNetNuke Corporation", null, "2", "0", "2", "USD", "0", "0", "0", "0", "0", "1", "My Website", "DotNetNuke, DNN, Content, Management, CMS", null, - "1057AC7A-3C08-4849-A3A6-3D2AB4662020", null, null, null, "0", "admin@change.me", "en-US", "-8", "58", "Portals/0", + "1057AC7A-3C08-4849-A3A6-3D2AB4662020", null, null, null, "0", "admin@changeme.invalid", "en-US", "-8", "58", "Portals/0", null, homePage.ToString("D"), null, null, "57", "56", "-1", "-1", "7", null, null, "-1", "2011-08-25 07:34:11", "-1", "2011-08-25 07:34:29", culture); return table.CreateDataReader(); diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Search/SearchControllerTests.cs b/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Search/SearchControllerTests.cs index da0c5f12825..ef8f71508a9 100644 --- a/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Search/SearchControllerTests.cs +++ b/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Search/SearchControllerTests.cs @@ -276,7 +276,7 @@ private IDataReader GetPortalCallBack(int portalId, string culture) const int homePage = 1; table.Rows.Add(portalId, null, "My Website", "Logo.png", "Copyright 2011 by DotNetNuke Corporation", null, "2", "0", "2", "USD", "0", "0", "0", "0", "0", "1", "My Website", "DotNetNuke, DNN, Content, Management, CMS", null, - "1057AC7A-3C08-4849-A3A6-3D2AB4662020", null, null, null, "0", "admin@change.me", "en-US", "-8", "58", "Portals/0", + "1057AC7A-3C08-4849-A3A6-3D2AB4662020", null, null, null, "0", "admin@changeme.invalid", "en-US", "-8", "58", "Portals/0", null, homePage.ToString("D"), null, null, "57", "56", "-1", "-1", null, null, "7", "-1", "2011-08-25 07:34:11", "-1", "2011-08-25 07:34:29", culture); return table.CreateDataReader(); diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Search/SearchHelperTests.cs b/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Search/SearchHelperTests.cs index e2a9b392b46..9b1b191e639 100644 --- a/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Search/SearchHelperTests.cs +++ b/DNN Platform/Tests/DotNetNuke.Tests.Core/Controllers/Search/SearchHelperTests.cs @@ -134,7 +134,7 @@ private IDataReader GetPortalCallBack(int portalId, string culture) } var homePage = 1; - table.Rows.Add(portalId, null, "My Website", "Logo.png", "Copyright 2011 by DotNetNuke Corporation", null, "2", "0", "2", "USD", "0", "0", "0", "0", "0", "1", "My Website", "DotNetNuke, DNN, Content, Management, CMS", null, "1057AC7A-3C08-4849-A3A6-3D2AB4662020", null, null, null, "0", "admin@change.me", "en-US", "-8", "58", "Portals/0", null, homePage.ToString(), null, null, "57", "56", "-1", "-1", null, null, "7", "-1", "2011-08-25 07:34:11", "-1", "2011-08-25 07:34:29", culture); + table.Rows.Add(portalId, null, "My Website", "Logo.png", "Copyright 2011 by DotNetNuke Corporation", null, "2", "0", "2", "USD", "0", "0", "0", "0", "0", "1", "My Website", "DotNetNuke, DNN, Content, Management, CMS", null, "1057AC7A-3C08-4849-A3A6-3D2AB4662020", null, null, null, "0", "admin@changeme.invalid", "en-US", "-8", "58", "Portals/0", null, homePage.ToString(), null, null, "57", "56", "-1", "-1", null, null, "7", "-1", "2011-08-25 07:34:11", "-1", "2011-08-25 07:34:29", culture); return table.CreateDataReader(); } diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Core/Services/Mobile/RedirectionControllerTests.cs b/DNN Platform/Tests/DotNetNuke.Tests.Core/Services/Mobile/RedirectionControllerTests.cs index 89f29d5152b..0af5b788e9e 100644 --- a/DNN Platform/Tests/DotNetNuke.Tests.Core/Services/Mobile/RedirectionControllerTests.cs +++ b/DNN Platform/Tests/DotNetNuke.Tests.Core/Services/Mobile/RedirectionControllerTests.cs @@ -731,7 +731,7 @@ private IDataReader GetPortalCallBack(int portalId, string culture) else if (portalId == Portal1) homePage = HomePageOnPortal1; - table.Rows.Add(portalId, null, "My Website", "Logo.png", "Copyright 2011 by DotNetNuke Corporation", null, "2", "0", "2", "USD", "0", "0", "0", "0", "0", "1", "My Website", "DotNetNuke, DNN, Content, Management, CMS", null, "1057AC7A-3C08-4849-A3A6-3D2AB4662020", null, null, null, "0", "admin@change.me", "en-US", "-8", "58", "Portals/0", null, homePage.ToString(), null, null, "57", "56", "-1", "-1", null, null, "7", "-1", "2011-08-25 07:34:11", "-1", "2011-08-25 07:34:29", culture); + table.Rows.Add(portalId, null, "My Website", "Logo.png", "Copyright 2011 by DotNetNuke Corporation", null, "2", "0", "2", "USD", "0", "0", "0", "0", "0", "1", "My Website", "DotNetNuke, DNN, Content, Management, CMS", null, "1057AC7A-3C08-4849-A3A6-3D2AB4662020", null, null, null, "0", "admin@changeme.invalid", "en-US", "-8", "58", "Portals/0", null, homePage.ToString(), null, null, "57", "56", "-1", "-1", null, null, "7", "-1", "2011-08-25 07:34:11", "-1", "2011-08-25 07:34:29", culture); return table.CreateDataReader(); } diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Urls/TestUtil.cs b/DNN Platform/Tests/DotNetNuke.Tests.Urls/TestUtil.cs index a2856632c98..1609e6e983d 100644 --- a/DNN Platform/Tests/DotNetNuke.Tests.Urls/TestUtil.cs +++ b/DNN Platform/Tests/DotNetNuke.Tests.Urls/TestUtil.cs @@ -25,7 +25,7 @@ internal static void AddUser(int portalId, string userName, string password, str { PortalID = portalId, Username = userName, - Email = userName + "@change.me", + Email = userName + "@changeme.invalid", VanityUrl = vanityUrl, Membership = { Password = password, Approved = true } }; diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Web/Api/JwtAuthMessageHandlerTests.cs b/DNN Platform/Tests/DotNetNuke.Tests.Web/Api/JwtAuthMessageHandlerTests.cs index 943a86a8504..8cf3d9fcc31 100644 --- a/DNN Platform/Tests/DotNetNuke.Tests.Web/Api/JwtAuthMessageHandlerTests.cs +++ b/DNN Platform/Tests/DotNetNuke.Tests.Web/Api/JwtAuthMessageHandlerTests.cs @@ -102,7 +102,7 @@ private static IDataReader GetUser() table.Columns.Add("LastModifiedByUserID", typeof(int)); table.Columns.Add("LastModifiedOnDate", typeof(DateTime)); - table.Rows.Add(1, null, "host", "host", "host", "host", 1, "host@change.me", null, null, 0, null, + table.Rows.Add(1, null, "host", "host", "host", "host", 1, "host@changeme.invalid", null, null, 0, null, "127.0.0.1", 0, "8D3C800F-7A40-45D6-BA4D-E59A393F9800", DateTime.Now, null, -1, DateTime.Now, -1, DateTime.Now); return table.CreateDataReader(); @@ -158,7 +158,7 @@ private static IDataReader GetPortalCallBack(int portalId, string culture) table.Rows.Add(portalId, null, "My Website", "Logo.png", "Copyright (c) 2018 DNN Corp.", null, "2", "0", "2", "USD", "0", "0", "0", "0", "0", "1", "My Website", "DotNetNuke, DNN, Content, Management, CMS", null, "1057AC7A-3C08-4849-A3A6-3D2AB4662020", - null, null, null, "0", "admin@change.me", "en-US", "-8", "58", "Portals/0", null, + null, null, null, "0", "admin@changeme.invalid", "en-US", "-8", "58", "Portals/0", null, homePage.ToString(), null, null, "57", "56", "-1", "-1", null, null, "7", "-1", "2011-08-25 07:34:11", "-1", "2011-08-25 07:34:29", culture); diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Web/Api/StandardTabAndModuleInfoProviderTests.cs b/DNN Platform/Tests/DotNetNuke.Tests.Web/Api/StandardTabAndModuleInfoProviderTests.cs index a10a4af52d1..6f2c7b3eaf9 100644 --- a/DNN Platform/Tests/DotNetNuke.Tests.Web/Api/StandardTabAndModuleInfoProviderTests.cs +++ b/DNN Platform/Tests/DotNetNuke.Tests.Web/Api/StandardTabAndModuleInfoProviderTests.cs @@ -99,7 +99,7 @@ private static IDataReader GetPortalCallBack(int portalId, string culture) table.Rows.Add(portalId, null, "My Website", "Logo.png", "Copyright (c) 2018 DNN Corp.", null, "2", "0", "2", "USD", "0", "0", "0", "0", "0", "1", "My Website", "DotNetNuke, DNN, Content, Management, CMS", null, "1057AC7A-3C08-4849-A3A6-3D2AB4662020", - null, null, null, "0", "admin@change.me", "en-US", "-8", "58", "Portals/0", null, + null, null, null, "0", "admin@changeme.invalid", "en-US", "-8", "58", "Portals/0", null, homePage.ToString(), null, null, "57", "56", "-1", "-1", null, null, "7", "-1", "2011-08-25 07:34:11", "-1", "2011-08-25 07:34:29", culture); diff --git a/DNN Platform/Tests/DotNetNuke.Tests.Web/InternalServices/SearchServiceControllerTests.cs b/DNN Platform/Tests/DotNetNuke.Tests.Web/InternalServices/SearchServiceControllerTests.cs index 725ede656a4..c4a5aa3291e 100644 --- a/DNN Platform/Tests/DotNetNuke.Tests.Web/InternalServices/SearchServiceControllerTests.cs +++ b/DNN Platform/Tests/DotNetNuke.Tests.Web/InternalServices/SearchServiceControllerTests.cs @@ -273,7 +273,7 @@ private IDataReader GetUser() table.Columns.Add("LastModifiedByUserID", typeof(int)); table.Columns.Add("LastModifiedOnDate", typeof(DateTime)); - table.Rows.Add(1, null, UserName1, UserName1, UserName1, UserName1, 1, "host@change.me", null, null, 0, null, + table.Rows.Add(1, null, UserName1, UserName1, UserName1, UserName1, 1, "host@changeme.invalid", null, null, 0, null, "127.0.0.1", 0, "8D3C800F-7A40-45D6-BA4D-E59A393F9800", DateTime.Now, null, -1, DateTime.Now, -1, DateTime.Now); return table.CreateDataReader(); @@ -515,7 +515,7 @@ private IDataReader GetPortalCallBack(int portalId, string culture) table.Rows.Add(portalId, null, "My Website", "Logo.png", "Copyright 2011 by DotNetNuke Corporation", null, "2", "0", "2", "USD", "0", "0", "0", "0", "0", "1", "My Website", "DotNetNuke, DNN, Content, Management, CMS", null, "1057AC7A-3C08-4849-A3A6-3D2AB4662020", - null, null, null, "0", "admin@change.me", "en-US", "-8", "58", "Portals/0", null, + null, null, null, "0", "admin@changeme.invalid", "en-US", "-8", "58", "Portals/0", null, homePage.ToString(), null, null, "57", "56", "-1", "-1", null, null, "7", "-1", "2011-08-25 07:34:11", "-1", "2011-08-25 07:34:29", culture); diff --git a/DNN Platform/Website/DesktopModules/Admin/Authentication/Login.ascx.cs b/DNN Platform/Website/DesktopModules/Admin/Authentication/Login.ascx.cs index 0d0d4d40823..28914554ec0 100644 --- a/DNN Platform/Website/DesktopModules/Admin/Authentication/Login.ascx.cs +++ b/DNN Platform/Website/DesktopModules/Admin/Authentication/Login.ascx.cs @@ -40,6 +40,7 @@ using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; using DotNetNuke.Abstractions; +using DotNetNuke.Common.Utils; using Microsoft.Extensions.DependencyInjection; #endregion @@ -866,7 +867,8 @@ private void ValidateUser(UserInfo objUser, bool ignoreExpiring) bool isAdminUser = objUser.IsSuperUser || objUser.IsInRole(PortalSettings.AdministratorRoleName); if (isAdminUser) { - if (IPFilterController.Instance.IsIPBanned(Request.UserHostAddress)) + var clientIp = NetworkUtils.GetClientIpAddress(Request); + if (IPFilterController.Instance.IsIPBanned(clientIp)) { PortalSecurity.Instance.SignOut(); AddModuleMessage("IPAddressBanned", ModuleMessage.ModuleMessageType.RedError, true); diff --git a/DNN Platform/Website/DesktopModules/Admin/Security/DataConsent.ascx b/DNN Platform/Website/DesktopModules/Admin/Security/DataConsent.ascx index 6a099a7d776..0d8d08f062c 100644 --- a/DNN Platform/Website/DesktopModules/Admin/Security/DataConsent.ascx +++ b/DNN Platform/Website/DesktopModules/Admin/Security/DataConsent.ascx @@ -19,14 +19,3 @@ - - \ No newline at end of file diff --git a/DNN Platform/Website/DesktopModules/Admin/Security/DataConsent.ascx.cs b/DNN Platform/Website/DesktopModules/Admin/Security/DataConsent.ascx.cs index 72f6cd18b78..8452cc0d39b 100644 --- a/DNN Platform/Website/DesktopModules/Admin/Security/DataConsent.ascx.cs +++ b/DNN Platform/Website/DesktopModules/Admin/Security/DataConsent.ascx.cs @@ -59,6 +59,8 @@ protected override void OnLoad(EventArgs e) cmdSubmit.Enabled = false; pnlNoAgreement.Visible = false; } + chkAgree.Attributes.Add("onclick", string.Format("document.getElementById('{0}').disabled = !this.checked;", cmdSubmit.ClientID)); + cmdDeleteMe.Attributes.Add("onclick", string.Format("if (!confirm('{0}')) this.preventDefault();", DeleteMeConfirmString)); } private void cmdCancel_Click(object sender, EventArgs e) { diff --git a/DNN Platform/Website/Install/DotNetNuke.install.config.resources b/DNN Platform/Website/Install/DotNetNuke.install.config.resources index a58adf06a2c..5767bea11c0 100644 --- a/DNN Platform/Website/Install/DotNetNuke.install.config.resources +++ b/DNN Platform/Website/Install/DotNetNuke.install.config.resources @@ -12,7 +12,7 @@ Account host dnnhost - host@change.me + host@changeme.invalid en-US false @@ -89,7 +89,7 @@ Account admin dnnadmin - admin@change.me + admin@changeme.invalid My Website DotNetNuke, DNN, Content, Management, CMS diff --git a/DNN Platform/Website/Portals/_default/admin.css b/DNN Platform/Website/Portals/_default/admin.css index 8d0c472ccf4..190908156be 100644 --- a/DNN Platform/Website/Portals/_default/admin.css +++ b/DNN Platform/Website/Portals/_default/admin.css @@ -129,7 +129,6 @@ } /* Sub ul */ ul.dnnActionMenuBody li ul { - /*display:inline-block;*/ margin:0 0 12px 0; } ul.dnnActionMenuBody li ul li { @@ -149,7 +148,7 @@ } /* List of Form Actions */ .dnnActions { - display:inline-block; + display:block; } .dnnActions li { margin-right:5px; diff --git a/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/09.05.01.SqlDataProvider b/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/09.05.01.SqlDataProvider index 940fe347e5a..853b2e29b19 100644 --- a/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/09.05.01.SqlDataProvider +++ b/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/09.05.01.SqlDataProvider @@ -33,8 +33,7 @@ BEGIN WHERE [EmailSchedulerInstance] IS NULL AND [EmailFrequency] = @Frequency GROUP BY UserID - ORDER BY UserID) D ON R.UserID = D.UserID - + ORDER BY UserID) D ON R.UserID = D.UserID SELECT M.[PortalID], M.[NotificationTypeID], M.[To], diff --git a/DNN Platform/Website/Resources/Shared/scripts/jquery/jquery.fileupload.js b/DNN Platform/Website/Resources/Shared/scripts/jquery/jquery.fileupload.js index e185bdbc81c..de4ae1c4981 100644 --- a/DNN Platform/Website/Resources/Shared/scripts/jquery/jquery.fileupload.js +++ b/DNN Platform/Website/Resources/Shared/scripts/jquery/jquery.fileupload.js @@ -16,7 +16,7 @@ 'use strict'; if (typeof define === 'function' && define.amd) { // Register as an anonymous AMD module: - define(['jquery', 'jquery-ui/ui/widget'], factory); + define(['jquery', 'jquery.ui.widget'], factory); } else if (typeof exports === 'object') { // Node/CommonJS: factory(require('jquery'), require('./vendor/jquery.ui.widget')); diff --git a/DNN_Platform.sln b/DNN_Platform.sln index b5cbcb9f455..0cffbf15bfa 100644 --- a/DNN_Platform.sln +++ b/DNN_Platform.sln @@ -491,6 +491,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dnn.PersonaBar.Users.Tests" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetNuke.Abstractions", "DNN Platform\DotNetNuke.Abstractions\DotNetNuke.Abstractions.csproj", "{6928A9B1-F88A-4581-A132-D3EB38669BB0}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Caching", "Caching", "{EC1BEDFA-6DD4-48AD-9326-8274436539E6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider", "DNN Platform\Providers\CachingProviders\DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider\DotNetNuke.Providers.Caching.SimpleWebFarmCachingProvider.csproj", "{2C25580C-A971-4F0B-9F70-436A35C2473E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Cloud_Debug|Any CPU = Cloud_Debug|Any CPU @@ -1881,6 +1885,30 @@ Global {6928A9B1-F88A-4581-A132-D3EB38669BB0}.Release-Net45|Any CPU.Build.0 = Release|Any CPU {6928A9B1-F88A-4581-A132-D3EB38669BB0}.Release-Net45|x86.ActiveCfg = Release|Any CPU {6928A9B1-F88A-4581-A132-D3EB38669BB0}.Release-Net45|x86.Build.0 = Release|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Cloud_Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Cloud_Debug|Any CPU.Build.0 = Debug|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Cloud_Debug|x86.ActiveCfg = Debug|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Cloud_Debug|x86.Build.0 = Debug|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Cloud_Release|Any CPU.ActiveCfg = Release|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Cloud_Release|Any CPU.Build.0 = Release|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Cloud_Release|x86.ActiveCfg = Release|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Cloud_Release|x86.Build.0 = Release|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Debug|x86.ActiveCfg = Debug|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Debug|x86.Build.0 = Debug|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Debug-Net45|Any CPU.ActiveCfg = Debug|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Debug-Net45|Any CPU.Build.0 = Debug|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Debug-Net45|x86.ActiveCfg = Debug|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Debug-Net45|x86.Build.0 = Debug|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Release|Any CPU.Build.0 = Release|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Release|x86.ActiveCfg = Release|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Release|x86.Build.0 = Release|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Release-Net45|Any CPU.ActiveCfg = Release|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Release-Net45|Any CPU.Build.0 = Release|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Release-Net45|x86.ActiveCfg = Release|Any CPU + {2C25580C-A971-4F0B-9F70-436A35C2473E}.Release-Net45|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1984,6 +2012,8 @@ Global {A64708EF-4972-48A3-B7B9-6B65E47EFE27} = {8EB4193C-A708-4DA0-9F2A-F5B7599F6F8F} {15506C01-A730-46B9-8571-99C20226AAE6} = {8EB4193C-A708-4DA0-9F2A-F5B7599F6F8F} {6928A9B1-F88A-4581-A132-D3EB38669BB0} = {29273BE6-1AA8-4970-98A0-41BFFEEDA67B} + {EC1BEDFA-6DD4-48AD-9326-8274436539E6} = {5D82591D-1525-40A1-ACA3-1F89D817E9AD} + {2C25580C-A971-4F0B-9F70-436A35C2473E} = {EC1BEDFA-6DD4-48AD-9326-8274436539E6} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {46B6A641-57EB-4B19-B199-23E6FC2AB40B} diff --git a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json index 3ec9ccc728b..bb2a8325f76 100644 --- a/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json +++ b/Dnn.AdminExperience/ClientSide/Bundle.Web/package.json @@ -5,6 +5,7 @@ "scripts": { "build": "set NODE_ENV=production&&webpack -p --progress", "debug": "set NODE_ENV=debug&&webpack -p --progress", + "watch": "set NODE_ENV=debug & webpack --mode=development --progress --colors --watch", "webpack": "webpack-dev-server -d --port 8070 --hot --inline --content-base dist/ --history-api-fallback", "analyze": "set NODE_ENV=production&&webpack --config webpack.config.js --profile --json > stats.json&&webpack-bundle-analyzer stats.json" }, diff --git a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/RoleGroupFilter/style.less b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/RoleGroupFilter/style.less index 55d30f85f64..a5c2c0bf74b 100644 --- a/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/RoleGroupFilter/style.less +++ b/Dnn.AdminExperience/ClientSide/Dnn.React.Common/src/PermissionGrid/RoleGroupFilter/style.less @@ -89,7 +89,7 @@ .page-value { >div { font-size: 15px; - text-indent: 20px; + margin-left: 20px; line-height: 16px; svg { width: 16px; @@ -104,10 +104,10 @@ } } &.text-with-page-icon { - text-indent: 40px; + margin-left: 40px; } &.no-icon { - text-indent: 0px; + margin-left: 0px; } &:hover { color: @curiousBlue; diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/src/__tests__/prompt/__snapshots__/ui.test.js.snap b/Dnn.AdminExperience/ClientSide/Prompt.Web/src/__tests__/prompt/__snapshots__/ui.test.js.snap index f066e119cb0..f04c1bd0418 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/src/__tests__/prompt/__snapshots__/ui.test.js.snap +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/src/__tests__/prompt/__snapshots__/ui.test.js.snap @@ -87998,13 +87998,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -88159,13 +88159,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -88320,13 +88320,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -88578,13 +88578,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -88776,13 +88776,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -88974,13 +88974,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -89172,13 +89172,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -89444,13 +89444,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -89605,13 +89605,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -89766,13 +89766,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -90024,13 +90024,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -90222,13 +90222,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -90420,13 +90420,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, @@ -90618,13 +90618,13 @@ initialize { Object { "attribs": Object { "class": "dnn-prompt-cmd-insert", - "data-cmd": "get-user 'host@change.me'", + "data-cmd": "get-user 'host@changeme.invalid'", "href": "#", - "title": "get-user "host@change.me"", + "title": "get-user "host@changeme.invalid"", }, "children": Array [ Object { - "data": "host@change.me", + "data": "host@changeme.invalid", "next": null, "parent": [Circular], "prev": null, diff --git a/Dnn.AdminExperience/ClientSide/Prompt.Web/src/__tests__/prompt/ui.test.js b/Dnn.AdminExperience/ClientSide/Prompt.Web/src/__tests__/prompt/ui.test.js index 13c81810d16..53a5f4cbd7d 100644 --- a/Dnn.AdminExperience/ClientSide/Prompt.Web/src/__tests__/prompt/ui.test.js +++ b/Dnn.AdminExperience/ClientSide/Prompt.Web/src/__tests__/prompt/ui.test.js @@ -125,14 +125,14 @@ describe("UI snapshots for state change", () => { const rows = [ { - Email: "host@change.me", + Email: "host@changeme.invalid", IsAuthorized: true, IsDeleted: false, IsLockedOut: false, LastLogin: "2018-01-04", UserId: 1, Username: "host", - __Email: "get-user 'host@change.me'", + __Email: "get-user 'host@changeme.invalid'", __UserId: "get-user 1", __Username: "get-user 'host'" } diff --git a/Dnn.AdminExperience/Library/Dnn.PersonaBar.Library/Repository/PersonaBarRepository.cs b/Dnn.AdminExperience/Library/Dnn.PersonaBar.Library/Repository/PersonaBarRepository.cs index 95d64771733..1634a67feed 100644 --- a/Dnn.AdminExperience/Library/Dnn.PersonaBar.Library/Repository/PersonaBarRepository.cs +++ b/Dnn.AdminExperience/Library/Dnn.PersonaBar.Library/Repository/PersonaBarRepository.cs @@ -50,12 +50,12 @@ public PersonaBarMenu GetMenu() public MenuItem GetMenuItem(string identifier) { - return GetMenu().AllItems.FirstOrDefault(m => m.Identifier.Equals(identifier, StringComparison.InvariantCultureIgnoreCase)); + return GetMenu().AllItems.ToList().FirstOrDefault(m => m.Identifier.Equals(identifier, StringComparison.InvariantCultureIgnoreCase)); } public MenuItem GetMenuItem(int menuId) { - return GetMenu().AllItems.FirstOrDefault(m => m.MenuId == menuId); + return GetMenu().AllItems.ToList().FirstOrDefault(m => m.MenuId == menuId); } public void SaveMenuItem(MenuItem item) diff --git a/build.cake b/build.cake index 3757d16d682..3907e163be4 100644 --- a/build.cake +++ b/build.cake @@ -58,7 +58,7 @@ Setup(context => if(Settings.Version == "auto" && !isRunningInCI){ // Temporarelly commit all changes to prevent checking in scripted changes like versioning. StartPowershellScript("git add ."); - StartPowershellScript("git commit -m 'backup'"); + StartPowershellScript("git commit --allow-empty -m 'backup'"); } }); diff --git a/package.json b/package.json index c91a33f2ee1..365028aea31 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "scripts": { "build": "lerna run build --stream", "debug": "lerna run debug --stream", + "watch": "lerna run watch --stream", "package": "lerna run package", "clean": "lerna run clean", "lint": "lerna run lint",