using Microsoft.AspNetCore.Mvc; using Umbraco.Cms.Core.Models.ContentEditing; using Umbraco.Cms.Web.BackOffice.Filters; using Umbraco.Cms.Web.Common.ActionsResults; using Umbraco.Extensions; namespace Umbraco.Cms.Web.BackOffice.Controllers; /// /// An abstract controller that automatically checks if any request is a non-GET and if the /// resulting message is INotificationModel in which case it will append any Event Messages /// currently in the request. /// [PrefixlessBodyModelValidator] [AppendCurrentEventMessages] public abstract class BackOfficeNotificationsController : UmbracoAuthorizedJsonController { /// /// returns a 200 OK response with a notification message /// /// /// protected OkObjectResult Ok(string message) { var notificationModel = new SimpleNotificationModel { Message = message }; notificationModel.AddSuccessNotification(message, string.Empty); return new OkObjectResult(notificationModel); } /// /// Overridden to ensure that the error message is an error notification message /// /// /// protected override ActionResult ValidationProblem(string? errorMessage) => ValidationProblem(errorMessage, string.Empty); /// /// Creates a notofication validation problem with a header and message /// /// /// /// protected ActionResult ValidationProblem(string? errorHeader, string errorMessage) { var notificationModel = new SimpleNotificationModel { Message = errorMessage }; notificationModel.AddErrorNotification(errorHeader, errorMessage); return new ValidationErrorResult(notificationModel); } /// /// Overridden to ensure that all queued notifications are sent to the back office /// /// [NonAction] public override ActionResult ValidationProblem() // returning an object of INotificationModel will ensure that any pending // notification messages are added to the response. => new ValidationErrorResult(new SimpleNotificationModel()); }