mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-20 02:37: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();
|
record.Settings = _settingsWriter.Map(model.Settings).ToString();
|
||||||
|
|
||||||
var toRemove = record.ContentPartFieldDefinitionRecords
|
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();
|
.ToList();
|
||||||
|
|
||||||
foreach (var remove in toRemove) {
|
foreach (var remove in toRemove) {
|
||||||
@@ -123,7 +123,7 @@ namespace Orchard.Core.Settings.Metadata {
|
|||||||
}
|
}
|
||||||
|
|
||||||
foreach (var field in model.Fields) {
|
foreach (var field in model.Fields) {
|
||||||
var fieldName = field.FieldDefinition.Name;
|
var fieldName = field.Name;
|
||||||
var partFieldRecord = record.ContentPartFieldDefinitionRecords.SingleOrDefault(r => r.Name == fieldName);
|
var partFieldRecord = record.ContentPartFieldDefinitionRecords.SingleOrDefault(r => r.Name == fieldName);
|
||||||
if (partFieldRecord == null) {
|
if (partFieldRecord == null) {
|
||||||
partFieldRecord = new ContentPartFieldDefinitionRecord {
|
partFieldRecord = new ContentPartFieldDefinitionRecord {
|
||||||
|
@@ -35,7 +35,7 @@ namespace Orchard.ContentManagement.MetaData.Builders {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ContentPartDefinitionBuilder RemoveField(string fieldName) {
|
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) {
|
if (existingField != null) {
|
||||||
_fields.Remove(existingField);
|
_fields.Remove(existingField);
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using System.Xml;
|
using System.Linq;
|
||||||
|
using System.Xml;
|
||||||
using System.Xml.Linq;
|
using System.Xml.Linq;
|
||||||
using Orchard.ContentManagement.MetaData.Builders;
|
using Orchard.ContentManagement.MetaData.Builders;
|
||||||
using Orchard.ContentManagement.MetaData.Models;
|
using Orchard.ContentManagement.MetaData.Models;
|
||||||
@@ -18,8 +19,16 @@ namespace Orchard.ContentManagement.MetaData.Services {
|
|||||||
}
|
}
|
||||||
foreach (var iter in source.Elements()) {
|
foreach (var iter in source.Elements()) {
|
||||||
var partElement = iter;
|
var partElement = iter;
|
||||||
|
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(
|
builder.WithPart(
|
||||||
XmlConvert.DecodeName(partElement.Name.LocalName),
|
partName,
|
||||||
partBuilder => {
|
partBuilder => {
|
||||||
foreach (var setting in _settingsReader.Map(partElement)) {
|
foreach (var setting in _settingsReader.Map(partElement)) {
|
||||||
partBuilder.WithSetting(setting.Key, setting.Value);
|
partBuilder.WithSetting(setting.Key, setting.Value);
|
||||||
@@ -27,6 +36,7 @@ namespace Orchard.ContentManagement.MetaData.Services {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void Merge(XElement source, ContentPartDefinitionBuilder builder) {
|
public void Merge(XElement source, ContentPartDefinitionBuilder builder) {
|
||||||
builder.Named(XmlConvert.DecodeName(source.Name.LocalName));
|
builder.Named(XmlConvert.DecodeName(source.Name.LocalName));
|
||||||
@@ -36,11 +46,20 @@ namespace Orchard.ContentManagement.MetaData.Services {
|
|||||||
|
|
||||||
foreach (var iter in source.Elements()) {
|
foreach (var iter in source.Elements()) {
|
||||||
var fieldElement = iter;
|
var fieldElement = iter;
|
||||||
var fieldParameters = XmlConvert.DecodeName(fieldElement.Name.LocalName).Split('.');
|
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(
|
builder.WithField(
|
||||||
fieldParameters[0],
|
fieldName,
|
||||||
fieldBuilder => {
|
fieldBuilder => {
|
||||||
fieldBuilder.OfType(fieldParameters[1]);
|
fieldBuilder.OfType(fieldType);
|
||||||
foreach (var setting in _settingsReader.Map(fieldElement)) {
|
foreach (var setting in _settingsReader.Map(fieldElement)) {
|
||||||
fieldBuilder.WithSetting(setting.Key, setting.Value);
|
fieldBuilder.WithSetting(setting.Key, setting.Value);
|
||||||
}
|
}
|
||||||
@@ -49,3 +68,4 @@ namespace Orchard.ContentManagement.MetaData.Services {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user