diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/TaxonomyPartHandler.cs b/src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/TaxonomyPartHandler.cs index c3eca356b..454004d46 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/TaxonomyPartHandler.cs +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Handlers/TaxonomyPartHandler.cs @@ -1,21 +1,24 @@ -using Orchard.ContentManagement; +using System.Linq; +using System.Web.Routing; +using Orchard.ContentManagement; +using Orchard.ContentManagement.Handlers; using Orchard.ContentManagement.MetaData; using Orchard.Core.Title.Models; -using Orchard.Taxonomies.Fields; -using Orchard.Taxonomies.Services; -using Orchard.Taxonomies.Models; -using Orchard.ContentManagement.Handlers; using Orchard.Data; +using Orchard.Localization.Models; +using Orchard.Localization.Services; +using Orchard.Taxonomies.Fields; +using Orchard.Taxonomies.Models; +using Orchard.Taxonomies.Services; using Orchard.Taxonomies.Settings; -using System; -using System.Web.Routing; namespace Orchard.Taxonomies.Handlers { public class TaxonomyPartHandler : ContentHandler { public TaxonomyPartHandler( IRepository repository, ITaxonomyService taxonomyService, - IContentDefinitionManager contentDefinitionManager) { + IContentDefinitionManager contentDefinitionManager, + ILocalizationService localizationService = null) { //Localization feature may not be active string previousName = null; @@ -33,6 +36,21 @@ namespace Orchard.Taxonomies.Handlers { if (field.FieldDefinition.Name == typeof(TaxonomyField).Name) { if (field.Settings.GetModel().Taxonomy == previousName) { + //could either be a name change, or we could be publishing a translation + if (localizationService != null) { //Localization feature may not be active + var locPart = part.ContentItem.As(); + if (locPart != null) { + var localizedTaxonomies = localizationService + .GetLocalizations(part.ContentItem) //versions in all cultures + .Where(pa => pa.ContentItem.Id != part.ContentItem.Id) //but not the one we are publishing + .Select(pa => { + var tax = pa.ContentItem.As(); //the TaxonomyPart + return tax == null ? string.Empty : tax.Name; //get its name (with sanity check) + }); + if (localizedTaxonomies.Contains(previousName)) + continue; //this is a new localization, so move along + } + } contentDefinitionManager.AlterPartDefinition(partDefinition.Name, cfg => cfg.WithField(field.Name, builder => builder.WithSetting("TaxonomyFieldSettings.Taxonomy", part.Name))); diff --git a/src/Orchard.Web/Modules/Orchard.Taxonomies/Orchard.Taxonomies.csproj b/src/Orchard.Web/Modules/Orchard.Taxonomies/Orchard.Taxonomies.csproj index a31a0d48a..9164a643a 100644 --- a/src/Orchard.Web/Modules/Orchard.Taxonomies/Orchard.Taxonomies.csproj +++ b/src/Orchard.Web/Modules/Orchard.Taxonomies/Orchard.Taxonomies.csproj @@ -229,6 +229,10 @@ {66fccd76-2761-47e3-8d11-b45d0001ddaa} Orchard.Autoroute + + {FBC8B571-ED50-49D8-8D9D-64AB7454A0D6} + Orchard.Localization + {6f759635-13d7-4e94-bcc9-80445d63f117} Orchard.Tokens