mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 19:54:57 +08:00
Implementing a ContentType/Part audit trail event provider.
This commit is contained in:
@@ -10,4 +10,4 @@ Features:
|
|||||||
Name: AuditTrail
|
Name: AuditTrail
|
||||||
Description: Provides the core audit trail framework.
|
Description: Provides the core audit trail framework.
|
||||||
Category: Security
|
Category: Security
|
||||||
Dependencies: Orchard.Users, Orchard.Roles
|
Dependencies: Orchard.Users, Orchard.Roles, Orchard.ContentTypes
|
@@ -91,6 +91,18 @@
|
|||||||
<Content Include="Views\AuditTrailEvent-Role-RoleCreated.SummaryAdmin.cshtml" />
|
<Content Include="Views\AuditTrailEvent-Role-RoleCreated.SummaryAdmin.cshtml" />
|
||||||
<Content Include="Views\AuditTrailEvent-Role-PermissionAdded.SummaryAdmin.cshtml" />
|
<Content Include="Views\AuditTrailEvent-Role-PermissionAdded.SummaryAdmin.cshtml" />
|
||||||
<Content Include="Views\AuditTrailEvent-Role-PermissionRemoved.SummaryAdmin.cshtml" />
|
<Content Include="Views\AuditTrailEvent-Role-PermissionRemoved.SummaryAdmin.cshtml" />
|
||||||
|
<Content Include="Views\AuditTrailEvent-ContentType-Created.SummaryAdmin.cshtml" />
|
||||||
|
<Content Include="Views\AuditTrailEvent-ContentType-Removed.SummaryAdmin.cshtml" />
|
||||||
|
<Content Include="Views\AuditTrailEvent-ContentType-TypeSettingsUpdated.SummaryAdmin.cshtml" />
|
||||||
|
<Content Include="Views\AuditTrailEvent-ContentType-PartAdded.SummaryAdmin.cshtml" />
|
||||||
|
<Content Include="Views\AuditTrailEvent-ContentType-PartRemoved.SummaryAdmin.cshtml" />
|
||||||
|
<Content Include="Views\AuditTrailEvent-ContentPart-Created.SummaryAdmin.cshtml" />
|
||||||
|
<Content Include="Views\AuditTrailEvent-ContentPart-Removed.SummaryAdmin.cshtml" />
|
||||||
|
<Content Include="Views\AuditTrailEvent-ContentPart-PartSettingsUpdated.SummaryAdmin.cshtml" />
|
||||||
|
<Content Include="Views\AuditTrailEvent-ContentPart-FieldAdded.SummaryAdmin.cshtml" />
|
||||||
|
<Content Include="Views\AuditTrailEvent-ContentPart-FieldRemoved.SummaryAdmin.cshtml" />
|
||||||
|
<Content Include="Views\AuditTrailEvent-ContentType-PartSettingsUpdated.SummaryAdmin.cshtml" />
|
||||||
|
<Content Include="Views\AuditTrailEvent-ContentPart-FieldSettingsUpdated.SummaryAdmin.cshtml" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj">
|
<ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj">
|
||||||
@@ -106,6 +118,11 @@
|
|||||||
<Compile Include="AdminMenu.cs" />
|
<Compile Include="AdminMenu.cs" />
|
||||||
<Compile Include="Controllers\AdminController.cs" />
|
<Compile Include="Controllers\AdminController.cs" />
|
||||||
<Compile Include="Drivers\ContentsDriver.cs" />
|
<Compile Include="Drivers\ContentsDriver.cs" />
|
||||||
|
<Compile Include="Providers\ContentDefinition\ContentDefinitionEventHandler.cs" />
|
||||||
|
<Compile Include="Providers\ContentDefinition\GlobalContentDefinitionEditorEvents.cs" />
|
||||||
|
<Compile Include="Providers\ContentDefinition\ContentPartAuditTrailEventProvider.cs" />
|
||||||
|
<Compile Include="Providers\ContentDefinition\ContentTypeAuditTrailEventProvider.cs" />
|
||||||
|
<Compile Include="Providers\ContentDefinition\IContentDefinitionEventHandler.cs" />
|
||||||
<Compile Include="Providers\Content\AuditTrailEventHandler.cs" />
|
<Compile Include="Providers\Content\AuditTrailEventHandler.cs" />
|
||||||
<Compile Include="Helpers\EventDataHelper.cs" />
|
<Compile Include="Helpers\EventDataHelper.cs" />
|
||||||
<Compile Include="Models\AuditTrailFilterParameters.cs" />
|
<Compile Include="Models\AuditTrailFilterParameters.cs" />
|
||||||
|
@@ -0,0 +1,80 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Orchard.AuditTrail.Services;
|
||||||
|
using Orchard.ContentManagement.MetaData.Models;
|
||||||
|
|
||||||
|
namespace Orchard.AuditTrail.Providers.ContentDefinition {
|
||||||
|
public class ContentDefinitionEventHandler : IContentDefinitionEventHandler {
|
||||||
|
private readonly IAuditTrailManager _auditTrailManager;
|
||||||
|
private readonly IWorkContextAccessor _wca;
|
||||||
|
|
||||||
|
public ContentDefinitionEventHandler(IAuditTrailManager auditTrailManager, IWorkContextAccessor wca) {
|
||||||
|
_auditTrailManager = auditTrailManager;
|
||||||
|
_wca = wca;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ContentTypeCreated(dynamic context) {
|
||||||
|
RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.Created, context.ContentTypeDefinition);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ContentTypeRemoved(dynamic context) {
|
||||||
|
RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.Removed, context.ContentTypeDefinition);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ContentPartCreated(dynamic context) {
|
||||||
|
RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.Created, context.ContentPartDefinition);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ContentPartRemoved(dynamic context) {
|
||||||
|
RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.Removed, context.ContentPartDefinition);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ContentPartAttached(dynamic context) {
|
||||||
|
RecordContentTypePartAuditTrail(ContentTypeAuditTrailEventProvider.PartAdded, context.ContentTypeName, context.ContentPartName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ContentPartDetached(dynamic context) {
|
||||||
|
RecordContentTypePartAuditTrail(ContentTypeAuditTrailEventProvider.PartRemoved, context.ContentTypeName, context.ContentPartName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ContentFieldAttached(dynamic context) {
|
||||||
|
var eventData = new Dictionary<string, object> {
|
||||||
|
{"ContentPartName", context.ContentPartName},
|
||||||
|
{"ContentFieldName", context.ContentFieldName},
|
||||||
|
{"ContentFieldTypeName", context.ContentFieldTypeName},
|
||||||
|
{"ContentFieldDisplayName", context.ContentFieldDisplayName}
|
||||||
|
};
|
||||||
|
_auditTrailManager.Record<ContentPartAuditTrailEventProvider>(ContentPartAuditTrailEventProvider.FieldAdded, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contentpart", eventFilterData: context.ContentPartName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ContentFieldDetached(dynamic context) {
|
||||||
|
var eventData = new Dictionary<string, object> {
|
||||||
|
{"ContentPartName", context.ContentPartName},
|
||||||
|
{"ContentFieldName", context.ContentFieldName}
|
||||||
|
};
|
||||||
|
_auditTrailManager.Record<ContentPartAuditTrailEventProvider>(ContentPartAuditTrailEventProvider.FieldRemoved, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contentpart", eventFilterData: context.ContentPartName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RecordContentTypeAuditTrail(string eventName, ContentTypeDefinition contentTypeDefinition) {
|
||||||
|
var eventData = new Dictionary<string, object> {
|
||||||
|
{"ContentTypeName", contentTypeDefinition.Name},
|
||||||
|
{"ContentTypeDisplayName", contentTypeDefinition.DisplayName},
|
||||||
|
};
|
||||||
|
_auditTrailManager.Record<ContentTypeAuditTrailEventProvider>(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contenttype", eventFilterData: contentTypeDefinition.Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RecordContentPartAuditTrail(string eventName, ContentPartDefinition contentPartDefinition) {
|
||||||
|
var eventData = new Dictionary<string, object> {
|
||||||
|
{"ContentPartName", contentPartDefinition.Name}
|
||||||
|
};
|
||||||
|
_auditTrailManager.Record<ContentPartAuditTrailEventProvider>(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contentpart", eventFilterData: contentPartDefinition.Name);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RecordContentTypePartAuditTrail(string eventName, string contentTypeName, string contentPartName) {
|
||||||
|
var eventData = new Dictionary<string, object> {
|
||||||
|
{"ContentTypeName", contentTypeName},
|
||||||
|
{"ContentPartName", contentPartName}
|
||||||
|
};
|
||||||
|
_auditTrailManager.Record<ContentTypeAuditTrailEventProvider>(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contenttype", eventFilterData: contentTypeName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,25 @@
|
|||||||
|
using Orchard.AuditTrail.Models;
|
||||||
|
using Orchard.AuditTrail.Services;
|
||||||
|
|
||||||
|
namespace Orchard.AuditTrail.Providers.ContentDefinition {
|
||||||
|
public class ContentPartAuditTrailEventProvider : AuditTrailEventProviderBase {
|
||||||
|
public const string Created = "Created";
|
||||||
|
public const string Removed = "Removed";
|
||||||
|
public const string DescriptionChanged = "DescriptionChanged";
|
||||||
|
public const string FieldAdded = "FieldAdded";
|
||||||
|
public const string FieldRemoved = "FieldRemoved";
|
||||||
|
public const string PartSettingsUpdated = "PartSettingsUpdated";
|
||||||
|
public const string FieldSettingsUpdated = "FieldSettingsUpdated";
|
||||||
|
|
||||||
|
public override void Describe(DescribeContext context) {
|
||||||
|
context.For("ContentPart", T("Content Part"))
|
||||||
|
.Event(this, Created, T("Created"), T("Content Type was created."), enableByDefault: true)
|
||||||
|
.Event(this, Removed, T("Removed"), T("Content Type was removed."), enableByDefault: true)
|
||||||
|
.Event(this, DescriptionChanged, T("Description changed"), T("Content Part description was changed."), enableByDefault: true)
|
||||||
|
.Event(this, FieldAdded, T("Field added"), T("Content Field was added."), enableByDefault: true)
|
||||||
|
.Event(this, FieldRemoved, T("Field removed"), T("Content Field was removed."), enableByDefault: true)
|
||||||
|
.Event(this, PartSettingsUpdated, T("Part settings updated"), T("Content Part settings were updated."), enableByDefault: true)
|
||||||
|
.Event(this, FieldSettingsUpdated, T("Field settings updated"), T("Content Field settings were updated."), enableByDefault: true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,23 @@
|
|||||||
|
using Orchard.AuditTrail.Models;
|
||||||
|
using Orchard.AuditTrail.Services;
|
||||||
|
|
||||||
|
namespace Orchard.AuditTrail.Providers.ContentDefinition {
|
||||||
|
public class ContentTypeAuditTrailEventProvider : AuditTrailEventProviderBase {
|
||||||
|
public const string Created = "Created";
|
||||||
|
public const string Removed = "Removed";
|
||||||
|
public const string PartAdded = "PartAdded";
|
||||||
|
public const string PartRemoved = "PartRemoved";
|
||||||
|
public const string TypeSettingsUpdated = "TypeSettingsUpdated";
|
||||||
|
public const string PartSettingsUpdated = "PartSettingsUpdated";
|
||||||
|
|
||||||
|
public override void Describe(DescribeContext context) {
|
||||||
|
context.For("ContentType", T("Content Type"))
|
||||||
|
.Event(this, Created, T("Created"), T("Content Type was created."), enableByDefault: true)
|
||||||
|
.Event(this, Removed, T("Removed"), T("Content Type was removed."), enableByDefault: true)
|
||||||
|
.Event(this, PartAdded, T("Part added"), T("Content Part was added."), enableByDefault: true)
|
||||||
|
.Event(this, PartRemoved, T("Part removed"), T("Content Part was removed."), enableByDefault: true)
|
||||||
|
.Event(this, TypeSettingsUpdated, T("Type Settings updated"), T("Content Type settings were updated."), enableByDefault: true)
|
||||||
|
.Event(this, PartSettingsUpdated, T("Part Settings updated"), T("Content Part settings were updated."), enableByDefault: true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,61 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using Orchard.AuditTrail.Services;
|
||||||
|
using Orchard.ContentManagement;
|
||||||
|
using Orchard.ContentManagement.MetaData;
|
||||||
|
using Orchard.ContentManagement.MetaData.Builders;
|
||||||
|
using Orchard.ContentManagement.ViewModels;
|
||||||
|
|
||||||
|
namespace Orchard.AuditTrail.Providers.ContentDefinition {
|
||||||
|
public class GlobalContentDefinitionEditorEvents : ContentDefinitionEditorEventsBase {
|
||||||
|
private readonly IAuditTrailManager _auditTrailManager;
|
||||||
|
private readonly IWorkContextAccessor _wca;
|
||||||
|
|
||||||
|
public GlobalContentDefinitionEditorEvents(IAuditTrailManager auditTrailManager, IWorkContextAccessor wca) {
|
||||||
|
_auditTrailManager = auditTrailManager;
|
||||||
|
_wca = wca;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<TemplateViewModel> TypeEditorUpdate(ContentTypeDefinitionBuilder builder, IUpdateModel updateModel) {
|
||||||
|
var eventData = new Dictionary<string, object> {
|
||||||
|
{"ContentTypeName", builder.Name}
|
||||||
|
};
|
||||||
|
RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.TypeSettingsUpdated, eventData, builder.Name);
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<TemplateViewModel> TypePartEditorUpdate(ContentTypePartDefinitionBuilder builder, IUpdateModel updateModel) {
|
||||||
|
var eventData = new Dictionary<string, object> {
|
||||||
|
{"ContentPartName", builder.Name},
|
||||||
|
{"ContentTypeName", builder.TypeName}
|
||||||
|
};
|
||||||
|
RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.PartSettingsUpdated, eventData, builder.TypeName);
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<TemplateViewModel> PartEditorUpdate(ContentPartDefinitionBuilder builder, IUpdateModel updateModel) {
|
||||||
|
var eventData = new Dictionary<string, object> {
|
||||||
|
{"ContentPartName", builder.Name}
|
||||||
|
};
|
||||||
|
RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.PartSettingsUpdated, eventData, builder.Name);
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override IEnumerable<TemplateViewModel> PartFieldEditorUpdate(ContentPartFieldDefinitionBuilder builder, IUpdateModel updateModel) {
|
||||||
|
var eventData = new Dictionary<string, object> {
|
||||||
|
{"ContentFieldName", builder.Name},
|
||||||
|
{"ContentFieldType", builder.FieldType},
|
||||||
|
{"ContentPartName", builder.PartName}
|
||||||
|
};
|
||||||
|
RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.FieldSettingsUpdated, eventData, builder.PartName);
|
||||||
|
yield break;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RecordContentTypeAuditTrail(string eventName, IDictionary<string, object> eventData, string contentTypeName) {
|
||||||
|
_auditTrailManager.Record<ContentTypeAuditTrailEventProvider>(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contenttype", eventFilterData: contentTypeName);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void RecordContentPartAuditTrail(string eventName, IDictionary<string, object> eventData, string contentPartName) {
|
||||||
|
_auditTrailManager.Record<ContentPartAuditTrailEventProvider>(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contentpart", eventFilterData: contentPartName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,14 @@
|
|||||||
|
using Orchard.Events;
|
||||||
|
|
||||||
|
namespace Orchard.AuditTrail.Providers.ContentDefinition {
|
||||||
|
public interface IContentDefinitionEventHandler : IEventHandler {
|
||||||
|
void ContentTypeCreated(dynamic context);
|
||||||
|
void ContentTypeRemoved(dynamic context);
|
||||||
|
void ContentPartCreated(dynamic context);
|
||||||
|
void ContentPartRemoved(dynamic context);
|
||||||
|
void ContentPartAttached(dynamic context);
|
||||||
|
void ContentPartDetached(dynamic context);
|
||||||
|
void ContentFieldAttached(dynamic context);
|
||||||
|
void ContentFieldDetached(dynamic context);
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,9 @@
|
|||||||
|
@using Orchard.AuditTrail.Helpers
|
||||||
|
@{
|
||||||
|
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||||
|
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="event-content-part">
|
||||||
|
@T("Created the <strong>{0}</strong> content part.", contentPartName)
|
||||||
|
</section>
|
@@ -0,0 +1,12 @@
|
|||||||
|
@using Orchard.AuditTrail.Helpers
|
||||||
|
@{
|
||||||
|
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||||
|
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||||
|
var contentFieldName = eventData.Get<string>("ContentFieldName");
|
||||||
|
var contentFieldTypeName = eventData.Get<string>("ContentFieldTypeName");
|
||||||
|
var contentDisplayName = eventData.Get<string>("ContentDisplayName");
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="event-content-part">
|
||||||
|
@T("Added the <strong>{0}</strong> content field of type <strong>{1}</strong> to the <strong>{2}</strong> content part.", contentFieldName, contentFieldTypeName, contentPartName)
|
||||||
|
</section>
|
@@ -0,0 +1,10 @@
|
|||||||
|
@using Orchard.AuditTrail.Helpers
|
||||||
|
@{
|
||||||
|
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||||
|
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||||
|
var contentFieldName = eventData.Get<string>("ContentFieldName");
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="event-content-part">
|
||||||
|
@T("Removed the <strong>{0}</strong> content field from the <strong>{1}</strong> content part.", contentFieldName, contentPartName)
|
||||||
|
</section>
|
@@ -0,0 +1,10 @@
|
|||||||
|
@using Orchard.AuditTrail.Helpers
|
||||||
|
@{
|
||||||
|
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||||
|
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||||
|
var contentFieldName = eventData.Get<string>("ContentFieldName");
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="event-content-part">
|
||||||
|
@T("Settings for the <strong>{0}</strong> content field of the <strong>{1}</strong> content part were updated.", contentFieldName, contentPartName)
|
||||||
|
</section>
|
@@ -0,0 +1,9 @@
|
|||||||
|
@using Orchard.AuditTrail.Helpers
|
||||||
|
@{
|
||||||
|
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||||
|
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="event-content-part">
|
||||||
|
@T("Settings for the <strong>{0}</strong> content part were updated.", contentPartName)
|
||||||
|
</section>
|
@@ -0,0 +1,9 @@
|
|||||||
|
@using Orchard.AuditTrail.Helpers
|
||||||
|
@{
|
||||||
|
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||||
|
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="event-content-part">
|
||||||
|
@T("Removed the <strong>{0}</strong> content part.", contentPartName)
|
||||||
|
</section>
|
@@ -0,0 +1,10 @@
|
|||||||
|
@using Orchard.AuditTrail.Helpers
|
||||||
|
@{
|
||||||
|
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||||
|
var contentTypeName = eventData.Get<string>("ContentTypeName");
|
||||||
|
var contentTypeDisplayName = eventData.Get<string>("ContentTypeDisplayName");
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="event-content-type">
|
||||||
|
@T("Created the <strong>{0}</strong> content type.", contentTypeName)
|
||||||
|
</section>
|
@@ -0,0 +1,10 @@
|
|||||||
|
@using Orchard.AuditTrail.Helpers
|
||||||
|
@{
|
||||||
|
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||||
|
var contentTypeName = eventData.Get<string>("ContentTypeName");
|
||||||
|
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="event-content-type">
|
||||||
|
@T("Added the <strong>{0}</strong> content part to the <strong>{1}</strong> content type.", contentPartName, contentTypeName)
|
||||||
|
</section>
|
@@ -0,0 +1,10 @@
|
|||||||
|
@using Orchard.AuditTrail.Helpers
|
||||||
|
@{
|
||||||
|
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||||
|
var contentTypeName = eventData.Get<string>("ContentTypeName");
|
||||||
|
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="event-content-type">
|
||||||
|
@T("Removed the <strong>{0}</strong> content part from the <strong>{1}</strong> content type.", contentPartName, contentTypeName)
|
||||||
|
</section>
|
@@ -0,0 +1,10 @@
|
|||||||
|
@using Orchard.AuditTrail.Helpers
|
||||||
|
@{
|
||||||
|
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||||
|
var contentTypeName = eventData.Get<string>("ContentTypeName");
|
||||||
|
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="event-content-type">
|
||||||
|
@T("Settings for the <strong>{0}</strong> content part attached to the <strong>{1}</strong> content type were updated.", contentPartName, contentTypeName)
|
||||||
|
</section>
|
@@ -0,0 +1,10 @@
|
|||||||
|
@using Orchard.AuditTrail.Helpers
|
||||||
|
@{
|
||||||
|
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||||
|
var contentTypeName = eventData.Get<string>("ContentTypeName");
|
||||||
|
var contentTypeDisplayName = eventData.Get<string>("ContentTypeDisplayName");
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="event-content-type">
|
||||||
|
@T("Removed the <strong>{0}</strong> content type.", contentTypeName)
|
||||||
|
</section>
|
@@ -0,0 +1,9 @@
|
|||||||
|
@using Orchard.AuditTrail.Helpers
|
||||||
|
@{
|
||||||
|
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||||
|
var contentTypeName = eventData.Get<string>("ContentTypeName");
|
||||||
|
}
|
||||||
|
|
||||||
|
<section class="event-content-type">
|
||||||
|
@T("Settings for the <strong>{0}</strong> content type were updated.", contentTypeName)
|
||||||
|
</section>
|
Reference in New Issue
Block a user