mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Added audit trail settings event provider.
This commit is contained in:
@@ -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>();
|
||||
|
||||
@@ -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}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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];
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
using Orchard.AuditTrail.Services.Models;
|
||||
using Orchard.Events;
|
||||
|
||||
namespace Orchard.AuditTrail.Services {
|
||||
public interface IAuditTrailSettingsEventHandler : IEventHandler {
|
||||
void Updated(AuditTrailSettingsContext context);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
namespace Orchard.AuditTrail.Services.Models {
|
||||
public class AuditTrailSettingsContext {}
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user