mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2026-02-09 09:16:41 +08:00
Incremental work on content type events.
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
using Orchard.AuditTrail.Services.Models;
|
||||
using Orchard.ContentManagement.MetaData.Models;
|
||||
|
||||
namespace Orchard.AuditTrail.Helpers {
|
||||
public static class SettingsDictionaryExtensions {
|
||||
public static DiffDictionary<string, string> GetDiff(this SettingsDictionary oldSettings, SettingsDictionary newSettings) {
|
||||
var dictionary = new DiffDictionary<string, string>();
|
||||
|
||||
BuildDiff(dictionary, newSettings, oldSettings);
|
||||
BuildDiff(dictionary, oldSettings, newSettings);
|
||||
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
private static void BuildDiff(DiffDictionary<string, string> dictionary, SettingsDictionary settingsA, SettingsDictionary settingsB) {
|
||||
|
||||
foreach (var settingA in settingsA) {
|
||||
string oldValue, newValue;
|
||||
|
||||
if (settingsB.ContainsKey(settingA.Key)) {
|
||||
oldValue = settingA.Value;
|
||||
newValue = settingsB[settingA.Key];
|
||||
}
|
||||
else {
|
||||
oldValue = settingA.Value;
|
||||
newValue = settingsB[settingA.Key] = default(string);
|
||||
|
||||
}
|
||||
|
||||
if (oldValue != newValue) {
|
||||
dictionary[settingA.Key] = new Diff<string> {
|
||||
NewValue = newValue,
|
||||
OldValue = oldValue
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -103,7 +103,7 @@
|
||||
<Content Include="Views\AuditTrailEvent-ContentPart-FieldAdded.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentPart-FieldRemoved.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentPart-FieldSettingsUpdated.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentPart-PartSettingsUpdated.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentPart-PartSettingsUpdated.SummaryAdmin.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentPart-Removed.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentType-Created.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentType-PartAdded.cshtml" />
|
||||
@@ -132,6 +132,10 @@
|
||||
<Content Include="Views\AuditTrailEvent-AuditTrailSettings-EventsChanged.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentType-TypeDisplayNameUpdated.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentType-TypeSettingsUpdated.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentType-PartSettingsUpdated.SummaryAdmin.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentType-FieldSettingsUpdated.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentType-FieldSettingsUpdated.SummaryAdmin.cshtml" />
|
||||
<Content Include="Views\AuditTrailEvent-ContentPart-PartSettingsUpdated.cshtml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\..\Orchard\Orchard.Framework.csproj">
|
||||
@@ -172,6 +176,7 @@
|
||||
<Compile Include="Handlers\AuditTrailTrimmingSettingsPartHandler.cs" />
|
||||
<Compile Include="Helpers\FiltersExtensions.cs" />
|
||||
<Compile Include="Helpers\DateTimeExtensions.cs" />
|
||||
<Compile Include="Helpers\SettingsDictionaryExtensions.cs" />
|
||||
<Compile Include="Helpers\XmlHelper.cs" />
|
||||
<Compile Include="Helpers\StringExtensions.cs" />
|
||||
<Compile Include="ImportExport\AuditTrailExportStep.cs" />
|
||||
@@ -196,6 +201,9 @@
|
||||
<Compile Include="Services\AuditTrailTrimmingBackgroundTask.cs" />
|
||||
<Compile Include="Shapes\AuditTrailFilterShapes.cs" />
|
||||
<Compile Include="Shapes\AuditTrailEventShapeAlteration.cs" />
|
||||
<Compile Include="Shapes\ContentTypeFieldSettingsUpdatedEventShape.cs" />
|
||||
<Compile Include="Shapes\ContentPartSettingsUpdatedEventShape.cs" />
|
||||
<Compile Include="Shapes\ContentTypePartSettingsUpdatedEventShape.cs" />
|
||||
<Compile Include="Shapes\ContentTypeSettingsUpdatedEventShape.cs" />
|
||||
<Compile Include="Shapes\AuditTrailSettingsEventShape.cs" />
|
||||
<Compile Include="Services\Models\Diff.cs" />
|
||||
|
||||
@@ -22,6 +22,7 @@ namespace Orchard.AuditTrail.Providers.ContentDefinition {
|
||||
public const string TypeDisplayNameUpdated = "TypeDisplayNameUpdated";
|
||||
public const string TypeSettingsUpdated = "TypeSettingsUpdated";
|
||||
public const string PartSettingsUpdated = "PartSettingsUpdated";
|
||||
public const string FieldSettingsUpdated = "FieldSettingsUpdated";
|
||||
|
||||
public override void Describe(DescribeContext context) {
|
||||
context.For("ContentType", T("Content Type"))
|
||||
@@ -31,7 +32,8 @@ namespace Orchard.AuditTrail.Providers.ContentDefinition {
|
||||
.Event(this, PartRemoved, T("Part removed"), T("A content part was removed from a content type."), enableByDefault: true)
|
||||
.Event(this, TypeDisplayNameUpdated, T("Type display name updated"), T("The display name of a content type was updated."), enableByDefault: true)
|
||||
.Event(this, TypeSettingsUpdated, T("Type settings updated"), T("The settings of a content type were updated."), enableByDefault: true)
|
||||
.Event(this, PartSettingsUpdated, T("Part settings updated"), T("The settings of a content part on a content type were updated."), enableByDefault: true);
|
||||
.Event(this, PartSettingsUpdated, T("Part settings updated"), T("The settings of a content part on a content type were updated."), enableByDefault: true)
|
||||
.Event(this, FieldSettingsUpdated, T("Field settings updated"), T("The settings of a content field on a content part on a content type were updated."), enableByDefault: true);
|
||||
|
||||
context.QueryFilter(QueryFilter);
|
||||
context.DisplayFilter(DisplayFilter);
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Xml.Linq;
|
||||
using Orchard.AuditTrail.Services;
|
||||
using Orchard.ContentManagement;
|
||||
using Orchard.ContentManagement.MetaData;
|
||||
using Orchard.ContentManagement.MetaData.Builders;
|
||||
using Orchard.ContentManagement.MetaData.Models;
|
||||
using Orchard.ContentManagement.MetaData.Services;
|
||||
using Orchard.ContentManagement.ViewModels;
|
||||
using Orchard.ContentTypes.Services;
|
||||
using Orchard.ContentTypes.ViewModels;
|
||||
using Orchard.Environment.Extensions;
|
||||
|
||||
namespace Orchard.AuditTrail.Providers.ContentDefinition {
|
||||
@@ -17,9 +17,13 @@ namespace Orchard.AuditTrail.Providers.ContentDefinition {
|
||||
private readonly IAuditTrailManager _auditTrailManager;
|
||||
private readonly IWorkContextAccessor _wca;
|
||||
private readonly IContentDefinitionService _contentDefinitionService;
|
||||
private string _oldContentTypeDisplayName;
|
||||
private SettingsDictionary _oldContentTypeSettings;
|
||||
private readonly ISettingsFormatter _settingsFormatter;
|
||||
private string _oldContentTypeDisplayName;
|
||||
private EditTypeViewModel _currentContentType;
|
||||
private SettingsDictionary _oldContentTypeSettings;
|
||||
private SettingsDictionary _oldContentTypePartSettings;
|
||||
private SettingsDictionary _oldContentPartFieldSettings;
|
||||
private SettingsDictionary _oldPartSettings;
|
||||
|
||||
public GlobalContentDefinitionEditorEvents(
|
||||
IAuditTrailManager auditTrailManager,
|
||||
@@ -35,6 +39,7 @@ namespace Orchard.AuditTrail.Providers.ContentDefinition {
|
||||
|
||||
public override void TypeEditorUpdating(ContentTypeDefinitionBuilder definition) {
|
||||
var contentType = _contentDefinitionService.GetType(definition.Name);
|
||||
_currentContentType = contentType;
|
||||
_oldContentTypeDisplayName = contentType.DisplayName;
|
||||
_oldContentTypeSettings = new SettingsDictionary(contentType.Settings);
|
||||
}
|
||||
@@ -64,33 +69,66 @@ namespace Orchard.AuditTrail.Providers.ContentDefinition {
|
||||
}
|
||||
|
||||
public override void TypePartEditorUpdating(ContentTypePartDefinitionBuilder builder) {
|
||||
// TODO: record current values
|
||||
var contentTypeDefinition = _contentDefinitionService.GetType(builder.TypeName);
|
||||
var contentPart = contentTypeDefinition.Parts.Single(x => x.PartDefinition.Name == builder.Name);
|
||||
_oldContentTypePartSettings = contentPart.Settings;
|
||||
}
|
||||
|
||||
public override void TypePartEditorUpdated(ContentTypePartDefinitionBuilder builder) {
|
||||
// TODO: compare old values with new values.
|
||||
var eventData = new Dictionary<string, object> {
|
||||
{"ContentPartName", builder.Name},
|
||||
{"ContentTypeName", builder.TypeName}
|
||||
};
|
||||
RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.PartSettingsUpdated, eventData, builder.TypeName);
|
||||
var contentTypePartDefinition = builder.Build();
|
||||
var newSettings = contentTypePartDefinition.Settings;
|
||||
|
||||
if (!AreEqual(newSettings, _oldContentTypePartSettings)) {
|
||||
var eventData = new Dictionary<string, object> {
|
||||
{"ContentPartName", builder.Name},
|
||||
{"ContentTypeName", builder.TypeName},
|
||||
{"OldSettings", ToXml(_oldContentTypePartSettings)},
|
||||
{"NewSettings", ToXml(newSettings)}
|
||||
};
|
||||
RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.PartSettingsUpdated, eventData, builder.TypeName);
|
||||
}
|
||||
}
|
||||
|
||||
//public override void PartEditorUpdated(ContentPartDefinitionBuilder builder) {
|
||||
// var eventData = new Dictionary<string, object> {
|
||||
// {"ContentPartName", builder.Name}
|
||||
// };
|
||||
// RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.PartSettingsUpdated, eventData, builder.Name);
|
||||
//}
|
||||
public override void PartFieldEditorUpdating(ContentPartFieldDefinitionBuilder builder) {
|
||||
var contentPart = _contentDefinitionService.GetPart(builder.PartName);
|
||||
var contentField = contentPart.Fields.Single(x => x.Name == builder.Name);
|
||||
_oldContentPartFieldSettings = contentField.Settings;
|
||||
}
|
||||
|
||||
//public override void PartFieldEditorUpdated(ContentPartFieldDefinitionBuilder builder) {
|
||||
// var eventData = new Dictionary<string, object> {
|
||||
// {"ContentFieldName", builder.Name},
|
||||
// {"ContentFieldType", builder.FieldType},
|
||||
// {"ContentPartName", builder.PartName}
|
||||
// };
|
||||
// RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.FieldSettingsUpdated, eventData, builder.PartName);
|
||||
//}
|
||||
public override void PartFieldEditorUpdated(ContentPartFieldDefinitionBuilder builder) {
|
||||
var contentPartFieldDefinition = builder.Build();
|
||||
var newSettings = contentPartFieldDefinition.Settings;
|
||||
|
||||
if (!AreEqual(newSettings, _oldContentPartFieldSettings)) {
|
||||
var eventData = new Dictionary<string, object> {
|
||||
{"ContentFieldName", builder.Name},
|
||||
{"ContentPartName", builder.PartName},
|
||||
{"ContentTypeName", _currentContentType.Name},
|
||||
{"OldSettings", ToXml(_oldContentPartFieldSettings)},
|
||||
{"NewSettings", ToXml(newSettings)}
|
||||
};
|
||||
RecordContentTypeAuditTrail(ContentTypeAuditTrailEventProvider.FieldSettingsUpdated, eventData, _currentContentType.Name);
|
||||
}
|
||||
}
|
||||
|
||||
public override void PartEditorUpdating(ContentPartDefinitionBuilder builder) {
|
||||
var contentPart = _contentDefinitionService.GetPart(builder.Name);
|
||||
_oldPartSettings = contentPart.Settings;
|
||||
}
|
||||
|
||||
public override void PartEditorUpdated(ContentPartDefinitionBuilder builder) {
|
||||
var contentPartDefinition = builder.Build();
|
||||
var newSettings = contentPartDefinition.Settings;
|
||||
|
||||
if (!AreEqual(newSettings, _oldPartSettings)) {
|
||||
var eventData = new Dictionary<string, object> {
|
||||
{"ContentPartName", builder.Name},
|
||||
{"OldSettings", ToXml(_oldPartSettings)},
|
||||
{"NewSettings", ToXml(newSettings)}
|
||||
};
|
||||
RecordContentPartAuditTrail(ContentPartAuditTrailEventProvider.PartSettingsUpdated, eventData, builder.Name);
|
||||
}
|
||||
}
|
||||
|
||||
private void RecordContentTypeAuditTrail(string eventName, IDictionary<string, object> eventData, string contentTypeName) {
|
||||
_auditTrailManager.CreateRecord<ContentTypeAuditTrailEventProvider>(eventName, _wca.GetContext().CurrentUser, properties: null, eventData: eventData, eventFilterKey: "contenttype", eventFilterData: contentTypeName);
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
using System.Collections.Generic;
|
||||
using Orchard.AuditTrail.Helpers;
|
||||
using Orchard.AuditTrail.Providers.ContentDefinition;
|
||||
using Orchard.ContentManagement.MetaData.Services;
|
||||
using Orchard.DisplayManagement.Implementation;
|
||||
|
||||
namespace Orchard.AuditTrail.Shapes {
|
||||
public class ContentPartSettingsUpdatedEventShape : AuditTrailEventShapeAlteration<ContentPartAuditTrailEventProvider> {
|
||||
private readonly ISettingsFormatter _settingsFormatter;
|
||||
public ContentPartSettingsUpdatedEventShape(ISettingsFormatter settingsFormatter) {
|
||||
_settingsFormatter = settingsFormatter;
|
||||
}
|
||||
|
||||
protected override string EventName {
|
||||
get { return ContentPartAuditTrailEventProvider.PartSettingsUpdated; }
|
||||
}
|
||||
|
||||
protected override void OnAlterShape(ShapeDisplayingContext context) {
|
||||
var eventData = (IDictionary<string, object>)context.Shape.EventData;
|
||||
var oldSettings = _settingsFormatter.Map(XmlHelper.Parse((string)eventData["OldSettings"]));
|
||||
var newSettings = _settingsFormatter.Map(XmlHelper.Parse((string)eventData["NewSettings"]));
|
||||
var diff = oldSettings.GetDiff(newSettings);
|
||||
|
||||
context.Shape.OldSettings = oldSettings;
|
||||
context.Shape.NewSettings = newSettings;
|
||||
context.Shape.Diff = diff;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using System.Collections.Generic;
|
||||
using Orchard.AuditTrail.Helpers;
|
||||
using Orchard.AuditTrail.Providers.ContentDefinition;
|
||||
using Orchard.ContentManagement.MetaData.Services;
|
||||
using Orchard.DisplayManagement.Implementation;
|
||||
|
||||
namespace Orchard.AuditTrail.Shapes {
|
||||
public class ContentTypeFieldSettingsUpdatedEventShape : AuditTrailEventShapeAlteration<ContentTypeAuditTrailEventProvider> {
|
||||
private readonly ISettingsFormatter _settingsFormatter;
|
||||
public ContentTypeFieldSettingsUpdatedEventShape(ISettingsFormatter settingsFormatter) {
|
||||
_settingsFormatter = settingsFormatter;
|
||||
}
|
||||
|
||||
protected override string EventName {
|
||||
get { return ContentTypeAuditTrailEventProvider.FieldSettingsUpdated; }
|
||||
}
|
||||
|
||||
protected override void OnAlterShape(ShapeDisplayingContext context) {
|
||||
var eventData = (IDictionary<string, object>)context.Shape.EventData;
|
||||
var oldSettings = _settingsFormatter.Map(XmlHelper.Parse((string)eventData["OldSettings"]));
|
||||
var newSettings = _settingsFormatter.Map(XmlHelper.Parse((string)eventData["NewSettings"]));
|
||||
var diff = oldSettings.GetDiff(newSettings);
|
||||
|
||||
context.Shape.OldSettings = oldSettings;
|
||||
context.Shape.NewSettings = newSettings;
|
||||
context.Shape.Diff = diff;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
using System.Collections.Generic;
|
||||
using Orchard.AuditTrail.Helpers;
|
||||
using Orchard.AuditTrail.Providers.ContentDefinition;
|
||||
using Orchard.ContentManagement.MetaData.Services;
|
||||
using Orchard.DisplayManagement.Implementation;
|
||||
|
||||
namespace Orchard.AuditTrail.Shapes {
|
||||
public class ContentTypePartSettingsUpdatedEventShape : AuditTrailEventShapeAlteration<ContentTypeAuditTrailEventProvider> {
|
||||
private readonly ISettingsFormatter _settingsFormatter;
|
||||
public ContentTypePartSettingsUpdatedEventShape(ISettingsFormatter settingsFormatter) {
|
||||
_settingsFormatter = settingsFormatter;
|
||||
}
|
||||
|
||||
protected override string EventName {
|
||||
get { return ContentTypeAuditTrailEventProvider.PartSettingsUpdated; }
|
||||
}
|
||||
|
||||
protected override void OnAlterShape(ShapeDisplayingContext context) {
|
||||
var eventData = (IDictionary<string, object>)context.Shape.EventData;
|
||||
var oldSettings = _settingsFormatter.Map(XmlHelper.Parse((string)eventData["OldSettings"]));
|
||||
var newSettings = _settingsFormatter.Map(XmlHelper.Parse((string)eventData["NewSettings"]));
|
||||
var diff = oldSettings.GetDiff(newSettings);
|
||||
|
||||
context.Shape.OldSettings = oldSettings;
|
||||
context.Shape.NewSettings = newSettings;
|
||||
context.Shape.Diff = diff;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using Orchard.AuditTrail.Helpers;
|
||||
using Orchard.AuditTrail.Providers.ContentDefinition;
|
||||
using Orchard.AuditTrail.Services.Models;
|
||||
using Orchard.ContentManagement.MetaData.Models;
|
||||
using Orchard.ContentManagement.MetaData.Services;
|
||||
using Orchard.DisplayManagement.Implementation;
|
||||
|
||||
@@ -21,34 +19,11 @@ namespace Orchard.AuditTrail.Shapes {
|
||||
var eventData = (IDictionary<string, object>)context.Shape.EventData;
|
||||
var oldSettings = _settingsFormatter.Map(XmlHelper.Parse((string)eventData["OldSettings"]));
|
||||
var newSettings = _settingsFormatter.Map(XmlHelper.Parse((string)eventData["NewSettings"]));
|
||||
var diff = GetDiff(oldSettings, newSettings);
|
||||
var diff = oldSettings.GetDiff(newSettings);
|
||||
|
||||
context.Shape.OldSettings = oldSettings;
|
||||
context.Shape.NewSettings = newSettings;
|
||||
context.Shape.Diff = diff;
|
||||
}
|
||||
|
||||
private static DiffDictionary<string, string> GetDiff(SettingsDictionary oldSettings, SettingsDictionary newSettings) {
|
||||
var dictionary = new DiffDictionary<string, string>();
|
||||
|
||||
BuildDiff(dictionary, newSettings, oldSettings);
|
||||
BuildDiff(dictionary, oldSettings, newSettings);
|
||||
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
private static void BuildDiff(DiffDictionary<string, string> dictionary, SettingsDictionary settingsA, SettingsDictionary settingsB) {
|
||||
|
||||
foreach (var settingA in settingsB) {
|
||||
var b = settingsA.ContainsKey(settingA.Key) ? settingsA[settingA.Key] : default(string);
|
||||
|
||||
if (b != settingA.Value) {
|
||||
dictionary[settingA.Key] = new Diff<string> {
|
||||
NewValue = settingA.Value,
|
||||
OldValue = b
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,4 +14,13 @@ section.audittrail-contenttype-event table.items {
|
||||
|
||||
section.audittrail-contenttype-event table.items thead th {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
section.audittrail-contenttype-event ul {
|
||||
list-style-type: square;
|
||||
margin-left: 1.5em;
|
||||
}
|
||||
|
||||
section.audittrail-contenttype-event ul li {
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
@using Orchard.AuditTrail.Helpers
|
||||
@using Orchard.AuditTrail.Services.Models
|
||||
@{
|
||||
Style.Include("audittrail-contenttype-event.css");
|
||||
}
|
||||
@functions {
|
||||
string ToFriendlyEmpty(string value) {
|
||||
return String.IsNullOrWhiteSpace(value) ? Html.Encode(T("<empty>").Text) : value;
|
||||
}
|
||||
}
|
||||
@{
|
||||
var eventData = (IDictionary<string, object>)Model.EventData;
|
||||
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||
var diff = (DiffDictionary<string, string>)Model.Diff;
|
||||
}
|
||||
<section class="audittrail-contenttype-event">
|
||||
<div>@T("Settings for <strong>{0}</strong> were updated:", contentPartName)</div>
|
||||
<ul>
|
||||
@foreach (var setting in diff) {
|
||||
<li>
|
||||
@T("<strong>{0}</strong> was changed from <strong>{1}</strong> to <strong>{2}</strong>.", setting.Key, ToFriendlyEmpty(setting.Value.OldValue), ToFriendlyEmpty(setting.Value.NewValue))
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
</section>
|
||||
@@ -1,9 +1,36 @@
|
||||
@using Orchard.AuditTrail.Helpers
|
||||
@using Orchard.AuditTrail.Services.Models
|
||||
@{
|
||||
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||
Style.Include("audittrail-contenttype-event.css");
|
||||
}
|
||||
|
||||
<section class="audittrail-contentpart-summary">
|
||||
@T("Settings for the <strong>{0}</strong> content part were updated.", contentPartName)
|
||||
@functions {
|
||||
string ToFriendlyEmpty(string value) {
|
||||
return String.IsNullOrWhiteSpace(value) ? Html.Encode(T("<empty>").Text) : value;
|
||||
}
|
||||
}
|
||||
@{
|
||||
var eventData = (IDictionary<string, object>)Model.EventData;
|
||||
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||
var diff = (DiffDictionary<string, string>)Model.Diff;
|
||||
}
|
||||
<section class="audittrail-contenttype-event">
|
||||
<h2>@T("Settings for <strong>{0}</strong> were updated:", contentPartName)</h2>
|
||||
<table class="items">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>@T("Setting")</th>
|
||||
<th>@T("From")</th>
|
||||
<th>@T("To")</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="audittrail-category">
|
||||
@foreach (var setting in diff) {
|
||||
<tr>
|
||||
<td>@setting.Key</td>
|
||||
<td>@ToFriendlyEmpty(setting.Value.OldValue)</td>
|
||||
<td>@ToFriendlyEmpty(setting.Value.NewValue)</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
@@ -0,0 +1,29 @@
|
||||
@using Orchard.AuditTrail.Helpers
|
||||
@using Orchard.AuditTrail.Services.Models
|
||||
@{
|
||||
Style.Include("audittrail-contenttype-event.css");
|
||||
}
|
||||
@functions {
|
||||
string ToFriendlyEmpty(string value) {
|
||||
return String.IsNullOrWhiteSpace(value) ? Html.Encode(T("<empty>").Text) : value;
|
||||
}
|
||||
}
|
||||
@{
|
||||
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||
var contentTypeName = eventData.Get<string>("ContentTypeName");
|
||||
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||
var contentFieldName = eventData.Get<string>("ContentFieldName");
|
||||
var diff = (DiffDictionary<string, string>)Model.Diff;
|
||||
var isImplicitPart = contentTypeName == contentPartName;
|
||||
var captionTemplate = isImplicitPart ? "Settings for <strong>{0}</strong> attached the <strong>{1}</strong> content type were updated:" : "Settings for <strong>{0}</strong> attached to <strong>{1}</strong> of the <strong>{2}</strong> content type were updated:";
|
||||
}
|
||||
<section class="audittrail-contenttype-event">
|
||||
<div>@T(captionTemplate, contentFieldName, contentPartName, contentTypeName)</div>
|
||||
<ul>
|
||||
@foreach (var setting in diff) {
|
||||
<li>
|
||||
@T("<strong>{0}</strong> was changed from <strong>{1}</strong> to <strong>{2}</strong>.", setting.Key, ToFriendlyEmpty(setting.Value.OldValue), ToFriendlyEmpty(setting.Value.NewValue))
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
</section>
|
||||
@@ -0,0 +1,40 @@
|
||||
@using Orchard.AuditTrail.Helpers
|
||||
@using Orchard.AuditTrail.Services.Models
|
||||
@{
|
||||
Style.Include("audittrail-contenttype-event.css");
|
||||
}
|
||||
@functions {
|
||||
string ToFriendlyEmpty(string value) {
|
||||
return String.IsNullOrWhiteSpace(value) ? T("<empty>").Text : value;
|
||||
}
|
||||
}
|
||||
@{
|
||||
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||
var contentTypeName = eventData.Get<string>("ContentTypeName");
|
||||
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||
var contentFieldName = eventData.Get<string>("ContentFieldName");
|
||||
var diff = (DiffDictionary<string, string>)Model.Diff;
|
||||
var isImplicitPart = contentTypeName == contentPartName;
|
||||
var captionTemplate = isImplicitPart ? "Settings for <strong>{0}</strong> attached the <strong>{1}</strong> content type were updated:" : "Settings for <strong>{0}</strong> attached to <strong>{1}</strong> of the <strong>{2}</strong> content type were updated:";
|
||||
}
|
||||
<section class="audittrail-contenttype-event">
|
||||
<h2>@T(captionTemplate, contentFieldName, contentPartName, contentTypeName)</h2>
|
||||
<table class="items">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>@T("Setting")</th>
|
||||
<th>@T("From")</th>
|
||||
<th>@T("To")</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="audittrail-category">
|
||||
@foreach (var setting in diff) {
|
||||
<tr>
|
||||
<td>@setting.Key</td>
|
||||
<td>@ToFriendlyEmpty(setting.Value.OldValue)</td>
|
||||
<td>@ToFriendlyEmpty(setting.Value.NewValue)</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
@@ -0,0 +1,26 @@
|
||||
@using Orchard.AuditTrail.Helpers
|
||||
@using Orchard.AuditTrail.Services.Models
|
||||
@{
|
||||
Style.Include("audittrail-contenttype-event.css");
|
||||
}
|
||||
@functions {
|
||||
string ToFriendlyEmpty(string value) {
|
||||
return String.IsNullOrWhiteSpace(value) ? Html.Encode(T("<empty>").Text) : value;
|
||||
}
|
||||
}
|
||||
@{
|
||||
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||
var contentTypeName = eventData.Get<string>("ContentTypeName");
|
||||
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||
var diff = (DiffDictionary<string, string>)Model.Diff;
|
||||
}
|
||||
<section class="audittrail-contenttype-event">
|
||||
<div>@T("Settings for <strong>{0}</strong> attached to the <strong>{1}</strong> content type were updated:", contentPartName, contentTypeName)</div>
|
||||
<ul>
|
||||
@foreach (var setting in diff) {
|
||||
<li>
|
||||
@T("<strong>{0}</strong> was changed from <strong>{1}</strong> to <strong>{2}</strong>.", setting.Key, ToFriendlyEmpty(setting.Value.OldValue), ToFriendlyEmpty(setting.Value.NewValue))
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
</section>
|
||||
@@ -1,10 +1,37 @@
|
||||
@using Orchard.AuditTrail.Helpers
|
||||
@using Orchard.AuditTrail.Services.Models
|
||||
@{
|
||||
Style.Include("audittrail-contenttype-event.css");
|
||||
}
|
||||
@functions {
|
||||
string ToFriendlyEmpty(string value) {
|
||||
return String.IsNullOrWhiteSpace(value) ? Html.Encode(T("<empty>").Text) : value;
|
||||
}
|
||||
}
|
||||
@{
|
||||
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||
var contentTypeName = eventData.Get<string>("ContentTypeName");
|
||||
var contentPartName = eventData.Get<string>("ContentPartName");
|
||||
var diff = (DiffDictionary<string, string>)Model.Diff;
|
||||
}
|
||||
|
||||
<section class="audittrail-contenttype-summary">
|
||||
@T("Settings for the <strong>{0}</strong> content part attached to the <strong>{1}</strong> content type were updated.", contentPartName, contentTypeName)
|
||||
<section class="audittrail-contenttype-event">
|
||||
<h2>@T("Settings for <strong>{0}</strong> attached to the <strong>{1}</strong> content type were updated:", contentPartName, contentTypeName)</h2>
|
||||
<table class="items">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>@T("Setting")</th>
|
||||
<th>@T("From")</th>
|
||||
<th>@T("To")</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="audittrail-category">
|
||||
@foreach (var setting in diff) {
|
||||
<tr>
|
||||
<td>@setting.Key</td>
|
||||
<td>@ToFriendlyEmpty(setting.Value.OldValue)</td>
|
||||
<td>@ToFriendlyEmpty(setting.Value.NewValue)</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</section>
|
||||
@@ -1,18 +1,26 @@
|
||||
@using Orchard.AuditTrail.Helpers
|
||||
@using Orchard.AuditTrail.Services.Models
|
||||
@{
|
||||
Style.Include("audittrail-contenttype-event.css");
|
||||
}
|
||||
@functions {
|
||||
string ToFriendlyEmpty(string value) {
|
||||
return String.IsNullOrWhiteSpace(value) ? Html.Encode("<empty>") : value;
|
||||
return String.IsNullOrWhiteSpace(value) ? Html.Encode(T("<empty>").Text) : value;
|
||||
}
|
||||
}
|
||||
@{
|
||||
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||
var contentTypeName = eventData.Get<string>("ContentTypeName");
|
||||
var diff = (DiffDictionary<string, string>) Model.Diff;
|
||||
var descriptions = String.Join("<br/>", diff.Select(x => T("<strong>{0}</strong> was changed from <strong>{1}</strong> to <strong>{2}</strong>.", x.Key, ToFriendlyEmpty(x.Value.OldValue), ToFriendlyEmpty(x.Value.NewValue)).Text));
|
||||
}
|
||||
|
||||
<section>
|
||||
@T("The following <strong>{0}</strong> settings were changed:", contentTypeName)<br/>
|
||||
@Html.Raw(descriptions)
|
||||
<section class="audittrail-contenttype-event">
|
||||
@T("The following <strong>{0}</strong> settings were changed:", contentTypeName)<br />
|
||||
<ul>
|
||||
@foreach (var setting in diff) {
|
||||
<li>
|
||||
@T("<strong>{0}</strong> was changed from <strong>{1}</strong> to <strong>{2}</strong>.", setting.Key, ToFriendlyEmpty(setting.Value.OldValue), ToFriendlyEmpty(setting.Value.NewValue))
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
</section>
|
||||
@@ -11,7 +11,7 @@
|
||||
@{
|
||||
var eventData = (IDictionary<string, object>) Model.EventData;
|
||||
var contentTypeName = eventData.Get<string>("ContentTypeName");
|
||||
var differences = (DiffDictionary<string, string>) Model.Diff;
|
||||
var diff = (DiffDictionary<string, string>) Model.Diff;
|
||||
}
|
||||
<section class="audittrail-contenttype-event">
|
||||
<h2>@T("The following <strong>{0}</strong> settings were changed", contentTypeName)</h2>
|
||||
@@ -24,11 +24,11 @@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody class="audittrail-category">
|
||||
@foreach (var diff in differences) {
|
||||
@foreach (var setting in diff) {
|
||||
<tr>
|
||||
<td>@diff.Key</td>
|
||||
<td>@ToFriendlyEmpty(diff.Value.OldValue)</td>
|
||||
<td>@ToFriendlyEmpty(diff.Value.NewValue)</td>
|
||||
<td>@setting.Key</td>
|
||||
<td>@ToFriendlyEmpty(setting.Value.OldValue)</td>
|
||||
<td>@ToFriendlyEmpty(setting.Value.NewValue)</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
|
||||
@@ -621,8 +621,14 @@ namespace Orchard.ContentTypes.Controllers {
|
||||
return HttpNotFound();
|
||||
}
|
||||
|
||||
field.DisplayName = viewModel.DisplayName;
|
||||
_contentDefinitionManager.StorePartDefinition(partViewModel._Definition);
|
||||
_contentDefinitionManager.AlterPartDefinition(partViewModel.Name, partBuilder => {
|
||||
partBuilder.WithField(viewModel.Name, fieldBuilder => {
|
||||
fieldBuilder.WithDisplayName(viewModel.DisplayName);
|
||||
});
|
||||
});
|
||||
|
||||
//field.DisplayName = viewModel.DisplayName;
|
||||
//_contentDefinitionManager.StorePartDefinition(partViewModel._Definition);
|
||||
|
||||
Services.Notifier.Information(T("Display name changed to {0}.", viewModel.DisplayName));
|
||||
|
||||
|
||||
@@ -245,7 +245,9 @@ namespace Orchard.ContentTypes.Services {
|
||||
public void AlterPart(EditPartViewModel partViewModel, IUpdateModel updateModel) {
|
||||
var updater = new Updater(updateModel);
|
||||
_contentDefinitionManager.AlterPartDefinition(partViewModel.Name, partBuilder => {
|
||||
_contentDefinitionEditorEvents.PartEditorUpdating(partBuilder);
|
||||
partViewModel.Templates = _contentDefinitionEditorEvents.PartEditorUpdate(partBuilder, updater);
|
||||
_contentDefinitionEditorEvents.PartEditorUpdated(partBuilder);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ namespace Orchard.ContentManagement.MetaData.Builders {
|
||||
_partDefinition = part;
|
||||
}
|
||||
|
||||
public ContentPartFieldDefinition Build() {
|
||||
public override ContentPartFieldDefinition Build() {
|
||||
return new ContentPartFieldDefinition(_fieldDefinition, _fieldName, _settings);
|
||||
}
|
||||
|
||||
|
||||
@@ -25,5 +25,7 @@ namespace Orchard.ContentManagement.MetaData.Builders {
|
||||
|
||||
public abstract ContentPartFieldDefinitionBuilder OfType(ContentFieldDefinition fieldDefinition);
|
||||
public abstract ContentPartFieldDefinitionBuilder OfType(string fieldType);
|
||||
|
||||
public abstract ContentPartFieldDefinition Build();
|
||||
}
|
||||
}
|
||||
@@ -86,7 +86,7 @@ namespace Orchard.ContentManagement.MetaData.Builders {
|
||||
_partDefinition = part.PartDefinition;
|
||||
}
|
||||
|
||||
public ContentTypePartDefinition Build() {
|
||||
public override ContentTypePartDefinition Build() {
|
||||
return new ContentTypePartDefinition(_partDefinition, _settings);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,5 +18,7 @@ namespace Orchard.ContentManagement.MetaData.Builders {
|
||||
_settings[name] = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
public abstract ContentTypePartDefinition Build();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user