mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-19 10:07:55 +08:00
Adding <remove name="..."/> to metadata reader
Provides ability to remove parts and fields on merge/import of content definitions Fixes some fieldname/fieldtypename issues on persistence --HG-- branch : dev
This commit is contained in:
@@ -115,7 +115,7 @@ namespace Orchard.Core.Settings.Metadata {
|
||||
record.Settings = _settingsWriter.Map(model.Settings).ToString();
|
||||
|
||||
var toRemove = record.ContentPartFieldDefinitionRecords
|
||||
.Where(partFieldDefinitionRecord => model.Fields.Any(partField => partFieldDefinitionRecord.Name == partField.Name))
|
||||
.Where(partFieldDefinitionRecord => !model.Fields.Any(partField => partFieldDefinitionRecord.Name == partField.Name))
|
||||
.ToList();
|
||||
|
||||
foreach (var remove in toRemove) {
|
||||
@@ -123,7 +123,7 @@ namespace Orchard.Core.Settings.Metadata {
|
||||
}
|
||||
|
||||
foreach (var field in model.Fields) {
|
||||
var fieldName = field.FieldDefinition.Name;
|
||||
var fieldName = field.Name;
|
||||
var partFieldRecord = record.ContentPartFieldDefinitionRecords.SingleOrDefault(r => r.Name == fieldName);
|
||||
if (partFieldRecord == null) {
|
||||
partFieldRecord = new ContentPartFieldDefinitionRecord {
|
||||
|
@@ -35,7 +35,7 @@ namespace Orchard.ContentManagement.MetaData.Builders {
|
||||
}
|
||||
|
||||
public ContentPartDefinitionBuilder RemoveField(string fieldName) {
|
||||
var existingField = _fields.SingleOrDefault(x => x.FieldDefinition.Name == fieldName);
|
||||
var existingField = _fields.SingleOrDefault(x => x.Name == fieldName);
|
||||
if (existingField != null) {
|
||||
_fields.Remove(existingField);
|
||||
}
|
||||
|
@@ -1,4 +1,5 @@
|
||||
using System.Xml;
|
||||
using System.Linq;
|
||||
using System.Xml;
|
||||
using System.Xml.Linq;
|
||||
using Orchard.ContentManagement.MetaData.Builders;
|
||||
using Orchard.ContentManagement.MetaData.Models;
|
||||
@@ -18,13 +19,22 @@ namespace Orchard.ContentManagement.MetaData.Services {
|
||||
}
|
||||
foreach (var iter in source.Elements()) {
|
||||
var partElement = iter;
|
||||
builder.WithPart(
|
||||
XmlConvert.DecodeName(partElement.Name.LocalName),
|
||||
partBuilder => {
|
||||
foreach (var setting in _settingsReader.Map(partElement)) {
|
||||
partBuilder.WithSetting(setting.Key, setting.Value);
|
||||
}
|
||||
});
|
||||
var partName = XmlConvert.DecodeName(partElement.Name.LocalName);
|
||||
if (partName == "remove") {
|
||||
var nameAttribute = partElement.Attribute("name");
|
||||
if (nameAttribute != null) {
|
||||
builder.RemovePart(nameAttribute.Value);
|
||||
}
|
||||
}
|
||||
else {
|
||||
builder.WithPart(
|
||||
partName,
|
||||
partBuilder => {
|
||||
foreach (var setting in _settingsReader.Map(partElement)) {
|
||||
partBuilder.WithSetting(setting.Key, setting.Value);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,15 +46,25 @@ namespace Orchard.ContentManagement.MetaData.Services {
|
||||
|
||||
foreach (var iter in source.Elements()) {
|
||||
var fieldElement = iter;
|
||||
var fieldParameters = XmlConvert.DecodeName(fieldElement.Name.LocalName).Split('.');
|
||||
builder.WithField(
|
||||
fieldParameters[0],
|
||||
fieldBuilder => {
|
||||
fieldBuilder.OfType(fieldParameters[1]);
|
||||
foreach (var setting in _settingsReader.Map(fieldElement)) {
|
||||
fieldBuilder.WithSetting(setting.Key, setting.Value);
|
||||
}
|
||||
});
|
||||
var fieldParameters = XmlConvert.DecodeName(fieldElement.Name.LocalName).Split(new[] { '.' }, 2);
|
||||
var fieldName = fieldParameters.FirstOrDefault();
|
||||
var fieldType = fieldParameters.Skip(1).FirstOrDefault();
|
||||
if (fieldName == "remove") {
|
||||
var nameAttribute = fieldElement.Attribute("name");
|
||||
if (nameAttribute != null) {
|
||||
builder.RemoveField(nameAttribute.Value);
|
||||
}
|
||||
}
|
||||
else {
|
||||
builder.WithField(
|
||||
fieldName,
|
||||
fieldBuilder => {
|
||||
fieldBuilder.OfType(fieldType);
|
||||
foreach (var setting in _settingsReader.Map(fieldElement)) {
|
||||
fieldBuilder.WithSetting(setting.Key, setting.Value);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user