mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Improving audit trail content related events.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
|
||||
@@ -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())
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 />
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user