From e0511646afc8705b9a86e64bf38d9ef70b88a2a4 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 7 Jan 2019 16:23:26 +0100 Subject: [PATCH] Fixes - Fix publish/draft status for variant content when invariant properties are edited --- .../Persistence/Factories/PropertyFactory.cs | 15 +++++++++++++-- .../Repositories/Implement/DocumentRepository.cs | 3 ++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Umbraco.Core/Persistence/Factories/PropertyFactory.cs b/src/Umbraco.Core/Persistence/Factories/PropertyFactory.cs index c920a18c3b..c1ae68b44d 100644 --- a/src/Umbraco.Core/Persistence/Factories/PropertyFactory.cs +++ b/src/Umbraco.Core/Persistence/Factories/PropertyFactory.cs @@ -93,7 +93,8 @@ namespace Umbraco.Core.Persistence.Factories return dto; } - public static IEnumerable BuildDtos(int currentVersionId, int publishedVersionId, IEnumerable properties, ILanguageRepository languageRepository, out bool edited, out HashSet editedCultures) + public static IEnumerable BuildDtos(int currentVersionId, int publishedVersionId, IEnumerable properties, + ILanguageRepository languageRepository, out bool edited, out HashSet editedCultures, IEnumerable availableCultures = null) { var propertyDataDtos = new List(); edited = false; @@ -103,7 +104,8 @@ namespace Umbraco.Core.Persistence.Factories { if (property.PropertyType.IsPublishing) { - var editingCultures = property.PropertyType.VariesByCulture(); + var editingCultures = availableCultures?.Any() ?? property.PropertyType.VariesByCulture(); + if (editingCultures && editedCultures == null) editedCultures = new HashSet(StringComparer.OrdinalIgnoreCase); // publishing = deal with edit and published values @@ -131,6 +133,15 @@ namespace Umbraco.Core.Persistence.Factories { editedCultures.Add(propertyValue.Culture); // report culture as edited } + + // flag culture as edited if it contains an edited invariant property + if (propertyValue.Culture == null && + availableCultures !=null && !sameValues&& + editingCultures) + { + editedCultures.Add(availableCultures.FirstOrDefault()); + } + } } else diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/DocumentRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/DocumentRepository.cs index 35496aaba7..ae0a2a19e3 100644 --- a/src/Umbraco.Core/Persistence/Repositories/Implement/DocumentRepository.cs +++ b/src/Umbraco.Core/Persistence/Repositories/Implement/DocumentRepository.cs @@ -527,7 +527,8 @@ namespace Umbraco.Core.Persistence.Repositories.Implement Database.Execute(deletePropertyDataSql); // insert property data - var propertyDataDtos = PropertyFactory.BuildDtos(content.VersionId, publishing ? content.PublishedVersionId : 0, entity.Properties, LanguageRepository, out var edited, out var editedCultures); + var propertyDataDtos = PropertyFactory.BuildDtos(content.VersionId, publishing ? content.PublishedVersionId : 0, + entity.Properties, LanguageRepository, out var edited, out var editedCultures, content.AvailableCultures); foreach (var propertyDataDto in propertyDataDtos) Database.Insert(propertyDataDto);