Added audit trail settings event provider.

This commit is contained in:
Sipke Schoorstra
2014-07-01 19:27:26 -07:00
parent abc9acf2e1
commit 7a8765811b
12 changed files with 127 additions and 11 deletions

View File

@@ -3,6 +3,8 @@ using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
using Orchard.AuditTrail.Models;
using Orchard.AuditTrail.Providers.AuditTrail;
using Orchard.AuditTrail.Services;
using Orchard.Caching;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
@@ -12,11 +14,18 @@ using Orchard.Logging;
namespace Orchard.AuditTrail.Handlers {
public class AuditTrailSettingsPartHandler : ContentHandler {
private readonly ISignals _signals;
private string _oldEventSettings;
private readonly IAuditTrailManager _auditTrailManager;
private readonly IWorkContextAccessor _wca;
public AuditTrailSettingsPartHandler(ISignals signals) {
public AuditTrailSettingsPartHandler(ISignals signals, IAuditTrailManager auditTrailManager, IWorkContextAccessor wca) {
_signals = signals;
_auditTrailManager = auditTrailManager;
_wca = wca;
Filters.Add(new ActivatingFilter<AuditTrailSettingsPart>("Site"));
OnActivated<AuditTrailSettingsPart>(SetupLazyFields);
OnUpdating<AuditTrailSettingsPart>(BeginUpdateEvent);
OnUpdated<AuditTrailSettingsPart>(EndUpdateEvent);
OnGetContentItemMetadata<AuditTrailSettingsPart>(GetMetadata);
T = NullLocalizer.Instance;
}
@@ -36,6 +45,22 @@ namespace Orchard.AuditTrail.Handlers {
});
}
private void BeginUpdateEvent(UpdateContentContext context, AuditTrailSettingsPart part) {
_oldEventSettings = part.Retrieve<string>("Events");
}
private void EndUpdateEvent(UpdateContentContext context, AuditTrailSettingsPart part) {
var newEventSettings = part.Retrieve<string>("Events");
if (newEventSettings == _oldEventSettings)
return;
_auditTrailManager.CreateRecord<SettingsAuditTrailEventProvider>(
eventName: SettingsAuditTrailEventProvider.EventsChanged,
user: _wca.GetContext().CurrentUser);
}
private IEnumerable<AuditTrailEventSetting> DeserializeProviderConfiguration(string data) {
if (String.IsNullOrWhiteSpace(data))
return Enumerable.Empty<AuditTrailEventSetting>();

View File

@@ -1,4 +1,7 @@
using Orchard.AuditTrail.Models;
using System.Collections.Generic;
using Orchard.AuditTrail.Models;
using Orchard.AuditTrail.Providers.AuditTrail;
using Orchard.AuditTrail.Services;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
using Orchard.Environment.Extensions;
@@ -7,17 +10,43 @@ using Orchard.Localization;
namespace Orchard.AuditTrail.Handlers {
[OrchardFeature("Orchard.AuditTrail.Trimming")]
public class AuditTrailTrimmingSettingsPartHandler : ContentHandler {
public AuditTrailTrimmingSettingsPartHandler() {
private int _oldThreshold;
private readonly IAuditTrailManager _auditTrailManager;
private readonly IWorkContextAccessor _wca;
public AuditTrailTrimmingSettingsPartHandler(IAuditTrailManager auditTrailManager, IWorkContextAccessor wca) {
_auditTrailManager = auditTrailManager;
_wca = wca;
Filters.Add(new ActivatingFilter<AuditTrailTrimmingSettingsPart>("Site"));
OnGetContentItemMetadata<AuditTrailSettingsPart>(GetMetadata);
OnGetContentItemMetadata<AuditTrailTrimmingSettingsPart>(GetMetadata);
OnUpdating<AuditTrailTrimmingSettingsPart>(BeginUpdateEvent);
OnUpdated<AuditTrailTrimmingSettingsPart>(EndUpdateEvent);
T = NullLocalizer.Instance;
}
public Localizer T { get; set; }
private void GetMetadata(GetContentItemMetadataContext context, AuditTrailSettingsPart part) {
private void GetMetadata(GetContentItemMetadataContext context, AuditTrailTrimmingSettingsPart part) {
context.Metadata.EditorGroupInfo.Add(new GroupInfo(T("Audit Trail")));
}
private void BeginUpdateEvent(UpdateContentContext context, AuditTrailTrimmingSettingsPart part) {
_oldThreshold = part.Threshold;
}
private void EndUpdateEvent(UpdateContentContext context, AuditTrailTrimmingSettingsPart part) {
var newThreshold = part.Threshold;
if (newThreshold == _oldThreshold)
return;
_auditTrailManager.CreateRecord<TrimmingSettingsAuditTrailEventProvider>(
eventName: TrimmingSettingsAuditTrailEventProvider.TrimmingSettingsChanged,
user: _wca.GetContext().CurrentUser,
eventData: new Dictionary<string, object> {
{"OldThreshold", _oldThreshold},
{"NewThreshold", newThreshold}
});
}
}
}

View File

@@ -4,7 +4,7 @@ using System.Collections.Generic;
namespace Orchard.AuditTrail.Helpers {
public static class EventDataHelper {
public static T Get<T>(this IDictionary<string, object> eventData, string key) {
if (!eventData.ContainsKey(key))
if (eventData == null || !eventData.ContainsKey(key))
return default(T);
var value = eventData[key];

View File

@@ -136,6 +136,7 @@
<Content Include="Views\AuditTrailFilter-ContentItem.cshtml" />
<Content Include="Views\AuditTrailFilter-Common-Category.cshtml" />
<Content Include="Views\Content\Detail.cshtml" />
<Content Include="Views\AuditTrailEvent-Content - Copy.cshtml" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj">
@@ -166,8 +167,12 @@
<Compile Include="ImportExport\AuditTrailImportHandler.cs" />
<Compile Include="Models\AuditTrailEventRecordResult.cs" />
<Compile Include="Models\AuditTrailTrimmingSettingsPart.cs" />
<Compile Include="Providers\AuditTrail\TrimmingSettingsAuditTrailEventProvider.cs" />
<Compile Include="Providers\AuditTrail\SettingsAuditTrailEventProvider.cs" />
<Compile Include="Services\Models\AuditTrailSettingsContext.cs" />
<Compile Include="Services\CommonAuditTrailEventHandler.cs" />
<Compile Include="Services\AuditTrailEventHandlerBase.cs" />
<Compile Include="Services\IAuditTrailSettingsEventHandler.cs" />
<Compile Include="Services\Models\DisplayFilterContext.cs" />
<Compile Include="Services\Models\QueryFilterContext.cs" />
<Compile Include="Providers\Content\ContentAuditTrailEventShapes.cs" />
@@ -247,7 +252,7 @@
<Content Include="Views\AuditTrailEvent-Content.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\AuditTrailEvent-Content.cshtml" />
<Content Include="Views\AuditTrailEvent-AuditTrailSettings-TrimmingSettingsChanged.cshtml" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\EditorTemplates\Parts.AuditTrail.Comment.cshtml" />

View File

@@ -0,0 +1,14 @@
using Orchard.AuditTrail.Services;
using Orchard.AuditTrail.Services.Models;
namespace Orchard.AuditTrail.Providers.AuditTrail {
public class SettingsAuditTrailEventProvider : AuditTrailEventProviderBase {
public const string EventsChanged = "EventsChanged";
public override void Describe(DescribeContext context) {
context.For("AuditTrailSettings", T("Audit Trail Settings"))
.Event(this, EventsChanged, T("Events Changed"), T("Audit Trail event settings were changed."), enableByDefault: true);
}
}
}

View File

@@ -0,0 +1,16 @@
using Orchard.AuditTrail.Services;
using Orchard.AuditTrail.Services.Models;
using Orchard.Environment.Extensions;
namespace Orchard.AuditTrail.Providers.AuditTrail {
[OrchardFeature("Orchard.AuditTrail.Trimming")]
public class TrimmingSettingsAuditTrailEventProvider : AuditTrailEventProviderBase {
public const string TrimmingSettingsChanged = "TrimmingSettingsChanged";
public override void Describe(DescribeContext context) {
context.For("AuditTrailSettings", T("Audit Trail Settings"))
.Event(this, TrimmingSettingsChanged, T("Trimming Settings Changed"), T("Audit Trail trimming settings were changed."), enableByDefault: true);
}
}
}

View File

@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using Orchard.AuditTrail.Services;
using Orchard.ContentManagement;
using Orchard.ContentManagement.Handlers;
@@ -39,6 +40,11 @@ namespace Orchard.AuditTrail.Providers.Content {
}
private void RecordAuditTrailEvent(string eventName, IContent content, ContentItemVersionRecord previousContentItemVersion = null) {
var blackList = new[] {"Site"};
if (blackList.Contains(content.ContentItem.ContentType))
return;
var title = _contentManager.GetItemMetadata(content).DisplayText;
var properties = new Dictionary<string, object> {
@@ -58,7 +64,7 @@ namespace Orchard.AuditTrail.Providers.Content {
_auditTrailManager.CreateRecord<ContentAuditTrailEventProvider>(
eventName,
_wca.GetContext().CurrentUser,
_wca.GetContext().CurrentUser,
properties,
eventData,
eventFilterKey: "content",

View File

@@ -0,0 +1,8 @@
using Orchard.AuditTrail.Services.Models;
using Orchard.Events;
namespace Orchard.AuditTrail.Services {
public interface IAuditTrailSettingsEventHandler : IEventHandler {
void Updated(AuditTrailSettingsContext context);
}
}

View File

@@ -0,0 +1,3 @@
namespace Orchard.AuditTrail.Services.Models {
public class AuditTrailSettingsContext {}
}

View File

@@ -10,9 +10,9 @@
<fieldset>
<legend>@descriptor.Name - <span>@descriptor.CategoryDescriptor.Name</span></legend>
<div>
<span>@Display.DateTime(DateTimeUtc: record.CreatedUtc, CustomFormat: T("g"))</span>
<span>@T("On: <strong>{0}</strong>", Display.DateTime(DateTimeUtc: record.CreatedUtc, CustomFormat: T("g")))</span>
@if (!String.IsNullOrWhiteSpace(record.UserName)) {
@T(" | ")<span>@record.UserName</span>
@T(" | ")<span>@T("By: <strong>{0}</strong>", record.UserName)</span>
}
</div>
</fieldset>

View File

@@ -0,0 +1,10 @@
@using Orchard.AuditTrail.Helpers
@{
var eventData = (IDictionary<string, object>)Model.EventData;
var oldThreshold = eventData.Get<int>("OldThreshold");
var newThreshold = eventData.Get<int>("NewThreshold");
}
<fieldset>
@T("Trimming threshold changed from <strong>{0}</strong> to <strong>{1}</strong>", oldThreshold, newThreshold)
</fieldset>