From 81514eeb2d93d721629c091fe84a32c1491de5c2 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Thu, 31 Jul 2014 20:24:31 -0700 Subject: [PATCH] Improving audit trail content related events. --- .../Helpers/HtmlExtensions.cs | 4 +++ .../Providers/Content/GlobalContentHandler.cs | 27 ++++++++++++++----- ...uditTrailEvent-Content.SummaryAdmin.cshtml | 5 ++-- .../Views/AuditTrailEvent-Content.cshtml | 3 ++- 4 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Helpers/HtmlExtensions.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Helpers/HtmlExtensions.cs index 0ea705cb7..97d9f1f2b 100644 --- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Helpers/HtmlExtensions.cs +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Helpers/HtmlExtensions.cs @@ -11,5 +11,9 @@ namespace Orchard.AuditTrail.Helpers { public static IHtmlString ContentTypeEditLink(this HtmlHelper html, string contentTypeName) { return html.ActionLink(contentTypeName, "Edit", "Admin", new { id = contentTypeName, area = "Orchard.ContentTypes" }, null); } + + public static IHtmlString ItemEditLink(this HtmlHelper html, string linkText, int contentItemId) { + return html.ActionLink(linkText, "Edit", "Admin", new { id = contentItemId, area = "Contents" }, null); + } } } \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/Content/GlobalContentHandler.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/Content/GlobalContentHandler.cs index baf4d0ce8..8ecf9345d 100644 --- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/Content/GlobalContentHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/Content/GlobalContentHandler.cs @@ -14,6 +14,7 @@ namespace Orchard.AuditTrail.Providers.Content { private readonly IContentManager _contentManager; private XElement _previousVersionXml; private readonly IDiffGramAnalyzer _analyzer; + private bool _contentItemCreated = false; public GlobalContentHandler(IAuditTrailManager auditTrailManager, IWorkContextAccessor wca, IContentManager contentManager, IDiffGramAnalyzer analyzer) { _auditTrailManager = auditTrailManager; @@ -23,20 +24,30 @@ namespace Orchard.AuditTrail.Providers.Content { } protected override void Created(CreateContentContext context) { - RecordAuditTrailEvent(ContentAuditTrailEventProvider.Created, context.ContentItem); + // At this point the UpdateEditor hasn't been invoked on the content item yet, + // so we don't have access to all of the information we might need (such as Title). + // We set a flag against we check in the Updated method (which is invoked when UpdateEditor is invoked). + _contentItemCreated = true; } protected override void Updating(UpdateContentContext context) { var contentItem = context.ContentItem; - _previousVersionXml = _contentManager.Export(contentItem); + _previousVersionXml = _contentItemCreated + ? default(XElement) // No need to do a diff on a newly created content item. + : _contentManager.Export(contentItem); } protected override void Updated(UpdateContentContext context) { var contentItem = context.ContentItem; - var newVersionXml = _contentManager.Export(contentItem); - var diffGram = _analyzer.GenerateDiffGram(_previousVersionXml, newVersionXml); - - RecordAuditTrailEvent(ContentAuditTrailEventProvider.Saved, context.ContentItem, diffGram: diffGram, previousVersionXml: _previousVersionXml); + + if (_contentItemCreated) { + RecordAuditTrailEvent(ContentAuditTrailEventProvider.Created, context.ContentItem); + } + else { + var newVersionXml = _contentManager.Export(contentItem); + var diffGram = _analyzer.GenerateDiffGram(_previousVersionXml, newVersionXml); + RecordAuditTrailEvent(ContentAuditTrailEventProvider.Saved, context.ContentItem, diffGram: diffGram, previousVersionXml: _previousVersionXml); + } } protected override void Published(PublishContentContext context) { @@ -62,13 +73,15 @@ namespace Orchard.AuditTrail.Providers.Content { {"Content", content} }; + var metaData = _contentManager.GetItemMetadata(content); var eventData = new Dictionary { {"ContentId", content.Id}, - {"ContentIdentity", _contentManager.GetItemMetadata(content).Identity.ToString()}, + {"ContentIdentity", metaData.Identity.ToString()}, {"ContentType", content.ContentItem.ContentType}, {"VersionId", content.ContentItem.VersionRecord.Id}, {"VersionNumber", content.ContentItem.VersionRecord.Number}, {"Published", content.ContentItem.VersionRecord.Published}, + {"Title", metaData.DisplayText} }; if (previousContentItemVersion != null) { diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-Content.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-Content.SummaryAdmin.cshtml index ac763e291..8a1d5c3bd 100644 --- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-Content.SummaryAdmin.cshtml +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-Content.SummaryAdmin.cshtml @@ -8,16 +8,17 @@ var contentItem = (ContentItem) Model.ContentItem; var eventVersionNumber = eventData.Get("VersionNumber"); var isPublishedEvent = eventData.Get("Published"); + var title = eventData.Get("Title") ?? "[untitled]"; }
@if (contentItem != null) { var contentType = contentItem.ContentType; var isLatest = contentItem.VersionRecord.Number == eventVersionNumber; if (isPublishedEvent || isLatest) { - @T("{0} of the {1} {2} was {3}.", Html.ActionLink(T("Version {0}", eventVersionNumber).Text, "Detail", "Content", new { area = "Orchard.AuditTrail", id = contentItemId, version = eventVersionNumber }, null), contentType.ToLower(), Html.ItemEditLink(contentItem), descriptor.Name.Text.ToLower()) + @T("{0} of the {1} {2} was {3}.", Html.ActionLink(T("Version {0}", eventVersionNumber).Text, "Detail", "Content", new { area = "Orchard.AuditTrail", id = contentItemId, version = eventVersionNumber }, null), contentType.ToLower(), Html.ItemEditLink(title, contentItemId), descriptor.Name.Text.ToLower()) } else { - @T("The {0} {1} was {2}.", contentType.ToLower(), Html.ItemEditLink(contentItem), descriptor.Name.Text.ToLower()) + @T("The {0} {1} was {2}.", contentType.ToLower(), Html.ItemEditLink(title, contentItemId), descriptor.Name.Text.ToLower()) } } diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-Content.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-Content.cshtml index 6e755ab73..185a198d4 100644 --- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-Content.cshtml +++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-Content.cshtml @@ -13,12 +13,13 @@ var eventVersionNumber = eventData.Get("VersionNumber"); var isPublishedEvent = eventData.Get("Published"); var diffNodes = (IList)Model.DiffNodes; + var title = eventData.Get("Title") ?? "[untitled]"; }