diff --git a/src/Umbraco.Core/Editors/EditorModelEventArgs.cs b/src/Umbraco.Core/Editors/EditorModelEventArgs.cs deleted file mode 100644 index da7f0ba9cb..0000000000 --- a/src/Umbraco.Core/Editors/EditorModelEventArgs.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using Umbraco.Cms.Core.Web; - -namespace Umbraco.Cms.Core.Editors -{ - public sealed class EditorModelEventArgs : EditorModelEventArgs - { - private readonly EditorModelEventArgs _baseArgs; - private T _model; - - public EditorModelEventArgs(EditorModelEventArgs baseArgs) - : base(baseArgs.Model, baseArgs.UmbracoContext) - { - _baseArgs = baseArgs; - Model = (T)baseArgs.Model; - } - - public EditorModelEventArgs(T model, IUmbracoContext umbracoContext) - : base(model, umbracoContext) - { - Model = model; - } - - public new T Model - { - get => _model; - set - { - _model = value; - if (_baseArgs != null) - _baseArgs.Model = _model; - } - } - } - - public class EditorModelEventArgs : EventArgs - { - public EditorModelEventArgs(object model, IUmbracoContext umbracoContext) - { - Model = model; - UmbracoContext = umbracoContext; - } - - public object Model { get; set; } - public IUmbracoContext UmbracoContext { get; } - } -} diff --git a/src/Umbraco.Core/Mail/IEmailSender.cs b/src/Umbraco.Core/Mail/IEmailSender.cs index b5b353455d..0b4b135d03 100644 --- a/src/Umbraco.Core/Mail/IEmailSender.cs +++ b/src/Umbraco.Core/Mail/IEmailSender.cs @@ -9,5 +9,7 @@ namespace Umbraco.Cms.Core.Mail public interface IEmailSender { Task SendAsync(EmailMessage message); + + bool CanSendRequiredEmail(); } } diff --git a/src/Umbraco.Core/Mail/NotImplementedEmailSender.cs b/src/Umbraco.Core/Mail/NotImplementedEmailSender.cs index 45e7925764..b7c7d43fb6 100644 --- a/src/Umbraco.Core/Mail/NotImplementedEmailSender.cs +++ b/src/Umbraco.Core/Mail/NotImplementedEmailSender.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Threading.Tasks; using Umbraco.Cms.Core.Models; @@ -8,5 +8,8 @@ namespace Umbraco.Cms.Core.Mail { public Task SendAsync(EmailMessage message) => throw new NotImplementedException("To send an Email ensure IEmailSender is implemented with a custom implementation"); + + public bool CanSendRequiredEmail() + => throw new NotImplementedException("To send an Email ensure IEmailSender is implemented with a custom implementation"); } } diff --git a/src/Umbraco.Infrastructure/EmailSender.cs b/src/Umbraco.Infrastructure/EmailSender.cs index fe18301295..a21f4c50db 100644 --- a/src/Umbraco.Infrastructure/EmailSender.cs +++ b/src/Umbraco.Infrastructure/EmailSender.cs @@ -1,14 +1,12 @@ -// Copyright (c) Umbraco. +// Copyright (c) Umbraco. // See LICENSE for more details. -using System; using System.Net.Mail; using System.Threading.Tasks; using Microsoft.Extensions.Options; using MimeKit; using MimeKit.Text; using Umbraco.Cms.Core.Configuration.Models; -using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Mail; using Umbraco.Cms.Core.Models; using SmtpClient = MailKit.Net.Smtp.SmtpClient; @@ -23,50 +21,8 @@ namespace Umbraco.Cms.Infrastructure // TODO: This should encapsulate a BackgroundTaskRunner with a queue to send these emails! private readonly GlobalSettings _globalSettings; - private readonly bool _enableEvents; - public EmailSender(IOptions globalSettings) : this(globalSettings, false) - { - } - - public EmailSender(IOptions globalSettings, bool enableEvents) - { - _globalSettings = globalSettings.Value; - _enableEvents = enableEvents; - - _smtpConfigured = new Lazy(() => _globalSettings.IsSmtpServerConfigured); - } - - private readonly Lazy _smtpConfigured; - - /// - /// Sends the message non-async - /// - /// - public void Send(EmailMessage message) - { - if (_smtpConfigured.Value == false && _enableEvents) - { - OnSendEmail(new SendEmailEventArgs(message)); - } - else if (_smtpConfigured.Value == true) - { - using (var client = new SmtpClient()) - { - client.Connect(_globalSettings.Smtp.Host, - _globalSettings.Smtp.Port, - (MailKit.Security.SecureSocketOptions)(int)_globalSettings.Smtp.SecureSocketOptions); - - if (!(_globalSettings.Smtp.Username is null && _globalSettings.Smtp.Password is null)) - { - client.Authenticate(_globalSettings.Smtp.Username, _globalSettings.Smtp.Password); - } - - client.Send(ConstructEmailMessage(message)); - client.Disconnect(true); - } - } - } + public EmailSender(IOptions globalSettings) => _globalSettings = globalSettings.Value; /// /// Sends the message async @@ -75,35 +31,33 @@ namespace Umbraco.Cms.Infrastructure /// public async Task SendAsync(EmailMessage message) { - if (_smtpConfigured.Value == false && _enableEvents) + if (_globalSettings.IsSmtpServerConfigured == false) { - OnSendEmail(new SendEmailEventArgs(message)); + return; } - else if (_smtpConfigured.Value == true) + + using (var client = new SmtpClient()) { - using (var client = new SmtpClient()) + await client.ConnectAsync(_globalSettings.Smtp.Host, + _globalSettings.Smtp.Port, + (MailKit.Security.SecureSocketOptions)(int)_globalSettings.Smtp.SecureSocketOptions); + + if (!(_globalSettings.Smtp.Username is null && _globalSettings.Smtp.Password is null)) { - await client.ConnectAsync(_globalSettings.Smtp.Host, - _globalSettings.Smtp.Port, - (MailKit.Security.SecureSocketOptions)(int)_globalSettings.Smtp.SecureSocketOptions); - - if (!(_globalSettings.Smtp.Username is null && _globalSettings.Smtp.Password is null)) - { - await client.AuthenticateAsync(_globalSettings.Smtp.Username, _globalSettings.Smtp.Password); - } - - var mailMessage = ConstructEmailMessage(message); - if (_globalSettings.Smtp.DeliveryMethod == SmtpDeliveryMethod.Network) - { - await client.SendAsync(mailMessage); - } - else - { - client.Send(mailMessage); - } - - await client.DisconnectAsync(true); + await client.AuthenticateAsync(_globalSettings.Smtp.Username, _globalSettings.Smtp.Password); } + + var mailMessage = ConstructEmailMessage(message); + if (_globalSettings.Smtp.DeliveryMethod == SmtpDeliveryMethod.Network) + { + await client.SendAsync(mailMessage); + } + else + { + client.Send(mailMessage); + } + + await client.DisconnectAsync(true); } } @@ -113,25 +67,7 @@ namespace Umbraco.Cms.Infrastructure /// /// We assume this is possible if either an event handler is registered or an smtp server is configured /// - public static bool CanSendRequiredEmail(GlobalSettings globalSettings) => EventHandlerRegistered || globalSettings.IsSmtpServerConfigured; - - /// - /// returns true if an event handler has been registered - /// - internal static bool EventHandlerRegistered - { - get { return SendEmail != null; } - } - - /// - /// An event that is raised when no smtp server is configured if events are enabled - /// - internal static event EventHandler SendEmail; - - private static void OnSendEmail(SendEmailEventArgs e) - { - SendEmail?.Invoke(null, e); - } + public bool CanSendRequiredEmail() => _globalSettings.IsSmtpServerConfigured; private MimeMessage ConstructEmailMessage(EmailMessage mailMessage) { diff --git a/src/Umbraco.Web.BackOffice/Controllers/BackOfficeServerVariables.cs b/src/Umbraco.Web.BackOffice/Controllers/BackOfficeServerVariables.cs index 14be214c70..789dbfd752 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/BackOfficeServerVariables.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/BackOfficeServerVariables.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; @@ -11,6 +11,7 @@ using Umbraco.Cms.Core.Configuration; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.Features; using Umbraco.Cms.Core.Hosting; +using Umbraco.Cms.Core.Mail; using Umbraco.Cms.Core.Media; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Services; @@ -49,6 +50,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers private readonly IBackOfficeExternalLoginProviders _externalLogins; private readonly IImageUrlGenerator _imageUrlGenerator; private readonly PreviewRoutes _previewRoutes; + private readonly IEmailSender _emailSender; public BackOfficeServerVariables( LinkGenerator linkGenerator, @@ -65,7 +67,8 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers IRuntimeMinifier runtimeMinifier, IBackOfficeExternalLoginProviders externalLogins, IImageUrlGenerator imageUrlGenerator, - PreviewRoutes previewRoutes) + PreviewRoutes previewRoutes, + IEmailSender emailSender) { _linkGenerator = linkGenerator; _runtimeState = runtimeState; @@ -82,6 +85,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers _externalLogins = externalLogins; _imageUrlGenerator = imageUrlGenerator; _previewRoutes = previewRoutes; + _emailSender = emailSender; } /// @@ -398,8 +402,8 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers {"allowPasswordReset", _securitySettings.AllowPasswordReset}, {"loginBackgroundImage", _contentSettings.LoginBackgroundImage}, {"loginLogoImage", _contentSettings.LoginLogoImage }, - {"showUserInvite", EmailSender.CanSendRequiredEmail(globalSettings)}, - {"canSendRequiredEmail", EmailSender.CanSendRequiredEmail(globalSettings)}, + {"showUserInvite", _emailSender.CanSendRequiredEmail()}, + {"canSendRequiredEmail", _emailSender.CanSendRequiredEmail()}, {"showAllowSegmentationForDocumentTypes", false}, } }, diff --git a/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs b/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs index 7bf6dcfd1b..da19fa473a 100644 --- a/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs +++ b/src/Umbraco.Web.BackOffice/Controllers/UsersController.cs @@ -447,7 +447,7 @@ namespace Umbraco.Cms.Web.BackOffice.Controllers return new ValidationErrorResult(new SimpleValidationModel(ModelState.ToErrorDictionary())); } - if (!EmailSender.CanSendRequiredEmail(_globalSettings) && !_userManager.HasSendingUserInviteEventHandler) + if (!_emailSender.CanSendRequiredEmail() && !_userManager.HasSendingUserInviteEventHandler) { return new ValidationErrorResult("No Email server is configured"); } diff --git a/src/Umbraco.Web.BackOffice/Filters/EditorModelEventManager.cs b/src/Umbraco.Web.BackOffice/Filters/EditorModelEventManager.cs deleted file mode 100644 index a76b1a4091..0000000000 --- a/src/Umbraco.Web.BackOffice/Filters/EditorModelEventManager.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System.Collections.Generic; -using Microsoft.AspNetCore.Mvc.Filters; -using Umbraco.Cms.Core.Dashboards; -using Umbraco.Cms.Core.Editors; -using Umbraco.Cms.Core.Events; -using Umbraco.Cms.Core.Models.ContentEditing; - -namespace Umbraco.Cms.Web.BackOffice.Filters -{ - /// - /// Used to emit events for editor models in the back office - /// - public sealed class EditorModelEventManager - { - public static event TypedEventHandler> SendingContentModel; - public static event TypedEventHandler> SendingMediaModel; - public static event TypedEventHandler> SendingMemberModel; - public static event TypedEventHandler> SendingUserModel; - - public static event TypedEventHandler>>> SendingDashboardSlimModel; - - private static void OnSendingDashboardModel(ActionExecutedContext sender, EditorModelEventArgs>> e) - { - var handler = SendingDashboardSlimModel; - handler?.Invoke(sender, e); - } - - private static void OnSendingUserModel(ActionExecutedContext sender, EditorModelEventArgs e) - { - var handler = SendingUserModel; - handler?.Invoke(sender, e); - } - - private static void OnSendingContentModel(ActionExecutedContext sender, EditorModelEventArgs e) - { - var handler = SendingContentModel; - handler?.Invoke(sender, e); - } - - private static void OnSendingMediaModel(ActionExecutedContext sender, EditorModelEventArgs e) - { - var handler = SendingMediaModel; - handler?.Invoke(sender, e); - } - - private static void OnSendingMemberModel(ActionExecutedContext sender, EditorModelEventArgs e) - { - var handler = SendingMemberModel; - handler?.Invoke(sender, e); - } - - /// - /// Based on the type, emit's a specific event - /// - /// - /// - internal static void EmitEvent(ActionExecutedContext sender, EditorModelEventArgs e) - { - if (e.Model is ContentItemDisplay) - OnSendingContentModel(sender, new EditorModelEventArgs(e)); - - if (e.Model is MediaItemDisplay) - OnSendingMediaModel(sender, new EditorModelEventArgs(e)); - - if (e.Model is MemberDisplay) - OnSendingMemberModel(sender, new EditorModelEventArgs(e)); - - if (e.Model is UserDisplay) - OnSendingUserModel(sender, new EditorModelEventArgs(e)); - - if (e.Model is IEnumerable>) - OnSendingDashboardModel(sender, new EditorModelEventArgs>>(e)); - } - } -} diff --git a/src/Umbraco.Web.BackOffice/Filters/OutgoingEditorModelEventAttribute.cs b/src/Umbraco.Web.BackOffice/Filters/OutgoingEditorModelEventAttribute.cs index fe825a1907..28f3dfbe60 100644 --- a/src/Umbraco.Web.BackOffice/Filters/OutgoingEditorModelEventAttribute.cs +++ b/src/Umbraco.Web.BackOffice/Filters/OutgoingEditorModelEventAttribute.cs @@ -1,7 +1,11 @@ -using System; +using System; +using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; +using Umbraco.Cms.Core.Dashboards; using Umbraco.Cms.Core.Editors; +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Web; using Umbraco.Extensions; @@ -25,14 +29,18 @@ namespace Umbraco.Cms.Web.BackOffice.Filters private readonly IBackOfficeSecurityAccessor _backOfficeSecurityAccessor; + private readonly IEventAggregator _eventAggregator; + public OutgoingEditorModelEventFilter( IUmbracoContextAccessor umbracoContextAccessor, - IBackOfficeSecurityAccessor backOfficeSecurityAccessor) + IBackOfficeSecurityAccessor backOfficeSecurityAccessor, IEventAggregator eventAggregator) { _umbracoContextAccessor = umbracoContextAccessor ?? throw new ArgumentNullException(nameof(umbracoContextAccessor)); _backOfficeSecurityAccessor = backOfficeSecurityAccessor ?? throw new ArgumentNullException(nameof(backOfficeSecurityAccessor)); + _eventAggregator = eventAggregator + ?? throw new ArgumentNullException(nameof(eventAggregator)); } public void OnActionExecuted(ActionExecutedContext context) @@ -40,18 +48,30 @@ namespace Umbraco.Cms.Web.BackOffice.Filters if (context.Result == null) return; var umbracoContext = _umbracoContextAccessor.GetRequiredUmbracoContext(); - var user = _backOfficeSecurityAccessor.BackOfficeSecurity.CurrentUser; - if (user == null) return; + var currentUser = _backOfficeSecurityAccessor.BackOfficeSecurity.CurrentUser; + if (currentUser == null) return; if (context.Result is ObjectResult objectContent) { var model = objectContent.Value; - if (model != null) + switch (model) { - var args = new EditorModelEventArgs(model, umbracoContext); - EditorModelEventManager.EmitEvent(context, args); - objectContent.Value = args.Model; + case ContentItemDisplay content: + _eventAggregator.Publish(new SendingContentNotification(content, umbracoContext)); + break; + case MediaItemDisplay media: + _eventAggregator.Publish(new SendingMediaNotification(media, umbracoContext)); + break; + case MemberDisplay member: + _eventAggregator.Publish(new SendingMemberNotification(member, umbracoContext)); + break; + case UserDisplay user: + _eventAggregator.Publish(new SendingUserNotification(user, umbracoContext)); + break; + case IEnumerable> dashboards: + _eventAggregator.Publish(new SendingDashboardsNotification(dashboards, umbracoContext)); + break; } } } diff --git a/src/Umbraco.Web.BackOffice/Filters/SendingContentNotification.cs b/src/Umbraco.Web.BackOffice/Filters/SendingContentNotification.cs new file mode 100644 index 0000000000..3955c95e54 --- /dev/null +++ b/src/Umbraco.Web.BackOffice/Filters/SendingContentNotification.cs @@ -0,0 +1,19 @@ +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Models.ContentEditing; +using Umbraco.Cms.Core.Web; + +namespace Umbraco.Cms.Web.BackOffice.Filters +{ + public class SendingContentNotification : INotification + { + public IUmbracoContext UmbracoContext { get; } + + public ContentItemDisplay Content { get; } + + public SendingContentNotification(ContentItemDisplay content, IUmbracoContext umbracoContext) + { + Content = content; + UmbracoContext = umbracoContext; + } + } +} diff --git a/src/Umbraco.Web.BackOffice/Filters/SendingDashboardsNotification.cs b/src/Umbraco.Web.BackOffice/Filters/SendingDashboardsNotification.cs new file mode 100644 index 0000000000..cfaa91fc2b --- /dev/null +++ b/src/Umbraco.Web.BackOffice/Filters/SendingDashboardsNotification.cs @@ -0,0 +1,21 @@ +using System.Collections.Generic; +using Umbraco.Cms.Core.Dashboards; +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Models.ContentEditing; +using Umbraco.Cms.Core.Web; + +namespace Umbraco.Cms.Web.BackOffice.Filters +{ + public class SendingDashboardsNotification : INotification + { + public IUmbracoContext UmbracoContext { get; } + + public IEnumerable> Dashboards { get; } + + public SendingDashboardsNotification(IEnumerable> dashboards, IUmbracoContext umbracoContext) + { + Dashboards = dashboards; + UmbracoContext = umbracoContext; + } + } +} diff --git a/src/Umbraco.Web.BackOffice/Filters/SendingMediaNotification.cs b/src/Umbraco.Web.BackOffice/Filters/SendingMediaNotification.cs new file mode 100644 index 0000000000..cc5d7e7620 --- /dev/null +++ b/src/Umbraco.Web.BackOffice/Filters/SendingMediaNotification.cs @@ -0,0 +1,19 @@ +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Models.ContentEditing; +using Umbraco.Cms.Core.Web; + +namespace Umbraco.Cms.Web.BackOffice.Filters +{ + public class SendingMediaNotification : INotification + { + public IUmbracoContext UmbracoContext { get; } + + public MediaItemDisplay Media { get; } + + public SendingMediaNotification(MediaItemDisplay media, IUmbracoContext umbracoContext) + { + Media = media; + UmbracoContext = umbracoContext; + } + } +} diff --git a/src/Umbraco.Web.BackOffice/Filters/SendingMemberNotification.cs b/src/Umbraco.Web.BackOffice/Filters/SendingMemberNotification.cs new file mode 100644 index 0000000000..ea2a1d8927 --- /dev/null +++ b/src/Umbraco.Web.BackOffice/Filters/SendingMemberNotification.cs @@ -0,0 +1,19 @@ +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Models.ContentEditing; +using Umbraco.Cms.Core.Web; + +namespace Umbraco.Cms.Web.BackOffice.Filters +{ + public class SendingMemberNotification : INotification + { + public IUmbracoContext UmbracoContext { get; } + + public MemberDisplay Member { get; } + + public SendingMemberNotification(MemberDisplay member, IUmbracoContext umbracoContext) + { + Member = member; + UmbracoContext = umbracoContext; + } + } +} diff --git a/src/Umbraco.Web.BackOffice/Filters/SendingUserNotification.cs b/src/Umbraco.Web.BackOffice/Filters/SendingUserNotification.cs new file mode 100644 index 0000000000..91bbe2f0db --- /dev/null +++ b/src/Umbraco.Web.BackOffice/Filters/SendingUserNotification.cs @@ -0,0 +1,19 @@ +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Models.ContentEditing; +using Umbraco.Cms.Core.Web; + +namespace Umbraco.Cms.Web.BackOffice.Filters +{ + public class SendingUserNotification : INotification + { + public IUmbracoContext UmbracoContext { get; } + + public UserDisplay User { get; } + + public SendingUserNotification(UserDisplay user, IUmbracoContext umbracoContext) + { + User = user; + UmbracoContext = umbracoContext; + } + } +} diff --git a/src/Umbraco.Web.BackOffice/Trees/ApplicationTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/ApplicationTreeController.cs index 4a9257ece8..0769ad79de 100644 --- a/src/Umbraco.Web.BackOffice/Trees/ApplicationTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/ApplicationTreeController.cs @@ -265,7 +265,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees } var controller = (TreeControllerBase)result.Value; - var rootNodeResult = controller.GetRootNode(querystring); + var rootNodeResult = await controller.GetRootNode(querystring); if (!(rootNodeResult.Result is null)) { return rootNodeResult.Result; @@ -305,7 +305,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees } var controller = (TreeControllerBase)controllerResult.Value; - return controller.GetNodes(id.ToInvariantString(), querystring); + return await controller.GetNodes(id.ToInvariantString(), querystring); } /// diff --git a/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs index 4b48902e17..9b6ccf91f6 100644 --- a/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/ContentBlueprintTreeController.cs @@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.Entities; using Umbraco.Cms.Core.Models.Trees; @@ -40,8 +41,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees IMenuItemCollectionFactory menuItemCollectionFactory, IContentService contentService, IContentTypeService contentTypeService, - IEntityService entityService) - : base(localizedTextService, umbracoApiControllerTypeCollection) + IEntityService entityService, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { _menuItemCollectionFactory = menuItemCollectionFactory ?? throw new ArgumentNullException(nameof(menuItemCollectionFactory)); _contentService = contentService ?? throw new ArgumentNullException(nameof(contentService)); diff --git a/src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs index 3525c8c48b..726c9612a6 100644 --- a/src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/ContentTreeController.cs @@ -5,10 +5,10 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; -using Umbraco.Cms.Core.Configuration.Models; +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Mail; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Models.Entities; @@ -16,7 +16,6 @@ using Umbraco.Cms.Core.Models.Trees; using Umbraco.Cms.Core.Security; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; -using Umbraco.Cms.Infrastructure; using Umbraco.Cms.Infrastructure.Search; using Umbraco.Cms.Web.Common.Attributes; using Umbraco.Cms.Web.Common.Authorization; @@ -34,7 +33,6 @@ namespace Umbraco.Cms.Web.BackOffice.Trees { private readonly UmbracoTreeSearcher _treeSearcher; private readonly ActionCollection _actions; - private readonly GlobalSettings _globalSettings; private readonly IMenuItemCollectionFactory _menuItemCollectionFactory; private readonly IBackOfficeSecurityAccessor _backofficeSecurityAccessor; private readonly IContentService _contentService; @@ -42,6 +40,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees private readonly IPublicAccessService _publicAccessService; private readonly IUserService _userService; private readonly ILocalizationService _localizationService; + private readonly IEmailSender _emailSender; public ContentTreeController( ILocalizedTextService localizedTextService, @@ -55,15 +54,15 @@ namespace Umbraco.Cms.Web.BackOffice.Trees IDataTypeService dataTypeService, UmbracoTreeSearcher treeSearcher, ActionCollection actions, - IOptions globalSettings, IContentService contentService, IPublicAccessService publicAccessService, - ILocalizationService localizationService) - : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, entityService, backofficeSecurityAccessor, logger, actionCollection, userService, dataTypeService) + ILocalizationService localizationService, + IEventAggregator eventAggregator, + IEmailSender emailSender) + : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, entityService, backofficeSecurityAccessor, logger, actionCollection, userService, dataTypeService, eventAggregator) { _treeSearcher = treeSearcher; _actions = actions; - _globalSettings = globalSettings.Value; _menuItemCollectionFactory = menuItemCollectionFactory; _backofficeSecurityAccessor = backofficeSecurityAccessor; _contentService = contentService; @@ -71,6 +70,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees _publicAccessService = publicAccessService; _userService = userService; _localizationService = localizationService; + _emailSender = emailSender; } protected override int RecycleBinId => Constants.System.RecycleBinContent; @@ -275,7 +275,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees AddActionNode(item, menu, opensDialog: true); AddActionNode(item, menu, true, opensDialog: true); - if (EmailSender.CanSendRequiredEmail(_globalSettings)) + if (_emailSender.CanSendRequiredEmail()) { menu.Items.Add(new MenuItem("notify", LocalizedTextService) { diff --git a/src/Umbraco.Web.BackOffice/Trees/ContentTreeControllerBase.cs b/src/Umbraco.Web.BackOffice/Trees/ContentTreeControllerBase.cs index 7bb9782c5e..447c896b8a 100644 --- a/src/Umbraco.Web.BackOffice/Trees/ContentTreeControllerBase.cs +++ b/src/Umbraco.Web.BackOffice/Trees/ContentTreeControllerBase.cs @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.Entities; using Umbraco.Cms.Core.Models.Trees; @@ -39,9 +40,10 @@ namespace Umbraco.Cms.Web.BackOffice.Trees ILogger logger, ActionCollection actionCollection, IUserService userService, - IDataTypeService dataTypeService + IDataTypeService dataTypeService, + IEventAggregator eventAggregator ) - : base(localizedTextService, umbracoApiControllerTypeCollection) + : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { _entityService = entityService; _backofficeSecurityAccessor = backofficeSecurityAccessor; diff --git a/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs index c46e84db42..2ba9e5f6c7 100644 --- a/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/ContentTypeTreeController.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Models.Trees; @@ -30,7 +31,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees private readonly IContentTypeService _contentTypeService; private readonly IEntityService _entityService; - public ContentTypeTreeController(ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, UmbracoTreeSearcher treeSearcher, IMenuItemCollectionFactory menuItemCollectionFactory, IContentTypeService contentTypeService, IEntityService entityService) : base(localizedTextService, umbracoApiControllerTypeCollection) + public ContentTypeTreeController(ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, UmbracoTreeSearcher treeSearcher, IMenuItemCollectionFactory menuItemCollectionFactory, IContentTypeService contentTypeService, IEntityService entityService, IEventAggregator eventAggregator) : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { _treeSearcher = treeSearcher; _menuItemCollectionFactory = menuItemCollectionFactory; diff --git a/src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs index 4ef0c7ba38..758feece07 100644 --- a/src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/DataTypeTreeController.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Models.Trees; @@ -31,7 +32,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees private readonly IDataTypeService _dataTypeService; - public DataTypeTreeController(ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, UmbracoTreeSearcher treeSearcher, IMenuItemCollectionFactory menuItemCollectionFactory, IEntityService entityService, IDataTypeService dataTypeService) : base(localizedTextService, umbracoApiControllerTypeCollection) + public DataTypeTreeController(ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, UmbracoTreeSearcher treeSearcher, IMenuItemCollectionFactory menuItemCollectionFactory, IEntityService entityService, IDataTypeService dataTypeService, IEventAggregator eventAggregator) : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { _treeSearcher = treeSearcher; _menuItemCollectionFactory = menuItemCollectionFactory; diff --git a/src/Umbraco.Web.BackOffice/Trees/DictionaryTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/DictionaryTreeController.cs index 3355cc5312..7dc1f386fe 100644 --- a/src/Umbraco.Web.BackOffice/Trees/DictionaryTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/DictionaryTreeController.cs @@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.Trees; using Umbraco.Cms.Core.Services; @@ -28,7 +29,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees private readonly IMenuItemCollectionFactory _menuItemCollectionFactory; private readonly ILocalizationService _localizationService; - public DictionaryTreeController(ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IMenuItemCollectionFactory menuItemCollectionFactory, ILocalizationService localizationService) : base(localizedTextService, umbracoApiControllerTypeCollection) + public DictionaryTreeController(ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IMenuItemCollectionFactory menuItemCollectionFactory, ILocalizationService localizationService, IEventAggregator eventAggregator) : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { _menuItemCollectionFactory = menuItemCollectionFactory; _localizationService = localizationService; diff --git a/src/Umbraco.Web.BackOffice/Trees/FileSystemTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/FileSystemTreeController.cs index fffa767ad0..9ee334013a 100644 --- a/src/Umbraco.Web.BackOffice/Trees/FileSystemTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/FileSystemTreeController.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Models.Trees; using Umbraco.Cms.Core.Services; @@ -20,9 +21,10 @@ namespace Umbraco.Cms.Web.BackOffice.Trees protected FileSystemTreeController( ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, - IMenuItemCollectionFactory menuItemCollectionFactory + IMenuItemCollectionFactory menuItemCollectionFactory, + IEventAggregator eventAggregator ) - : base(localizedTextService, umbracoApiControllerTypeCollection) + : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { MenuItemCollectionFactory = menuItemCollectionFactory; } diff --git a/src/Umbraco.Web.BackOffice/Trees/FilesTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/FilesTreeController.cs index e324cddfbc..7caf6256d9 100644 --- a/src/Umbraco.Web.BackOffice/Trees/FilesTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/FilesTreeController.cs @@ -1,4 +1,5 @@ -using Umbraco.Cms.Core; +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; @@ -18,8 +19,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IMenuItemCollectionFactory menuItemCollectionFactory, - IPhysicalFileSystem fileSystem) - : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory) + IPhysicalFileSystem fileSystem, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, eventAggregator) { FileSystem = fileSystem; } diff --git a/src/Umbraco.Web.BackOffice/Trees/LanguageTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/LanguageTreeController.cs index a3e55a68dc..a0a80a8206 100644 --- a/src/Umbraco.Web.BackOffice/Trees/LanguageTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/LanguageTreeController.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; using Umbraco.Cms.Web.Common.Attributes; @@ -19,8 +20,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees public LanguageTreeController( ILocalizedTextService textService, - UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection) - : base(textService, umbracoApiControllerTypeCollection) + UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, + IEventAggregator eventAggregator) + : base(textService, umbracoApiControllerTypeCollection, eventAggregator) { } protected override ActionResult GetTreeNodes(string id, FormCollection queryStrings) diff --git a/src/Umbraco.Web.BackOffice/Trees/LogViewerTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/LogViewerTreeController.cs index 7a9eec99fe..e24fcfb09e 100644 --- a/src/Umbraco.Web.BackOffice/Trees/LogViewerTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/LogViewerTreeController.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; using Umbraco.Cms.Web.Common.Attributes; @@ -18,8 +19,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees { public LogViewerTreeController( ILocalizedTextService localizedTextService, - UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection) - : base(localizedTextService, umbracoApiControllerTypeCollection) + UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { } diff --git a/src/Umbraco.Web.BackOffice/Trees/MacrosTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MacrosTreeController.cs index 8f587bd9a4..c29518473d 100644 --- a/src/Umbraco.Web.BackOffice/Trees/MacrosTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/MacrosTreeController.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models.Trees; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; @@ -22,7 +23,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees private readonly IMenuItemCollectionFactory _menuItemCollectionFactory; private readonly IMacroService _macroService; - public MacrosTreeController(ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IMenuItemCollectionFactory menuItemCollectionFactory, IMacroService macroService) : base(localizedTextService, umbracoApiControllerTypeCollection) + public MacrosTreeController(ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IMenuItemCollectionFactory menuItemCollectionFactory, IMacroService macroService, IEventAggregator eventAggregator) : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { _menuItemCollectionFactory = menuItemCollectionFactory; _macroService = macroService; diff --git a/src/Umbraco.Web.BackOffice/Trees/MediaTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MediaTreeController.cs index 5708106b74..b260281f50 100644 --- a/src/Umbraco.Web.BackOffice/Trees/MediaTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/MediaTreeController.cs @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Models.Entities; @@ -45,8 +46,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees IUserService userService, IDataTypeService dataTypeService, UmbracoTreeSearcher treeSearcher, - IMediaService mediaService) - : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, entityService, backofficeSecurityAccessor, logger, actionCollection, userService, dataTypeService) + IMediaService mediaService, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, entityService, backofficeSecurityAccessor, logger, actionCollection, userService, dataTypeService, eventAggregator) { _treeSearcher = treeSearcher; _mediaService = mediaService; diff --git a/src/Umbraco.Web.BackOffice/Trees/MediaTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MediaTypeTreeController.cs index 11a806add2..4fc108486d 100644 --- a/src/Umbraco.Web.BackOffice/Trees/MediaTypeTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/MediaTypeTreeController.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Models.Trees; @@ -30,7 +31,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees private readonly IMediaTypeService _mediaTypeService; private readonly IEntityService _entityService; - public MediaTypeTreeController(ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, UmbracoTreeSearcher treeSearcher, IMenuItemCollectionFactory menuItemCollectionFactory, IMediaTypeService mediaTypeService, IEntityService entityService) : base(localizedTextService, umbracoApiControllerTypeCollection) + public MediaTypeTreeController(ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, UmbracoTreeSearcher treeSearcher, IMenuItemCollectionFactory menuItemCollectionFactory, IMediaTypeService mediaTypeService, IEntityService entityService, IEventAggregator eventAggregator) : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { _treeSearcher = treeSearcher; _menuItemCollectionFactory = menuItemCollectionFactory; diff --git a/src/Umbraco.Web.BackOffice/Trees/MemberGroupTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MemberGroupTreeController.cs index 10379c7991..7445f35f29 100644 --- a/src/Umbraco.Web.BackOffice/Trees/MemberGroupTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/MemberGroupTreeController.cs @@ -1,9 +1,10 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; using Umbraco.Cms.Web.Common.Attributes; @@ -24,8 +25,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IMenuItemCollectionFactory menuItemCollectionFactory, - IMemberGroupService memberGroupService) - : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory) + IMemberGroupService memberGroupService, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, eventAggregator) { _memberGroupService = memberGroupService; } diff --git a/src/Umbraco.Web.BackOffice/Trees/MemberTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MemberTreeController.cs index a77ad8f0a8..cae9eed13f 100644 --- a/src/Umbraco.Web.BackOffice/Trees/MemberTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/MemberTreeController.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Models.Trees; @@ -41,8 +42,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees IMenuItemCollectionFactory menuItemCollectionFactory, IMemberService memberService, IMemberTypeService memberTypeService, - IBackOfficeSecurityAccessor backofficeSecurityAccessor) - : base(localizedTextService, umbracoApiControllerTypeCollection) + IBackOfficeSecurityAccessor backofficeSecurityAccessor, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { _treeSearcher = treeSearcher; _menuItemCollectionFactory = menuItemCollectionFactory; diff --git a/src/Umbraco.Web.BackOffice/Trees/MemberTypeAndGroupTreeControllerBase.cs b/src/Umbraco.Web.BackOffice/Trees/MemberTypeAndGroupTreeControllerBase.cs index 35c4d04d9f..94c84accab 100644 --- a/src/Umbraco.Web.BackOffice/Trees/MemberTypeAndGroupTreeControllerBase.cs +++ b/src/Umbraco.Web.BackOffice/Trees/MemberTypeAndGroupTreeControllerBase.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models.Trees; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; @@ -20,8 +21,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees protected MemberTypeAndGroupTreeControllerBase( ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, - IMenuItemCollectionFactory menuItemCollectionFactory) - : base(localizedTextService, umbracoApiControllerTypeCollection) + IMenuItemCollectionFactory menuItemCollectionFactory, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { MenuItemCollectionFactory = menuItemCollectionFactory; } diff --git a/src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs index 93504284d2..5595365e2b 100644 --- a/src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/MemberTypeTreeController.cs @@ -1,9 +1,10 @@ -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Services; @@ -29,8 +30,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IMenuItemCollectionFactory menuItemCollectionFactory, UmbracoTreeSearcher treeSearcher, - IMemberTypeService memberTypeService) - : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory) + IMemberTypeService memberTypeService, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, eventAggregator) { _treeSearcher = treeSearcher; _memberTypeService = memberTypeService; diff --git a/src/Umbraco.Web.BackOffice/Trees/MenuRenderingEventArgs.cs b/src/Umbraco.Web.BackOffice/Trees/MenuRenderingEventArgs.cs deleted file mode 100644 index 5ec827eb4a..0000000000 --- a/src/Umbraco.Web.BackOffice/Trees/MenuRenderingEventArgs.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Microsoft.AspNetCore.Http; -using Umbraco.Cms.Core.Trees; - -namespace Umbraco.Cms.Web.BackOffice.Trees -{ - public class MenuRenderingEventArgs : TreeRenderingEventArgs - { - /// - /// The tree node id that the menu is rendering for - /// - public string NodeId { get; private set; } - - /// - /// The menu being rendered - /// - public MenuItemCollection Menu { get; private set; } - - public MenuRenderingEventArgs(string nodeId, MenuItemCollection menu, FormCollection queryStrings) - : base(queryStrings) - { - NodeId = nodeId; - Menu = menu; - } - } -} diff --git a/src/Umbraco.Web.BackOffice/Trees/MenuRenderingNotification.cs b/src/Umbraco.Web.BackOffice/Trees/MenuRenderingNotification.cs new file mode 100644 index 0000000000..562708b377 --- /dev/null +++ b/src/Umbraco.Web.BackOffice/Trees/MenuRenderingNotification.cs @@ -0,0 +1,37 @@ +using Microsoft.AspNetCore.Http; +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Trees; + +namespace Umbraco.Cms.Web.BackOffice.Trees +{ + /// + /// A notification that allows developers to modify the menu that is being rendered + /// + /// + /// Developers can add/remove/replace/insert/update/etc... any of the tree items in the collection. + /// + public class MenuRenderingNotification : INotification + { + /// + /// The tree node id that the menu is rendering for + /// + public string NodeId { get; } + + /// + /// The menu being rendered + /// + public MenuItemCollection Menu { get; } + + /// + /// The query string of the current request + /// + public FormCollection QueryString { get; } + + public MenuRenderingNotification(string nodeId, MenuItemCollection menu, FormCollection queryString) + { + NodeId = nodeId; + Menu = menu; + QueryString = queryString; + } + } +} diff --git a/src/Umbraco.Web.BackOffice/Trees/PackagesTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/PackagesTreeController.cs index 4d53671388..e54e33bcb6 100644 --- a/src/Umbraco.Web.BackOffice/Trees/PackagesTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/PackagesTreeController.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; using Umbraco.Cms.Web.Common.Attributes; @@ -21,8 +22,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees public PackagesTreeController( ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, - IMenuItemCollectionFactory menuItemCollectionFactory) - : base(localizedTextService, umbracoApiControllerTypeCollection) + IMenuItemCollectionFactory menuItemCollectionFactory, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { _menuItemCollectionFactory = menuItemCollectionFactory; } diff --git a/src/Umbraco.Web.BackOffice/Trees/PartialViewMacrosTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/PartialViewMacrosTreeController.cs index 9a31a286e7..6403ec009d 100644 --- a/src/Umbraco.Web.BackOffice/Trees/PartialViewMacrosTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/PartialViewMacrosTreeController.cs @@ -1,5 +1,6 @@ -using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Authorization; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; @@ -30,8 +31,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IMenuItemCollectionFactory menuItemCollectionFactory, - IFileSystems fileSystems) - : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, fileSystems) + IFileSystems fileSystems, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, fileSystems, eventAggregator) { FileSystem = fileSystems.MacroPartialsFileSystem; } diff --git a/src/Umbraco.Web.BackOffice/Trees/PartialViewsTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/PartialViewsTreeController.cs index b9a592ca31..ad8b9f16b4 100644 --- a/src/Umbraco.Web.BackOffice/Trees/PartialViewsTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/PartialViewsTreeController.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.Authorization; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; @@ -30,8 +31,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IMenuItemCollectionFactory menuItemCollectionFactory, - IFileSystems fileSystems) - : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory) + IFileSystems fileSystems, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, eventAggregator) { FileSystem = fileSystems.PartialViewsFileSystem; } diff --git a/src/Umbraco.Web.BackOffice/Trees/RelationTypeTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/RelationTypeTreeController.cs index f786e68ae0..6da2298e03 100644 --- a/src/Umbraco.Web.BackOffice/Trees/RelationTypeTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/RelationTypeTreeController.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models.Trees; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; @@ -27,8 +28,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IMenuItemCollectionFactory menuItemCollectionFactory, - IRelationService relationService) - : base(localizedTextService, umbracoApiControllerTypeCollection) + IRelationService relationService, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { _menuItemCollectionFactory = menuItemCollectionFactory; _relationService = relationService; diff --git a/src/Umbraco.Web.BackOffice/Trees/RootNodeRenderingNotification.cs b/src/Umbraco.Web.BackOffice/Trees/RootNodeRenderingNotification.cs new file mode 100644 index 0000000000..fcf6a47c35 --- /dev/null +++ b/src/Umbraco.Web.BackOffice/Trees/RootNodeRenderingNotification.cs @@ -0,0 +1,28 @@ +using Microsoft.AspNetCore.Http; +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Trees; + +namespace Umbraco.Cms.Web.BackOffice.Trees +{ + /// + /// A notification that allows developer to modify the root tree node that is being rendered + /// + public class RootNodeRenderingNotification : INotification + { + /// + /// The root node being rendered + /// + public TreeNode Node { get; } + + /// + /// The query string of the current request + /// + public FormCollection QueryString { get; } + + public RootNodeRenderingNotification(TreeNode node, FormCollection queryString) + { + Node = node; + QueryString = queryString; + } + } +} diff --git a/src/Umbraco.Web.BackOffice/Trees/ScriptsTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/ScriptsTreeController.cs index 7b0f8a7574..56f1b0ac1d 100644 --- a/src/Umbraco.Web.BackOffice/Trees/ScriptsTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/ScriptsTreeController.cs @@ -1,4 +1,5 @@ -using Umbraco.Cms.Core; +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; @@ -22,8 +23,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IMenuItemCollectionFactory menuItemCollectionFactory, - IFileSystems fileSystems) - : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory) + IFileSystems fileSystems, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, eventAggregator) { FileSystem = fileSystems.ScriptsFileSystem; } diff --git a/src/Umbraco.Web.BackOffice/Trees/StylesheetsTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/StylesheetsTreeController.cs index 36d61a6f42..18d1be6a67 100644 --- a/src/Umbraco.Web.BackOffice/Trees/StylesheetsTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/StylesheetsTreeController.cs @@ -1,4 +1,5 @@ -using Umbraco.Cms.Core; +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.IO; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; @@ -22,8 +23,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IMenuItemCollectionFactory menuItemCollectionFactory, - IFileSystems fileSystems) - : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory) + IFileSystems fileSystems, + IEventAggregator eventAggregator) + : base(localizedTextService, umbracoApiControllerTypeCollection, menuItemCollectionFactory, eventAggregator) { FileSystem = fileSystems.StylesheetsFileSystem; } diff --git a/src/Umbraco.Web.BackOffice/Trees/TemplatesTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/TemplatesTreeController.cs index 433ad45a13..4c91edbf45 100644 --- a/src/Umbraco.Web.BackOffice/Trees/TemplatesTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/TemplatesTreeController.cs @@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Actions; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Models; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Core.Models.Entities; @@ -35,8 +36,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees IMenuItemCollectionFactory menuItemCollectionFactory, ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, - IFileService fileService - ) : base(localizedTextService, umbracoApiControllerTypeCollection) + IFileService fileService, + IEventAggregator eventAggregator + ) : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { _treeSearcher = treeSearcher; _menuItemCollectionFactory = menuItemCollectionFactory; diff --git a/src/Umbraco.Web.BackOffice/Trees/TreeController.cs b/src/Umbraco.Web.BackOffice/Trees/TreeController.cs index fd5ee6f8d3..b68ff38a7c 100644 --- a/src/Umbraco.Web.BackOffice/Trees/TreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/TreeController.cs @@ -1,6 +1,7 @@ -using System; +using System; using System.Collections.Concurrent; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; using Umbraco.Extensions; @@ -18,8 +19,8 @@ namespace Umbraco.Cms.Web.BackOffice.Trees protected ILocalizedTextService LocalizedTextService { get; } - protected TreeController(ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection) - : base(umbracoApiControllerTypeCollection) + protected TreeController(ILocalizedTextService localizedTextService, UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, IEventAggregator eventAggregator) + : base(umbracoApiControllerTypeCollection, eventAggregator) { LocalizedTextService = localizedTextService ?? throw new ArgumentNullException(nameof(localizedTextService)); _treeAttribute = GetTreeAttribute(); diff --git a/src/Umbraco.Web.BackOffice/Trees/TreeControllerBase.cs b/src/Umbraco.Web.BackOffice/Trees/TreeControllerBase.cs index 2e0d2b57b0..c0d0550168 100644 --- a/src/Umbraco.Web.BackOffice/Trees/TreeControllerBase.cs +++ b/src/Umbraco.Web.BackOffice/Trees/TreeControllerBase.cs @@ -1,5 +1,6 @@ using System; using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; @@ -27,10 +28,12 @@ namespace Umbraco.Cms.Web.BackOffice.Trees // TODO: Need to set this, but from where? // Presumably not injecting as this will be a base controller for package/solution developers. private readonly UmbracoApiControllerTypeCollection _apiControllers; + private readonly IEventAggregator _eventAggregator; - protected TreeControllerBase(UmbracoApiControllerTypeCollection apiControllers) + protected TreeControllerBase(UmbracoApiControllerTypeCollection apiControllers, IEventAggregator eventAggregator) { _apiControllers = apiControllers; + _eventAggregator = eventAggregator; } /// @@ -85,7 +88,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees /// /// /// - public ActionResult GetRootNode([ModelBinder(typeof(HttpQueryStringModelBinder))]FormCollection queryStrings) + public async Task> GetRootNode([ModelBinder(typeof(HttpQueryStringModelBinder))]FormCollection queryStrings) { if (queryStrings == null) queryStrings = FormCollection.Empty; var nodeResult = CreateRootNode(queryStrings); @@ -109,7 +112,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees if (IsDialog(queryStrings)) node.RoutePath = "#"; - OnRootNodeRendering(this, new TreeNodeRenderingEventArgs(node, queryStrings)); + await _eventAggregator.PublishAsync(new RootNodeRenderingNotification(node, queryStrings)); return node; } @@ -126,7 +129,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees /// We are allowing an arbitrary number of query strings to be passed in so that developers are able to persist custom data from the front-end /// to the back end to be used in the query for model data. /// - public ActionResult GetNodes(string id, [ModelBinder(typeof(HttpQueryStringModelBinder))]FormCollection queryStrings) + public async Task> GetNodes(string id, [ModelBinder(typeof(HttpQueryStringModelBinder))]FormCollection queryStrings) { if (queryStrings == null) queryStrings = FormCollection.Empty; var nodesResult = GetTreeNodes(id, queryStrings); @@ -147,7 +150,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees node.RoutePath = "#"; //raise the event - OnTreeNodesRendering(this, new TreeNodesRenderingEventArgs(nodes, queryStrings)); + await _eventAggregator.PublishAsync(new TreeNodesRenderingNotification(nodes, queryStrings)); return nodes; } @@ -158,7 +161,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees /// /// /// - public ActionResult GetMenu(string id, [ModelBinder(typeof(HttpQueryStringModelBinder))]FormCollection queryStrings) + public async Task> GetMenu(string id, [ModelBinder(typeof(HttpQueryStringModelBinder))]FormCollection queryStrings) { if (queryStrings == null) queryStrings = FormCollection.Empty; var menuResult = GetMenuForNode(id, queryStrings); @@ -169,7 +172,7 @@ namespace Umbraco.Cms.Web.BackOffice.Trees var menu = menuResult.Value; //raise the event - OnMenuRendering(this, new MenuRenderingEventArgs(id, menu, queryStrings)); + await _eventAggregator.PublishAsync(new MenuRenderingNotification(id, menu, queryStrings)); return menu; } @@ -374,45 +377,5 @@ namespace Umbraco.Cms.Web.BackOffice.Trees queryStrings.TryGetValue(TreeQueryStringParameters.Use, out var use); return use == "dialog"; } - - /// - /// An event that allows developers to modify the tree node collection that is being rendered - /// - /// - /// Developers can add/remove/replace/insert/update/etc... any of the tree items in the collection. - /// - public static event TypedEventHandler TreeNodesRendering; - - private static void OnTreeNodesRendering(TreeControllerBase instance, TreeNodesRenderingEventArgs e) - { - var handler = TreeNodesRendering; - handler?.Invoke(instance, e); - } - - /// - /// An event that allows developer to modify the root tree node that is being rendered - /// - public static event TypedEventHandler RootNodeRendering; - - // internal for temp class below - kill eventually! - internal static void OnRootNodeRendering(TreeControllerBase instance, TreeNodeRenderingEventArgs e) - { - var handler = RootNodeRendering; - handler?.Invoke(instance, e); - } - - /// - /// An event that allows developers to modify the menu that is being rendered - /// - /// - /// Developers can add/remove/replace/insert/update/etc... any of the tree items in the collection. - /// - public static event TypedEventHandler MenuRendering; - - private static void OnMenuRendering(TreeControllerBase instance, MenuRenderingEventArgs e) - { - var handler = MenuRendering; - handler?.Invoke(instance, e); - } } } diff --git a/src/Umbraco.Web.BackOffice/Trees/TreeNodeRenderingEventArgs.cs b/src/Umbraco.Web.BackOffice/Trees/TreeNodeRenderingEventArgs.cs deleted file mode 100644 index afd065ffa4..0000000000 --- a/src/Umbraco.Web.BackOffice/Trees/TreeNodeRenderingEventArgs.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Microsoft.AspNetCore.Http; -using Umbraco.Cms.Core.Trees; - -namespace Umbraco.Cms.Web.BackOffice.Trees -{ - public class TreeNodeRenderingEventArgs : TreeRenderingEventArgs - { - public TreeNode Node { get; private set; } - - public TreeNodeRenderingEventArgs(TreeNode node, FormCollection queryStrings) - : base(queryStrings) - { - Node = node; - } - } -} diff --git a/src/Umbraco.Web.BackOffice/Trees/TreeNodesRenderingEventArgs.cs b/src/Umbraco.Web.BackOffice/Trees/TreeNodesRenderingEventArgs.cs deleted file mode 100644 index f0d29a7901..0000000000 --- a/src/Umbraco.Web.BackOffice/Trees/TreeNodesRenderingEventArgs.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Microsoft.AspNetCore.Http; -using Umbraco.Cms.Core.Trees; - -namespace Umbraco.Cms.Web.BackOffice.Trees -{ - public class TreeNodesRenderingEventArgs : TreeRenderingEventArgs - { - public TreeNodeCollection Nodes { get; private set; } - - public TreeNodesRenderingEventArgs(TreeNodeCollection nodes, FormCollection queryStrings) - : base(queryStrings) - { - Nodes = nodes; - } - } -} diff --git a/src/Umbraco.Web.BackOffice/Trees/TreeNodesRenderingNotification.cs b/src/Umbraco.Web.BackOffice/Trees/TreeNodesRenderingNotification.cs new file mode 100644 index 0000000000..1269d2aeab --- /dev/null +++ b/src/Umbraco.Web.BackOffice/Trees/TreeNodesRenderingNotification.cs @@ -0,0 +1,31 @@ +using Microsoft.AspNetCore.Http; +using Umbraco.Cms.Core.Events; +using Umbraco.Cms.Core.Trees; + +namespace Umbraco.Cms.Web.BackOffice.Trees +{ + /// + /// A notification that allows developers to modify the tree node collection that is being rendered + /// + /// + /// Developers can add/remove/replace/insert/update/etc... any of the tree items in the collection. + /// + public class TreeNodesRenderingNotification : INotification + { + /// + /// The tree nodes being rendered + /// + public TreeNodeCollection Nodes { get; } + + /// + /// The query string of the current request + /// + public FormCollection QueryString { get; } + + public TreeNodesRenderingNotification(TreeNodeCollection nodes, FormCollection queryString) + { + Nodes = nodes; + QueryString = queryString; + } + } +} diff --git a/src/Umbraco.Web.BackOffice/Trees/TreeRenderingEventArgs.cs b/src/Umbraco.Web.BackOffice/Trees/TreeRenderingEventArgs.cs deleted file mode 100644 index 9d8795938f..0000000000 --- a/src/Umbraco.Web.BackOffice/Trees/TreeRenderingEventArgs.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using Microsoft.AspNetCore.Http; - -namespace Umbraco.Cms.Web.BackOffice.Trees -{ - public class TreeRenderingEventArgs : EventArgs - { - public FormCollection QueryStrings { get; private set; } - - public TreeRenderingEventArgs(FormCollection queryStrings) - { - QueryStrings = queryStrings; - } - } -} diff --git a/src/Umbraco.Web.BackOffice/Trees/UserTreeController.cs b/src/Umbraco.Web.BackOffice/Trees/UserTreeController.cs index 6e06f7636d..3afdecf36e 100644 --- a/src/Umbraco.Web.BackOffice/Trees/UserTreeController.cs +++ b/src/Umbraco.Web.BackOffice/Trees/UserTreeController.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Events; using Umbraco.Cms.Core.Services; using Umbraco.Cms.Core.Trees; using Umbraco.Cms.Web.Common.Attributes; @@ -21,8 +22,9 @@ namespace Umbraco.Cms.Web.BackOffice.Trees public UserTreeController( IMenuItemCollectionFactory menuItemCollectionFactory, ILocalizedTextService localizedTextService, - UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection - ) : base(localizedTextService, umbracoApiControllerTypeCollection) + UmbracoApiControllerTypeCollection umbracoApiControllerTypeCollection, + IEventAggregator eventAggregator + ) : base(localizedTextService, umbracoApiControllerTypeCollection, eventAggregator) { _menuItemCollectionFactory = menuItemCollectionFactory; }