From 1edf94756c671b9c7040403154e5d99753498318 Mon Sep 17 00:00:00 2001 From: Daniel Stolt Date: Fri, 18 Sep 2015 02:42:40 +0200 Subject: [PATCH] Changed field drivers to not export empty elements. This results in much cleaner recipes. --- .../Core/Common/Drivers/TextFieldDriver.cs | 12 +++++++----- .../Orchard.Fields/Drivers/BooleanFieldDriver.cs | 3 ++- .../Orchard.Fields/Drivers/DateTimeFieldDriver.cs | 4 +++- .../Orchard.Fields/Drivers/EnumerationFieldDriver.cs | 4 +++- .../Orchard.Fields/Drivers/InputFieldDriver.cs | 3 ++- .../Orchard.Fields/Drivers/LinkFieldDriver.cs | 8 +++++--- .../Orchard.Fields/Drivers/NumericFieldDriver.cs | 3 ++- .../Drivers/TaxonomyFieldDriver.cs | 6 +++--- 8 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs b/src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs index 2ffd3dd01..f1a7b4457 100644 --- a/src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs +++ b/src/Orchard.Web/Core/Common/Drivers/TextFieldDriver.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Web; using Orchard.ContentManagement; @@ -32,7 +33,7 @@ namespace Orchard.Core.Common.Drivers { } protected override DriverResult Display(ContentPart part, TextField field, string displayType, dynamic shapeHelper) { - return ContentShape("Fields_Common_Text", GetDifferentiator(field, part), + return ContentShape("Fields_Common_Text", GetDifferentiator(field, part), () => { var settings = field.PartFieldDefinition.Settings.GetModel(); @@ -56,7 +57,7 @@ namespace Orchard.Core.Common.Drivers { } protected override DriverResult Editor(ContentPart part, TextField field, IUpdateModel updater, dynamic shapeHelper) { - + var viewModel = new TextFieldDriverViewModel { Field = field, Text = field.Value, @@ -64,7 +65,7 @@ namespace Orchard.Core.Common.Drivers { ContentItem = part.ContentItem }; - if(updater.TryUpdateModel(viewModel, GetPrefix(field, part), null, null)) { + if (updater.TryUpdateModel(viewModel, GetPrefix(field, part), null, null)) { if (viewModel.Settings.Required && string.IsNullOrWhiteSpace(viewModel.Text)) { updater.AddModelError("Text", T("The field {0} is mandatory", T(field.DisplayName))); return ContentShape("Fields_Common_Text_Edit", GetDifferentiator(field, part), @@ -85,7 +86,8 @@ namespace Orchard.Core.Common.Drivers { } protected override void Exporting(ContentPart part, TextField field, ExportContentContext context) { - context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Text", field.Value); + if (!String.IsNullOrEmpty(field.Value)) + context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Text", field.Value); } protected override void Describe(DescribeMembersContext context) { diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/BooleanFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/BooleanFieldDriver.cs index 4e0afb916..50d0b98af 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/BooleanFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/BooleanFieldDriver.cs @@ -61,7 +61,8 @@ namespace Orchard.Fields.Drivers { } protected override void Exporting(ContentPart part, BooleanField field, ExportContentContext context) { - context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Value", field.Value); + if (field.Value.HasValue) + context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Value", field.Value); } protected override void Describe(DescribeMembersContext context) { diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/DateTimeFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/DateTimeFieldDriver.cs index 1cda2654a..85b59a5d1 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/DateTimeFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/DateTimeFieldDriver.cs @@ -167,7 +167,9 @@ namespace Orchard.Fields.Drivers { } protected override void Exporting(ContentPart part, DateTimeField field, ExportContentContext context) { - context.Element(GetPrefix(field, part)).SetAttributeValue("Value", XmlConvert.ToString(field.Storage.Get(null), XmlDateTimeSerializationMode.Utc)); + var value = field.Storage.Get(null); + if (value != DateTime.MinValue) + context.Element(GetPrefix(field, part)).SetAttributeValue("Value", XmlConvert.ToString(value, XmlDateTimeSerializationMode.Utc)); } protected override void Describe(DescribeMembersContext context) { diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs index 3d1607f39..4ba91fbbe 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/EnumerationFieldDriver.cs @@ -4,6 +4,7 @@ using Orchard.ContentManagement.Handlers; using Orchard.Fields.Settings; using Orchard.Fields.Fields; using Orchard.Localization; +using System; namespace Orchard.Fields.Drivers { public class EnumerationFieldDriver : ContentFieldDriver { @@ -51,7 +52,8 @@ namespace Orchard.Fields.Drivers { } protected override void Exporting(ContentPart part, EnumerationField field, ExportContentContext context) { - context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Value", field.Value); + if (!String.IsNullOrEmpty(field.Value)) + context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Value", field.Value); } protected override void Describe(DescribeMembersContext context) { diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/InputFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/InputFieldDriver.cs index aefd92b55..8a85cf904 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/InputFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/InputFieldDriver.cs @@ -56,7 +56,8 @@ namespace Orchard.Fields.Drivers { } protected override void Exporting(ContentPart part, InputField field, ExportContentContext context) { - context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Value", field.Value); + if (!String.IsNullOrEmpty(field.Value)) + context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Value", field.Value); } protected override void Describe(DescribeMembersContext context) { diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/LinkFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/LinkFieldDriver.cs index 24727c63f..c16b87af6 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/LinkFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/LinkFieldDriver.cs @@ -62,9 +62,11 @@ namespace Orchard.Fields.Drivers { } protected override void Exporting(ContentPart part, LinkField field, ExportContentContext context) { - context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Text", field.Text); - context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Url", field.Value); - context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Target", field.Target); + if (!String.IsNullOrEmpty(field.Text) && !String.IsNullOrEmpty(field.Value) && !String.IsNullOrEmpty(field.Target)) { + context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Text", field.Text); + context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Url", field.Value); + context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Target", field.Target); + } } protected override void Describe(DescribeMembersContext context) { diff --git a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/NumericFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/NumericFieldDriver.cs index 95114fe2b..326c25a97 100644 --- a/src/Orchard.Web/Modules/Orchard.Fields/Drivers/NumericFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Fields/Drivers/NumericFieldDriver.cs @@ -104,7 +104,8 @@ namespace Orchard.Fields.Drivers { } protected override void Exporting(ContentPart part, NumericField field, ExportContentContext context) { - context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Value", !field.Value.HasValue ? String.Empty : field.Value.Value.ToString(CultureInfo.InvariantCulture)); + if (field.Value.HasValue) + context.Element(field.FieldDefinition.Name + "." + field.Name).SetAttributeValue("Value", field.Value.Value.ToString(CultureInfo.InvariantCulture)); } protected override void Describe(DescribeMembersContext context) { diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Drivers/TaxonomyFieldDriver.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Drivers/TaxonomyFieldDriver.cs index 7cbc32363..0d97d0ae3 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Drivers/TaxonomyFieldDriver.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Drivers/TaxonomyFieldDriver.cs @@ -108,10 +108,10 @@ namespace Orchard.Taxonomies.Drivers { var appliedTerms = _taxonomyService.GetTermsForContentItem(part.ContentItem.Id, field.Name); // stores all content items associated to this field - var termIdentities = appliedTerms.Select(x => Services.ContentManager.GetItemMetadata(x).Identity.ToString()) - .ToArray(); + var termIdentities = appliedTerms.Select(x => Services.ContentManager.GetItemMetadata(x).Identity.ToString()).ToArray(); - context.Element(XmlConvert.EncodeLocalName(field.FieldDefinition.Name + "." + field.Name)).SetAttributeValue("Terms", String.Join(",", termIdentities)); + if (termIdentities.Any()) + context.Element(XmlConvert.EncodeLocalName(field.FieldDefinition.Name + "." + field.Name)).SetAttributeValue("Terms", String.Join(",", termIdentities)); } protected override void Importing(ContentPart part, TaxonomyField field, ImportContentContext context) {