From 266b92d7a0cae2162ce441a48c473171a13bcf33 Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Fri, 25 Oct 2013 07:11:33 -0700 Subject: [PATCH] Don't migrate Media Picker fields twice When attached to a custom part, fields were migrated twice --- .../Upgrade/Controllers/MediaController.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Orchard.Web/Modules/Upgrade/Controllers/MediaController.cs b/src/Orchard.Web/Modules/Upgrade/Controllers/MediaController.cs index d7a201dad..92e2c4cf9 100644 --- a/src/Orchard.Web/Modules/Upgrade/Controllers/MediaController.cs +++ b/src/Orchard.Web/Modules/Upgrade/Controllers/MediaController.cs @@ -209,21 +209,28 @@ namespace Upgrade.Controllers { } } + var processedParts = new List(); foreach (var match in matches) { - + + // process each part only once as they could be used by multiple content types + if (processedParts.Contains(match.Part.PartDefinition.Name)) { + continue; + } + + processedParts.Add(match.Part.PartDefinition.Name); + string hint, required; match.Field.Settings.TryGetValue("MediaPickerFieldSettings.Hint", out hint); match.Field.Settings.TryGetValue("MediaPickerFieldSettings.Required", out required); - _contentDefinitionManager.AlterPartDefinition(match.Part.PartDefinition.Name, - cfg => cfg.RemoveField(match.Field.Name)); + _contentDefinitionManager.AlterPartDefinition(match.Part.PartDefinition.Name, cfg => cfg.RemoveField(match.Field.Name)); _contentDefinitionManager.AlterPartDefinition(match.Part.PartDefinition.Name, cfg => cfg .WithField(match.Field.Name, builder => builder .OfType("MediaLibraryPickerField") .WithDisplayName(match.Field.DisplayName) - .WithSetting("MediaLibraryPickerFieldSettings.Hint", hint) - .WithSetting("MediaLibraryPickerFieldSettings.Required", required) + .WithSetting("MediaLibraryPickerFieldSettings.Hint", hint ?? "") + .WithSetting("MediaLibraryPickerFieldSettings.Required", required ?? "") .WithSetting("MediaLibraryPickerFieldSettings.Multiple", false.ToString(CultureInfo.InvariantCulture)) .WithSetting("MediaLibraryPickerFieldSettings.DisplayedContentTypes", String.Empty) ));