From 2f4f44f016784102e91451ec9974226511a1a234 Mon Sep 17 00:00:00 2001 From: Andre Rodrigues Date: Mon, 28 Mar 2011 17:02:48 -0700 Subject: [PATCH] #17554: Placing content items transactions within transaction scopes. --HG-- branch : 1.x --- .../Contents/Controllers/AdminController.cs | 74 ++++++++++--------- 1 file changed, 41 insertions(+), 33 deletions(-) diff --git a/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs b/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs index b2b21a403..25018b916 100644 --- a/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs +++ b/src/Orchard.Web/Core/Contents/Controllers/AdminController.cs @@ -126,44 +126,52 @@ namespace Orchard.Core.Contents.Controllers { [HttpPost, ActionName("List")] [FormValueRequired("submit.BulkEdit")] public ActionResult ListPOST(ContentOptions options, IEnumerable itemIds, string returnUrl) { - if (itemIds != null) { - switch (options.BulkAction) { - case ContentsBulkAction.None: - break; - case ContentsBulkAction.PublishNow: - foreach (var item in itemIds.Select(itemId => _contentManager.GetLatest(itemId))) { - if (!Services.Authorizer.Authorize(Permissions.PublishContent, item, T("Couldn't publish selected content."))) - return new HttpUnauthorizedResult(); + try { + if (itemIds != null) { + switch (options.BulkAction) { + case ContentsBulkAction.None: + break; + case ContentsBulkAction.PublishNow: + foreach (var item in itemIds.Select(itemId => _contentManager.GetLatest(itemId))) { + if (!Services.Authorizer.Authorize(Permissions.PublishContent, item, T("Couldn't publish selected content."))) { + _transactionManager.Cancel(); + return new HttpUnauthorizedResult(); + } - _contentManager.Publish(item); - Services.ContentManager.Flush(); - } - Services.Notifier.Information(T("Content successfully published.")); - break; - case ContentsBulkAction.Unpublish: - foreach (var item in itemIds.Select(itemId => _contentManager.GetLatest(itemId))) { - if (!Services.Authorizer.Authorize(Permissions.PublishContent, item, T("Couldn't unpublish selected content."))) - return new HttpUnauthorizedResult(); + _contentManager.Publish(item); + } + Services.Notifier.Information(T("Content successfully published.")); + break; + case ContentsBulkAction.Unpublish: + foreach (var item in itemIds.Select(itemId => _contentManager.GetLatest(itemId))) { + if (!Services.Authorizer.Authorize(Permissions.PublishContent, item, T("Couldn't unpublish selected content."))) { + _transactionManager.Cancel(); + return new HttpUnauthorizedResult(); + } - _contentManager.Unpublish(item); - Services.ContentManager.Flush(); - } - Services.Notifier.Information(T("Content successfully unpublished.")); - break; - case ContentsBulkAction.Remove: - foreach (var item in itemIds.Select(itemId => _contentManager.GetLatest(itemId))) { - if (!Services.Authorizer.Authorize(Permissions.DeleteContent, item, T("Couldn't remove selected content."))) - return new HttpUnauthorizedResult(); + _contentManager.Unpublish(item); + } + Services.Notifier.Information(T("Content successfully unpublished.")); + break; + case ContentsBulkAction.Remove: + foreach (var item in itemIds.Select(itemId => _contentManager.GetLatest(itemId))) { + if (!Services.Authorizer.Authorize(Permissions.DeleteContent, item, T("Couldn't remove selected content."))) { + _transactionManager.Cancel(); + return new HttpUnauthorizedResult(); + } - _contentManager.Remove(item); - Services.ContentManager.Flush(); - } - Services.Notifier.Information(T("Content successfully removed.")); - break; - default: - throw new ArgumentOutOfRangeException(); + _contentManager.Remove(item); + } + Services.Notifier.Information(T("Content successfully removed.")); + break; + default: + throw new ArgumentOutOfRangeException(); + } } } + catch { + _transactionManager.Cancel(); + } return this.RedirectLocal(returnUrl, () => RedirectToAction("List")); }