diff --git a/src/Umbraco.Core/Auditing/AuditEventHandler.cs b/src/Umbraco.Core/Auditing/AuditEventHandler.cs index 1472f293d1..7c25fc48ac 100644 --- a/src/Umbraco.Core/Auditing/AuditEventHandler.cs +++ b/src/Umbraco.Core/Auditing/AuditEventHandler.cs @@ -62,9 +62,8 @@ namespace Umbraco.Core.Auditing BackOfficeUserManager.PasswordChanged += OnPasswordChanged; BackOfficeUserManager.PasswordReset += OnPasswordReset; //BackOfficeUserManager.ResetAccessFailedCount += ; - - UserService.SavedUserGroup += OnSavedUserGroup; - UserService.SavedUserGroupWithUsers += OnSavedUserGroupWithUsers; + + UserService.SavedUserGroup2 += OnSavedUserGroupWithUsers; UserService.SavedUser += OnSavedUser; UserService.DeletedUser += OnDeletedUser; @@ -116,13 +115,14 @@ namespace Umbraco.Core.Auditing } } - private void OnSavedUserGroup(IUserService sender, SaveEventArgs saveEventArgs) + private void OnSavedUserGroupWithUsers(IUserService sender, SaveEventArgs saveEventArgs) { var performingUser = CurrentPerformingUser; - var groups = saveEventArgs.SavedEntities; - foreach (var group in groups) + foreach (var groupWithUser in saveEventArgs.SavedEntities) { - var dp = string.Join(", ", ((UserGroup) group).GetPreviouslyDirtyProperties()); + var group = groupWithUser.UserGroup; + + var dp = string.Join(", ", ((UserGroup)group).GetPreviouslyDirtyProperties()); var sections = ((UserGroup)group).WasPropertyDirty("AllowedSections") ? string.Join(", ", group.AllowedSections) : null; @@ -145,57 +145,52 @@ namespace Umbraco.Core.Auditing DateTime.Now, -1, $"User Group {group.Id} \"{group.Name}\" ({group.Alias})", "umbraco/user-group/save", $"{sb}"); - } - } - private void OnSavedUserGroupWithUsers(IUserService sender, SaveUserGroupWithUsersEventArgs saveUserGroupWithUsersEventArgs) - { - var performingUser = CurrentPerformingUser; - var group = saveUserGroupWithUsersEventArgs.UserGroup; + //Now audit the users that have changed + if (groupWithUser.RemovedUsers.Length == 0 && groupWithUser.AddedUsers.Length == 0) + return; - if (saveUserGroupWithUsersEventArgs.RemovedUsers.Length == 0 && saveUserGroupWithUsersEventArgs.AddedUsers.Length == 0) - return; - - var sb = new StringBuilder(); - if (saveUserGroupWithUsersEventArgs.RemovedUsers.Length > 0) - { - sb.Append("Removed: "); - var first = true; - foreach (var user in saveUserGroupWithUsersEventArgs.RemovedUsers) + var sb2 = new StringBuilder(); + if (groupWithUser.RemovedUsers.Length > 0) { - if (first) first = false; - else sb.Append(", "); - sb.Append(user.Name); - sb.Append(" ["); - sb.Append(user.Id); - sb.Append("] <"); - sb.Append(user.Email); - sb.Append(">"); + sb2.Append("Removed: "); + var first = true; + foreach (var user in groupWithUser.RemovedUsers) + { + if (first) first = false; + else sb2.Append(", "); + sb2.Append(user.Name); + sb2.Append(" ["); + sb2.Append(user.Id); + sb2.Append("] <"); + sb2.Append(user.Email); + sb2.Append(">"); + } + sb2.Append(". "); } - sb.Append(". "); - } - if (saveUserGroupWithUsersEventArgs.AddedUsers.Length > 0) - { - sb.Append("Added: "); - var first = true; - foreach (var user in saveUserGroupWithUsersEventArgs.AddedUsers) + if (groupWithUser.AddedUsers.Length > 0) { - if (first) first = false; - else sb.Append(", "); - sb.Append(user.Name); - sb.Append(" ["); - sb.Append(user.Id); - sb.Append("] <"); - sb.Append(user.Email); - sb.Append(">"); + sb2.Append("Added: "); + var first = true; + foreach (var user in groupWithUser.AddedUsers) + { + if (first) first = false; + else sb2.Append(", "); + sb2.Append(user.Name); + sb2.Append(" ["); + sb2.Append(user.Id); + sb2.Append("] <"); + sb2.Append(user.Email); + sb2.Append(">"); + } + sb2.Append(". "); } - sb.Append(". "); - } - _auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp, - DateTime.Now, - -1, $"User Group {group.Id} \"{group.Name}\" ({group.Alias})", - "umbraco/user-group/save", $"{sb}"); + _auditServiceInstance.Write(performingUser.Id, $"User \"{performingUser.Name}\" {FormatEmail(performingUser)}", PerformingIp, + DateTime.Now, + -1, $"User Group {group.Id} \"{group.Name}\" ({group.Alias})", + "umbraco/user-group/save", $"{sb2}"); + } } private void UserGroupPermissionAssigned(IUserService sender, SaveEventArgs saveEventArgs) diff --git a/src/Umbraco.Core/Events/SaveUserGroupWithUsersEventArgs.cs b/src/Umbraco.Core/Events/UserGroupWithUsers.cs similarity index 67% rename from src/Umbraco.Core/Events/SaveUserGroupWithUsersEventArgs.cs rename to src/Umbraco.Core/Events/UserGroupWithUsers.cs index 984ad9361c..b69650d33f 100644 --- a/src/Umbraco.Core/Events/SaveUserGroupWithUsersEventArgs.cs +++ b/src/Umbraco.Core/Events/UserGroupWithUsers.cs @@ -3,9 +3,9 @@ using Umbraco.Core.Models.Membership; namespace Umbraco.Core.Events { - internal class SaveUserGroupWithUsersEventArgs : EventArgs + internal class UserGroupWithUsers { - public SaveUserGroupWithUsersEventArgs(IUserGroup userGroup, IUser[] addedUsers, IUser[] removedUsers) + public UserGroupWithUsers(IUserGroup userGroup, IUser[] addedUsers, IUser[] removedUsers) { UserGroup = userGroup; AddedUsers = addedUsers; diff --git a/src/Umbraco.Core/Services/UserService.cs b/src/Umbraco.Core/Services/UserService.cs index 2260379d3e..0c8b82b092 100644 --- a/src/Umbraco.Core/Services/UserService.cs +++ b/src/Umbraco.Core/Services/UserService.cs @@ -961,8 +961,11 @@ namespace Umbraco.Core.Services removedUsers = groupIds.Except(userIds).Select(x => xGroupUsers[x]).Where(x => x.Id != 0).ToArray(); } + //raise 2x events - the old and new one for backwards compat reasons var saveEventArgs = new SaveEventArgs(userGroup); - if (raiseEvents && uow.Events.DispatchCancelable(SavingUserGroup, this, saveEventArgs)) + var saveEventArgs2 = new SaveEventArgs(new UserGroupWithUsers(userGroup, addedUsers, removedUsers)); + if (raiseEvents && + (uow.Events.DispatchCancelable(SavingUserGroup, this, saveEventArgs) || uow.Events.DispatchCancelable(SavingUserGroup2, this, saveEventArgs2))) { uow.Commit(); return; @@ -976,8 +979,10 @@ namespace Umbraco.Core.Services if (raiseEvents) { saveEventArgs.CanCancel = false; + + //raise 2x events - the old and new one for backwards compat reasons uow.Events.Dispatch(SavedUserGroup, this, saveEventArgs); - uow.Events.Dispatch(SavedUserGroupWithUsers, this, new SaveUserGroupWithUsersEventArgs(userGroup, addedUsers, removedUsers)); + uow.Events.Dispatch(SavedUserGroup2, this, saveEventArgs2); } } } @@ -1308,17 +1313,24 @@ namespace Umbraco.Core.Services /// /// Occurs before Save /// + //TODO: In v8, change this event to be SaveEventArgs and remove SavingUserGroup2 public static event TypedEventHandler> SavingUserGroup; /// /// Occurs after Save /// + //TODO: In v8, change this event to be SaveEventArgs and remove SavedUserGroup2 public static event TypedEventHandler> SavedUserGroup; /// /// Occurs after Save /// - internal static event TypedEventHandler SavedUserGroupWithUsers; + internal static event TypedEventHandler> SavingUserGroup2; + + /// + /// Occurs after Save + /// + internal static event TypedEventHandler> SavedUserGroup2; /// /// Occurs before Delete diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 9cec7ec857..ed9aa9699d 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -356,7 +356,7 @@ - +