From 34ee0be5ac36254f111ce4675beb47295286ae9d Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Wed, 21 Jul 2010 19:52:20 -0700 Subject: [PATCH] Add 5th location type "Default" This is the fallback option is no location is given for a specific display name. --HG-- branch : dev --- .../ContentsLocation/Models/LocationSettings.cs | 17 ++++++++++++----- .../Settings/LocationSettingsEditorEvents.cs | 1 + .../DataMigrations/PublishLaterDataMigration.cs | 4 +--- .../Drivers/PublishLaterPartDriver.cs | 6 ++---- 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/Orchard.Web/Core/ContentsLocation/Models/LocationSettings.cs b/src/Orchard.Web/Core/ContentsLocation/Models/LocationSettings.cs index 6403b227b..f0247938d 100644 --- a/src/Orchard.Web/Core/ContentsLocation/Models/LocationSettings.cs +++ b/src/Orchard.Web/Core/ContentsLocation/Models/LocationSettings.cs @@ -18,6 +18,11 @@ namespace Orchard.Core.ContentsLocation.Models { if (this.TryGetValue(location, out result)) { return result; } + + if (this.TryGetValue("Default", out result)) { + return result; + } + return new ContentLocation { Zone = defaultZone, Position = defaultPosition }; } } @@ -28,11 +33,13 @@ namespace Orchard.Core.ContentsLocation.Models { } public static ContentLocation GetLocation(this TContent part, string locationName, string defaultZone, string defaultPosition) where TContent : ContentPart { - var typePartLocation = part.TypePartDefinition.Settings.GetModel().Get(locationName); - if (typePartLocation.Position == null && typePartLocation.Zone == null) { - return part.PartDefinition.Settings.GetModel().Get(locationName, defaultZone, defaultPosition); - } - return typePartLocation; + // Get the specific location from the part in the type context + var location = part.TypePartDefinition.Settings.GetModel().Get(locationName); + if (location.Position != null || location.Zone != null) + return location; + + // Get the specific location from the part definition + return part.PartDefinition.Settings.GetModel().Get(locationName, defaultZone, defaultPosition); } } } \ No newline at end of file diff --git a/src/Orchard.Web/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs b/src/Orchard.Web/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs index e11343591..a06e72ff4 100644 --- a/src/Orchard.Web/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs +++ b/src/Orchard.Web/Core/ContentsLocation/Settings/LocationSettingsEditorEvents.cs @@ -18,6 +18,7 @@ namespace Orchard.Core.ContentsLocation.Settings { public Localizer T { get; set; } private IEnumerable GetPredefinedLocations() { + yield return new LocationDefinition { Name = "Default", DisplayName = T("Default location (i.e. fallback if no specific override)") }; yield return new LocationDefinition { Name = "Detail", DisplayName = T("Location in a \"Detail\" screen") }; yield return new LocationDefinition { Name = "Editor", DisplayName = T("Location in a \"Editor\" screen") }; yield return new LocationDefinition { Name = "Summary", DisplayName = T("Location in a \"Summary\" screen (Front-end)") }; diff --git a/src/Orchard.Web/Core/PublishLater/DataMigrations/PublishLaterDataMigration.cs b/src/Orchard.Web/Core/PublishLater/DataMigrations/PublishLaterDataMigration.cs index cce0498f8..ca81ce559 100644 --- a/src/Orchard.Web/Core/PublishLater/DataMigrations/PublishLaterDataMigration.cs +++ b/src/Orchard.Web/Core/PublishLater/DataMigrations/PublishLaterDataMigration.cs @@ -10,9 +10,7 @@ namespace Orchard.Core.PublishLater.DataMigrations { public int Create() { ContentDefinitionManager.AlterPartDefinition(typeof(PublishLaterPart).Name, cfg => cfg .WithLocation(new Dictionary { - {"Display", new ContentLocation { Zone = "metadata", Position = "1" }}, - {"Summary", new ContentLocation { Zone = "metadata", Position = "1" }}, - {"SummaryAdmin", new ContentLocation { Zone = "metadata", Position = "1" }}, + {"Default", new ContentLocation { Zone = "metadata", Position = "1" }}, {"Editor", new ContentLocation { Zone = "secondary", Position = "1" }} })); return 1; diff --git a/src/Orchard.Web/Core/PublishLater/Drivers/PublishLaterPartDriver.cs b/src/Orchard.Web/Core/PublishLater/Drivers/PublishLaterPartDriver.cs index ad805e931..5175e32e4 100644 --- a/src/Orchard.Web/Core/PublishLater/Drivers/PublishLaterPartDriver.cs +++ b/src/Orchard.Web/Core/PublishLater/Drivers/PublishLaterPartDriver.cs @@ -32,8 +32,7 @@ namespace Orchard.Core.PublishLater.Drivers { var model = new PublishLaterViewModel(part) { ScheduledPublishUtc = part.ScheduledPublishUtc.Value }; - var location = part.GetLocation(displayType, "metadata", "1"); - return ContentPartTemplate(model, "Parts/PublishLater.Metadata").LongestMatch(displayType, "Summary", "SummaryAdmin").Location(location); + return ContentPartTemplate(model, "Parts/PublishLater.Metadata").LongestMatch(displayType, "Summary", "SummaryAdmin").Location(part.GetLocation(displayType)); } protected override DriverResult Editor(PublishLaterPart part) { @@ -67,8 +66,7 @@ namespace Orchard.Core.PublishLater.Drivers { } } - var location = part.GetLocation("Editor", "secondary", "1"); - return ContentPartTemplate(model, "Parts/PublishLater", TemplatePrefix).Location(location); + return ContentPartTemplate(model, "Parts/PublishLater", TemplatePrefix).Location(part.GetLocation("Editor")); } } } \ No newline at end of file