Refactored AuditTrail import/export.

This commit is contained in:
Sipke Schoorstra
2015-07-17 12:47:30 +01:00
parent 6c5d82d927
commit 0fe16bf54a
4 changed files with 29 additions and 38 deletions

View File

@@ -1,12 +0,0 @@
using System.Collections.Generic;
using Orchard.Environment.Extensions;
using Orchard.ImportExport.Services;
namespace Orchard.AuditTrail.ImportExport {
[OrchardFeature("Orchard.AuditTrail.ImportExport")]
public class AuditTrailExportStep : ICustomExportStep {
public void Register(IList<string> steps) {
steps.Add("AuditTrail");
}
}
}

View File

@@ -194,6 +194,8 @@
<Compile Include="Menus\RecycleBinAdminMenu.cs" />
<Compile Include="Providers\AuditTrail\AuditTrailEventSettingEventData.cs" />
<Compile Include="Providers\AuditTrail\AuditTrailManagerExtensions.cs" />
<Compile Include="Recipes\Builders\AuditTrailStep.cs" />
<Compile Include="Recipes\Executors\AuditTrailStep.cs" />
<Compile Include="ViewModels\RecycleBinCommand.cs" />
<Compile Include="Controllers\RecycleBinController.cs" />
<Compile Include="Controllers\ContentController.cs" />
@@ -212,9 +214,6 @@
<Compile Include="Helpers\HtmlExtensions.cs" />
<Compile Include="Helpers\XmlHelper.cs" />
<Compile Include="Helpers\StringExtensions.cs" />
<Compile Include="ImportExport\AuditTrailExportStep.cs" />
<Compile Include="ImportExport\AuditTrailExportHandler.cs" />
<Compile Include="ImportExport\AuditTrailImportHandler.cs" />
<Compile Include="Models\AuditTrailEventRecordResult.cs" />
<Compile Include="Models\AuditTrailTrimmingSettingsPart.cs" />
<Compile Include="Providers\AuditTrail\AuditTrailTrimmingSettingsEventProvider.cs" />
@@ -329,6 +328,7 @@
<ItemGroup>
<Content Include="Views\AuditTrailEvent-Content-Restored.SummaryAdmin.cshtml" />
</ItemGroup>
<ItemGroup />
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>

View File

@@ -4,26 +4,31 @@ using System.Xml.Linq;
using Orchard.AuditTrail.Models;
using Orchard.Data;
using Orchard.Environment.Extensions;
using Orchard.ImportExport.Services;
using Orchard.Localization;
using Orchard.Recipes.Services;
namespace Orchard.AuditTrail.ImportExport {
namespace Orchard.AuditTrail.Recipes.Builders {
[OrchardFeature("Orchard.AuditTrail.ImportExport")]
public class AuditTrailExportEventHandler : IExportEventHandler {
public class AuditTrailExportEventHandler : RecipeBuilderStep {
private readonly IRepository<AuditTrailEventRecord> _auditTrailEventRepository;
public AuditTrailExportEventHandler(IRepository<AuditTrailEventRecord> auditTrailEventRepository) {
_auditTrailEventRepository = auditTrailEventRepository;
}
public void Exporting(ExportContext context) {
public override string Name {
get { return "AuditTrail"; }
}
public void Exported(ExportContext context) {
public override LocalizedString DisplayName {
get { return T("AuditTrail"); }
}
if (!context.ExportOptions.CustomSteps.Contains("AuditTrail")) {
return;
}
public override LocalizedString Description {
get { return T("Exports audit trail events."); }
}
public override void Build(BuildContext context) {
var records = _auditTrailEventRepository.Table.ToList();
if (!records.Any()) {
@@ -31,7 +36,7 @@ namespace Orchard.AuditTrail.ImportExport {
}
var root = new XElement("AuditTrail");
context.Document.Element("Orchard").Add(root);
context.RecipeDocument.Element("Orchard").Add(root);
foreach (var record in records) {
root.Add(new XElement("Event",
@@ -60,7 +65,7 @@ namespace Orchard.AuditTrail.ImportExport {
}
private static XElement ParseEventData(string eventData) {
if(String.IsNullOrWhiteSpace(eventData))
if (String.IsNullOrWhiteSpace(eventData))
return new XElement("EventData");
return XElement.Parse(eventData);

View File

@@ -8,31 +8,31 @@ using Orchard.Recipes.Models;
using Orchard.Recipes.Services;
using Orchard.Security;
namespace Orchard.AuditTrail.ImportExport {
namespace Orchard.AuditTrail.Recipes.Executors {
[OrchardFeature("Orchard.AuditTrail.ImportExport")]
public class AuditTrailImportHandler : Component, IRecipeHandler {
public class AuditTrailStep : RecipeExecutionStep {
private readonly IRepository<AuditTrailEventRecord> _auditTrailEventRepository;
private readonly IAuthorizer _authorizer;
private readonly IWorkContextAccessor _wca;
public AuditTrailImportHandler(IRepository<AuditTrailEventRecord> auditTrailEventRepository, IAuthorizer authorizer, IWorkContextAccessor wca) {
public AuditTrailStep(IRepository<AuditTrailEventRecord> auditTrailEventRepository, IAuthorizer authorizer, IWorkContextAccessor wca) {
_auditTrailEventRepository = auditTrailEventRepository;
_authorizer = authorizer;
_wca = wca;
}
public void ExecuteRecipeStep(RecipeContext recipeContext) {
if (!String.Equals(recipeContext.RecipeStep.Name, "AuditTrail", StringComparison.OrdinalIgnoreCase)) {
return;
}
public override string Name
{
get { return "AuditTrail"; }
}
public override void Execute(RecipeExecutionContext context) {
if (!_authorizer.Authorize(Permissions.ImportAuditTrail)) {
Logger.Warning("Blocked {0} from importing an audit trail because this user does not have the ImportauditTrail permission.", _wca.GetContext().CurrentUser.UserName);
recipeContext.Executed = false;
return;
}
foreach (var eventElement in recipeContext.RecipeStep.Step.Elements()) {
foreach (var eventElement in context.RecipeStep.Step.Elements()) {
var record = new AuditTrailEventRecord {
EventName = eventElement.Attr<string>("Name"),
FullEventName = eventElement.Attr<string>("FullName"),
@@ -44,11 +44,9 @@ namespace Orchard.AuditTrail.ImportExport {
Comment = eventElement.El("Comment"),
EventData = eventElement.Element("EventData").ToString(),
};
_auditTrailEventRepository.Create(record);
}
recipeContext.Executed = true;
}
}
}