Improving audit trail content related events.

This commit is contained in:
Sipke Schoorstra
2014-07-31 20:24:31 -07:00
parent 13f91bb8c1
commit 81514eeb2d
4 changed files with 29 additions and 10 deletions

View File

@@ -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);
}
}
}

View File

@@ -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<string, object> {
{"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) {

View File

@@ -8,16 +8,17 @@
var contentItem = (ContentItem) Model.ContentItem;
var eventVersionNumber = eventData.Get<int>("VersionNumber");
var isPublishedEvent = eventData.Get<bool>("Published");
var title = eventData.Get<string>("Title") ?? "[untitled]";
}
<section class="audittrail-content-eventsummary">
@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())
}
}

View File

@@ -13,12 +13,13 @@
var eventVersionNumber = eventData.Get<int>("VersionNumber");
var isPublishedEvent = eventData.Get<bool>("Published");
var diffNodes = (IList<DiffNode>)Model.DiffNodes;
var title = eventData.Get<string>("Title") ?? "[untitled]";
}
<section class="audittrail-content-eventmetadata">
@T("ID:") <strong>@contentItemId</strong><br />
@if (contentItem != null) {
var isLatest = contentItem.VersionRecord.Number == eventVersionNumber;
@(contentItem.ContentType)<text>: </text>@Html.ItemEditLink(contentItem)<br />
@(contentItem.ContentType)<text>: </text>@Html.ItemEditLink(title, contentItemId)<br />
if (isPublishedEvent || isLatest) {
@Html.ActionLink(T("Version {0}", eventVersionNumber).Text, "Detail", "Content", new { area = "Orchard.AuditTrail", id = contentItem.Id, version = contentItem.Version }, null)<br />
}