From c922b192a5b61552bd683c0d573d0cb6acb5a038 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Thu, 27 Sep 2012 12:16:13 -0700 Subject: [PATCH] #19040: Encoding alternates Work Item: 19040 --HG-- branch : 1.x --- src/Orchard.Web/Core/Contents/Shapes.cs | 16 +++++++++++--- .../Drivers/ContentFieldDriver.cs | 21 +++++++++++++------ 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/Orchard.Web/Core/Contents/Shapes.cs b/src/Orchard.Web/Core/Contents/Shapes.cs index abfbcfa9d..317fe4ff2 100644 --- a/src/Orchard.Web/Core/Contents/Shapes.cs +++ b/src/Orchard.Web/Core/Contents/Shapes.cs @@ -16,21 +16,31 @@ namespace Orchard.Core.Contents { // Display type > content type > specific content > display type for a content type > display type for specific content // Content__[DisplayType] e.g. Content.Summary - displaying.ShapeMetadata.Alternates.Add("Content_" + displaying.ShapeMetadata.DisplayType); + displaying.ShapeMetadata.Alternates.Add("Content_" + EncodeAlternateElement(displaying.ShapeMetadata.DisplayType)); // Content__[ContentType] e.g. Content-BlogPost - displaying.ShapeMetadata.Alternates.Add("Content__" + contentItem.ContentType); + displaying.ShapeMetadata.Alternates.Add("Content__" + EncodeAlternateElement(contentItem.ContentType)); // Content__[Id] e.g. Content-42 displaying.ShapeMetadata.Alternates.Add("Content__" + contentItem.Id); // Content_[DisplayType]__[ContentType] e.g. Content-BlogPost.Summary - displaying.ShapeMetadata.Alternates.Add("Content_" + displaying.ShapeMetadata.DisplayType + "__" + contentItem.ContentType); + displaying.ShapeMetadata.Alternates.Add("Content_" + displaying.ShapeMetadata.DisplayType + "__" + EncodeAlternateElement(contentItem.ContentType)); // Content_[DisplayType]__[Id] e.g. Content-42.Summary displaying.ShapeMetadata.Alternates.Add("Content_" + displaying.ShapeMetadata.DisplayType + "__" + contentItem.Id); } }); } + + /// + /// Encodes dashed and dots so that they don't conflict in filenames + /// + /// + /// + private string EncodeAlternateElement(string alternateElement) { + return alternateElement.Replace("-", "__").Replace(".", "_"); + } + } } diff --git a/src/Orchard/ContentManagement/Drivers/ContentFieldDriver.cs b/src/Orchard/ContentManagement/Drivers/ContentFieldDriver.cs index c73d37cf6..1dcf4efcc 100644 --- a/src/Orchard/ContentManagement/Drivers/ContentFieldDriver.cs +++ b/src/Orchard/ContentManagement/Drivers/ContentFieldDriver.cs @@ -156,31 +156,31 @@ namespace Orchard.ContentManagement.Drivers { // [ShapeType__FieldName] e.g. Fields/Common.Text-Teaser if ( !string.IsNullOrEmpty(fieldName) ) - metadata.Alternates.Add(shapeType + "__" + fieldName); + metadata.Alternates.Add(shapeType + "__" + EncodeAlternateElement(fieldName)); // [ShapeType__PartName] e.g. Fields/Common.Text-TeaserPart if ( !string.IsNullOrEmpty(partName) ) { - metadata.Alternates.Add(shapeType + "__" + partName); + metadata.Alternates.Add(shapeType + "__" + EncodeAlternateElement(partName)); } // [ShapeType]__[ContentType]__[PartName] e.g. Fields/Common.Text-Blog-TeaserPart if ( !string.IsNullOrEmpty(partName) && !string.IsNullOrEmpty(contentType) && !dynamicType ) { - metadata.Alternates.Add(shapeType + "__" + contentType + "__" + partName); + metadata.Alternates.Add(EncodeAlternateElement(shapeType + "__" + contentType + "__" + partName)); } // [ShapeType]__[PartName]__[FieldName] e.g. Fields/Common.Text-TeaserPart-Teaser if ( !string.IsNullOrEmpty(partName) && !string.IsNullOrEmpty(fieldName) ) { - metadata.Alternates.Add(shapeType + "__" + partName + "__" + fieldName); + metadata.Alternates.Add(EncodeAlternateElement(shapeType + "__" + partName + "__" + fieldName)); } // [ShapeType]__[ContentType]__[FieldName] e.g. Fields/Common.Text-Blog-Teaser if ( !string.IsNullOrEmpty(contentType) && !string.IsNullOrEmpty(fieldName) ) { - metadata.Alternates.Add(shapeType + "__" + contentType + "__" + fieldName); + metadata.Alternates.Add(EncodeAlternateElement(shapeType + "__" + contentType + "__" + fieldName)); } // [ShapeType]__[ContentType]__[PartName]__[FieldName] e.g. Fields/Common.Text-Blog-TeaserPart-Teaser if ( !string.IsNullOrEmpty(contentType) && !string.IsNullOrEmpty(partName) && !string.IsNullOrEmpty(fieldName) && !dynamicType ) { - metadata.Alternates.Add(shapeType + "__" + contentType + "__" + partName ); + metadata.Alternates.Add(EncodeAlternateElement(shapeType + "__" + contentType + "__" + partName)); } return shape; @@ -207,5 +207,14 @@ namespace Orchard.ContentManagement.Drivers { public CombinedResult Combined(params DriverResult[] results) { return new CombinedResult(results); } + + /// + /// Encodes dashed and dots so that they don't conflict in filenames + /// + /// + /// + private static string EncodeAlternateElement(string alternateElement) { + return alternateElement.Replace("-", "__").Replace(".", "_"); + } } } \ No newline at end of file