Developers can cancel an event with the CancelOperation method of the event with a custom message which will be used in place of the normal default cancellation message

This commit is contained in:
Shannon
2015-07-27 18:04:20 +02:00
parent b44494a093
commit 926ea54c39
5 changed files with 83 additions and 63 deletions

View File

@@ -63,6 +63,17 @@ namespace Umbraco.Core.Events
}
}
/// <summary>
/// if this instance supports cancellation, this will set Cancel to true with an affiliated cancellation message
/// </summary>
/// <param name="cancelationMessage"></param>
public void CancelOperation(EventMessage cancelationMessage)
{
Cancel = true;
cancelationMessage.IsDefaultEventMessage = true;
Messages.Add(cancelationMessage);
}
/// <summary>
/// Returns the EventMessages object which is used to add messages to the message collection for this event
/// </summary>

View File

@@ -18,5 +18,10 @@ namespace Umbraco.Core.Events
public string Category { get; private set; }
public string Message { get; private set; }
public EventMessageType MessageType { get; private set; }
/// <summary>
/// This is used to track if this message should be used as a default message so that Umbraco doesn't also append it's own default messages
/// </summary>
internal bool IsDefaultEventMessage { get; set; }
}
}

View File

@@ -288,9 +288,7 @@ namespace Umbraco.Web.Editors
}
else
{
display.AddWarningNotification(
Services.TextService.Localize("speechBubbles/operationCancelledHeader"),
Services.TextService.Localize("speechBubbles/operationCancelledText"));
AddCancelMessage(display);
}
break;
case ContentSaveAction.SendPublish:
@@ -303,9 +301,7 @@ namespace Umbraco.Web.Editors
}
else
{
display.AddWarningNotification(
Services.TextService.Localize("speechBubbles/operationCancelledHeader"),
Services.TextService.Localize("speechBubbles/operationCancelledText"));
AddCancelMessage(display);
}
break;
case ContentSaveAction.Publish:
@@ -319,57 +315,7 @@ namespace Umbraco.Web.Editors
return display;
}
/// <summary>
/// Checks if the user is currently in preview mode and if so will update the preview content for this item
/// </summary>
/// <param name="contentId"></param>
private void UpdatePreviewContext(int contentId)
{
var previewId = Request.GetPreviewCookieValue();
if (previewId.IsNullOrWhiteSpace()) return;
Guid id;
if (Guid.TryParse(previewId, out id))
{
var d = new Document(contentId);
var pc = new PreviewContent(UmbracoUser, id, false);
pc.PrepareDocument(UmbracoUser, d, true);
pc.SavePreviewSet();
}
}
/// <summary>
/// Maps the dto property values to the persisted model
/// </summary>
/// <param name="contentItem"></param>
private void MapPropertyValues(ContentItemSave contentItem)
{
UpdateName(contentItem);
//TODO: We need to support 'send to publish'
contentItem.PersistedContent.ExpireDate = contentItem.ExpireDate;
contentItem.PersistedContent.ReleaseDate = contentItem.ReleaseDate;
//only set the template if it didn't change
var templateChanged = (contentItem.PersistedContent.Template == null && contentItem.TemplateAlias.IsNullOrWhiteSpace() == false)
|| (contentItem.PersistedContent.Template != null && contentItem.PersistedContent.Template.Alias != contentItem.TemplateAlias)
|| (contentItem.PersistedContent.Template != null && contentItem.TemplateAlias.IsNullOrWhiteSpace());
if (templateChanged)
{
var template = Services.FileService.GetTemplate(contentItem.TemplateAlias);
if (template == null && contentItem.TemplateAlias.IsNullOrWhiteSpace() == false)
{
//ModelState.AddModelError("Template", "No template exists with the specified alias: " + contentItem.TemplateAlias);
LogHelper.Warn<ContentController>("No template exists with the specified alias: " + contentItem.TemplateAlias);
}
else
{
//NOTE: this could be null if there was a template and the posted template is null, this should remove the assigned template
contentItem.PersistedContent.Template = template;
}
}
base.MapPropertyValues(contentItem);
}
/// <summary>
/// Publishes a document with a given ID
@@ -567,6 +513,58 @@ namespace Umbraco.Web.Editors
return content;
}
/// <summary>
/// Checks if the user is currently in preview mode and if so will update the preview content for this item
/// </summary>
/// <param name="contentId"></param>
private void UpdatePreviewContext(int contentId)
{
var previewId = Request.GetPreviewCookieValue();
if (previewId.IsNullOrWhiteSpace()) return;
Guid id;
if (Guid.TryParse(previewId, out id))
{
var d = new Document(contentId);
var pc = new PreviewContent(UmbracoUser, id, false);
pc.PrepareDocument(UmbracoUser, d, true);
pc.SavePreviewSet();
}
}
/// <summary>
/// Maps the dto property values to the persisted model
/// </summary>
/// <param name="contentItem"></param>
private void MapPropertyValues(ContentItemSave contentItem)
{
UpdateName(contentItem);
//TODO: We need to support 'send to publish'
contentItem.PersistedContent.ExpireDate = contentItem.ExpireDate;
contentItem.PersistedContent.ReleaseDate = contentItem.ReleaseDate;
//only set the template if it didn't change
var templateChanged = (contentItem.PersistedContent.Template == null && contentItem.TemplateAlias.IsNullOrWhiteSpace() == false)
|| (contentItem.PersistedContent.Template != null && contentItem.PersistedContent.Template.Alias != contentItem.TemplateAlias)
|| (contentItem.PersistedContent.Template != null && contentItem.TemplateAlias.IsNullOrWhiteSpace());
if (templateChanged)
{
var template = Services.FileService.GetTemplate(contentItem.TemplateAlias);
if (template == null && contentItem.TemplateAlias.IsNullOrWhiteSpace() == false)
{
//ModelState.AddModelError("Template", "No template exists with the specified alias: " + contentItem.TemplateAlias);
LogHelper.Warn<ContentController>("No template exists with the specified alias: " + contentItem.TemplateAlias);
}
else
{
//NOTE: this could be null if there was a template and the posted template is null, this should remove the assigned template
contentItem.PersistedContent.Template = template;
}
}
base.MapPropertyValues(contentItem);
}
/// <summary>
/// Ensures the item can be moved/copied to the new location
/// </summary>
@@ -638,9 +636,7 @@ namespace Umbraco.Web.Editors
new[] {string.Format("{0} ({1})", status.ContentItem.Name, status.ContentItem.Id)}).Trim());
break;
case PublishStatusType.FailedCancelledByEvent:
display.AddWarningNotification(
Services.TextService.Localize("publish"),
Services.TextService.Localize("speechBubbles/contentPublishedFailedByEvent"));
AddCancelMessage(display, "publish", "speechBubbles/contentPublishedFailedByEvent");
break;
case PublishStatusType.FailedAwaitingRelease:
display.AddWarningNotification(

View File

@@ -172,5 +172,15 @@ namespace Umbraco.Web.Editors
return (action.ToString().EndsWith("New"));
}
protected void AddCancelMessage(INotificationModel display, string header = "speechBubbles/operationCancelledHeader", string message = "speechBubbles/operationCancelledText")
{
//if there's already a default event message, don't add our default one
var msgs = UmbracoContext.GetCurrentEventMessages();
if (msgs != null && msgs.GetAll().Any(x => x.IsDefaultEventMessage)) return;
display.AddWarningNotification(
Services.TextService.Localize(header),
Services.TextService.Localize(message));
}
}
}

View File

@@ -269,9 +269,7 @@ namespace Umbraco.Web.Editors
}
else
{
display.AddWarningNotification(
Services.TextService.Localize("speechBubbles/operationCancelledHeader"),
Services.TextService.Localize("speechBubbles/operationCancelledText"));
AddCancelMessage(display);
}
break;