diff --git a/src/Orchard.Web/Core/Settings/Metadata/ContentDefinitionManager.cs b/src/Orchard.Web/Core/Settings/Metadata/ContentDefinitionManager.cs index e907a9d62..37a63908b 100644 --- a/src/Orchard.Web/Core/Settings/Metadata/ContentDefinitionManager.cs +++ b/src/Orchard.Web/Core/Settings/Metadata/ContentDefinitionManager.cs @@ -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 { diff --git a/src/Orchard/ContentManagement/MetaData/Builders/ContentPartDefinitionBuilder.cs b/src/Orchard/ContentManagement/MetaData/Builders/ContentPartDefinitionBuilder.cs index eb61fbfa2..2b7a0ad73 100644 --- a/src/Orchard/ContentManagement/MetaData/Builders/ContentPartDefinitionBuilder.cs +++ b/src/Orchard/ContentManagement/MetaData/Builders/ContentPartDefinitionBuilder.cs @@ -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); } diff --git a/src/Orchard/ContentManagement/MetaData/Services/ContentDefinitionReader.cs b/src/Orchard/ContentManagement/MetaData/Services/ContentDefinitionReader.cs index d287ccbdc..44ec15de7 100644 --- a/src/Orchard/ContentManagement/MetaData/Services/ContentDefinitionReader.cs +++ b/src/Orchard/ContentManagement/MetaData/Services/ContentDefinitionReader.cs @@ -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); + } + }); + } } } }