From ff67e7917de912680811bd49b4907d570d621323 Mon Sep 17 00:00:00 2001 From: Piotr Szmyd Date: Fri, 8 Nov 2013 04:43:35 +0100 Subject: [PATCH] #20261: Fixing URL and widget shape alternates. All wrappers for those shapes also get similar alternates. Work Item: 20261 --- .../Orchard.DesignerTools/Services/UrlAlternatesFactory.cs | 4 +++- .../Orchard.DesignerTools/Services/WidgetAlternatesFactory.cs | 2 +- .../DisplayManagement/Implementation/DefaultDisplayManager.cs | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/UrlAlternatesFactory.cs b/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/UrlAlternatesFactory.cs index f7704d814..f51c5cac8 100644 --- a/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/UrlAlternatesFactory.cs +++ b/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/UrlAlternatesFactory.cs @@ -56,13 +56,15 @@ namespace Orchard.DesignerTools.Services { return; } + var type = displayedContext.ShapeMetadata.WrapperType ?? displayedContext.ShapeMetadata.Type; + // appends Url alternates to current ones displayedContext.ShapeMetadata.Alternates = displayedContext.ShapeMetadata.Alternates.SelectMany( alternate => new [] { alternate }.Union(_urlAlternates.Value.Select(a => alternate + "__url__" + a)) ).ToList(); // appends [ShapeType]__url__[Url] alternates - displayedContext.ShapeMetadata.Alternates = _urlAlternates.Value.Select(url => displayedContext.ShapeMetadata.Type + "__url__" + url) + displayedContext.ShapeMetadata.Alternates = _urlAlternates.Value.Select(url => type + "__url__" + url) .Union(displayedContext.ShapeMetadata.Alternates) .ToList(); }); diff --git a/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/WidgetAlternatesFactory.cs b/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/WidgetAlternatesFactory.cs index 75b3e0e82..49381c89b 100644 --- a/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/WidgetAlternatesFactory.cs +++ b/src/Orchard.Web/Modules/Orchard.DesignerTools/Services/WidgetAlternatesFactory.cs @@ -26,7 +26,7 @@ namespace Orchard.DesignerTools.Services { var widgetPart = contentItem.As(); if (widgetPart != null) { var zoneName = widgetPart.Zone; - var shapeName = displayedContext.ShapeMetadata.Type; + var shapeName = displayedContext.ShapeMetadata.WrapperType ?? displayedContext.ShapeMetadata.Type; var contentTypeName = contentItem.ContentType; // Add 2 alternates for flexible widget shape naming: diff --git a/src/Orchard/DisplayManagement/Implementation/DefaultDisplayManager.cs b/src/Orchard/DisplayManagement/Implementation/DefaultDisplayManager.cs index 348716b22..2b9dbe01a 100644 --- a/src/Orchard/DisplayManagement/Implementation/DefaultDisplayManager.cs +++ b/src/Orchard/DisplayManagement/Implementation/DefaultDisplayManager.cs @@ -49,7 +49,7 @@ namespace Orchard.DisplayManagement.Implementation { var shapeMetadata = shape.Metadata; // can't really cope with a shape that has no type information - if (shapeMetadata == null || string.IsNullOrEmpty(shapeMetadata.Type)) + if (shapeMetadata == null || (string.IsNullOrEmpty(shapeMetadata.Type) && string.IsNullOrEmpty(shapeMetadata.WrapperType))) return CoerceHtmlString(context.Value); var workContext = _workContextAccessor.GetContext(context.ViewContext); @@ -95,6 +95,7 @@ namespace Orchard.DisplayManagement.Implementation { } } + // storing current shape metadata so it won't get altered by wrappers' display process var wrappers = shape.Metadata.Wrappers; var alternates = shape.Metadata.Alternates; var bindingSources = shape.Metadata.BindingSources; @@ -110,6 +111,7 @@ namespace Orchard.DisplayManagement.Implementation { shape.Metadata.ChildContent = Execute(context); } + // restoring original shape metadata shape.Metadata.WrapperType = currentWrapperType; shape.Metadata.BindingSources = bindingSources; shape.Metadata.Wrappers = wrappers;