diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Module.txt b/src/Orchard.Web/Modules/Orchard.AuditTrail/Module.txt
index 2817a7e3b..8a2564d11 100644
--- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Module.txt
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Module.txt
@@ -10,4 +10,4 @@ Features:
Name: AuditTrail
Description: Provides the core audit trail framework.
Category: Security
- Dependencies: Orchard.Users, Orchard.Roles
\ No newline at end of file
+ Dependencies: Orchard.Users, Orchard.Roles, Orchard.ContentTypes
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Orchard.AuditTrail.csproj b/src/Orchard.Web/Modules/Orchard.AuditTrail/Orchard.AuditTrail.csproj
index a936c5b63..03330ad3e 100644
--- a/src/Orchard.Web/Modules/Orchard.AuditTrail/Orchard.AuditTrail.csproj
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Orchard.AuditTrail.csproj
@@ -91,6 +91,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
@@ -106,6 +118,11 @@
+
+
+
+
+
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentDefinitionEventHandler.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentDefinitionEventHandler.cs
new file mode 100644
index 000000000..bb79ed7d0
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentDefinitionEventHandler.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 {
+ {"ContentPartName", context.ContentPartName},
+ {"ContentFieldName", context.ContentFieldName},
+ {"ContentFieldTypeName", context.ContentFieldTypeName},
+ {"ContentFieldDisplayName", context.ContentFieldDisplayName}
+ };
+ _auditTrailManager.Record(ContentPartAuditTrailEventProvider.FieldAdded, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contentpart", eventFilterData: context.ContentPartName);
+ }
+
+ public void ContentFieldDetached(dynamic context) {
+ var eventData = new Dictionary {
+ {"ContentPartName", context.ContentPartName},
+ {"ContentFieldName", context.ContentFieldName}
+ };
+ _auditTrailManager.Record(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 {
+ {"ContentTypeName", contentTypeDefinition.Name},
+ {"ContentTypeDisplayName", contentTypeDefinition.DisplayName},
+ };
+ _auditTrailManager.Record(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contenttype", eventFilterData: contentTypeDefinition.Name);
+ }
+
+ private void RecordContentPartAuditTrail(string eventName, ContentPartDefinition contentPartDefinition) {
+ var eventData = new Dictionary {
+ {"ContentPartName", contentPartDefinition.Name}
+ };
+ _auditTrailManager.Record(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 {
+ {"ContentTypeName", contentTypeName},
+ {"ContentPartName", contentPartName}
+ };
+ _auditTrailManager.Record(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contenttype", eventFilterData: contentTypeName);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentPartAuditTrailEventProvider.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentPartAuditTrailEventProvider.cs
new file mode 100644
index 000000000..6b5427a3a
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentPartAuditTrailEventProvider.cs
@@ -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);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentTypeAuditTrailEventProvider.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentTypeAuditTrailEventProvider.cs
new file mode 100644
index 000000000..4ef7a0222
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/ContentTypeAuditTrailEventProvider.cs
@@ -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);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/GlobalContentDefinitionEditorEvents.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/GlobalContentDefinitionEditorEvents.cs
new file mode 100644
index 000000000..b04a62333
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/GlobalContentDefinitionEditorEvents.cs
@@ -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 TypeEditorUpdate(ContentTypeDefinitionBuilder builder, IUpdateModel updateModel) {
+ var eventData = new Dictionary {
+ {"ContentTypeName", builder.Name}
+ };
+ RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.TypeSettingsUpdated, eventData, builder.Name);
+ yield break;
+ }
+
+ public override IEnumerable TypePartEditorUpdate(ContentTypePartDefinitionBuilder builder, IUpdateModel updateModel) {
+ var eventData = new Dictionary {
+ {"ContentPartName", builder.Name},
+ {"ContentTypeName", builder.TypeName}
+ };
+ RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.PartSettingsUpdated, eventData, builder.TypeName);
+ yield break;
+ }
+
+ public override IEnumerable PartEditorUpdate(ContentPartDefinitionBuilder builder, IUpdateModel updateModel) {
+ var eventData = new Dictionary {
+ {"ContentPartName", builder.Name}
+ };
+ RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.PartSettingsUpdated, eventData, builder.Name);
+ yield break;
+ }
+
+ public override IEnumerable PartFieldEditorUpdate(ContentPartFieldDefinitionBuilder builder, IUpdateModel updateModel) {
+ var eventData = new Dictionary {
+ {"ContentFieldName", builder.Name},
+ {"ContentFieldType", builder.FieldType},
+ {"ContentPartName", builder.PartName}
+ };
+ RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.FieldSettingsUpdated, eventData, builder.PartName);
+ yield break;
+ }
+
+ private void RecordContentTypeAuditTrail(string eventName, IDictionary eventData, string contentTypeName) {
+ _auditTrailManager.Record(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contenttype", eventFilterData: contentTypeName);
+ }
+
+ private void RecordContentPartAuditTrail(string eventName, IDictionary eventData, string contentPartName) {
+ _auditTrailManager.Record(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contentpart", eventFilterData: contentPartName);
+ }
+ }
+}
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/IContentDefinitionEventHandler.cs b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/IContentDefinitionEventHandler.cs
new file mode 100644
index 000000000..e5f921f7c
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Providers/ContentDefinition/IContentDefinitionEventHandler.cs
@@ -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);
+ }
+}
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-Created.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-Created.SummaryAdmin.cshtml
new file mode 100644
index 000000000..9e6b51388
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-Created.SummaryAdmin.cshtml
@@ -0,0 +1,9 @@
+@using Orchard.AuditTrail.Helpers
+@{
+ var eventData = (IDictionary) Model.EventData;
+ var contentPartName = eventData.Get("ContentPartName");
+}
+
+
+ @T("Created the {0} content part.", contentPartName)
+
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldAdded.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldAdded.SummaryAdmin.cshtml
new file mode 100644
index 000000000..6f61b5602
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldAdded.SummaryAdmin.cshtml
@@ -0,0 +1,12 @@
+@using Orchard.AuditTrail.Helpers
+@{
+ var eventData = (IDictionary) Model.EventData;
+ var contentPartName = eventData.Get("ContentPartName");
+ var contentFieldName = eventData.Get("ContentFieldName");
+ var contentFieldTypeName = eventData.Get("ContentFieldTypeName");
+ var contentDisplayName = eventData.Get("ContentDisplayName");
+}
+
+
+ @T("Added the {0} content field of type {1} to the {2} content part.", contentFieldName, contentFieldTypeName, contentPartName)
+
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldRemoved.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldRemoved.SummaryAdmin.cshtml
new file mode 100644
index 000000000..a88e8c570
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldRemoved.SummaryAdmin.cshtml
@@ -0,0 +1,10 @@
+@using Orchard.AuditTrail.Helpers
+@{
+ var eventData = (IDictionary) Model.EventData;
+ var contentPartName = eventData.Get("ContentPartName");
+ var contentFieldName = eventData.Get("ContentFieldName");
+}
+
+
+ @T("Removed the {0} content field from the {1} content part.", contentFieldName, contentPartName)
+
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldSettingsUpdated.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldSettingsUpdated.SummaryAdmin.cshtml
new file mode 100644
index 000000000..efff40e3f
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-FieldSettingsUpdated.SummaryAdmin.cshtml
@@ -0,0 +1,10 @@
+@using Orchard.AuditTrail.Helpers
+@{
+ var eventData = (IDictionary) Model.EventData;
+ var contentPartName = eventData.Get("ContentPartName");
+ var contentFieldName = eventData.Get("ContentFieldName");
+}
+
+
+ @T("Settings for the {0} content field of the {1} content part were updated.", contentFieldName, contentPartName)
+
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-PartSettingsUpdated.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-PartSettingsUpdated.SummaryAdmin.cshtml
new file mode 100644
index 000000000..6bd2ffc76
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-PartSettingsUpdated.SummaryAdmin.cshtml
@@ -0,0 +1,9 @@
+@using Orchard.AuditTrail.Helpers
+@{
+ var eventData = (IDictionary) Model.EventData;
+ var contentPartName = eventData.Get("ContentPartName");
+}
+
+
+ @T("Settings for the {0} content part were updated.", contentPartName)
+
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-Removed.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-Removed.SummaryAdmin.cshtml
new file mode 100644
index 000000000..e3b7718a1
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentPart-Removed.SummaryAdmin.cshtml
@@ -0,0 +1,9 @@
+@using Orchard.AuditTrail.Helpers
+@{
+ var eventData = (IDictionary) Model.EventData;
+ var contentPartName = eventData.Get("ContentPartName");
+}
+
+
+ @T("Removed the {0} content part.", contentPartName)
+
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-Created.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-Created.SummaryAdmin.cshtml
new file mode 100644
index 000000000..3a4e0ef90
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-Created.SummaryAdmin.cshtml
@@ -0,0 +1,10 @@
+@using Orchard.AuditTrail.Helpers
+@{
+ var eventData = (IDictionary) Model.EventData;
+ var contentTypeName = eventData.Get("ContentTypeName");
+ var contentTypeDisplayName = eventData.Get("ContentTypeDisplayName");
+}
+
+
+ @T("Created the {0} content type.", contentTypeName)
+
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartAdded.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartAdded.SummaryAdmin.cshtml
new file mode 100644
index 000000000..5532bcf39
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartAdded.SummaryAdmin.cshtml
@@ -0,0 +1,10 @@
+@using Orchard.AuditTrail.Helpers
+@{
+ var eventData = (IDictionary) Model.EventData;
+ var contentTypeName = eventData.Get("ContentTypeName");
+ var contentPartName = eventData.Get("ContentPartName");
+}
+
+
+ @T("Added the {0} content part to the {1} content type.", contentPartName, contentTypeName)
+
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartRemoved.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartRemoved.SummaryAdmin.cshtml
new file mode 100644
index 000000000..137a210a0
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartRemoved.SummaryAdmin.cshtml
@@ -0,0 +1,10 @@
+@using Orchard.AuditTrail.Helpers
+@{
+ var eventData = (IDictionary) Model.EventData;
+ var contentTypeName = eventData.Get("ContentTypeName");
+ var contentPartName = eventData.Get("ContentPartName");
+}
+
+
+ @T("Removed the {0} content part from the {1} content type.", contentPartName, contentTypeName)
+
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartSettingsUpdated.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartSettingsUpdated.SummaryAdmin.cshtml
new file mode 100644
index 000000000..364d52744
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-PartSettingsUpdated.SummaryAdmin.cshtml
@@ -0,0 +1,10 @@
+@using Orchard.AuditTrail.Helpers
+@{
+ var eventData = (IDictionary) Model.EventData;
+ var contentTypeName = eventData.Get("ContentTypeName");
+ var contentPartName = eventData.Get("ContentPartName");
+}
+
+
+ @T("Settings for the {0} content part attached to the {1} content type were updated.", contentPartName, contentTypeName)
+
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-Removed.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-Removed.SummaryAdmin.cshtml
new file mode 100644
index 000000000..eb9545a7b
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-Removed.SummaryAdmin.cshtml
@@ -0,0 +1,10 @@
+@using Orchard.AuditTrail.Helpers
+@{
+ var eventData = (IDictionary) Model.EventData;
+ var contentTypeName = eventData.Get("ContentTypeName");
+ var contentTypeDisplayName = eventData.Get("ContentTypeDisplayName");
+}
+
+
+ @T("Removed the {0} content type.", contentTypeName)
+
\ No newline at end of file
diff --git a/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-TypeSettingsUpdated.SummaryAdmin.cshtml b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-TypeSettingsUpdated.SummaryAdmin.cshtml
new file mode 100644
index 000000000..1f6832afd
--- /dev/null
+++ b/src/Orchard.Web/Modules/Orchard.AuditTrail/Views/AuditTrailEvent-ContentType-TypeSettingsUpdated.SummaryAdmin.cshtml
@@ -0,0 +1,9 @@
+@using Orchard.AuditTrail.Helpers
+@{
+ var eventData = (IDictionary) Model.EventData;
+ var contentTypeName = eventData.Get("ContentTypeName");
+}
+
+
+ @T("Settings for the {0} content type were updated.", contentTypeName)
+
\ No newline at end of file