From 22e0720395ef7262d490fbba97e9560d0f56d9dc Mon Sep 17 00:00:00 2001 From: Andy Butland Date: Wed, 7 May 2025 08:42:39 +0200 Subject: [PATCH] Log language ISO codes instead of language names (#19259) --- src/Umbraco.Core/Services/ContentService.cs | 37 +++++++++---------- .../Services/ContentServiceTests.cs | 13 +++---- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/src/Umbraco.Core/Services/ContentService.cs b/src/Umbraco.Core/Services/ContentService.cs index 287b3057c1..c72218e8f3 100644 --- a/src/Umbraco.Core/Services/ContentService.cs +++ b/src/Umbraco.Core/Services/ContentService.cs @@ -1108,14 +1108,8 @@ public class ContentService : RepositoryService, IContentService if (culturesChanging != null) { - IEnumerable? languages = _languageRepository.GetMany()? - .Where(x => culturesChanging.InvariantContains(x.IsoCode)) - .Select(x => x.CultureName); - if (languages is not null) - { - var langs = string.Join(", ", languages); - Audit(AuditType.SaveVariant, userId.Value, content.Id, $"Saved languages: {langs}", langs); - } + var langs = GetLanguageDetailsForAuditEntry(culturesChanging); + Audit(AuditType.SaveVariant, userId.Value, content.Id, $"Saved languages: {langs}", langs); } else { @@ -1625,9 +1619,7 @@ public class ContentService : RepositoryService, IContentService if (culturesUnpublishing != null) { // This will mean that that we unpublished a mandatory culture or we unpublished the last culture. - var langs = string.Join(", ", allLangs - .Where(x => culturesUnpublishing.InvariantContains(x.IsoCode)) - .Select(x => x.CultureName)); + var langs = GetLanguageDetailsForAuditEntry(allLangs, culturesUnpublishing); Audit(AuditType.UnpublishVariant, userId, content.Id, $"Unpublished languages: {langs}", langs); if (publishResult == null) @@ -1707,9 +1699,7 @@ public class ContentService : RepositoryService, IContentService case PublishResultType.SuccessPublishCulture: if (culturesPublishing != null) { - var langs = string.Join(", ", allLangs - .Where(x => culturesPublishing.InvariantContains(x.IsoCode)) - .Select(x => x.CultureName)); + var langs = GetLanguageDetailsForAuditEntry(allLangs, culturesPublishing); Audit(AuditType.PublishVariant, userId, content.Id, $"Published languages: {langs}", langs); } @@ -1717,9 +1707,7 @@ public class ContentService : RepositoryService, IContentService case PublishResultType.SuccessUnpublishCulture: if (culturesUnpublishing != null) { - var langs = string.Join(", ", allLangs - .Where(x => culturesUnpublishing.InvariantContains(x.IsoCode)) - .Select(x => x.CultureName)); + var langs = GetLanguageDetailsForAuditEntry(allLangs, culturesUnpublishing); Audit(AuditType.UnpublishVariant, userId, content.Id, $"Unpublished languages: {langs}", langs); } @@ -1741,9 +1729,7 @@ public class ContentService : RepositoryService, IContentService { if (culturesChanging != null) { - var langs = string.Join(", ", allLangs - .Where(x => culturesChanging.InvariantContains(x.IsoCode)) - .Select(x => x.CultureName)); + var langs = GetLanguageDetailsForAuditEntry(allLangs, culturesChanging); Audit(AuditType.SaveVariant, userId, content.Id, $"Saved languages: {langs}", langs); } else @@ -3098,6 +3084,17 @@ public class ContentService : RepositoryService, IContentService private void Audit(AuditType type, int userId, int objectId, string? message = null, string? parameters = null) => _auditRepository.Save(new AuditItem(objectId, type, userId, UmbracoObjectTypes.Document.GetName(), message, parameters)); + private string GetLanguageDetailsForAuditEntry(IEnumerable affectedCultures) + => GetLanguageDetailsForAuditEntry(_languageRepository.GetMany(), affectedCultures); + + private static string GetLanguageDetailsForAuditEntry(IEnumerable languages, IEnumerable affectedCultures) + { + IEnumerable languageIsoCodes = languages + .Where(x => affectedCultures.InvariantContains(x.IsoCode)) + .Select(x => x.IsoCode); + return string.Join(", ", languageIsoCodes); + } + private static bool IsDefaultCulture(IReadOnlyCollection? langs, string culture) => langs?.Any(x => x.IsDefault && x.IsoCode.InvariantEquals(culture)) ?? false; diff --git a/tests/Umbraco.Tests.Integration/Umbraco.Core/Services/ContentServiceTests.cs b/tests/Umbraco.Tests.Integration/Umbraco.Core/Services/ContentServiceTests.cs index 734008428a..242be71557 100644 --- a/tests/Umbraco.Tests.Integration/Umbraco.Core/Services/ContentServiceTests.cs +++ b/tests/Umbraco.Tests.Integration/Umbraco.Core/Services/ContentServiceTests.cs @@ -59,8 +59,6 @@ internal sealed class ContentServiceTests : UmbracoIntegrationTestWithContent private IRelationService RelationService => GetRequiredService(); - private ILocalizedTextService TextService => GetRequiredService(); - private ITagService TagService => GetRequiredService(); private IPublicAccessService PublicAccessService => GetRequiredService(); @@ -738,8 +736,7 @@ internal sealed class ContentServiceTests : UmbracoIntegrationTestWithContent [Test] public void Can_Unpublish_Content_Variation() { - var content = CreateEnglishAndFrenchDocument(out var langUk, out var langFr, - out var contentType); + var content = CreateEnglishAndFrenchDocument(out var langUk, out var langFr, out var contentType); var saved = ContentService.Save(content); var published = ContentService.Publish(content, new[] { langFr.IsoCode, langUk.IsoCode }); @@ -1032,7 +1029,7 @@ internal sealed class ContentServiceTests : UmbracoIntegrationTestWithContent // audit log will only show that french was published var lastLog = AuditService.GetLogs(content.Id).Last(); - Assert.AreEqual("Published languages: French (France)", lastLog.Comment); + Assert.AreEqual("Published languages: fr-FR", lastLog.Comment); // re-get content = ContentService.GetById(content.Id); @@ -1042,7 +1039,7 @@ internal sealed class ContentServiceTests : UmbracoIntegrationTestWithContent // audit log will only show that english was published lastLog = AuditService.GetLogs(content.Id).Last(); - Assert.AreEqual("Published languages: English (United Kingdom)", lastLog.Comment); + Assert.AreEqual("Published languages: en-GB", lastLog.Comment); } [Test] @@ -1079,7 +1076,7 @@ internal sealed class ContentServiceTests : UmbracoIntegrationTestWithContent // audit log will only show that french was unpublished var lastLog = AuditService.GetLogs(content.Id).Last(); - Assert.AreEqual("Unpublished languages: French (France)", lastLog.Comment); + Assert.AreEqual("Unpublished languages: fr-FR", lastLog.Comment); // re-get content = ContentService.GetById(content.Id); @@ -1088,7 +1085,7 @@ internal sealed class ContentServiceTests : UmbracoIntegrationTestWithContent // audit log will only show that english was published var logs = AuditService.GetLogs(content.Id).ToList(); - Assert.AreEqual("Unpublished languages: English (United Kingdom)", logs[^2].Comment); + Assert.AreEqual("Unpublished languages: en-GB", logs[^2].Comment); Assert.AreEqual("Unpublished (mandatory language unpublished)", logs[^1].Comment); }