From f27a3be4e685be46b6471d7bf424722ccea9846e Mon Sep 17 00:00:00 2001
From: Sebastiaan Janssen
Date: Sun, 21 Feb 2021 10:30:17 +0100
Subject: [PATCH 06/99] Fix unit tests after merging PR #9646
---
src/Umbraco.Tests/Composing/TypeLoaderTests.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Umbraco.Tests/Composing/TypeLoaderTests.cs b/src/Umbraco.Tests/Composing/TypeLoaderTests.cs
index 9cd4f39c17..b0c57b685b 100644
--- a/src/Umbraco.Tests/Composing/TypeLoaderTests.cs
+++ b/src/Umbraco.Tests/Composing/TypeLoaderTests.cs
@@ -268,7 +268,7 @@ AnotherContentFinder
public void GetDataEditors()
{
var types = _typeLoader.GetDataEditors();
- Assert.AreEqual(39, types.Count());
+ Assert.AreEqual(40, types.Count());
}
///
From 75ee3b96229d2fe5debfdf7fb274c321ae2342a8 Mon Sep 17 00:00:00 2001
From: Chad
Date: Sun, 21 Feb 2021 23:00:00 +1300
Subject: [PATCH 07/99] Speed up boot times and Improve Json (De)Serialization
performance and reduce memory usage by reusing JsonSerializerSettings (#9670)
---
.../ImageCropperValueConverter.cs | 12 ++--
.../NoTypeConverterJsonConverter.cs | 5 +-
.../JsonSerializerSettingsBenchmarks.cs | 69 +++++++++++++++++++
.../Umbraco.Tests.Benchmarks.csproj | 1 +
.../Editors/BackOfficeController.cs | 6 +-
.../ImageCropperTemplateExtensions.cs | 14 ++--
src/Umbraco.Web/Mvc/JsonNetResult.cs | 9 +++
.../MultiUrlPickerValueEditor.cs | 11 +--
.../NuCache/DataSource/DatabaseDataSource.cs | 11 +--
9 files changed, 112 insertions(+), 26 deletions(-)
create mode 100644 src/Umbraco.Tests.Benchmarks/JsonSerializerSettingsBenchmarks.cs
diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/ImageCropperValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/ImageCropperValueConverter.cs
index 8926174c03..29e501f993 100644
--- a/src/Umbraco.Core/PropertyEditors/ValueConverters/ImageCropperValueConverter.cs
+++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/ImageCropperValueConverter.cs
@@ -25,6 +25,12 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters
public override PropertyCacheLevel GetPropertyCacheLevel(IPublishedPropertyType propertyType)
=> PropertyCacheLevel.Element;
+ private static readonly JsonSerializerSettings ImageCropperValueJsonSerializerSettings = new JsonSerializerSettings
+ {
+ Culture = CultureInfo.InvariantCulture,
+ FloatParseHandling = FloatParseHandling.Decimal
+ };
+
///
public override object ConvertSourceToIntermediate(IPublishedElement owner, IPublishedPropertyType propertyType, object source, bool preview)
{
@@ -34,11 +40,7 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters
ImageCropperValue value;
try
{
- value = JsonConvert.DeserializeObject(sourceString, new JsonSerializerSettings
- {
- Culture = CultureInfo.InvariantCulture,
- FloatParseHandling = FloatParseHandling.Decimal
- });
+ value = JsonConvert.DeserializeObject(sourceString, ImageCropperValueJsonSerializerSettings);
}
catch (Exception ex)
{
diff --git a/src/Umbraco.Core/Serialization/NoTypeConverterJsonConverter.cs b/src/Umbraco.Core/Serialization/NoTypeConverterJsonConverter.cs
index b06ee870de..ab64d5b368 100644
--- a/src/Umbraco.Core/Serialization/NoTypeConverterJsonConverter.cs
+++ b/src/Umbraco.Core/Serialization/NoTypeConverterJsonConverter.cs
@@ -19,6 +19,7 @@ namespace Umbraco.Core.Serialization
internal class NoTypeConverterJsonConverter : JsonConverter
{
static readonly IContractResolver resolver = new NoTypeConverterContractResolver();
+ private static readonly JsonSerializerSettings JsonSerializerSettings = new JsonSerializerSettings { ContractResolver = resolver };
private class NoTypeConverterContractResolver : DefaultContractResolver
{
@@ -41,12 +42,12 @@ namespace Umbraco.Core.Serialization
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
- return JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = resolver }).Deserialize(reader, objectType);
+ return JsonSerializer.CreateDefault(JsonSerializerSettings).Deserialize(reader, objectType);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
- JsonSerializer.CreateDefault(new JsonSerializerSettings { ContractResolver = resolver }).Serialize(writer, value);
+ JsonSerializer.CreateDefault(JsonSerializerSettings).Serialize(writer, value);
}
}
}
diff --git a/src/Umbraco.Tests.Benchmarks/JsonSerializerSettingsBenchmarks.cs b/src/Umbraco.Tests.Benchmarks/JsonSerializerSettingsBenchmarks.cs
new file mode 100644
index 0000000000..7f419547bd
--- /dev/null
+++ b/src/Umbraco.Tests.Benchmarks/JsonSerializerSettingsBenchmarks.cs
@@ -0,0 +1,69 @@
+using BenchmarkDotNet.Attributes;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Umbraco.Tests.Benchmarks.Config;
+
+namespace Umbraco.Tests.Benchmarks
+{
+ [QuickRunConfig]
+ [MemoryDiagnoser]
+ public class JsonSerializerSettingsBenchmarks
+ {
+ [Benchmark]
+ public void SerializerSettingsInstantiation()
+ {
+ int instances = 1000;
+ for (int i = 0; i < instances; i++)
+ {
+ new JsonSerializerSettings();
+ }
+ }
+
+ [Benchmark(Baseline =true)]
+ public void SerializerSettingsSingleInstantiation()
+ {
+ new JsonSerializerSettings();
+ }
+
+// // * Summary *
+
+// BenchmarkDotNet=v0.11.3, OS=Windows 10.0.18362
+//Intel Core i5-8265U CPU 1.60GHz(Kaby Lake R), 1 CPU, 8 logical and 4 physical cores
+// [Host] : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.8.4250.0
+// Job-JIATTD : .NET Framework 4.7.2 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.8.4250.0
+
+//IterationCount=3 IterationTime=100.0000 ms LaunchCount = 1
+//WarmupCount=3
+
+// Method | Mean | Error | StdDev | Ratio | RatioSD | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
+//-------------------------------------- |-------------:|-------------:|------------:|-------:|--------:|------------:|------------:|------------:|--------------------:|
+// SerializerSettingsInstantiation | 29,120.48 ns | 5,532.424 ns | 303.2508 ns | 997.84 | 23.66 | 73.8122 | - | - | 232346 B |
+// SerializerSettingsSingleInstantiation | 29.19 ns | 8.089 ns | 0.4434 ns | 1.00 | 0.00 | 0.0738 | - | - | 232 B |
+
+//// * Warnings *
+//MinIterationTime
+// JsonSerializerSettingsBenchmarks.SerializerSettingsSingleInstantiation: IterationCount= 3, IterationTime= 100.0000 ms, LaunchCount= 1, WarmupCount= 3->MinIterationTime = 96.2493 ms which is very small. It's recommended to increase it.
+
+//// * Legends *
+// Mean : Arithmetic mean of all measurements
+// Error : Half of 99.9% confidence interval
+// StdDev : Standard deviation of all measurements
+// Ratio : Mean of the ratio distribution ([Current]/[Baseline])
+// RatioSD : Standard deviation of the ratio distribution([Current]/[Baseline])
+// Gen 0/1k Op : GC Generation 0 collects per 1k Operations
+// Gen 1/1k Op : GC Generation 1 collects per 1k Operations
+// Gen 2/1k Op : GC Generation 2 collects per 1k Operations
+// Allocated Memory/Op : Allocated memory per single operation(managed only, inclusive, 1KB = 1024B)
+// 1 ns : 1 Nanosecond(0.000000001 sec)
+
+//// * Diagnostic Output - MemoryDiagnoser *
+
+
+// // ***** BenchmarkRunner: End *****
+// Run time: 00:00:04 (4.88 sec), executed benchmarks: 2
+ }
+}
diff --git a/src/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj b/src/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj
index 48d69cf757..58b45aa743 100644
--- a/src/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj
+++ b/src/Umbraco.Tests.Benchmarks/Umbraco.Tests.Benchmarks.csproj
@@ -53,6 +53,7 @@
+
diff --git a/src/Umbraco.Web/Editors/BackOfficeController.cs b/src/Umbraco.Web/Editors/BackOfficeController.cs
index 458c76b3ae..92b67cbf1b 100644
--- a/src/Umbraco.Web/Editors/BackOfficeController.cs
+++ b/src/Umbraco.Web/Editors/BackOfficeController.cs
@@ -226,7 +226,7 @@ namespace Umbraco.Web.Editors
.ToDictionary(pv => pv.Key, pv =>
pv.ToDictionary(pve => pve.valueAlias, pve => pve.value));
- return new JsonNetResult { Data = nestedDictionary, Formatting = Formatting.None };
+ return new JsonNetResult(JsonNetResult.DefaultJsonSerializerSettings) { Data = nestedDictionary, Formatting = Formatting.None };
}
///
@@ -273,7 +273,7 @@ namespace Umbraco.Web.Editors
GetAssetList,
new TimeSpan(0, 2, 0));
- return new JsonNetResult { Data = result, Formatting = Formatting.None };
+ return new JsonNetResult(JsonNetResult.DefaultJsonSerializerSettings) { Data = result, Formatting = Formatting.None };
}
[UmbracoAuthorize(Order = 0)]
@@ -281,7 +281,7 @@ namespace Umbraco.Web.Editors
public JsonNetResult GetGridConfig()
{
var gridConfig = Current.Configs.Grids();
- return new JsonNetResult { Data = gridConfig.EditorsConfig.Editors, Formatting = Formatting.None };
+ return new JsonNetResult(JsonNetResult.DefaultJsonSerializerSettings) { Data = gridConfig.EditorsConfig.Editors, Formatting = Formatting.None };
}
diff --git a/src/Umbraco.Web/ImageCropperTemplateExtensions.cs b/src/Umbraco.Web/ImageCropperTemplateExtensions.cs
index 26dd2a5d36..78b55a8930 100644
--- a/src/Umbraco.Web/ImageCropperTemplateExtensions.cs
+++ b/src/Umbraco.Web/ImageCropperTemplateExtensions.cs
@@ -253,19 +253,20 @@ namespace Umbraco.Web
ImageCropRatioMode? ratioMode = null,
bool upScale = true) => ImageCropperTemplateCoreExtensions.GetCropUrl(imageUrl, Current.ImageUrlGenerator, cropDataSet, width, height, cropAlias, quality, imageCropMode, imageCropAnchor, preferFocalPoint, useCropDimensions, cacheBusterValue, furtherOptions, ratioMode, upScale);
+ private static readonly JsonSerializerSettings ImageCropperValueJsonSerializerSettings = new JsonSerializerSettings
+ {
+ Culture = CultureInfo.InvariantCulture,
+ FloatParseHandling = FloatParseHandling.Decimal
+ };
internal static ImageCropperValue DeserializeImageCropperValue(this string json)
{
- var imageCrops = new ImageCropperValue();
+ ImageCropperValue imageCrops = null;
if (json.DetectIsJson())
{
try
{
- imageCrops = JsonConvert.DeserializeObject(json, new JsonSerializerSettings
- {
- Culture = CultureInfo.InvariantCulture,
- FloatParseHandling = FloatParseHandling.Decimal
- });
+ imageCrops = JsonConvert.DeserializeObject(json, ImageCropperValueJsonSerializerSettings);
}
catch (Exception ex)
{
@@ -273,6 +274,7 @@ namespace Umbraco.Web
}
}
+ imageCrops = imageCrops ?? new ImageCropperValue();
return imageCrops;
}
}
diff --git a/src/Umbraco.Web/Mvc/JsonNetResult.cs b/src/Umbraco.Web/Mvc/JsonNetResult.cs
index da6780451e..3dd6c2f398 100644
--- a/src/Umbraco.Web/Mvc/JsonNetResult.cs
+++ b/src/Umbraco.Web/Mvc/JsonNetResult.cs
@@ -22,10 +22,19 @@ namespace Umbraco.Web.Mvc
public JsonSerializerSettings SerializerSettings { get; set; }
public Formatting Formatting { get; set; }
+ ///
+ /// Default, unchanged JsonSerializerSettings
+ ///
+ public static readonly JsonSerializerSettings DefaultJsonSerializerSettings = new JsonSerializerSettings();
+
public JsonNetResult()
{
SerializerSettings = new JsonSerializerSettings();
}
+ public JsonNetResult(JsonSerializerSettings jsonSerializerSettings)
+ {
+ SerializerSettings = jsonSerializerSettings;
+ }
public override void ExecuteResult(ControllerContext context)
{
diff --git a/src/Umbraco.Web/PropertyEditors/MultiUrlPickerValueEditor.cs b/src/Umbraco.Web/PropertyEditors/MultiUrlPickerValueEditor.cs
index 5a84e4b20c..560275b29a 100644
--- a/src/Umbraco.Web/PropertyEditors/MultiUrlPickerValueEditor.cs
+++ b/src/Umbraco.Web/PropertyEditors/MultiUrlPickerValueEditor.cs
@@ -121,6 +121,10 @@ namespace Umbraco.Web.PropertyEditors
return base.ToEditor(property, dataTypeService, culture, segment);
}
+ private static readonly JsonSerializerSettings LinkDisplayJsonSerializerSettings = new JsonSerializerSettings
+ {
+ NullValueHandling = NullValueHandling.Ignore
+ };
public override object FromEditor(ContentPropertyData editorValue, object currentValue)
{
@@ -142,11 +146,8 @@ namespace Umbraco.Web.PropertyEditors
Target = link.Target,
Udi = link.Udi,
Url = link.Udi == null ? link.Url : null, // only save the URL for external links
- },
- new JsonSerializerSettings
- {
- NullValueHandling = NullValueHandling.Ignore
- });
+ }, LinkDisplayJsonSerializerSettings
+ );
}
catch (Exception ex)
{
diff --git a/src/Umbraco.Web/PublishedCache/NuCache/DataSource/DatabaseDataSource.cs b/src/Umbraco.Web/PublishedCache/NuCache/DataSource/DatabaseDataSource.cs
index f62014a368..f9ad0ac715 100644
--- a/src/Umbraco.Web/PublishedCache/NuCache/DataSource/DatabaseDataSource.cs
+++ b/src/Umbraco.Web/PublishedCache/NuCache/DataSource/DatabaseDataSource.cs
@@ -303,17 +303,18 @@ namespace Umbraco.Web.PublishedCache.NuCache.DataSource
return s;
}
+ private static readonly JsonSerializerSettings NestedContentDataJsonSerializerSettings = new JsonSerializerSettings
+ {
+ Converters = new List { new ForceInt32Converter() }
+ };
+
private static ContentNestedData DeserializeNestedData(string data)
{
// by default JsonConvert will deserialize our numeric values as Int64
// which is bad, because they were Int32 in the database - take care
- var settings = new JsonSerializerSettings
- {
- Converters = new List { new ForceInt32Converter() }
- };
- return JsonConvert.DeserializeObject(data, settings);
+ return JsonConvert.DeserializeObject(data, NestedContentDataJsonSerializerSettings);
}
}
}
From e554ef044574e0478805f894f96a4e18910eb2be Mon Sep 17 00:00:00 2001
From: rbottema
Date: Sun, 21 Feb 2021 11:03:28 +0100
Subject: [PATCH 08/99] Fix some exceptions being logged the wrong way (#9693)
In these statements, the exception was passed as a log message parameter instead of as the exception. This meant the exception and including stack trace was not logged and thus lost.
---
src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs | 2 +-
src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs | 2 +-
src/Umbraco.Web/PropertyEditors/MultiUrlPickerValueEditor.cs | 4 ++--
src/Umbraco.Web/UmbracoInjectedModule.cs | 4 ++--
4 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs b/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs
index 333181f27c..1010d1db19 100644
--- a/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/LiveModelsProvider.cs
@@ -91,7 +91,7 @@ namespace Umbraco.ModelsBuilder.Embedded
catch (Exception e)
{
_mbErrors.Report("Failed to build Live models.", e);
- _logger.Error("Failed to generate models.", e);
+ _logger.Error(e, "Failed to generate models.");
}
finally
{
diff --git a/src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs b/src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs
index 912d0e3363..8ef99383a4 100644
--- a/src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/PureLiveModelFactory.cs
@@ -308,7 +308,7 @@ namespace Umbraco.ModelsBuilder.Embedded
{
try
{
- _logger.Error("Failed to build models.", e);
+ _logger.Error(e, "Failed to build models.");
_logger.Warn("Running without models."); // be explicit
_errors.Report("Failed to build PureLive models.", e);
}
diff --git a/src/Umbraco.Web/PropertyEditors/MultiUrlPickerValueEditor.cs b/src/Umbraco.Web/PropertyEditors/MultiUrlPickerValueEditor.cs
index 560275b29a..aae691f624 100644
--- a/src/Umbraco.Web/PropertyEditors/MultiUrlPickerValueEditor.cs
+++ b/src/Umbraco.Web/PropertyEditors/MultiUrlPickerValueEditor.cs
@@ -115,7 +115,7 @@ namespace Umbraco.Web.PropertyEditors
}
catch (Exception ex)
{
- _logger.Error("Error getting links", ex);
+ _logger.Error(ex, "Error getting links");
}
return base.ToEditor(property, dataTypeService, culture, segment);
@@ -151,7 +151,7 @@ namespace Umbraco.Web.PropertyEditors
}
catch (Exception ex)
{
- _logger.Error("Error saving links", ex);
+ _logger.Error(ex, "Error saving links");
}
return base.FromEditor(editorValue, currentValue);
diff --git a/src/Umbraco.Web/UmbracoInjectedModule.cs b/src/Umbraco.Web/UmbracoInjectedModule.cs
index cc130a7b56..c2ee4ce535 100644
--- a/src/Umbraco.Web/UmbracoInjectedModule.cs
+++ b/src/Umbraco.Web/UmbracoInjectedModule.cs
@@ -328,7 +328,7 @@ namespace Umbraco.Web
}
catch (Exception ex)
{
- _logger.Error("Could not dispose item with key " + k, ex);
+ _logger.Error(ex, "Could not dispose item with key {Key}", k);
}
try
{
@@ -336,7 +336,7 @@ namespace Umbraco.Web
}
catch (Exception ex)
{
- _logger.Error("Could not dispose item key " + k, ex);
+ _logger.Error(ex, "Could not dispose item key {Key}", k);
}
}
}
From 46ace7dc229f00bc0ab1d02f861b39e63bc24d39 Mon Sep 17 00:00:00 2001
From: Andrey Karandashov
<51944778+AndreyKarandashovUKAD@users.noreply.github.com>
Date: Sun, 21 Feb 2021 12:15:32 +0200
Subject: [PATCH 09/99] added swedish translations for media picker (#9730)
---
src/Umbraco.Web.UI/Umbraco/config/lang/sv.xml | 31 ++++++++++++-------
1 file changed, 19 insertions(+), 12 deletions(-)
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/sv.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/sv.xml
index 511765e604..8c282dd571 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/sv.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/sv.xml
@@ -243,10 +243,10 @@
Installera Umbraco Forms
- Stanna
- Ignorera ändringar
- Du har ändringar som inte är sparade
- Vill du verkligen lämna sidan? Du har ändringar som inte är sparade
+ Stay
+ Discard changes
+ You have unsaved changes
+ Are you sure you want to navigate away from this page? - you have unsaved changesKlar
@@ -272,6 +272,8 @@
Kopierade %0% av %1% objekt
+ Länktitel
+ LänkNamnHantera domännamnStäng fönstret
@@ -308,7 +310,9 @@
Cache för webbplatsen har uppdaterats. Allt publicerat innehåll är nu uppdaterat. Innehåll som inte har publicerats är fortfarande opublicerat.Webbplatsens cache kommer att uppdateras. Allt innehåll som är publicerat kommer att uppdateras. Innehåll som inte är publicerat kommer att förbli opublicerat.Välj startnod för innehåll
+ Välj mediaVälj ikon
+ Välj länkVälj startnod för mediaVälj användargrupperVälj sektioner
@@ -318,6 +322,9 @@
Klicka på förhandsgranskningsbilden för att se bilden i full storlekVälj ett objektSe cachat objekt
+ Länk till sida
+ Öppnar länken i ett nytt fönster eller flik
+ Länk till mediaRedigera de olika översättningarna för ordboksinlägget %0% nedan. Du kan lägga till ytterligare språk under 'språk' i menyn till vänster.
@@ -741,8 +748,8 @@
Flikar
- Sortera ordningen
- Skapandedatum
+ Sort order
+ Creation dateSortering klarVälj i vilken ordning du vill ha sidorna genom att dra dem upp eller ner i listan. Du kan också klicka på kolumnrubrikerna för att sortera grupper av sidor
@@ -815,12 +822,12 @@
Bild
- Makro
+ MacroLägg till
- Välj utformning
+ Choose layoutLägg till rad
- Lägg till innehåll
- Släpp innehåll
+ Add content
+ Drop contentIndholdet er ikke tilladt herIndholdet er tilladt herKlicka för att lägga in
@@ -847,7 +854,7 @@
Alternativt fältAlternativ text
- Hölje
+ CasingVälj fältKonvertera radbrytningarByter radbrytningar mot html-taggen <br>
@@ -963,7 +970,7 @@
Senast utlåstSenast inloggadLösenordet ändrades
- Logga in
+ LoginStartnod i mediabiblioteketBegränsa media sectionen till en specifik startnodMedia startnoder
From d966e89fd97edb9986516259456465f2fad03261 Mon Sep 17 00:00:00 2001
From: Bjarne Fyrstenborg
Date: Sun, 21 Feb 2021 11:36:18 +0100
Subject: [PATCH 10/99] Block editor cleanup (#9664)
---
.../blockeditor/blockeditor.controller.js | 5 +--
.../blockeditor/blockeditor.html | 18 +++--------
.../umbBlockListPropertyEditor.component.js | 32 +++++++++----------
...tPropertyEditor.createButton.controller.js | 4 +--
.../blocklist/umbblocklistblock.component.js | 2 +-
5 files changed, 27 insertions(+), 34 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockeditor/blockeditor.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockeditor/blockeditor.controller.js
index 88cda027a8..d3a87791f9 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockeditor/blockeditor.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockeditor/blockeditor.controller.js
@@ -1,6 +1,7 @@
angular.module("umbraco")
.controller("Umbraco.Editors.BlockEditorController",
function ($scope, localizationService, formHelper, overlayService) {
+
var vm = this;
vm.model = $scope.model;
@@ -52,7 +53,7 @@ angular.module("umbraco")
vm.saveButtonState = "error";
}
}
- }
+ };
vm.close = function () {
if (vm.model && vm.model.close) {
@@ -93,7 +94,7 @@ angular.module("umbraco")
}
}
- }
+ };
}
);
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockeditor/blockeditor.html b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockeditor/blockeditor.html
index 2367771804..8fe5526c53 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockeditor/blockeditor.html
+++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockeditor/blockeditor.html
@@ -1,4 +1,4 @@
-
+
@@ -14,20 +14,12 @@
hide-description="true">
-
+
-
+
+
-
-
-
-
-
-
+
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/umbBlockListPropertyEditor.component.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/umbBlockListPropertyEditor.component.js
index 56dbc68d90..613e6a8c6a 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/umbBlockListPropertyEditor.component.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/umbBlockListPropertyEditor.component.js
@@ -241,23 +241,24 @@
block.hideContentInOverlay = block.config.forceHideContentEditorInOverlay === true || inlineEditing === true;
block.showSettings = block.config.settingsElementTypeKey != null;
- block.showCopy = vm.supportCopy && block.config.contentElementTypeKey != null;// if we have content, otherwise it doesn't make sense to copy.
+ // If we have content, otherwise it doesn't make sense to copy.
+ block.showCopy = vm.supportCopy && block.config.contentElementTypeKey != null;
// Index is set by umbblocklistblock component and kept up to date by it.
block.index = 0;
block.setParentForm = function (parentForm) {
this._parentForm = parentForm;
- }
+ };
block.activate = activateBlock.bind(null, block);
block.edit = function () {
var blockIndex = vm.layout.indexOf(this.layout);
editBlock(this, false, blockIndex, this._parentForm);
- }
+ };
block.editSettings = function () {
var blockIndex = vm.layout.indexOf(this.layout);
editBlock(this, true, blockIndex, this._parentForm);
- }
+ };
block.requestDelete = requestDeleteBlock.bind(null, block);
block.delete = deleteBlock.bind(null, block);
block.copy = copyBlock.bind(null, block);
@@ -265,7 +266,6 @@
return block;
}
-
function addNewBlock(index, contentElementTypeKey) {
// Create layout entry. (not added to property model jet.)
@@ -292,7 +292,6 @@
vm.setBlockFocus(blockObject);
return true;
-
}
function deleteBlock(block) {
@@ -316,7 +315,6 @@
});
modelObject.removeDataAndDestroyModel(block);
-
}
function deleteAllBlocks() {
@@ -409,6 +407,7 @@
}
vm.showCreateDialog = showCreateDialog;
+
function showCreateDialog(createIndex, $event) {
if (vm.blockTypePicker) {
@@ -524,7 +523,7 @@
};
- var requestCopyAllBlocks = function() {
+ var requestCopyAllBlocks = function () {
var aliases = [];
@@ -534,7 +533,7 @@
aliases.push(entry.$block.content.contentTypeAlias);
// No need to clone the data as its begin handled by the clipboardService.
- return {"layout": entry.$block.layout, "data": entry.$block.data, "settingsData":entry.$block.settingsData}
+ return { "layout": entry.$block.layout, "data": entry.$block.data, "settingsData": entry.$block.settingsData }
}
);
@@ -543,9 +542,9 @@
var contentNodeName = "?";
var contentNodeIcon = null;
- if(vm.umbVariantContent) {
+ if (vm.umbVariantContent) {
contentNodeName = vm.umbVariantContent.editor.content.name;
- if(vm.umbVariantContentEditors) {
+ if (vm.umbVariantContentEditors) {
contentNodeIcon = vm.umbVariantContentEditors.content.icon.split(" ")[0];
} else if (vm.umbElementEditorContent) {
contentNodeIcon = vm.umbElementEditorContent.model.documentType.icon.split(" ")[0];
@@ -555,13 +554,15 @@
contentNodeIcon = vm.umbElementEditorContent.model.documentType.icon.split(" ")[0];
}
- localizationService.localize("clipboard_labelForArrayOfItemsFrom", [vm.model.label, contentNodeName]).then(function(localizedLabel) {
+ localizationService.localize("clipboard_labelForArrayOfItemsFrom", [vm.model.label, contentNodeName]).then(function (localizedLabel) {
clipboardService.copyArray(clipboardService.TYPES.BLOCK, aliases, elementTypesToCopy, localizedLabel, contentNodeIcon || "icon-thumbnail-list", vm.model.id);
});
- }
+ };
+
function copyBlock(block) {
clipboardService.copy(clipboardService.TYPES.BLOCK, block.content.contentTypeAlias, {"layout": block.layout, "data": block.data, "settingsData":block.settingsData}, block.label, block.content.icon, block.content.udi);
}
+
function requestPasteFromClipboard(index, pasteEntry, pasteType) {
if (pasteEntry === undefined) {
@@ -599,7 +600,6 @@
vm.currentBlockInFocus = blockObject;
return true;
-
}
function requestDeleteBlock(block) {
@@ -620,6 +620,7 @@
overlayService.confirmDelete(overlay);
});
}
+
function requestDeleteAllBlocks() {
localizationService.localizeMany(["content_nestedContentDeleteAllItems", "general_delete"]).then(function (data) {
overlayService.confirmDelete({
@@ -647,7 +648,7 @@
requestDeleteBlock: requestDeleteBlock,
deleteBlock: deleteBlock,
openSettingsForBlock: openSettingsForBlock
- }
+ };
vm.sortableOptions = {
axis: "y",
@@ -664,7 +665,6 @@
}
};
-
function onAmountOfBlocksChanged() {
// enable/disable property actions
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/umbBlockListPropertyEditor.createButton.controller.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/umbBlockListPropertyEditor.createButton.controller.js
index 98d4f4ea3a..365ec809ac 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/umbBlockListPropertyEditor.createButton.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/umbBlockListPropertyEditor.createButton.controller.js
@@ -9,9 +9,9 @@
var vm = this;
vm.plusPosX = 0;
- vm.onMouseMove = function($event) {
+ vm.onMouseMove = function ($event) {
vm.plusPosX = $event.offsetX;
- }
+ };
});
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/umbblocklistblock.component.js b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/umbblocklistblock.component.js
index 41d76475e4..285437b011 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/umbblocklistblock.component.js
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/blocklist/umbblocklistblock.component.js
@@ -78,7 +78,7 @@
model.block.index = index;
model.block.updateLabel();
}
- }
+ };
}
From 616992332a720a575ac3e4550c3ff12f665323c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=C3=87a=C4=9Fatay=20UNCU?=
<34659246+cagatayuncu@users.noreply.github.com>
Date: Sun, 21 Feb 2021 13:40:51 +0300
Subject: [PATCH 11/99] Clean Code and use async methed (#9747)
---
src/Umbraco.Web/AspNetHttpContextAccessor.cs | 10 ++--------
src/Umbraco.Web/FormDataCollectionExtensions.cs | 4 ++--
src/Umbraco.Web/HtmlHelperRenderExtensions.cs | 2 +-
src/Umbraco.Web/HttpUrlHelperExtensions.cs | 4 ++--
src/Umbraco.Web/HybridEventMessagesAccessor.cs | 4 ++--
src/Umbraco.Web/ModelStateExtensions.cs | 4 ++--
.../WebApi/AngularJsonMediaTypeFormatter.cs | 4 ++--
7 files changed, 13 insertions(+), 19 deletions(-)
diff --git a/src/Umbraco.Web/AspNetHttpContextAccessor.cs b/src/Umbraco.Web/AspNetHttpContextAccessor.cs
index babd8dfcfa..147c37fe8c 100644
--- a/src/Umbraco.Web/AspNetHttpContextAccessor.cs
+++ b/src/Umbraco.Web/AspNetHttpContextAccessor.cs
@@ -7,14 +7,8 @@ namespace Umbraco.Web
{
public HttpContext HttpContext
{
- get
- {
- return HttpContext.Current;
- }
- set
- {
- throw new NotSupportedException();
- }
+ get => HttpContext.Current;
+ set => throw new NotSupportedException();
}
}
}
diff --git a/src/Umbraco.Web/FormDataCollectionExtensions.cs b/src/Umbraco.Web/FormDataCollectionExtensions.cs
index aabf13ac9b..ebabaa74c7 100644
--- a/src/Umbraco.Web/FormDataCollectionExtensions.cs
+++ b/src/Umbraco.Web/FormDataCollectionExtensions.cs
@@ -23,9 +23,9 @@ namespace Umbraco.Web
if (items.Any() == false) return "";
var builder = new StringBuilder();
- foreach (var i in items.Where(i => keysToIgnore.InvariantContains(i.Key) == false))
+ foreach (var (key, value) in items.Where(i => keysToIgnore.InvariantContains(i.Key) == false))
{
- builder.Append(string.Format("{0}={1}&", i.Key, i.Value));
+ builder.Append($"{key}={value}&");
}
return builder.ToString().TrimEnd(Constants.CharArrays.Ampersand);
}
diff --git a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs
index e19ae883e9..2f55f0a1b1 100644
--- a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs
+++ b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs
@@ -85,7 +85,7 @@ namespace Umbraco.Web
var cacheKey = new StringBuilder(partialViewName);
//let's always cache by the current culture to allow variants to have different cache results
var cultureName = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;
- if (!String.IsNullOrEmpty(cultureName))
+ if (!string.IsNullOrEmpty(cultureName))
{
cacheKey.AppendFormat("{0}-", cultureName);
}
diff --git a/src/Umbraco.Web/HttpUrlHelperExtensions.cs b/src/Umbraco.Web/HttpUrlHelperExtensions.cs
index 4e5533d327..9a2f394d90 100644
--- a/src/Umbraco.Web/HttpUrlHelperExtensions.cs
+++ b/src/Umbraco.Web/HttpUrlHelperExtensions.cs
@@ -103,7 +103,7 @@ namespace Umbraco.Web
string routeName;
if (area.IsNullOrWhiteSpace())
{
- routeName = string.Format("umbraco-{0}-{1}", "api", controllerName);
+ routeName = $"umbraco-{"api"}-{controllerName}";
if (id == null)
{
return url.Route(routeName, new { controller = controllerName, action = actionName, httproute = "" });
@@ -115,7 +115,7 @@ namespace Umbraco.Web
}
else
{
- routeName = string.Format("umbraco-{0}-{1}-{2}", "api", area, controllerName);
+ routeName = $"umbraco-{"api"}-{area}-{controllerName}";
if (id == null)
{
return url.Route(routeName, new { controller = controllerName, action = actionName, httproute = "" });
diff --git a/src/Umbraco.Web/HybridEventMessagesAccessor.cs b/src/Umbraco.Web/HybridEventMessagesAccessor.cs
index fddde403d8..ab67b4774f 100644
--- a/src/Umbraco.Web/HybridEventMessagesAccessor.cs
+++ b/src/Umbraco.Web/HybridEventMessagesAccessor.cs
@@ -12,8 +12,8 @@ namespace Umbraco.Web
public EventMessages EventMessages
{
- get { return Value; }
- set { Value = value; }
+ get => Value;
+ set => Value = value;
}
}
}
diff --git a/src/Umbraco.Web/ModelStateExtensions.cs b/src/Umbraco.Web/ModelStateExtensions.cs
index e224a6122b..2b0cd01e21 100644
--- a/src/Umbraco.Web/ModelStateExtensions.cs
+++ b/src/Umbraco.Web/ModelStateExtensions.cs
@@ -24,11 +24,11 @@ namespace Umbraco.Web
{
if (dictionary == null)
return;
- foreach (var keyValuePair in dictionary
+ foreach (var (key, value) in dictionary
//It can either equal the prefix exactly (model level errors) or start with the prefix. (property level errors)
.Where(keyValuePair => keyValuePair.Key == prefix || keyValuePair.Key.StartsWith(prefix + ".")))
{
- state[keyValuePair.Key] = keyValuePair.Value;
+ state[key] = value;
}
}
diff --git a/src/Umbraco.Web/WebApi/AngularJsonMediaTypeFormatter.cs b/src/Umbraco.Web/WebApi/AngularJsonMediaTypeFormatter.cs
index 0e7cf6453a..874afce0e1 100644
--- a/src/Umbraco.Web/WebApi/AngularJsonMediaTypeFormatter.cs
+++ b/src/Umbraco.Web/WebApi/AngularJsonMediaTypeFormatter.cs
@@ -47,8 +47,8 @@ namespace Umbraco.Web.WebApi
{
//write the special encoding for angular json to the start
// (see: http://docs.angularjs.org/api/ng.$http)
- streamWriter.Write(XsrfPrefix);
- streamWriter.Flush();
+ await streamWriter.WriteAsync(XsrfPrefix);
+ await streamWriter.FlushAsync();
await base.WriteToStreamAsync(type, value, writeStream, content, transportContext);
}
}
From 63b417477b156f633cc4fd12c78aa28ce638679c Mon Sep 17 00:00:00 2001
From: Bjarne Fyrstenborg
Date: Sun, 21 Feb 2021 11:42:06 +0100
Subject: [PATCH 12/99] Replace tree icon in section picker with umb-icon
component (#9760)
---
.../infiniteeditors/sectionpicker/sectionpicker.html | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/sectionpicker/sectionpicker.html b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/sectionpicker/sectionpicker.html
index feb3b9ab53..452f4b2364 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/sectionpicker/sectionpicker.html
+++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/sectionpicker/sectionpicker.html
@@ -19,10 +19,15 @@
-
+
-
From f4e1b469683847d5596a73890715d0f434541d30 Mon Sep 17 00:00:00 2001
From: Jakob Bagterp <25110864+jakob-bagterp@users.noreply.github.com>
Date: Sun, 21 Feb 2021 11:47:35 +0100
Subject: [PATCH 13/99] Fix: Verify that grid model is JSON object and not
IPublishedContent (#9774)
---
src/Umbraco.Web.UI/Views/Partials/Grid/Bootstrap3-Fluid.cshtml | 2 +-
src/Umbraco.Web.UI/Views/Partials/Grid/Bootstrap3.cshtml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/Umbraco.Web.UI/Views/Partials/Grid/Bootstrap3-Fluid.cshtml b/src/Umbraco.Web.UI/Views/Partials/Grid/Bootstrap3-Fluid.cshtml
index 131b0515ae..bef1b88879 100644
--- a/src/Umbraco.Web.UI/Views/Partials/Grid/Bootstrap3-Fluid.cshtml
+++ b/src/Umbraco.Web.UI/Views/Partials/Grid/Bootstrap3-Fluid.cshtml
@@ -6,7 +6,7 @@
Razor helpers located at the bottom of this file
*@
-@if (Model != null && Model.sections != null)
+@if (Model != null && Model.GetType() == typeof(JObject) && Model.sections != null)
{
var oneColumn = ((System.Collections.ICollection)Model.sections).Count == 1;
diff --git a/src/Umbraco.Web.UI/Views/Partials/Grid/Bootstrap3.cshtml b/src/Umbraco.Web.UI/Views/Partials/Grid/Bootstrap3.cshtml
index c30feb2165..801526aaeb 100644
--- a/src/Umbraco.Web.UI/Views/Partials/Grid/Bootstrap3.cshtml
+++ b/src/Umbraco.Web.UI/Views/Partials/Grid/Bootstrap3.cshtml
@@ -2,7 +2,7 @@
@using Umbraco.Web.Templates
@using Newtonsoft.Json.Linq
-@if (Model != null && Model.sections != null)
+@if (Model != null && Model.GetType() == typeof(JObject) && Model.sections != null)
{
var oneColumn = ((System.Collections.ICollection)Model.sections).Count == 1;
From 43a77dc1e458b6f4e600f198a285dc48b5ea7d56 Mon Sep 17 00:00:00 2001
From: patrickdemooij9
Date: Sun, 21 Feb 2021 11:52:49 +0100
Subject: [PATCH 14/99] 9569: Fix image cropper buttons (#9777)
---
.../views/propertyeditors/imagecropper/imagecropper.html | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/imagecropper/imagecropper.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/imagecropper/imagecropper.html
index 91abc3be87..84ddf7ee3b 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/imagecropper/imagecropper.html
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/imagecropper/imagecropper.html
@@ -28,9 +28,9 @@
- Reset this crop
- Undo edits
- Done
+ Reset this crop
+ Undo edits
+ Done
From f167f022c150115d9f319cb39a2ced00089d0f6e Mon Sep 17 00:00:00 2001
From: Nathan Woulfe
Date: Sun, 21 Feb 2021 21:00:22 +1000
Subject: [PATCH 15/99] 9769 - shift index increment before tryget to allow
loop to continue if current iteration exits early (#9799)
---
.../Repositories/Implement/ContentTypeCommonRepository.cs | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeCommonRepository.cs b/src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeCommonRepository.cs
index 90774e4c0b..ec998660fd 100644
--- a/src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeCommonRepository.cs
+++ b/src/Umbraco.Core/Persistence/Repositories/Implement/ContentTypeCommonRepository.cs
@@ -171,9 +171,11 @@ namespace Umbraco.Core.Persistence.Repositories.Implement
while (compositionIx < compositionDtos.Count && compositionDtos[compositionIx].ChildId == contentType.Id)
{
var parentDto = compositionDtos[compositionIx];
- if (!contentTypes.TryGetValue(parentDto.ParentId, out var parentContentType)) continue;
- contentType.AddContentType(parentContentType);
compositionIx++;
+
+ if (!contentTypes.TryGetValue(parentDto.ParentId, out var parentContentType))
+ continue;
+ contentType.AddContentType(parentContentType);
}
}
}
From fa49d6ed1082dc0ad82ada8fb98c5281ed13271e Mon Sep 17 00:00:00 2001
From: Shannon Deminick
Date: Sun, 21 Feb 2021 22:03:28 +1100
Subject: [PATCH 16/99] Fixes: After deleting a member, a reindex is attempted,
which fails (#9807)
---
.../Cache/DistributedCacheExtensions.cs | 5 ++++-
src/Umbraco.Web/Cache/MemberCacheRefresher.cs | 4 ++++
src/Umbraco.Web/Search/ExamineComponent.cs | 16 +++++++++++++---
3 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs b/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs
index f360d37d03..92a9dd6e98 100644
--- a/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs
+++ b/src/Umbraco.Web/Cache/DistributedCacheExtensions.cs
@@ -135,7 +135,10 @@ namespace Umbraco.Web.Cache
public static void RemoveMemberCache(this DistributedCache dc, params IMember[] members)
{
if (members.Length == 0) return;
- dc.RefreshByPayload(MemberCacheRefresher.UniqueId, members.Select(x => new MemberCacheRefresher.JsonPayload(x.Id, x.Username)));
+ dc.RefreshByPayload(MemberCacheRefresher.UniqueId, members.Select(x => new MemberCacheRefresher.JsonPayload(x.Id, x.Username)
+ {
+ Removed = true
+ }));
}
#endregion
diff --git a/src/Umbraco.Web/Cache/MemberCacheRefresher.cs b/src/Umbraco.Web/Cache/MemberCacheRefresher.cs
index 736a858af3..48ae40ce3b 100644
--- a/src/Umbraco.Web/Cache/MemberCacheRefresher.cs
+++ b/src/Umbraco.Web/Cache/MemberCacheRefresher.cs
@@ -33,6 +33,10 @@ namespace Umbraco.Web.Cache
public int Id { get; }
public string Username { get; }
+ // TODO: In netcore change this to be get only and adjust the ctor. We cannot do that now since that
+ // is a breaking change due to only having a single jsonconstructor allowed.
+ public bool Removed { get; set; }
+
}
#region Define
diff --git a/src/Umbraco.Web/Search/ExamineComponent.cs b/src/Umbraco.Web/Search/ExamineComponent.cs
index c9d7b7cf56..eb6b81ba16 100644
--- a/src/Umbraco.Web/Search/ExamineComponent.cs
+++ b/src/Umbraco.Web/Search/ExamineComponent.cs
@@ -271,10 +271,20 @@ namespace Umbraco.Web.Search
break;
case MessageType.RefreshByPayload:
var payload = (MemberCacheRefresher.JsonPayload[])args.MessageObject;
- var members = payload.Select(x => _services.MemberService.GetById(x.Id));
- foreach(var m in members)
+ foreach(var p in payload)
{
- ReIndexForMember(m);
+ if (p.Removed)
+ {
+ DeleteIndexForEntity(p.Id, false);
+ }
+ else
+ {
+ var m = _services.MemberService.GetById(p.Id);
+ if (m != null)
+ {
+ ReIndexForMember(m);
+ }
+ }
}
break;
case MessageType.RefreshAll:
From 1906ef02788fedb27980696118f2233940767d4b Mon Sep 17 00:00:00 2001
From: jesperweber
Date: Sun, 21 Feb 2021 12:35:50 +0100
Subject: [PATCH 17/99] Updating danish translations (#9832)
---
.../src/views/contentblueprints/intro.html | 2 +-
src/Umbraco.Web.UI/Umbraco/config/lang/da.xml | 22 +++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/Umbraco.Web.UI.Client/src/views/contentblueprints/intro.html b/src/Umbraco.Web.UI.Client/src/views/contentblueprints/intro.html
index 66695ace91..57c29d31d6 100644
--- a/src/Umbraco.Web.UI.Client/src/views/contentblueprints/intro.html
+++ b/src/Umbraco.Web.UI.Client/src/views/contentblueprints/intro.html
@@ -17,7 +17,7 @@
What are Content Templates?
- Content Templates are pre-defined content that can be selected when creating a new content node.
+ Content Templates are pre-defined content that can be selected when creating a new content node.
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
index 494416d777..e8de8e55aa 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
@@ -307,6 +307,7 @@
Vælg dato og klokkeslæt for at udgive og/eller afpublicere indholdet.Opret nyIndsæt fra udklipsmappen
+ Dette element er i papirkurvenOpret en ny indholdsskabelon fra '%0%'
@@ -1691,10 +1692,14 @@ Mange hilsner fra Umbraco robotten
Du kan kun haveTilføj op til elementer
+ URL(er)
+ URL(er) valgtelementer valgtUgyldig datoIkke et talUgyldig e-mail
+ Feltet er påkrævet
+ Feltet er påkrævet%1% mere.]]>%1% for mange.]]>
@@ -1875,6 +1880,23 @@ Mange hilsner fra Umbraco robotten
Error!The ElementType of this block does not exist anymore
+
+ Hvad er Indholdsskabeloner?
+ Indholdsskabeloner er foruddefineret indhold der kan vælges når der oprettes nye indholdselementer.
+ Hvordan opretter jeg en Indholdsskabelon?
+
+ Der er to måder at oprette Indholdsskabeloner på:
+
+
Højreklik på en indholdsnode og vælg "Opret indholdsskabelon" for at oprette en ny Indholdsskabelon.
+
Højreklik på Indholdsskabeloner i sektionen Indstillinger og vælg den dokumenttype du vil oprette en Indholdsskabelon for.
+
+
Når indholdsskabelonen har fået et navn, kan redaktører begynde at bruge indholdsskabelonen som udgangspunkt for deres nye side.
+ ]]>
+
+ Hvordan vedligeholder jeg Indholdsskabeloner?
+ Du kan redigere og slette Indholdsskabeloner fra "Indholdsskabeloner" i sektionen Indstillinger. Fold dokumenttypen som Indholdsskabelonen er baseret på ud og klik på den for at redigere eller slette den.
+
AfslutAfslut forhåndsvisning
From 82701fbacd02cf8aefa26b88eb7ad7ea8b18de04 Mon Sep 17 00:00:00 2001
From: Bjarne Fyrstenborg
Date: Sun, 21 Feb 2021 12:37:51 +0100
Subject: [PATCH 18/99] Fixes #9824 - Filtering in block picker doesn't work
(#9831)
---
.../blockpicker/blockpicker.controller.js | 22 +++++++------
.../blockpicker/blockpicker.html | 31 ++++++++++---------
2 files changed, 28 insertions(+), 25 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockpicker/blockpicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockpicker/blockpicker.controller.js
index 2894e0bef4..90803a3765 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockpicker/blockpicker.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockpicker/blockpicker.controller.js
@@ -1,11 +1,14 @@
angular.module("umbraco")
.controller("Umbraco.Editors.BlockPickerController",
function ($scope, localizationService) {
- var vm = this;
+ var vm = this;
vm.navigation = [];
+ vm.filter = {
+ searchTerm: ''
+ };
localizationService.localizeMany(["blockEditor_tabCreateEmpty", "blockEditor_tabClipboard"]).then(
function (data) {
@@ -28,33 +31,32 @@ angular.module("umbraco")
vm.activeTab = vm.navigation[0];
}
);
-
- vm.onNavigationChanged = function(tab) {
+ vm.onNavigationChanged = function (tab) {
vm.activeTab.active = false;
vm.activeTab = tab;
vm.activeTab.active = true;
- }
+ };
- vm.clickClearClipboard = function() {
+ vm.clickClearClipboard = function () {
vm.onNavigationChanged(vm.navigation[0]);
vm.navigation[1].disabled = true;// disabled ws determined when creating the navigation, so we need to update it here.
vm.model.clipboardItems = [];// This dialog is not connected via the clipboardService events, so we need to update manually.
vm.model.clickClearClipboard();
- }
+ };
vm.model = $scope.model;
- vm.selectItem = function(item, $event) {
+ vm.selectItem = function (item, $event) {
vm.model.selectedItem = item;
vm.model.submit($scope.model, $event);
- }
+ };
- vm.close = function() {
+ vm.close = function () {
if ($scope.model && $scope.model.close) {
$scope.model.close($scope.model);
}
- }
+ };
}
);
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockpicker/blockpicker.html b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockpicker/blockpicker.html
index 4b08d4e5fc..b72de0960d 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockpicker/blockpicker.html
+++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/blockpicker/blockpicker.html
@@ -12,35 +12,35 @@
hide-description="true">
-
From 01e572b7420a9dd4e2c16d928bb3bc5beffd528f Mon Sep 17 00:00:00 2001
From: Malthe Petersen
Date: Sun, 21 Feb 2021 16:51:03 +0100
Subject: [PATCH 22/99] Change access level for TreeChanged event in Media and
ContentService (#9487)
---
src/Umbraco.Core/Services/Changes/TreeChange.cs | 2 +-
src/Umbraco.Core/Services/Implement/ContentService.cs | 2 +-
src/Umbraco.Core/Services/Implement/MediaService.cs | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/Umbraco.Core/Services/Changes/TreeChange.cs b/src/Umbraco.Core/Services/Changes/TreeChange.cs
index 81c9b67c3f..605cde87a2 100644
--- a/src/Umbraco.Core/Services/Changes/TreeChange.cs
+++ b/src/Umbraco.Core/Services/Changes/TreeChange.cs
@@ -3,7 +3,7 @@ using System.Linq;
namespace Umbraco.Core.Services.Changes
{
- internal class TreeChange
+ public class TreeChange
{
public TreeChange(TItem changedItem, TreeChangeTypes changeTypes)
{
diff --git a/src/Umbraco.Core/Services/Implement/ContentService.cs b/src/Umbraco.Core/Services/Implement/ContentService.cs
index a809b83f23..8b1af5ca31 100644
--- a/src/Umbraco.Core/Services/Implement/ContentService.cs
+++ b/src/Umbraco.Core/Services/Implement/ContentService.cs
@@ -2606,7 +2606,7 @@ namespace Umbraco.Core.Services.Implement
///
/// Occurs after change.
///
- internal static event TypedEventHandler.EventArgs> TreeChanged;
+ public static event TypedEventHandler.EventArgs> TreeChanged;
///
/// Occurs after a blueprint has been saved.
diff --git a/src/Umbraco.Core/Services/Implement/MediaService.cs b/src/Umbraco.Core/Services/Implement/MediaService.cs
index ac9c83458d..ec84c0738e 100644
--- a/src/Umbraco.Core/Services/Implement/MediaService.cs
+++ b/src/Umbraco.Core/Services/Implement/MediaService.cs
@@ -1279,7 +1279,7 @@ namespace Umbraco.Core.Services.Implement
///
/// Occurs after change.
///
- internal static event TypedEventHandler.EventArgs> TreeChanged;
+ public static event TypedEventHandler.EventArgs> TreeChanged;
#endregion
From 033a245a21f64f55d27b96ad929056a887210211 Mon Sep 17 00:00:00 2001
From: vidyesh-phases <44634042+vidyesh-phases@users.noreply.github.com>
Date: Sun, 21 Feb 2021 21:22:43 +0530
Subject: [PATCH 23/99] Added UmbracoAuthorize attribute for
BackOfficeController.ExternalLinkLoginCallback (#9500)
---
src/Umbraco.Web/Editors/BackOfficeController.cs | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/Umbraco.Web/Editors/BackOfficeController.cs b/src/Umbraco.Web/Editors/BackOfficeController.cs
index 92b67cbf1b..ff618ba0a6 100644
--- a/src/Umbraco.Web/Editors/BackOfficeController.cs
+++ b/src/Umbraco.Web/Editors/BackOfficeController.cs
@@ -351,6 +351,7 @@ namespace Umbraco.Web.Editors
return RedirectToLocal(Url.Action("Default", "BackOffice"));
}
+ [UmbracoAuthorize]
[HttpGet]
public async Task ExternalLinkLoginCallback()
{
From 6cc005315de28512de85a8794890c482e1fd66c7 Mon Sep 17 00:00:00 2001
From: Callum Whyte
Date: Sun, 21 Feb 2021 15:57:23 +0000
Subject: [PATCH 24/99] Unhelpful unsupported property message in Block Editor
(#9525)
---
.../src/views/propertyeditors/notsupported/notsupported.html | 2 +-
src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml | 3 +--
src/Umbraco.Web.UI/Umbraco/config/lang/da.xml | 2 +-
src/Umbraco.Web.UI/Umbraco/config/lang/en.xml | 2 +-
src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml | 2 +-
src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml | 2 +-
src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml | 2 +-
7 files changed, 7 insertions(+), 8 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/notsupported/notsupported.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/notsupported/notsupported.html
index a2fbb0e907..f052415a05 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/notsupported/notsupported.html
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/notsupported/notsupported.html
@@ -1,3 +1,3 @@
-
+
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml
index eacfcde1bf..a667f0d3c6 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml
@@ -676,7 +676,6 @@
%0% yn faes ofynnol%0% yn %1% mewn fformat annilys%0% mewn fformat annilys
- Briodwedd '%0%' yn defnyddio'r golygydd '%1%' sydd ddim wedi ei chynnal yn y teipiau elfen.Derbynwyd gwall o'r gweinydd
@@ -701,7 +700,6 @@
Symudwch y cyrchwr ar ochr chwith y ddwy gell yr ydych eisiau cyfunoNi allwch hollti cell sydd heb ei gyfuno.Mae gan briodwedd hon gwallau
- Priodwedd '%0%' yn defnyddio'r golygydd '%1%' sydd ddim yn cael ei gefnogi mewn Mathau o Elfen.Gwall yn y ffynhonnell XSLTNid yw'r XSLTwedi'i achub gan ei fod yn cynnwys gwall(au)Mae gwall ffurfwedd gyda'r math o ddata sy'n cael ei ddefnyddio ar gyfer y priodwedd yma, gwiriwch y fath o ddata
@@ -2763,6 +2761,7 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang
Rydych chi wedi gwneud newidiadau i'r cynnwys hwn. Wyt ti'n siŵr eich bod chi am eu taflu ei fwrdd?Gwaredu cread?
+ Priodwedd '%0%' yn defnyddio'r golygydd '%1%' sydd ddim yn cael ei gefnogi mewn blociau.Beth yw Templedi Gynnwys
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
index e8de8e55aa..f2a35c4873 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
@@ -624,7 +624,6 @@
Du skal stå til venstre for de 2 celler du ønsker at samle!Du kan ikke opdele en celle, som ikke allerede er delt.Denne egenskab er ugyldig
- Feltet %0% bruger editor %1% som ikke er supporteret for ElementTyper.Om
@@ -1879,6 +1878,7 @@ Mange hilsner fra Umbraco robotten
Error!The ElementType of this block does not exist anymore
+ Feltet %0% bruger editor %1% som ikke er supporteret for blokke.Hvad er Indholdsskabeloner?
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
index c6a5ce4821..f6dc5ba8eb 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
@@ -636,7 +636,6 @@
%0% is a mandatory field%0% at %1% is not in a correct format%0% is not in a correct format
- Property '%0%' uses editor '%1%' which is not supported in Element Types.Received an error from the server
@@ -2526,6 +2525,7 @@ To manage your website, simply open the Umbraco back office and start adding con
Error!The ElementType of this block does not exist anymore
+ Property '%0%' uses editor '%1%' which is not supported in blocks.What are Content Templates?
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
index ad5992a195..cc1bb5843a 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
@@ -660,7 +660,6 @@
Please place cursor at the left of the two cells you wish to mergeYou cannot split a cell that hasn't been merged.This property is invalid
- Property '%0%' uses editor '%1%' which is not supported in Element Types.Options
@@ -2548,6 +2547,7 @@ To manage your website, simply open the Umbraco back office and start adding con
Error!The ElementType of this block does not exist anymore
+ Property '%0%' uses editor '%1%' which is not supported in blocks.What are Content Templates?
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml
index 11049a279c..2a24600a7c 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml
@@ -650,7 +650,6 @@
Plaats de cursor links van de twee cellen die je wilt samenvoegenJe kunt een cel die is samengevoegd niet delenDeze eigenschap is ongeldig
- Eigenschap '%0%' gebruikt editor '%1%' die niet ondersteund wordt in Element Types.Opties
@@ -2362,6 +2361,7 @@ Echter, Runway biedt een gemakkelijke basis om je snel op weg te helpen. Als je
Fout!Het Elementtype van dit blok bestaat niet meer
+ Eigenschap '%0%' gebruikt editor '%1%' die niet ondersteund wordt in blokken.Wat zijn Inhoudssjablonen?
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml
index fa0f909bfb..67fa7adcc4 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml
@@ -631,7 +631,6 @@
%0% zorunlu bir alandır%1% konumunda %0% doğru biçimde değil%0% doğru biçimde değil
- '%0%' özelliği, Öğe Türlerinde desteklenmeyen '%1%' düzenleyicisini kullanıyor.Sunucudan bir hata aldı
@@ -2575,6 +2574,7 @@ Web sitenizi yönetmek için, Umbraco'nun arka ofisini açın ve içerik eklemey
Hata!Bu bloğun ElementType'ı artık mevcut değil
+ '%0%' özelliği, bloklarda desteklenmeyen '%1%' düzenleyicisini kullanıyor.İçerik Şablonları Nedir?
From 1235520325e8cbc4c314a357fddb3f21b1026eff Mon Sep 17 00:00:00 2001
From: Callum Whyte
Date: Sun, 21 Feb 2021 16:01:49 +0000
Subject: [PATCH 25/99] Fix consistency in translation files for the term
backoffice, Umbraco and several entity types (#9526)
---
src/Umbraco.Web.UI/Umbraco/config/lang/cs.xml | 27 +++---
src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml | 3 +-
src/Umbraco.Web.UI/Umbraco/config/lang/da.xml | 6 +-
src/Umbraco.Web.UI/Umbraco/config/lang/de.xml | 1 -
src/Umbraco.Web.UI/Umbraco/config/lang/en.xml | 91 +++++++++---------
.../Umbraco/config/lang/en_us.xml | 93 +++++++++----------
src/Umbraco.Web.UI/Umbraco/config/lang/es.xml | 5 +-
src/Umbraco.Web.UI/Umbraco/config/lang/fr.xml | 5 +-
src/Umbraco.Web.UI/Umbraco/config/lang/he.xml | 2 +-
src/Umbraco.Web.UI/Umbraco/config/lang/it.xml | 5 +-
src/Umbraco.Web.UI/Umbraco/config/lang/ja.xml | 1 -
src/Umbraco.Web.UI/Umbraco/config/lang/ko.xml | 2 +-
src/Umbraco.Web.UI/Umbraco/config/lang/nb.xml | 1 -
src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml | 3 +-
src/Umbraco.Web.UI/Umbraco/config/lang/pl.xml | 5 +-
src/Umbraco.Web.UI/Umbraco/config/lang/ru.xml | 1 -
src/Umbraco.Web.UI/Umbraco/config/lang/sv.xml | 5 +-
src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml | 3 +-
src/Umbraco.Web.UI/Umbraco/config/lang/zh.xml | 1 -
.../Umbraco/config/lang/zh_tw.xml | 1 -
20 files changed, 122 insertions(+), 139 deletions(-)
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/cs.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/cs.xml
index 2375ebaf6d..61c4abcade 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/cs.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/cs.xml
@@ -373,7 +373,7 @@
Prohlédnout svůj web- Skrýt
- Jestli se umbraco neotevírá, možná budete muset povolit na tomto webu vyskakovací okna
+ Jestli se Umbraco neotevírá, možná budete muset povolit na tomto webu vyskakovací oknabyl otevřený v novém okněRestartNavštívit
@@ -837,29 +837,29 @@
Heslo výchozího uživatele bylo úspěšně změněno od doby instalace!
Netřeba nic dalšího dělat. Klikněte na Následující pro pokračování.]]>
Heslo je změněno!Mějte skvělý start, sledujte naše uváděcí videa
- Kliknutím na tlačítko následující (nebo modifikováním umbracoConfigurationStatus v souboru web.config) přijímáte licenci tohoto software tak, jak je uvedena v poli níže. Upozorňujeme, že tato distribuce Umbraca se skládá ze dvou různých licencí, open source MIT licence pro framework a umbraco freeware licence, která pokrývá UI.
+ Kliknutím na tlačítko následující (nebo modifikováním umbracoConfigurationStatus v souboru web.config) přijímáte licenci tohoto software tak, jak je uvedena v poli níže. Upozorňujeme, že tato distribuce Umbraca se skládá ze dvou různých licencí, open source MIT licence pro framework a Umbraco freeware licence, která pokrývá UI.Není nainstalováno.Dotčené soubory a složky
- Další informace o nastavování oprávnění pro umbraco zde
+ Další informace o nastavování oprávnění pro Umbraco zdeMusíte udělit ASP.NET oprávnění měnit následující soubory/složkyVaše nastavení oprávnění je téměř dokonalé!
- Můžete provozovat umbraco bez potíží, ale nebudete smět instalovat balíčky, které jsou doporučené pro plné využívání všech možností umbraca.]]>
+ Můžete provozovat Umbraco bez potíží, ale nebudete smět instalovat balíčky, které jsou doporučené pro plné využívání všech možností umbraca.]]>
Jak to vyřešitKlikněte zde, chcete-li číst textovou verzivýukové video o nastavovaní oprávnění pro složky umbraca, nebo si přečtěte textovou verzi.]]>Vaše nastavení oprávnění může být problém!
- Můžete provozovat umbraco bez potíží, ale nebudete smět vytvářet složky a instalovat balíčky, které jsou doporučené pro plné využívání všech možností umbraca.]]>
+ Můžete provozovat Umbraco bez potíží, ale nebudete smět vytvářet složky a instalovat balíčky, které jsou doporučené pro plné využívání všech možností umbraca.]]>
Vaše nastavení oprívnění není připraveno pro umbraco!
- Abyste mohli umbraco provozovat, budete muset aktualizovat Vaše nastavení oprávnění.]]>
+ Abyste mohli Umbraco provozovat, budete muset aktualizovat Vaše nastavení oprávnění.]]>
Vaše nastavení oprávnění je dokonalé!
- Jste připraveni provozovat umbraco a instalovat balíčky!]]>
+ Jste připraveni provozovat Umbraco a instalovat balíčky!]]>
Řešení potíží se složkamiNásledujte tento odkaz pro další informace o potížích s ASP.NET a vytvářením složek.Nastavování oprávnění pro složkyChci začít od nuly
@@ -898,7 +898,7 @@
Abyste získali pomoc od naší oceňované komunity, projděte si dokumentaci, nebo si pusťte některá videa zdarma o tom, jak vytvořit jednoduchý web, jak používat balíčky a rychlý úvod do terminologie umbraca]]>
Umbraco %0% je nainstalováno a připraveno k použitísoubor /web.config a upravit klíč AppSetting umbracoConfigurationStatus dole na hodnotu '%0%'.]]>
- ihned začít kliknutím na tlačítko "Spustit Umbraco" níže. Jestliže je pro Vás umbraco nové,
+ ihned začít kliknutím na tlačítko "Spustit Umbraco" níže. Jestliže je pro Vás Umbraco nové,
spoustu zdrojů naleznete na naších stránkách "začínáme".]]>Spustit Umbraco
Chcete-li spravovat Váš web, jednoduše přejděte do administrace umbraca a začněte přidávat obsah, upravovat šablony a stylopisy, nebo přidávat nové funkce]]>
@@ -980,7 +980,7 @@
Vyžadováno resetování hesla
- Vaše uživatelské jméno pro přihlášení do back-office Umbraco je: %0%
+ Vaše uživatelské jméno pro přihlášení do backoffice Umbraco je: %0%
@@ -1055,7 +1055,7 @@
Mějte hezký den!
- Zdraví umbraco robot
+ Zdraví Umbraco robot
]]>
Následující jazyky byly změněny %0%Ahoj %0%
@@ -1083,7 +1083,7 @@
Mějte hezký den!
- Zdraví umbraco robot
+ Zdraví Umbraco robot
]]>Byly změněny následující jazyky:
%0%
@@ -1097,7 +1097,7 @@
Vytvořit balíček
- a výběrem balíčku. Balíčky umbraco mají obvykle přípony ".umb" nebo ".zip".
+ a výběrem balíčku. Balíčky Umbraco mají obvykle přípony ".umb" nebo ".zip".
]]>Tím se balíček odstraníPřetáhněte sem pro nahrání
@@ -1328,7 +1328,6 @@
ZáložkyNadřazený typ obsahu povolenTento typ obsahu používá
- jako nadřazený typ obsahu. Záložky z nadřazených typů obsahu nejsou zobrazeny a mohou byt editovány pouze na nadřazených typech obsahu samotnýchNa této záložce nejsou definovány žádné vlastnosti. Pro vytvoření nové vlastnosti klikněte na odkaz "přidat novou vlastnost" nahoře.Vytvořit odpovídající šablonuPřidat ikonu
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml
index a667f0d3c6..0b00cfd423 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/cy.xml
@@ -589,7 +589,7 @@
Offer i reoli'r mynegaimeysyddNi ellir darllen yr mynegai a bydd angen ei ailadeiladu
- Mae'r broses yn cymryd mwy o amser na'r disgwyl, gwiriwch y log umbraco i weld os mae wedi bod unrhyw wall yn ystod y gweithrediad hwn
+ Mae'r broses yn cymryd mwy o amser na'r disgwyl, gwiriwch y log Umbraco i weld os mae wedi bod unrhyw wall yn ystod y gweithrediad hwnNi ellir ailadeiladu'r mynegai hwn oherwydd nad yw wedi'i aseinioIIndexPopulator
@@ -1564,7 +1564,6 @@ Er mwyn gweinyddu eich gwefan, agorwch swyddfa gefn Umbraco a dechreuwch ychwang
TabiauMath o Gynnwys Meistr wedi'i alluogiMae'r Math o Gynnwys yma yn defnyddio
- fel Math o Gynnwys Meistr. Nid yw tabiau o Fath o Gynnwys Meistr yn cael eu dangos a gall dim ond eu golygu ar y Math o Gynnwys Meistr ei hunanDim priodweddau wedi'u diffinio ar y tab yma. Cliciwch ar y ddolen "ychwanegu priodwedd newydd" ar y topi greu priodwedd newydd.Math o Ddogfen FeistrCreu templedi cydweddol
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
index f2a35c4873..309b05ccf3 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
@@ -949,7 +949,7 @@ Mange hilsner fra Umbraco robotten
Dette er en automatisk mail for at informere dig om at opgaven '%1%'
er blevet udførtpå siden '%2%' af brugeren '%3%'
]]>
[%0%] Notificering om %1% udført på %2%Notificeringer
@@ -1589,7 +1589,7 @@ Mange hilsner fra Umbraco robotten
er ikke blevet låst udeKodeordet er ikke blevet ændretGentag dit nye kodeord
- Du kan ændre dit kodeord, som giver dig adgang til Umbraco Back Office ved at udfylde formularen og klikke på knappen 'Skift dit kodeord'
+ Du kan ændre dit kodeord, som giver dig adgang til Umbraco backoffice ved at udfylde formularen og klikke på knappen 'Skift dit kodeord'IndholdskanalOpret endnu en brugerOpret nye brugere for at give dem adgang til Umbraco. Når en ny bruger oprettes, genereres der en adgangskode, som du kan dele med brugeren.
@@ -1856,7 +1856,7 @@ Mange hilsner fra Umbraco robotten
LabelSpeciel visningVis speciel visning beskrivelsen
- Overskrift hvordan denne block præsenteres i BackOffice interfacet. Vælg en .html fil der indeholder din præsensation.
+ Overskrift hvordan denne block præsenteres i backoffice interfacet. Vælg en .html fil der indeholder din præsensation.Indstillings modelRederings lagets størrelseTilføj speciel visning
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/de.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/de.xml
index 4f1c4c977f..b8c115c460 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/de.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/de.xml
@@ -1388,7 +1388,6 @@
RegisterkartenMasterdokumenttyp aktiviertDieser Dokumenttyp verwendet
- als Masterdokumenttyp. Register vom Masterdokumenttyp werden nicht angezeigt und können nur im Masterdokumenttyp selbst bearbeitet werdenFür dieses Register sind keine Eigenschaften definiert. Klicken Sie oben auf "neue Eigenschaft hinzufügen", um eine neue Eigenschaft hinzuzufügen.Zugehörige Vorlage anlegenBildsymbol hinzufügen
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
index f6dc5ba8eb..dacb04d597 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
@@ -66,7 +66,7 @@
Allow access to assign culture and hostnamesAllow access to view a node's history logAllow access to view a node
- Allow access to change document type for a node
+ Allow access to change Document Type for a nodeAllow access to copy a nodeAllow access to create nodesAllow access to delete nodes
@@ -190,12 +190,12 @@
History (all variants)
- To change the document type for the selected content, first select from the list of valid types for this location.
+ To change the Document Type for the selected content, first select from the list of valid types for this location.Then confirm and/or amend the mapping of properties from the current type to the new, and click Save.The content has been re-published.Current PropertyCurrent type
- The document type cannot be changed, as there are no alternatives valid for this location. An alternative will be valid if it is allowed under the parent of the selected content item and that all existing child content items are allowed to be created under it.
+ The Document Type cannot be changed, as there are no alternatives valid for this location. An alternative will be valid if it is allowed under the parent of the selected content item and that all existing child content items are allowed to be created under it.Document Type ChangedMap PropertiesMap to Property
@@ -204,7 +204,7 @@
noneContentSelect New Document Type
- The document type of the selected content has been successfully changed to [new type] and the following properties mapped:
+ The Document Type of the selected content has been successfully changed to [new type] and the following properties mapped:toCould not complete property mapping as one or more properties have more than one mapping defined.Only alternate types valid for the current location are displayed.
@@ -287,10 +287,10 @@
Are you sure you want to delete this item?Property %0% uses editor %1% which is not supported by Nested Content.Are you sure you want to delete all items?
- No content types are configured for this property.
- Add element type
- Select element type
- Select the group whose properties should be displayed. If left blank, the first group on the element type will be used.
+ No Content Types are configured for this property.
+ Add Element Type
+ Select Element Type
+ Select the group whose properties should be displayed. If left blank, the first group on the Element Type will be used.Enter an angular expression to evaluate against each item for its name. Useto display the item indexAdd another text box
@@ -358,18 +358,18 @@
Where do you want to create the new %0%Create an item under
- Select the document type you want to make a content template for
+ Select the Document Type you want to make a content template forEnter a folder nameChoose a type and a title
- Document Types within the Settings section, by editing the Allowed child node types under Permissions.]]>
- Document Types within the Settings section.]]>
+ Document Types within the Settings section, by editing the Allowed child node types under Permissions.]]>
+ Document Types within the Settings section.]]>The selected page in the content tree doesn't allow for any pages to be created below it.
- Edit permissions for this document type
- Create a new document type
- Document Types within the Settings section, by changing the Allow as root option under Permissions.]]>
- Media Types Types within the Settings section, by editing the Allowed child node types under Permissions.]]>
+ Edit permissions for this Document Type
+ Create a new Document Type
+ Document Types within the Settings section, by changing the Allow as root option under Permissions.]]>
+ Media Types within the Settings section, by editing the Allowed child node types under Permissions.]]>The selected media in the tree doesn't allow for any other media to be created below it.
- Edit permissions for this media type
+ Edit permissions for this Media TypesDocument Type without a templateDocument Type with TemplateThe data definition for a content page that can be created by editors in the content tree and is directly accessible via a URL.
@@ -382,7 +382,7 @@
FolderUsed to organise the Document Types, Compositions and Element Types created in this Document Type tree.New folder
- New data type
+ New Data TypeNew JavaScript fileNew empty partial viewNew partial view macro
@@ -566,7 +566,7 @@
Tools to manage the indexfieldsThe index cannot be read and will need to be rebuilt
- The process is taking longer than expected, check the umbraco log to see if there have been any errors during this operation
+ The process is taking longer than expected, check the Umbraco log to see if there have been any errors during this operationThis index cannot be rebuilt because it has no assignedIIndexPopulator
@@ -597,7 +597,7 @@
Create custom list viewRemove custom list view
- A content type, media type or member type with this alias already exists
+ A Content Type, Media Type or Member Type with this alias already existsRenamed
@@ -617,9 +617,9 @@
Show labelWidth and heightAll property types & property data
- using this data type will be deleted permanently, please confirm you want to delete these as well
+ using this Data Type will be deleted permanently, please confirm you want to delete these as wellYes, delete
- and all property types & property data using this data type
+ and all property types & property data using this Data TypeSelect the folder to moveto in the tree structure belowwas moved underneath
@@ -908,7 +908,7 @@
]]>
I want to start from scratchlearn how)
You can still choose to install Runway later on. Please go to the Developer section and choose Packages.
]]>
@@ -922,7 +922,7 @@
I want to start with a simple website
- "Runway" is a simple website providing some basic document types and templates. The installer can set up Runway for you automatically,
+ "Runway" is a simple website providing some basic Document Types and templates. The installer can set up Runway for you automatically,
but you can easily edit, extend or remove it. It's not necessary and you can perfectly use Umbraco without it. However,
Runway offers an easy foundation based on best practices to get you started faster than ever.
If you choose to install Runway, you can optionally select basic building blocks called Runway Modules to enhance your Runway pages.
@@ -949,7 +949,7 @@ Get help from our award winning community, browse the documentation or watch som
started instantly by clicking the "Launch Umbraco" button below. If you are new to Umbraco,
you can find plenty of resources on our getting started pages.]]>Launch Umbraco
-To manage your website, simply open the Umbraco back office and start adding content, updating the templates and stylesheets or add new functionality]]>
+To manage your website, simply open the Umbraco backoffice and start adding content, updating the templates and stylesheets or add new functionality]]>Connection to database failed.Umbraco Version 3Umbraco Version 4
@@ -1028,7 +1028,7 @@ To manage your website, simply open the Umbraco back office and start adding con
Password reset requested
- Your username to login to the Umbraco back-office is: %0%
+ Your username to login to the Umbraco backoffice is: %0%
@@ -1399,7 +1399,7 @@ To manage your website, simply open the Umbraco back office and start adding con
Default template
- To import a document type, find the ".udt" file on your computer by clicking the "Browse" button and click "Import" (you'll be asked for confirmation on the next screen)
+ To import a Document Type, find the ".udt" file on your computer by clicking the "Browse" button and click "Import" (you'll be asked for confirmation on the next screen)New Tab TitleNode typeType
@@ -1410,7 +1410,6 @@ To manage your website, simply open the Umbraco back office and start adding con
TabsMaster Content Type enabledThis Content Type uses
- as a Master Content Type. Tabs from Master Content Types are not shown and can only be edited on the Master Content Type itselfNo properties defined on this tab. Click on the "add a new property" link at the top to create a new property.Create matching templateAdd icon
@@ -1496,8 +1495,8 @@ To manage your website, simply open the Umbraco back office and start adding con
User %0% was deletedInvite userInvitation has been re-sent to %0%
- Document type was exported to file
- An error occurred while exporting the document type
+ Document Type was exported to file
+ An error occurred while exporting the Document TypeAdd style
@@ -1658,10 +1657,10 @@ To manage your website, simply open the Umbraco back office and start adding con
Allowed child node typesAllow content of the specified types to be created underneath content of this type.Choose child node
- Inherit tabs and properties from an existing document type. New tabs will be added to the current document type or merged if a tab with an identical name exists.
- This content type is used in a composition, and therefore cannot be composed itself.
- There are no content types available to use as a composition.
- Removing a composition will delete all the associated property data. Once you save the document type there's no way back.
+ Inherit tabs and properties from an existing Document Type. New tabs will be added to the current Document Type or merged if a tab with an identical name exists.
+ This Content Type is used in a composition, and therefore cannot be composed itself.
+ There are no Content Types available to use as a composition.
+ Removing a composition will delete all the associated property data. Once you save the Document Type there's no way back.Create newUse existingEditor settings
@@ -1672,12 +1671,12 @@ To manage your website, simply open the Umbraco back office and start adding con
Select the folder to moveSelect the folder to copyto in the tree structure below
- All Document types
+ All Document TypesAll DocumentsAll media items
- using this document type will be deleted permanently, please confirm you want to delete these as well.
- using this media type will be deleted permanently, please confirm you want to delete these as well.
- using this member type will be deleted permanently, please confirm you want to delete these as well
+ using this Document Type will be deleted permanently, please confirm you want to delete these as well.
+ using this Media Type will be deleted permanently, please confirm you want to delete these as well.
+ using this Member Type will be deleted permanently, please confirm you want to delete these as welland all documents using this typeand all media items using this typeand all members using this type
@@ -1700,11 +1699,11 @@ To manage your website, simply open the Umbraco back office and start adding con
Allow editors to create segments of this content.Allow varying by cultureAllow segmentation
- Element type
- Is an Element type
- An Element type is meant to be used for instance in Nested Content, and not in the tree.
- A document type cannot be changed to an Element type once it has been used to create one or more content items.
- This is not applicable for an Element type
+ Element Type
+ Is an Element Type
+ An Element Type is meant to be used for instance in Nested Content, and not in the tree.
+ A document Type cannot be changed to an Element Type once it has been used to create one or more content items.
+ This is not applicable for an Element TypeYou have made changes to this property. Are you sure you want to discard them?AppearanceLabel above (full-width)
@@ -1867,7 +1866,7 @@ To manage your website, simply open the Umbraco back office and start adding con
hasn't been locked outThe password hasn't been changedConfirm new password
- You can change your password for accessing the Umbraco Back Office by filling out the form below and click the 'Change Password' button
+ You can change your password for accessing the Umbraco backoffice by filling out the form below and click the 'Change Password' buttonContent ChannelCreate another userCreate new users to give them access to Umbraco. When a new user is created a password will be generated that you can share with the user.
@@ -2233,7 +2232,7 @@ To manage your website, simply open the Umbraco back office and start adding con
CreatedCommentName
- No relations for this relation type.
+ No relations for this Relation TypeRelation TypeRelations
@@ -2277,7 +2276,7 @@ To manage your website, simply open the Umbraco back office and start adding con
Partial ViewPartial View MacroMember
- Data type
+ Data TypeSearch the redirect dashboardSearch the user group sectionSearch the users section
@@ -2503,7 +2502,7 @@ To manage your website, simply open the Umbraco back office and start adding con
LabelCustom viewShow custom view description
- Overwrite how this block appears in the BackOffice UI. Pick a .html file containing your presentation.
+ Overwrite how this block appears in the backoffice UI. Pick a .html file containing your presentation.Settings modelOverlay editor sizeAdd custom view
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
index cc1bb5843a..d04b1f96a6 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
@@ -67,7 +67,7 @@
Allow access to assign culture and hostnamesAllow access to view a node's history logAllow access to view a node
- Allow access to change document type for a node
+ Allow access to change Document Type for a nodeAllow access to copy a nodeAllow access to create nodesAllow access to delete nodes
@@ -193,12 +193,12 @@
History (all variants)
- To change the document type for the selected content, first select from the list of valid types for this location.
+ To change the Document Type for the selected content, first select from the list of valid types for this location.Then confirm and/or amend the mapping of properties from the current type to the new, and click Save.The content has been re-published.Current PropertyCurrent type
- The document type cannot be changed, as there are no alternatives valid for this location. An alternative will be valid if it is allowed under the parent of the selected content item and that all existing child content items are allowed to be created under it.
+ The Document Type cannot be changed, as there are no alternatives valid for this location. An alternative will be valid if it is allowed under the parent of the selected content item and that all existing child content items are allowed to be created under it.Document Type ChangedMap PropertiesMap to Property
@@ -207,7 +207,7 @@
noneContentSelect New Document Type
- The document type of the selected content has been successfully changed to [new type] and the following properties mapped:
+ The Document Type of the selected content has been successfully changed to [new type] and the following properties mapped:toCould not complete property mapping as one or more properties have more than one mapping defined.Only alternate types valid for the current location are displayed.
@@ -292,10 +292,10 @@
Are you sure you want to delete this item?Are you sure you want to delete all items?Property %0% uses editor %1% which is not supported by Nested Content.
- No content types are configured for this property.
- Add element type
- Select element type
- Select the group whose properties should be displayed. If left blank, the first group on the element type will be used.
+ No Content Types are configured for this property.
+ Add Element Type
+ Select Element Type
+ Select the group whose properties should be displayed. If left blank, the first group on the Element Type will be used.Enter an angular expression to evaluate against each item for its name. Useto display the item indexAdd another text box
@@ -365,18 +365,18 @@
Where do you want to create the new %0%Create an item under
- Select the document type you want to make a content template for
+ Select the Document Type you want to make a content template forEnter a folder nameChoose a type and a title
- Document Types within the Settings section, by editing the Allowed child node types under Permissions.]]>
- Document Types within the Settings section.]]>
+ Document Types within the Settings section, by editing the Allowed child node types under Permissions.]]>
+ Document Types within the Settings section.]]>The selected page in the content tree doesn't allow for any pages to be created below it.
- Edit permissions for this document type
- Create a new document type
- Document Types within the Settings section, by changing the Allow as root option under Permissions.]]>
- Media Types Types within the Settings section, by editing the Allowed child node types under Permissions.]]>
+ Edit permissions for this Document Type
+ Create a new Document Type
+ Document Types within the Settings section, by changing the Allow as root option under Permissions.]]>
+ Media Types Types within the Settings section, by editing the Allowed child node types under Permissions.]]>The selected media in the tree doesn't allow for any other media to be created below it.
- Edit permissions for this media type
+ Edit permissions for this Media TypeDocument Type without a templateDocument Type with TemplateThe data definition for a content page that can be created by editors in the content tree and is directly accessible via a URL.
@@ -389,7 +389,7 @@
FolderUsed to organise the Document Types, Compositions and Element Types created in this Document Type tree.New folder
- New data type
+ New Data TypeNew JavaScript fileNew empty partial viewNew partial view macro
@@ -572,7 +572,7 @@
Tools to manage the indexfieldsThe index cannot be read and will need to be rebuilt
- The process is taking longer than expected, check the umbraco log to see if there have been any errors during this operation
+ The process is taking longer than expected, check the Umbraco log to see if there have been any errors during this operationThis index cannot be rebuilt because it has no assignedIIndexPopulator
@@ -602,7 +602,7 @@
Create custom list viewRemove custom list view
- A content type, media type or member type with this alias already exists
+ A Content Type, Media Type or Member Type with this alias already existsRenamed
@@ -622,9 +622,9 @@
Show labelWidth and heightAll property types & property data
- using this data type will be deleted permanently, please confirm you want to delete these as well
+ using this Data Type will be deleted permanently, please confirm you want to delete these as wellYes, delete
- and all property types & property data using this data type
+ and all property types & property data using this Data TypeSelect the folder to moveto in the tree structure belowwas moved underneath
@@ -914,7 +914,7 @@
]]>
I want to start from scratchlearn how)
You can still choose to install Runway later on. Please go to the Developer section and choose Packages.
]]>
@@ -928,7 +928,7 @@
I want to start with a simple website
- "Runway" is a simple website providing some basic document types and templates. The installer can set up Runway for you automatically,
+ "Runway" is a simple website providing some basic Document Types and templates. The installer can set up Runway for you automatically,
but you can easily edit, extend or remove it. It's not necessary and you can perfectly use Umbraco without it. However,
Runway offers an easy foundation based on best practices to get you started faster than ever.
If you choose to install Runway, you can optionally select basic building blocks called Runway Modules to enhance your Runway pages.
@@ -955,7 +955,7 @@ Get help from our award winning community, browse the documentation or watch som
started instantly by clicking the "Launch Umbraco" button below. If you are new to Umbraco,
you can find plenty of resources on our getting started pages.]]>Launch Umbraco
-To manage your website, simply open the Umbraco back office and start adding content, updating the templates and stylesheets or add new functionality]]>
+To manage your website, simply open the Umbraco backoffice and start adding content, updating the templates and stylesheets or add new functionality]]>Connection to database failed.Umbraco Version 3Umbraco Version 4
@@ -1034,7 +1034,7 @@ To manage your website, simply open the Umbraco back office and start adding con
Password reset requested
- Your username to login to the Umbraco back-office is: %0%
+ Your username to login to the Umbraco backoffice is: %0%
@@ -1402,7 +1402,7 @@ To manage your website, simply open the Umbraco back office and start adding con
Default template
- To import a document type, find the ".udt" file on your computer by clicking the "Browse" button and click "Import" (you'll be asked for confirmation on the next screen)
+ To import a Document Type, find the ".udt" file on your computer by clicking the "Browse" button and click "Import" (you'll be asked for confirmation on the next screen)New Tab TitleNode typeType
@@ -1413,7 +1413,6 @@ To manage your website, simply open the Umbraco back office and start adding con
TabsMaster Content Type enabledThis Content Type uses
- as a Master Content Type. Tabs from Master Content Types are not shown and can only be edited on the Master Content Type itselfNo properties defined on this tab. Click on the "add a new property" link at the top to create a new property.Create matching templateAdd icon
@@ -1509,8 +1508,8 @@ To manage your website, simply open the Umbraco back office and start adding con
Invitation has been re-sent to %0%Cannot publish the document since the required '%0%' is not publishedValidation failed for language '%0%'
- Document type was exported to file
- An error occurred while exporting the document type
+ Document Type was exported to file
+ An error occurred while exporting the Document TypeThe release date cannot be in the pastCannot schedule the document for publishing since the required '%0%' is not publishedCannot schedule the document for publishing since the required '%0%' has a publish date later than a non mandatory language
@@ -1676,10 +1675,10 @@ To manage your website, simply open the Umbraco back office and start adding con
Allowed child node typesAllow content of the specified types to be created underneath content of this type.Choose child node
- Inherit tabs and properties from an existing document type. New tabs will be added to the current document type or merged if a tab with an identical name exists.
- This content type is used in a composition, and therefore cannot be composed itself.
- There are no content types available to use as a composition.
- Removing a composition will delete all the associated property data. Once you save the document type there's no way back.
+ Inherit tabs and properties from an existing Document Type. New tabs will be added to the current Document Type or merged if a tab with an identical name exists.
+ This Content Type is used in a composition, and therefore cannot be composed itself.
+ There are no Content Types available to use as a composition.
+ Removing a composition will delete all the associated property data. Once you save the Document Type there's no way back.Create newUse existingEditor settings
@@ -1692,12 +1691,12 @@ To manage your website, simply open the Umbraco back office and start adding con
Select the folder to moveSelect the folder to copyto in the tree structure below
- All Document types
+ All Document TypesAll DocumentsAll media items
- using this document type will be deleted permanently, please confirm you want to delete these as well.
- using this media type will be deleted permanently, please confirm you want to delete these as well.
- using this member type will be deleted permanently, please confirm you want to delete these as well
+ using this Document Type will be deleted permanently, please confirm you want to delete these as well.
+ using this Media Type will be deleted permanently, please confirm you want to delete these as well.
+ using this Member Type will be deleted permanently, please confirm you want to delete these as welland all documents using this typeand all media items using this typeand all members using this type
@@ -1709,7 +1708,7 @@ To manage your website, simply open the Umbraco back office and start adding con
Allow this property value to be displayed on the member profile pagetab has no sort orderWhere is this composition used?
- This composition is currently used in the composition of the following content types:
+ This composition is currently used in the composition of the following Content Types:Allow variationsAllow vary by cultureAllow segmentation
@@ -1720,11 +1719,11 @@ To manage your website, simply open the Umbraco back office and start adding con
Allow editors to create segments of this content.Allow varying by cultureAllow segmentation
- Element type
- Is an element type
- An element type is meant to be used for instance in Nested Content, and not in the tree.
- A document type cannot be changed to an element type once it has been used to create one or more content items.
- This is not applicable for an element type
+ Element Type
+ Is an Element Type
+ An Element Type is meant to be used for instance in Nested Content, and not in the tree.
+ A Document Type cannot be changed to an Element Type once it has been used to create one or more content items.
+ This is not applicable for an Element TypeYou have made changes to this property. Are you sure you want to discard them?AppearanceLabel above (full-width)
@@ -1886,7 +1885,7 @@ To manage your website, simply open the Umbraco back office and start adding con
hasn't been locked outThe password hasn't been changedConfirm new password
- You can change your password for accessing the Umbraco Back Office by filling out the form below and click the 'Change Password' button
+ You can change your password for accessing the Umbraco backoffice by filling out the form below and click the 'Change Password' buttonContent ChannelCreate another userCreate new users to give them access to Umbraco. When a new user is created a password will be generated that you can share with the user.
@@ -2255,7 +2254,7 @@ To manage your website, simply open the Umbraco back office and start adding con
CreatedCommentName
- No relations for this relation type.
+ No relations for this Relation TypeRelation TypeRelations
@@ -2299,7 +2298,7 @@ To manage your website, simply open the Umbraco back office and start adding con
Partial ViewPartial View MacroMember
- Data type
+ Data TypeSearch the redirect dashboardSearch the user group sectionSearch the users section
@@ -2525,7 +2524,7 @@ To manage your website, simply open the Umbraco back office and start adding con
LabelCustom viewShow custom view description
- Overwrite how this block appears in the BackOffice UI. Pick a .html file containing your presentation.
+ Overwrite how this block appears in the backoffice UI. Pick a .html file containing your presentation.Settings modelOverlay editor sizeAdd custom view
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/es.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/es.xml
index 6d0fc7661a..fb11a8dd37 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/es.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/es.xml
@@ -671,7 +671,7 @@
Umbraco %0% ha sido instalado y está listo para ser usadoarchivo /web.config y actualizar la clave del AppSetting UmbracoConfigurationStatus del final al valor '%0%'.]]>empezar inmediatamente pulsando el botón "Lanzar Umbraco" de debajo. Si eres nuevo con Umbraco, puedes encontrar cantidad de recursos en nuestras páginas de cómo empezar.]]>
- Lanzar Umbraco Para administrar tu sitio web, simplemente abre el back office de Umbraco y empieza a añadir contenido, a actualizar plantillas y hojas de estilo o a añadir nueva funcionalidad]]>
+ Lanzar Umbraco Para administrar tu sitio web, simplemente abre el backoffice de Umbraco y empieza a añadir contenido, a actualizar plantillas y hojas de estilo o a añadir nueva funcionalidad]]>No se ha podido establecer la conexión con la base de datosUmbraco versión 3Umbraco versión 4
@@ -989,7 +989,6 @@
PestañasTipo de Contenido Maestro activadoEste Tipo de Contenido usa
- como Tipo de Contenido Maestro. Las pestañas para los Tipos de Contenido Maestros no se muestran y solo se pueden modificar desde el Tipo de Contenido MaestroNo existen propiedades para esta pestaña. Haz clic en el enlace "añadir nueva propiedad" para crear una nueva propiedad.Añadir icono
@@ -1284,7 +1283,7 @@
Este mail se ha generado automáticamente para informale que %2% has solicitado que el documento '%1%' sea traducido en '%5%'.
- Para editarlo, vaya a la dirección http://%3%/translation/details.aspx?id=%4% o inicia sesión en umbraco y ve a http://%3% para ver las tareas pendientes de traducir.
+ Para editarlo, vaya a la dirección http://%3%/translation/details.aspx?id=%4% o inicia sesión en Umbraco y ve a http://%3% para ver las tareas pendientes de traducir.
Espero que tenga un buen dia.
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/fr.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/fr.xml
index 88c6458a31..596f51d49e 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/fr.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/fr.xml
@@ -981,7 +981,7 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à
Une réinitialisation de votre mot de passe a été demandée
- Votre nom d'utilisateur pour vous connecter au back-office Umbraco est : %0%
+ Votre nom d'utilisateur pour vous connecter au backoffice Umbraco est : %0%
@@ -1354,7 +1354,6 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à
OngletsType de contenu de base activéCe type de contenu utilise
- en tant que type de contenu de base. Les onglets du type de contenu de base ne sont pas affichés et peuvent seulement être modifiés à partir du type de contenu de base lui-même.Aucune propriété définie dans cet onglet. Cliquez sur le lien "Ajouter une nouvelle propriété" en-haut pour créer une nouvelle propriété.Créer le template correspondantAjouter une icône
@@ -1805,7 +1804,7 @@ Pour gérer votre site, ouvrez simplement le backoffice Umbraco et commencez à
n'a pas été bloquéLe mot de passe n'a pas été modifiéConfirmez votre nouveau mot de passe
- Vous pouvez changer votre mot de passe d'accès au Back Office Umbraco en remplissant le formulaire ci-dessous puis en cliquant sur le bouton "Changer le mot de passe"
+ Vous pouvez changer votre mot de passe d'accès au backoffice Umbraco en remplissant le formulaire ci-dessous puis en cliquant sur le bouton "Changer le mot de passe"Canal de contenuCréer un autre utilisateurCréer de nouveaux utilisateurs pour leur donner accès à Umbraco. Lors de la création d'un nouvel utilisateur, un mot de passe est généré que vous pouvez partager avec ce dernier.
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/he.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/he.xml
index fcc9cfb8ad..a307dc9e1a 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/he.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/he.xml
@@ -449,7 +449,7 @@ Get help from our award winning community, browse the documentation or watch som
started instantly by clicking the "Launch Umbraco" button below. If you are new to Umbraco,
you can find plenty of resources on our getting started pages.]]>Launch Umbraco
-To manage your website, simply open the Umbraco back office and start adding content, updating the templates and stylesheets or add new functionality]]>
+To manage your website, simply open the Umbraco backoffice and start adding content, updating the templates and stylesheets or add new functionality]]>
ההתחברות לבסיס הנתונים נכשלה.Umbraco גירסה 3Umbraco גירסה 4
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/it.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/it.xml
index 812da01703..835e49578b 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/it.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/it.xml
@@ -422,7 +422,7 @@ Fatti aiutare dalla nostra community, consulta la documentazione o guarda alcuni
/web.config e aggiornare la chiave AppSetting UmbracoConfigurationStatus impostando il valore '%0%'.]]>iniziare immediatamente cliccando sul bottone "Avvia Umbraco". Se sei nuovo a Umbraco, si possono trovare un sacco di risorse sulle nostre pagine Getting Started.]]>Avvia Umbraco
-Per gestire il tuo sito web, è sufficiente aprire il back office di Umbraco e iniziare ad aggiungere i contenuti, aggiornando i modelli e i fogli di stile o aggiungere nuove funzionalità]]>
+Per gestire il tuo sito web, è sufficiente aprire il backoffice di Umbraco e iniziare ad aggiungere i contenuti, aggiornando i modelli e i fogli di stile o aggiungere nuove funzionalità]]>
Connessione al database non riuscita.Umbraco Versione 3Umbraco Versione 4
@@ -603,7 +603,6 @@ Per gestire il tuo sito web, è sufficiente aprire il back office di Umbraco e i
Utenti
- Tipo di contenuto master abilitatoQuesto tipo di contenuto usa
@@ -820,7 +819,7 @@ Per gestire il tuo sito web, è sufficiente aprire il back office di Umbraco e i
AmministratoreCampo CategoriaCambia la tua password
-
+ Conferma la nuova passwordContenuto del canaleCampo Descrizione
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/ja.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/ja.xml
index 80aad2c301..11cc67ec98 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/ja.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/ja.xml
@@ -804,7 +804,6 @@ Runwayをインストールして作られた新しいウェブサイトがど
タブマスターコンテンツタイプが有効このコンテンツタイプの使用
- マスターコンテンツタイプについては、マスターコンテンツタイプからのタブは表示されず、マスターコンテンツタイプでのみ編集することができます。このタブにはプロパティが定義されていません、上部のリンクから新しいプロパティを作成してくださいアイコンの追加
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/ko.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/ko.xml
index 02f50e73b2..1f7642036e 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/ko.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/ko.xml
@@ -815,7 +815,7 @@
관리자카테고리 필드Change Your Password
- You can change your password for accessing the Umbraco Back Office by filling out the form below and click the 'Change Password' button
+ You can change your password for accessing the Umbraco backoffice by filling out the form below and click the 'Change Password' button컨텐츠 채널설명 필드사용자 비활성화
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/nb.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/nb.xml
index cc0b46f200..d5f22686fe 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/nb.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/nb.xml
@@ -689,7 +689,6 @@ Vennlig hilsen Umbraco roboten
ArkfanerHovedinnholdstype aktivertDenne dokumenttypen bruker
- som hoveddokumenttype. Arkfaner fra hoveddokumenttyper vises ikke og kan kun endres på hoveddokumenttypen selv.Ingen egenskaper definert i denne arkfanen. Klikk på "legg til ny egenskap" lenken i toppen for å opprette en ny egenskap.
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml
index 2a24600a7c..961dcaeb16 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/nl.xml
@@ -902,7 +902,7 @@ Echter, Runway biedt een gemakkelijke basis om je snel op weg te helpen. Als je
Umbraco %0% is geïnstalleerd en klaar voor gebruik./web.config bestand aanpassen, en de Appsetting key UmbracoConfigurationStatus onder in het bestand veranderen naar '%0%'.]]>meteen beginnen door de "Launch Umbraco" knop hieronder te klikken. Als je een beginnende Umbraco gebruiker bent, dan kun je you can find veel informatie op onze "getting started" pagina's vinden.]]>
- Launch Umbraco Om je website te beheren open je simpelweg de Umbraco back office en begin je inhoud toe te voegen, templates en stylesheets aan te passen of nieuwe functionaliteit toe te voegen]]>
+ Launch Umbraco Om je website te beheren open je simpelweg de Umbraco backoffice en begin je inhoud toe te voegen, templates en stylesheets aan te passen of nieuwe functionaliteit toe te voegen]]>Verbinding met de database mislukt.Umbraco versie 3Umbraco versie 4
@@ -1229,7 +1229,6 @@ Echter, Runway biedt een gemakkelijke basis om je snel op weg te helpen. Als je
TabsBasis inhoudstype ingeschakeldDit inhoudstype gebruikt
- als basis inhoudstype. Tabs van basis inhoudstypes worden niet getoond en kunnen alleen worden aangepast op het basis inhoudstype zelfGeen eigenschappen gedefinieerd op dit tabblad. Klik op de link "voeg een nieuwe eigenschap" aan de bovenkant om een nieuwe eigenschap te creëren.Maak een bijpassende sjabloonIcoon toevoegen
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/pl.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/pl.xml
index 7b3e8f1b04..300b4dff76 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/pl.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/pl.xml
@@ -737,7 +737,7 @@ Naciśnij przycisk instaluj, aby zainstalować bazę danych Umb
Twoje hasło zostało zmienioneLink, na który kliknąłeś jest niewłaściwy lub wygasłUmbraco: Resetowanie hasła
- Twoja nazwa użytkownika do zalogowania się w Umbraco back-office to: %0%
Kliknij tutaj, aby zresetować Twoje hasło lub kopiuj/wklej ten URL w przeglądarce:
%1%
]]>
+ Twoja nazwa użytkownika do zalogowania się w Umbraco backoffice to: %0%
Kliknij tutaj, aby zresetować Twoje hasło lub kopiuj/wklej ten URL w przeglądarce:
%1%
]]>Panel zarządzania
@@ -981,7 +981,6 @@ Naciśnij przycisk instaluj, aby zainstalować bazę danych Umb
ZakładkiWłączono Główny Typ TreściTen Typ Treści używa
- jako Główny Typ Treści. Zakładki Głównego Typu Treści nie są wyświetlone i mogą być edytowane jedynie w samym Głównym Typie TreściŻadne właściwości nie zostały zdefiniowane dla tej zakładki. Kliknij w link "dodaj nową właściwość", który znajduje się na górze strony, aby stworzyć nową właściwość.Dodaj ikonę
@@ -1321,7 +1320,7 @@ Naciśnij przycisk instaluj, aby zainstalować bazę danych Umb
Zmień hasło!Nowe hasłoPotwierdź nowe hasło
- Możesz zmienić swoje hasło w Umbraco Back Office przez wypełnienie formularza poniżej i kliknięcie przycisku "Zmień hasło"
+ Możesz zmienić swoje hasło w Umbraco backoffice przez wypełnienie formularza poniżej i kliknięcie przycisku "Zmień hasło"Kanał zawartościOpisWyłącz użytkownika
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/ru.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/ru.xml
index a430b53165..9ad4291c59 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/ru.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/ru.xml
@@ -1327,7 +1327,6 @@
Добавить значок
- в качестве родительского типа. Вкладки родительского типа не показаны и могут быть изменены непосредственно в родительском типеРодительский тип контента разрешенДанный тип контента используетШаблон по-умолчанию
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/sv.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/sv.xml
index 8c282dd571..9c237815bf 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/sv.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/sv.xml
@@ -558,7 +558,7 @@
Umbraco %0% är installerat och klart för användning/web.config filen och ändra AppSettingsnyckeln UmbracoConfigurationStatus på slutet till %0%]]>börja omedelbart genom att klicka på "Starta Umbraco"-knappen nedan. Om du är en ny Umbraco användarekan du hitta massor av resurser på våra kom igång sidor.]]>
- Starta Umbraco För att administrera din webbplats öppnar du bara Umbraco back office och börjar lägga till innehåll, uppdatera mallar och stilmallar eller lägga till nya funktioner.]]>
+ Starta Umbraco För att administrera din webbplats öppnar du bara Umbraco backoffice och börjar lägga till innehåll, uppdatera mallar och stilmallar eller lägga till nya funktioner.]]>Anslutningen till databasen misslyckades.SeUmbraco %0% antingen för en ny installation eller en uppgradering från version 3.0.
Tryck på "next" för att börja.]]>
@@ -732,7 +732,6 @@
Användare
- som huvudinnehållstyp. Tabbar från huvudinnehållstyper visas inte och kan endast redigeras på själva huvudinnehållstypen.Huvudinnehållstyp påslagenDenna huvudinnehållstyp använderDefaultmall
@@ -947,7 +946,7 @@
Ändra lösenordÄndra bildBekräfta det nya lösenordet
- Du kan byta ditt lösenord för Umbraco Back Office genom att fylla i nedanstående formulär och klicka på knappen "Ändra lösenord".
+ Du kan byta ditt lösenord för Umbraco backoffice genom att fylla i nedanstående formulär och klicka på knappen "Ändra lösenord".InnehållskanalSkapa en till användareSkapa nya användare för att ge dom åtkomst till Umbraco. När en ny användare skapas kommer ett lösenord genereras som du kan dela med användaren.
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml
index 67fa7adcc4..82ef1ba628 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/tr.xml
@@ -561,7 +561,7 @@
Dizini yönetmek için araçlaralanlarDizin okunamıyor ve yeniden oluşturulması gerekecek
- İşlem beklenenden uzun sürüyor, bu işlem sırasında herhangi bir hata olup olmadığını görmek için umbraco günlüğünü kontrol edin
+ İşlem beklenenden uzun sürüyor, bu işlem sırasında herhangi bir hata olup olmadığını görmek için Umbraco günlüğünü kontrol edinBu dizin, atanmış olmadığı için yeniden oluşturulamazIIndexPopulator
@@ -1468,7 +1468,6 @@ Web sitenizi yönetmek için, Umbraco'nun arka ofisini açın ve içerik eklemey
SekmelerAna İçerik Türü etkinleştirildiBu İçerik Türü kullanır
- Ana İçerik Türü olarak . Ana İçerik Türlerinden sekmeler gösterilmez ve yalnızca Ana İçerik Türünün kendisinde düzenlenebilirBu sekmede tanımlanmış özellik yok. Yeni bir mülk oluşturmak için üstteki "yeni mülk ekle" bağlantısını tıklayın.Eşleşen şablon oluşturSimge ekle
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/zh.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/zh.xml
index 6344efe0bc..916bca0dbd 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/zh.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/zh.xml
@@ -847,7 +847,6 @@
选项卡主控文档类型激活该文档类型使用
- 作为主控文档类型. 主控文档类型的标签只能在主控文档类型里修改。没有字段设置在该标签页添加图标
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml
index c912daa56e..23123f9bfa 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/zh_tw.xml
@@ -834,7 +834,6 @@
選項卡主控文件類型啟動該文檔類型使用
- 作為主控文件類型. 主控文件類型的標籤只能在主控文件類型裡修改。沒有欄位設置在該標籤頁增加圖示
From 40f0fbe9391217900a766929a76ff9f1364f484e Mon Sep 17 00:00:00 2001
From: Callum Whyte
Date: Sun, 21 Feb 2021 16:03:37 +0000
Subject: [PATCH 26/99] Make abstract FileSystemWrapper class methods virtual
(#9528)
---
src/Umbraco.Core/IO/FileSystemWrapper.cs | 38 ++++++++++++------------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/src/Umbraco.Core/IO/FileSystemWrapper.cs b/src/Umbraco.Core/IO/FileSystemWrapper.cs
index 14d028c16d..3091a645d5 100644
--- a/src/Umbraco.Core/IO/FileSystemWrapper.cs
+++ b/src/Umbraco.Core/IO/FileSystemWrapper.cs
@@ -23,94 +23,94 @@ namespace Umbraco.Core.IO
internal IFileSystem InnerFileSystem { get; set; }
- public IEnumerable GetDirectories(string path)
+ public virtual IEnumerable GetDirectories(string path)
{
return InnerFileSystem.GetDirectories(path);
}
- public void DeleteDirectory(string path)
+ public virtual void DeleteDirectory(string path)
{
InnerFileSystem.DeleteDirectory(path);
}
- public void DeleteDirectory(string path, bool recursive)
+ public virtual void DeleteDirectory(string path, bool recursive)
{
InnerFileSystem.DeleteDirectory(path, recursive);
}
- public bool DirectoryExists(string path)
+ public virtual bool DirectoryExists(string path)
{
return InnerFileSystem.DirectoryExists(path);
}
- public void AddFile(string path, Stream stream)
+ public virtual void AddFile(string path, Stream stream)
{
InnerFileSystem.AddFile(path, stream);
}
- public void AddFile(string path, Stream stream, bool overrideExisting)
+ public virtual void AddFile(string path, Stream stream, bool overrideExisting)
{
InnerFileSystem.AddFile(path, stream, overrideExisting);
}
- public IEnumerable GetFiles(string path)
+ public virtual IEnumerable GetFiles(string path)
{
return InnerFileSystem.GetFiles(path);
}
- public IEnumerable GetFiles(string path, string filter)
+ public virtual IEnumerable GetFiles(string path, string filter)
{
return InnerFileSystem.GetFiles(path, filter);
}
- public Stream OpenFile(string path)
+ public virtual Stream OpenFile(string path)
{
return InnerFileSystem.OpenFile(path);
}
- public void DeleteFile(string path)
+ public virtual void DeleteFile(string path)
{
InnerFileSystem.DeleteFile(path);
}
- public bool FileExists(string path)
+ public virtual bool FileExists(string path)
{
return InnerFileSystem.FileExists(path);
}
- public string GetRelativePath(string fullPathOrUrl)
+ public virtual string GetRelativePath(string fullPathOrUrl)
{
return InnerFileSystem.GetRelativePath(fullPathOrUrl);
}
- public string GetFullPath(string path)
+ public virtual string GetFullPath(string path)
{
return InnerFileSystem.GetFullPath(path);
}
- public string GetUrl(string path)
+ public virtual string GetUrl(string path)
{
return InnerFileSystem.GetUrl(path);
}
- public DateTimeOffset GetLastModified(string path)
+ public virtual DateTimeOffset GetLastModified(string path)
{
return InnerFileSystem.GetLastModified(path);
}
- public DateTimeOffset GetCreated(string path)
+ public virtual DateTimeOffset GetCreated(string path)
{
return InnerFileSystem.GetCreated(path);
}
- public long GetSize(string path)
+ public virtual long GetSize(string path)
{
return InnerFileSystem.GetSize(path);
}
- public bool CanAddPhysical => InnerFileSystem.CanAddPhysical;
+ public virtual bool CanAddPhysical => InnerFileSystem.CanAddPhysical;
- public void AddFile(string path, string physicalPath, bool overrideIfExists = true, bool copy = false)
+ public virtual void AddFile(string path, string physicalPath, bool overrideIfExists = true, bool copy = false)
{
InnerFileSystem.AddFile(path, physicalPath, overrideIfExists, copy);
}
From 6aaefe160bd09a98a8e35456b52309e13a006f4b Mon Sep 17 00:00:00 2001
From: Bjarne Fyrstenborg
Date: Sun, 21 Feb 2021 17:17:10 +0100
Subject: [PATCH 27/99] Decimal step size validation (#9334)
Co-authored-by: Sebastiaan Janssen
---
.../src/views/propertyeditors/decimal/decimal.html | 9 +++++++--
src/Umbraco.Web.UI/Umbraco/config/lang/da.xml | 6 ++++--
src/Umbraco.Web.UI/Umbraco/config/lang/en.xml | 4 ++++
src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml | 1 +
4 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/decimal/decimal.html b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/decimal/decimal.html
index ac2fdabf3d..fb68a67c60 100644
--- a/src/Umbraco.Web.UI.Client/src/views/propertyeditors/decimal/decimal.html
+++ b/src/Umbraco.Web.UI.Client/src/views/propertyeditors/decimal/decimal.html
@@ -9,10 +9,15 @@
aria-required="{{model.validation.mandatory}}"
id="{{model.alias}}"
val-server="value"
- fix-number min="{{model.config.min}}" max="{{model.config.max}}" step="{{model.config.step}}" />
+ min="{{model.config.min}}"
+ max="{{model.config.max}}"
+ step="{{model.config.step}}"
+ ng-step="model.config.step"
+ fix-number />
-
+ Not a number
+ Not a valid numeric step size{{decimalFieldForm.decimalField.errorMsg}}
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
index 309b05ccf3..250b1b4579 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/da.xml
@@ -1696,9 +1696,11 @@ Mange hilsner fra Umbraco robotten
elementer valgtUgyldig datoIkke et tal
+ Ikke en gyldig numerisk trinstørrelseUgyldig e-mail
- Feltet er påkrævet
- Feltet er påkrævet
+ Værdien kan ikke være tom
+ Værdien kan ikke være tom
+ Værdien er ugyldig, som ikke matcher det korrekte format%1% mere.]]>%1% for mange.]]>
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
index dacb04d597..9d6240325d 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en.xml
@@ -2072,7 +2072,11 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
items selectedInvalid dateNot a number
+ Not a valid numeric step sizeInvalid email
+ Value cannot be null
+ Value cannot be empty
+ Value is invalid, it does not match the correct patternCustom validation%1% more.]]>%1% too many.]]>
diff --git a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
index d04b1f96a6..622806d933 100644
--- a/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
+++ b/src/Umbraco.Web.UI/Umbraco/config/lang/en_us.xml
@@ -2090,6 +2090,7 @@ To manage your website, simply open the Umbraco backoffice and start adding cont
items selectedInvalid dateNot a number
+ Not a valid numeric step sizeInvalid emailValue cannot be nullValue cannot be empty
From d85b6694fe66b1b9f51f6a7c215916f2ac73c6e5 Mon Sep 17 00:00:00 2001
From: Matthew-Wise <6782865+Matthew-Wise@users.noreply.github.com>
Date: Sun, 21 Feb 2021 16:19:48 +0000
Subject: [PATCH 28/99] Make models builder properties virtual to allow mocking
(#9335)
---
src/Umbraco.ModelsBuilder.Embedded/Building/TextBuilder.cs | 6 +++---
src/Umbraco.Tests/ModelsBuilder/BuilderTests.cs | 4 ++--
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/Umbraco.ModelsBuilder.Embedded/Building/TextBuilder.cs b/src/Umbraco.ModelsBuilder.Embedded/Building/TextBuilder.cs
index e59900bdc4..148d0869d4 100644
--- a/src/Umbraco.ModelsBuilder.Embedded/Building/TextBuilder.cs
+++ b/src/Umbraco.ModelsBuilder.Embedded/Building/TextBuilder.cs
@@ -246,7 +246,7 @@ namespace Umbraco.ModelsBuilder.Embedded.Building
WriteGeneratedCodeAttribute(sb, "\t\t");
sb.AppendFormat("\t\t[ImplementPropertyType(\"{0}\")]\n", property.Alias);
- sb.Append("\t\tpublic ");
+ sb.Append("\t\tpublic virtual ");
WriteClrType(sb, property.ClrTypeName);
sb.AppendFormat(" {0} => ",
@@ -307,14 +307,14 @@ namespace Umbraco.ModelsBuilder.Embedded.Building
if (mixinStatic)
{
- sb.Append("\t\tpublic ");
+ sb.Append("\t\tpublic virtual ");
WriteClrType(sb, property.ClrTypeName);
sb.AppendFormat(" {0} => {1}(this);\n",
property.ClrName, MixinStaticGetterName(property.ClrName));
}
else
{
- sb.Append("\t\tpublic ");
+ sb.Append("\t\tpublic virtual ");
WriteClrType(sb, property.ClrTypeName);
sb.AppendFormat(" {0} => this.Value",
property.ClrName);
diff --git a/src/Umbraco.Tests/ModelsBuilder/BuilderTests.cs b/src/Umbraco.Tests/ModelsBuilder/BuilderTests.cs
index 4f35c57d04..5a64ab1b73 100644
--- a/src/Umbraco.Tests/ModelsBuilder/BuilderTests.cs
+++ b/src/Umbraco.Tests/ModelsBuilder/BuilderTests.cs
@@ -97,7 +97,7 @@ namespace Umbraco.Web.PublishedModels
[global::System.CodeDom.Compiler.GeneratedCodeAttribute(""Umbraco.ModelsBuilder.Embedded"", """ + version + @""")]
[ImplementPropertyType(""prop1"")]
- public string Prop1 => this.Value(""prop1"");
+ public virtual string Prop1 => this.Value(""prop1"");
}
}
";
@@ -212,7 +212,7 @@ namespace Umbraco.Web.PublishedModels
[global::System.CodeDom.Compiler.GeneratedCodeAttribute(""Umbraco.ModelsBuilder.Embedded"", """ + version + @""")]
[ImplementPropertyType(""foo"")]
- public global::System.Collections.Generic.IEnumerable Foo => this.Value>(""foo"");
+ public virtual global::System.Collections.Generic.IEnumerable Foo => this.Value>(""foo"");
}
}
";
From 6eb260001d3d4045f4c29ef6e26d85d27c1e4ce8 Mon Sep 17 00:00:00 2001
From: mcl-sz
Date: Sun, 21 Feb 2021 17:22:28 +0100
Subject: [PATCH 29/99] Ensure that upload file(s) in the MediaPicker is
returned (#9367)
The onUploadComplete function returns the last files that are added to a mediafolder. While this works correct by default and in most situations, it doesn't work as expected when a diffrent sorting is used for Media-items. For example, we've added events to sort Media-items automatically by name alphabetically when they are created/uploaded to keep them better organised.
By sorting the $scope.files array by the Id-property, it ensures that the function returns the uploaded files, instead of the last files in the folder.
---
.../infiniteeditors/mediapicker/mediapicker.controller.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js
index 6f9ce6ee34..fec2e632c5 100644
--- a/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js
+++ b/src/Umbraco.Web.UI.Client/src/views/common/infiniteeditors/mediapicker/mediapicker.controller.js
@@ -327,10 +327,10 @@ angular.module("umbraco")
gotoFolder($scope.currentFolder).then(function () {
$timeout(function () {
if ($scope.multiPicker) {
- var images = _.rest($scope.images, $scope.images.length - files.length);
+ var images = _.rest(_.sortBy($scope.images, 'id'), $scope.images.length - files.length);
images.forEach(image => selectMedia(image));
} else {
- var image = $scope.images[$scope.images.length - 1];
+ var image = _.sortBy($scope.images, 'id')[$scope.images.length - 1];
clickHandler(image);
}
});
From b8540ca128bf1622ff26eb21d331577776d5a725 Mon Sep 17 00:00:00 2001
From: Chad
Date: Mon, 22 Feb 2021 11:22:49 +1300
Subject: [PATCH 30/99] Improve speed and reduce allocations by implementing
logger overloads to avoid params [] allocation (#8917)
* Implement logger overloads to avoid params [] allocation
* Implement console logger ILogger
* Call correct signature
* Fix exceptions
* Introduce ILogger2
* fix logger reference
Co-authored-by: Nathan Woulfe
---
.../Composing/ComponentCollection.cs | 2 +-
src/Umbraco.Core/Composing/Composers.cs | 4 +-
src/Umbraco.Core/Composing/TypeFinder.cs | 6 +-
src/Umbraco.Core/Composing/TypeLoader.cs | 29 +-
.../Configuration/Grid/GridEditorsConfig.cs | 2 +-
src/Umbraco.Core/IO/FileSystems.cs | 4 +-
src/Umbraco.Core/IO/MediaFileSystem.cs | 2 +-
src/Umbraco.Core/IO/PhysicalFileSystem.cs | 12 +-
.../Logging/DebugDiagnosticsLogger.cs | 60 +++
src/Umbraco.Core/Logging/DisposableTimer.cs | 10 +-
src/Umbraco.Core/Logging/ILogger.cs | 7 +-
src/Umbraco.Core/Logging/ILogger2.cs | 240 ++++++++++
src/Umbraco.Core/Logging/LogProfiler.cs | 4 +-
src/Umbraco.Core/Logging/Logger2Extensions.cs | 442 ++++++++++++++++++
src/Umbraco.Core/Logging/OwinLogger.cs | 18 +-
src/Umbraco.Core/Logging/ProfilingLogger.cs | 58 +++
.../Logging/Serilog/SerilogLogger.cs | 124 +++++
src/Umbraco.Core/Manifest/ManifestParser.cs | 2 +-
src/Umbraco.Core/Manifest/ManifestWatcher.cs | 2 +-
.../Migrations/Install/DatabaseBuilder.cs | 10 +-
.../Migrations/Install/DatabaseDataCreator.cs | 4 +-
.../Install/DatabaseSchemaCreator.cs | 20 +-
src/Umbraco.Core/Migrations/MigrationPlan.cs | 8 +-
.../Upgrade/V_8_0_0/DataTypeMigration.cs | 6 +-
.../DataTypes/PreValueMigratorCollection.cs | 2 +-
.../DropDownPropertyEditorsMigration.cs | 2 +-
.../MergeDateAndDateTimePropertyEditor.cs | 2 +-
...adioAndCheckboxPropertyEditorsMigration.cs | 2 +-
src/Umbraco.Core/Models/Member.cs | 4 +-
.../Packaging/PackageActionRunner.cs | 4 +-
.../Packaging/PackageDataInstallation.cs | 18 +-
.../Implement/ContentRepositoryBase.cs | 2 +-
.../Implement/ContentTypeRepository.cs | 2 +-
.../Implement/ContentTypeRepositoryBase.cs | 6 +-
.../Persistence/UmbracoDatabase.cs | 8 +-
.../Persistence/UmbracoDatabaseFactory.cs | 2 +-
.../PropertyEditors/DataValueEditor.cs | 2 +-
.../ValueConverters/GridValueConverter.cs | 2 +-
.../ImageCropperValueConverter.cs | 4 +-
.../ValueConverters/JsonValueConverter.cs | 2 +-
src/Umbraco.Core/Runtime/CoreRuntime.cs | 4 +-
src/Umbraco.Core/Runtime/MainDom.cs | 8 +-
src/Umbraco.Core/Runtime/SqlMainDomLock.cs | 6 +-
src/Umbraco.Core/RuntimeState.cs | 6 +-
src/Umbraco.Core/Scoping/Scope.cs | 2 +-
src/Umbraco.Core/Scoping/ScopeProvider.cs | 2 +-
.../Services/Implement/ContentService.cs | 38 +-
.../Implement/LocalizedTextService.cs | 8 +-
.../LocalizedTextServiceFileSources.cs | 6 +-
.../Services/Implement/NotificationService.cs | 2 +-
.../Sync/DatabaseServerMessenger.cs | 6 +-
src/Umbraco.Core/Sync/ServerMessengerBase.cs | 6 +-
src/Umbraco.Core/Umbraco.Core.csproj | 2 +
src/Umbraco.Core/UriExtensions.cs | 3 +-
src/Umbraco.Examine/IndexRebuilder.cs | 2 +-
src/Umbraco.Examine/UmbracoContentIndex.cs | 2 +-
src/Umbraco.Examine/UmbracoExamineIndex.cs | 2 +-
.../LoggerAllocationBenchmark.cs | 58 +++
.../Umbraco.Tests.Benchmarks.csproj | 1 +
.../DictionaryPublishedContent.cs | 2 +-
.../LegacyXmlPublishedCache/PreviewContent.cs | 4 +-
.../PublishedMediaCache.cs | 4 +-
.../LegacyXmlPublishedCache/XmlStore.cs | 16 +-
.../XmlStoreFilePersister.cs | 6 +-
.../Services/ContentServicePerformanceTest.cs | 2 +-
.../TestHelpers/ConsoleLogger.cs | 57 +++
.../Cache/DistributedCacheBinder.cs | 2 +-
.../ContentAppFactoryCollection.cs | 2 +-
.../Editors/AuthenticationController.cs | 8 +-
.../Editors/BackOfficeController.cs | 14 +-
src/Umbraco.Web/Editors/ContentController.cs | 2 +-
.../Editors/ContentControllerBase.cs | 2 +-
.../Editors/ContentTypeController.cs | 6 +-
.../Editors/DashboardController.cs | 6 +-
.../Editors/DictionaryController.cs | 4 +-
.../Editors/ExamineManagementController.cs | 4 +-
src/Umbraco.Web/Editors/PasswordChanger.cs | 6 +-
.../Editors/RelationTypeController.cs | 4 +-
src/Umbraco.Web/Editors/TinyMceController.cs | 2 +-
.../HealthCheck/HealthCheckController.cs | 2 +-
.../HealthCheck/HealthCheckResults.cs | 8 +-
.../ImageCropperTemplateExtensions.cs | 3 +-
.../Controllers/InstallApiController.cs | 6 +-
.../ClientDependencyConfiguration.cs | 2 +-
src/Umbraco.Web/Macros/MacroRenderer.cs | 6 +-
.../Media/UploadAutoFillProperties.cs | 2 +-
.../Mapping/ContentPropertyBasicMapper.cs | 2 +-
.../Models/Mapping/DataTypeMapDefinition.cs | 2 +-
.../Models/Mapping/MacroMapDefinition.cs | 2 +-
src/Umbraco.Web/Mvc/RenderMvcController.cs | 2 +-
.../BlockEditorPropertyEditor.cs | 2 +-
.../ImageCropperPropertyEditor.cs | 2 +-
.../NestedContentPropertyEditor.cs | 4 +-
.../RichTextEditorPastedImages.cs | 2 +-
.../PropertyEditors/RteEmbedController.cs | 2 +-
.../PublishedCache/NuCache/ContentStore.cs | 6 +-
.../NuCache/DataSource/DatabaseDataSource.cs | 4 +-
.../NuCache/PublishedSnapshotService.cs | 14 +-
.../PublishedContentTypeCache.cs | 4 +-
.../Routing/ContentFinderByConfigured404.cs | 2 +-
.../Routing/ContentFinderByIdPath.cs | 4 +-
.../Routing/ContentFinderByRedirectUrl.cs | 6 +-
src/Umbraco.Web/Routing/ContentFinderByUrl.cs | 4 +-
.../Routing/ContentFinderByUrlAlias.cs | 2 +-
.../Routing/ContentFinderByUrlAndTemplate.cs | 8 +-
src/Umbraco.Web/Routing/DefaultUrlProvider.cs | 2 +-
.../Routing/NotFoundHandlerHelper.cs | 2 +-
src/Umbraco.Web/Routing/PublishedRouter.cs | 38 +-
.../Scheduling/BackgroundTaskRunner.cs | 26 +-
src/Umbraco.Web/Scheduling/KeepAlive.cs | 2 +-
.../Scheduling/ScheduledPublishing.cs | 2 +-
src/Umbraco.Web/Scheduling/TempFileCleanup.cs | 4 +-
src/Umbraco.Web/Search/ExamineComponent.cs | 2 +-
src/Umbraco.Web/Security/MembershipHelper.cs | 2 +-
.../Providers/UmbracoMembershipProvider.cs | 16 +-
src/Umbraco.Web/Templates/HtmlUrlParser.cs | 2 +-
.../Trees/ContentTreeControllerBase.cs | 2 +-
src/Umbraco.Web/UmbracoApplicationBase.cs | 6 +-
src/Umbraco.Web/UmbracoModule.cs | 2 +-
.../FileUploadCleanupFilterAttribute.cs | 10 +-
.../WebApi/UnhandledExceptionLogger.cs | 2 +-
121 files changed, 1364 insertions(+), 316 deletions(-)
create mode 100644 src/Umbraco.Core/Logging/ILogger2.cs
create mode 100644 src/Umbraco.Core/Logging/Logger2Extensions.cs
create mode 100644 src/Umbraco.Tests.Benchmarks/LoggerAllocationBenchmark.cs
diff --git a/src/Umbraco.Core/Composing/ComponentCollection.cs b/src/Umbraco.Core/Composing/ComponentCollection.cs
index 62b240f10f..6501a3a28c 100644
--- a/src/Umbraco.Core/Composing/ComponentCollection.cs
+++ b/src/Umbraco.Core/Composing/ComponentCollection.cs
@@ -51,7 +51,7 @@ namespace Umbraco.Core.Composing
}
catch (Exception ex)
{
- _logger.Error(ex, "Error while terminating component {ComponentType}.", componentType.FullName);
+ _logger.Error(ex, "Error while terminating component {ComponentType}.", componentType.FullName);
}
}
}
diff --git a/src/Umbraco.Core/Composing/Composers.cs b/src/Umbraco.Core/Composing/Composers.cs
index b2e6c9d068..1528c6760d 100644
--- a/src/Umbraco.Core/Composing/Composers.cs
+++ b/src/Umbraco.Core/Composing/Composers.cs
@@ -114,7 +114,7 @@ namespace Umbraco.Core.Composing
// bit verbose but should help for troubleshooting
//var text = "Ordered Composers: " + Environment.NewLine + string.Join(Environment.NewLine, sortedComposerTypes) + Environment.NewLine;
- _logger.Debug("Ordered Composers: {SortedComposerTypes}", sortedComposerTypes);
+ _logger.Debug>("Ordered Composers: {SortedComposerTypes}", sortedComposerTypes);
return sortedComposerTypes;
}
@@ -205,7 +205,7 @@ namespace Umbraco.Core.Composing
catch (Exception e)
{
// in case of an error, force-dump everything to log
- _logger.Info("Composer Report:\r\n{ComposerReport}", GetComposersReport(requirements));
+ _logger.Info("Composer Report:\r\n{ComposerReport}", GetComposersReport(requirements));
_logger.Error(e, "Failed to sort composers.");
throw;
}
diff --git a/src/Umbraco.Core/Composing/TypeFinder.cs b/src/Umbraco.Core/Composing/TypeFinder.cs
index 394d9480ae..5bf9eb89a9 100644
--- a/src/Umbraco.Core/Composing/TypeFinder.cs
+++ b/src/Umbraco.Core/Composing/TypeFinder.cs
@@ -11,7 +11,7 @@ using System.Web.Compilation;
using System.Web.Hosting;
using Umbraco.Core.Composing;
using Umbraco.Core.IO;
-
+using Umbraco.Core.Logging;
namespace Umbraco.Core.Composing
{
///
@@ -441,7 +441,7 @@ namespace Umbraco.Core.Composing
}
catch (TypeLoadException ex)
{
- Current.Logger.Error(typeof(TypeFinder), ex, "Could not query types on {Assembly} assembly, this is most likely due to this assembly not being compatible with the current Umbraco version", assembly);
+ Current.Logger.Error(typeof(TypeFinder), ex, "Could not query types on {Assembly} assembly, this is most likely due to this assembly not being compatible with the current Umbraco version", assembly);
continue;
}
@@ -507,7 +507,7 @@ namespace Umbraco.Core.Composing
}
catch (TypeLoadException ex)
{
- Current.Logger.Error(typeof(TypeFinder), ex, "Could not query types on {Assembly} assembly, this is most likely due to this assembly not being compatible with the current Umbraco version", assembly);
+ Current.Logger.Error(typeof(TypeFinder), ex, "Could not query types on {Assembly} assembly, this is most likely due to this assembly not being compatible with the current Umbraco version", assembly);
continue;
}
diff --git a/src/Umbraco.Core/Composing/TypeLoader.cs b/src/Umbraco.Core/Composing/TypeLoader.cs
index 6d0b1a0514..f5c75ff607 100644
--- a/src/Umbraco.Core/Composing/TypeLoader.cs
+++ b/src/Umbraco.Core/Composing/TypeLoader.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
+using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Text;
using System.Threading;
@@ -477,7 +478,7 @@ namespace Umbraco.Core.Composing
if (--attempts == 0)
throw;
- _logger.Debug("Attempted to get filestream for file {Path} failed, {NumberOfAttempts} attempts left, pausing for {PauseMilliseconds} milliseconds", path, attempts, pauseMilliseconds);
+ _logger.Debug("Attempted to get filestream for file {Path} failed, {NumberOfAttempts} attempts left, pausing for {PauseMilliseconds} milliseconds", path, attempts, pauseMilliseconds);
Thread.Sleep(pauseMilliseconds);
}
}
@@ -498,7 +499,7 @@ namespace Umbraco.Core.Composing
if (--attempts == 0)
throw;
- _logger.Debug("Attempted to delete file {Path} failed, {NumberOfAttempts} attempts left, pausing for {PauseMilliseconds} milliseconds", path, attempts, pauseMilliseconds);
+ _logger.Debug("Attempted to delete file {Path} failed, {NumberOfAttempts} attempts left, pausing for {PauseMilliseconds} milliseconds", path, attempts, pauseMilliseconds);
Thread.Sleep(pauseMilliseconds);
}
}
@@ -571,7 +572,7 @@ namespace Umbraco.Core.Composing
if (!typeof(IDiscoverable).IsAssignableFrom(typeof(T)))
{
// warn
- _logger.Debug("Running a full, " + (cache ? "" : "non-") + "cached, scan for non-discoverable type {TypeName} (slow).", typeof(T).FullName);
+ _logger.Debug("Running a full, " + (cache ? "" : "non-") + "cached, scan for non-discoverable type {TypeName} (slow).", typeof(T).FullName);
return GetTypesInternal(
typeof(T), null,
@@ -589,7 +590,7 @@ namespace Umbraco.Core.Composing
// warn
if (!cache)
- _logger.Debug("Running a non-cached, filter for discoverable type {TypeName} (slowish).", typeof(T).FullName);
+ _logger.Debug("Running a non-cached, filter for discoverable type {TypeName} (slowish).", typeof(T).FullName);
// filter the cached discovered types (and maybe cache the result)
return GetTypesInternal(
@@ -621,7 +622,7 @@ namespace Umbraco.Core.Composing
// if not IDiscoverable, directly get types
if (!typeof(IDiscoverable).IsAssignableFrom(typeof(T)))
{
- _logger.Debug("Running a full, " + (cache ? "" : "non-") + "cached, scan for non-discoverable type {TypeName} / attribute {AttributeName} (slow).", typeof(T).FullName, typeof(TAttribute).FullName);
+ _logger.Debug("Running a full, " + (cache ? "" : "non-") + "cached, scan for non-discoverable type {TypeName} / attribute {AttributeName} (slow).", typeof(T).FullName, typeof(TAttribute).FullName);
return GetTypesInternal(
typeof(T), typeof(TAttribute),
@@ -639,7 +640,7 @@ namespace Umbraco.Core.Composing
// warn
if (!cache)
- _logger.Debug("Running a non-cached, filter for discoverable type {TypeName} / attribute {AttributeName} (slowish).", typeof(T).FullName, typeof(TAttribute).FullName);
+ _logger.Debug("Running a non-cached, filter for discoverable type {TypeName} / attribute {AttributeName} (slowish).", typeof(T).FullName, typeof(TAttribute).FullName);
// filter the cached discovered types (and maybe cache the result)
return GetTypesInternal(
@@ -669,7 +670,7 @@ namespace Umbraco.Core.Composing
cache &= specificAssemblies == null;
if (!cache)
- _logger.Debug("Running a full, non-cached, scan for types / attribute {AttributeName} (slow).", typeof(TAttribute).FullName);
+ _logger.Debug("Running a full, non-cached, scan for types / attribute {AttributeName} (slow).", typeof(TAttribute).FullName);
return GetTypesInternal(
typeof (object), typeof (TAttribute),
@@ -725,7 +726,7 @@ namespace Umbraco.Core.Composing
if (typeList != null)
{
// need to put some logging here to try to figure out why this is happening: http://issues.umbraco.org/issue/U4-3505
- _logger.Debug("Getting {TypeName}: found a cached type list.", GetName(baseType, attributeType));
+ _logger.Debug("Getting {TypeName}: found a cached type list.", GetName(baseType, attributeType));
return typeList.Types;
}
@@ -756,7 +757,7 @@ namespace Umbraco.Core.Composing
// so in this instance there will never be a result.
if (cacheResult.Exception is CachedTypeNotFoundInFileException || cacheResult.Success == false)
{
- _logger.Debug("Getting {TypeName}: failed to load from cache file, must scan assemblies.", GetName(baseType, attributeType));
+ _logger.Debug("Getting {TypeName}: failed to load from cache file, must scan assemblies.", GetName(baseType, attributeType));
scan = true;
}
else
@@ -775,7 +776,7 @@ namespace Umbraco.Core.Composing
catch (Exception ex)
{
// in case of any exception, we have to exit, and revert to scanning
- _logger.Error(ex, "Getting {TypeName}: failed to load cache file type {CacheType}, reverting to scanning assemblies.", GetName(baseType, attributeType), type);
+ _logger.Error(ex, "Getting {TypeName}: failed to load cache file type {CacheType}, reverting to scanning assemblies.", GetName(baseType, attributeType), type);
scan = true;
break;
}
@@ -783,7 +784,7 @@ namespace Umbraco.Core.Composing
if (scan == false)
{
- _logger.Debug("Getting {TypeName}: loaded types from cache file.", GetName(baseType, attributeType));
+ _logger.Debug("Getting {TypeName}: loaded types from cache file.", GetName(baseType, attributeType));
}
}
}
@@ -791,7 +792,7 @@ namespace Umbraco.Core.Composing
if (scan)
{
// either we had to scan, or we could not get the types from the cache file - scan now
- _logger.Debug("Getting {TypeName}: " + action + ".", GetName(baseType, attributeType));
+ _logger.Debug("Getting {TypeName}: " + action + ".", GetName(baseType, attributeType));
foreach (var t in finder())
typeList.Add(t);
@@ -809,11 +810,11 @@ namespace Umbraco.Core.Composing
UpdateCache();
}
- _logger.Debug("Got {TypeName}, caching ({CacheType}).", GetName(baseType, attributeType), added.ToString().ToLowerInvariant());
+ _logger.Debug("Got {TypeName}, caching ({CacheType}).", GetName(baseType, attributeType), added.ToString().ToLowerInvariant());
}
else
{
- _logger.Debug("Got {TypeName}.", GetName(baseType, attributeType));
+ _logger.Debug("Got {TypeName}.", GetName(baseType, attributeType));
}
return typeList.Types;
diff --git a/src/Umbraco.Core/Configuration/Grid/GridEditorsConfig.cs b/src/Umbraco.Core/Configuration/Grid/GridEditorsConfig.cs
index d434da8c70..82f9bd2afe 100644
--- a/src/Umbraco.Core/Configuration/Grid/GridEditorsConfig.cs
+++ b/src/Umbraco.Core/Configuration/Grid/GridEditorsConfig.cs
@@ -43,7 +43,7 @@ namespace Umbraco.Core.Configuration.Grid
}
catch (Exception ex)
{
- _logger.Error(ex, "Could not parse the contents of grid.editors.config.js into a JSON array '{Json}", sourceString);
+ _logger.Error(ex, "Could not parse the contents of grid.editors.config.js into a JSON array '{Json}", sourceString);
}
}
diff --git a/src/Umbraco.Core/IO/FileSystems.cs b/src/Umbraco.Core/IO/FileSystems.cs
index 8906752dd1..3b05adb20f 100644
--- a/src/Umbraco.Core/IO/FileSystems.cs
+++ b/src/Umbraco.Core/IO/FileSystems.cs
@@ -225,7 +225,7 @@ namespace Umbraco.Core.IO
_shadowCurrentId = id;
- _logger.Debug("Shadow '{ShadowId}'", _shadowCurrentId);
+ _logger.Debug("Shadow '{ShadowId}'", _shadowCurrentId);
foreach (var wrapper in _shadowWrappers)
wrapper.Shadow(_shadowCurrentId);
@@ -242,7 +242,7 @@ namespace Umbraco.Core.IO
if (id != _shadowCurrentId)
throw new InvalidOperationException("Not the current shadow.");
- _logger.Debug("UnShadow '{ShadowId}' {Status}", id, completed ? "complete" : "abort");
+ _logger.Debug("UnShadow '{ShadowId}' {Status}", id, completed ? "complete" : "abort");
var exceptions = new List();
foreach (var wrapper in _shadowWrappers)
diff --git a/src/Umbraco.Core/IO/MediaFileSystem.cs b/src/Umbraco.Core/IO/MediaFileSystem.cs
index 05c02171ba..6743275be0 100644
--- a/src/Umbraco.Core/IO/MediaFileSystem.cs
+++ b/src/Umbraco.Core/IO/MediaFileSystem.cs
@@ -51,7 +51,7 @@ namespace Umbraco.Core.IO
}
catch (Exception e)
{
- _logger.Error(e, "Failed to delete media file '{File}'.", file);
+ _logger.Error(e, "Failed to delete media file '{File}'.", file);
}
});
}
diff --git a/src/Umbraco.Core/IO/PhysicalFileSystem.cs b/src/Umbraco.Core/IO/PhysicalFileSystem.cs
index a833ba43af..5ebe6817e5 100644
--- a/src/Umbraco.Core/IO/PhysicalFileSystem.cs
+++ b/src/Umbraco.Core/IO/PhysicalFileSystem.cs
@@ -74,11 +74,11 @@ namespace Umbraco.Core.IO
}
catch (UnauthorizedAccessException ex)
{
- Current.Logger.Error(ex, "Not authorized to get directories for '{Path}'", fullPath);
+ Current.Logger.Error(ex, "Not authorized to get directories for '{Path}'", fullPath);
}
catch (DirectoryNotFoundException ex)
{
- Current.Logger.Error(ex, "Directory not found for '{Path}'", fullPath);
+ Current.Logger.Error(ex, "Directory not found for '{Path}'", fullPath);
}
return Enumerable.Empty();
@@ -110,7 +110,7 @@ namespace Umbraco.Core.IO
}
catch (DirectoryNotFoundException ex)
{
- Current.Logger.Error(ex, "Directory not found for '{Path}'", fullPath);
+ Current.Logger.Error(ex, "Directory not found for '{Path}'", fullPath);
}
}
@@ -190,11 +190,11 @@ namespace Umbraco.Core.IO
}
catch (UnauthorizedAccessException ex)
{
- Current.Logger.Error(ex, "Not authorized to get directories for '{Path}'", fullPath);
+ Current.Logger.Error(ex, "Not authorized to get directories for '{Path}'", fullPath);
}
catch (DirectoryNotFoundException ex)
{
- Current.Logger.Error(ex, "Directory not found for '{FullPath}'", fullPath);
+ Current.Logger.Error(ex, "Directory not found for '{FullPath}'", fullPath);
}
return Enumerable.Empty();
@@ -227,7 +227,7 @@ namespace Umbraco.Core.IO
}
catch (FileNotFoundException ex)
{
- Current.Logger.Error(ex.InnerException, "DeleteFile failed with FileNotFoundException for '{Path}'", fullPath);
+ Current.Logger.Error(ex.InnerException, "DeleteFile failed with FileNotFoundException for '{Path}'", fullPath);
}
}
diff --git a/src/Umbraco.Core/Logging/DebugDiagnosticsLogger.cs b/src/Umbraco.Core/Logging/DebugDiagnosticsLogger.cs
index d1bde55306..8f26f7e75c 100644
--- a/src/Umbraco.Core/Logging/DebugDiagnosticsLogger.cs
+++ b/src/Umbraco.Core/Logging/DebugDiagnosticsLogger.cs
@@ -129,5 +129,65 @@ namespace Umbraco.Core.Logging
{
System.Diagnostics.Debug.WriteLine(MessageTemplates.Render(messageTemplate, propertyValues), reporting.FullName);
}
+ ///
+ public void Fatal(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0,
+ T1 propertyValue1, T2 propertyValue2)
+ => Fatal(reporting, exception, messageTemplate, new object[] { propertyValue0, propertyValue1, propertyValue2 });
+ ///
+ public void Fatal(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ => Fatal(reporting, exception, messageTemplate, new object[] { propertyValue0, propertyValue1 });
+ ///
+ public void Fatal(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0)
+ => Fatal(reporting, exception, messageTemplate, new object[] { propertyValue0 });
+ ///
+ public void Error(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0,
+ T1 propertyValue1, T2 propertyValue2)
+ => Error(reporting, exception, messageTemplate, new object[] { propertyValue0, propertyValue1, propertyValue2 });
+ ///
+ public void Error(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ => Error(reporting, exception, messageTemplate, new object[] { propertyValue0, propertyValue1 });
+ ///
+ public void Error(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0)
+ => Error(reporting, exception, messageTemplate, new object[] { propertyValue0 });
+ ///
+ public void Warn(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0,
+ T1 propertyValue1, T2 propertyValue2)
+ => Warn(reporting, exception, messageTemplate, new object[] { propertyValue0, propertyValue1,propertyValue2 });
+ ///
+ public void Warn(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ => Warn(reporting, exception, messageTemplate, new object[] { propertyValue0, propertyValue1 });
+
+ public void Warn(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0)
+ => Warn(reporting, exception, messageTemplate, new object[] { propertyValue0 });
+
+ public void Warn(Type reporting, string message, T0 propertyValue0)
+ => Warn(reporting, message, new object[] { propertyValue0 });
+
+ public void Info(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ => Info(reporting, messageTemplate, new object[] { propertyValue0, propertyValue1, propertyValue2 });
+
+ public void Info(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ => Info(reporting, messageTemplate, new object[] { propertyValue0, propertyValue1 });
+
+ public void Info(Type reporting, string messageTemplate, T0 propertyValue0)
+ => Info(reporting, messageTemplate, new object[] { propertyValue0 });
+
+ public void Debug(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ => Debug(reporting, messageTemplate, new object[] { propertyValue0, propertyValue1, propertyValue2 });
+
+ public void Debug(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ => Debug(reporting, messageTemplate, new object[] { propertyValue0, propertyValue1 });
+
+ public void Debug(Type reporting, string messageTemplate, T0 propertyValue0)
+ => Debug(reporting, messageTemplate, new object[] { propertyValue0 });
+
+ public void Verbose(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ => Verbose(reporting, messageTemplate, new object[] { propertyValue0, propertyValue1,propertyValue2 });
+
+ public void Verbose(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ => Verbose(reporting, messageTemplate, new object[] { propertyValue0, propertyValue1 });
+
+ public void Verbose(Type reporting, string messageTemplate, T0 propertyValue0)
+ => Verbose(reporting, messageTemplate, new object[] { propertyValue0 });
}
}
diff --git a/src/Umbraco.Core/Logging/DisposableTimer.cs b/src/Umbraco.Core/Logging/DisposableTimer.cs
index ed98e5cfab..63ae3c2792 100644
--- a/src/Umbraco.Core/Logging/DisposableTimer.cs
+++ b/src/Umbraco.Core/Logging/DisposableTimer.cs
@@ -37,10 +37,10 @@ namespace Umbraco.Core.Logging
switch (_level)
{
case LogLevel.Debug:
- logger.Debug(loggerType, "{StartMessage} [Timing {TimingId}]", startMessage, _timingId);
+ logger.Debug(loggerType, "{StartMessage} [Timing {TimingId}]", startMessage, _timingId);
break;
case LogLevel.Information:
- logger.Info(loggerType, "{StartMessage} [Timing {TimingId}]", startMessage, _timingId);
+ logger.Info(loggerType, "{StartMessage} [Timing {TimingId}]", startMessage, _timingId);
break;
default:
throw new ArgumentOutOfRangeException(nameof(level));
@@ -84,15 +84,15 @@ namespace Umbraco.Core.Logging
{
if (_failed)
{
- _logger.Error(_loggerType, _failException, "{FailMessage} ({Duration}ms) [Timing {TimingId}]", _failMessage, Stopwatch.ElapsedMilliseconds, _timingId);
+ _logger.Error(_loggerType, _failException, "{FailMessage} ({Duration}ms) [Timing {TimingId}]", _failMessage, Stopwatch.ElapsedMilliseconds, _timingId);
}
else switch (_level)
{
case LogLevel.Debug:
- _logger.Debug(_loggerType, "{EndMessage} ({Duration}ms) [Timing {TimingId}]", _endMessage, Stopwatch.ElapsedMilliseconds, _timingId);
+ _logger.Debug(_loggerType, "{EndMessage} ({Duration}ms) [Timing {TimingId}]", _endMessage, Stopwatch.ElapsedMilliseconds, _timingId);
break;
case LogLevel.Information:
- _logger.Info(_loggerType, "{EndMessage} ({Duration}ms) [Timing {TimingId}]", _endMessage, Stopwatch.ElapsedMilliseconds, _timingId);
+ _logger.Info(_loggerType, "{EndMessage} ({Duration}ms) [Timing {TimingId}]", _endMessage, Stopwatch.ElapsedMilliseconds, _timingId);
break;
// filtered in the ctor
//default:
diff --git a/src/Umbraco.Core/Logging/ILogger.cs b/src/Umbraco.Core/Logging/ILogger.cs
index 4f49d0b3b4..d8272b6aa0 100644
--- a/src/Umbraco.Core/Logging/ILogger.cs
+++ b/src/Umbraco.Core/Logging/ILogger.cs
@@ -52,7 +52,7 @@ namespace Umbraco.Core.Logging
/// A message template.
/// Property values.
void Fatal(Type reporting, Exception exception, string messageTemplate, params object[] propertyValues);
-
+
///
/// Logs a fatal message.
///
@@ -92,7 +92,7 @@ namespace Umbraco.Core.Logging
/// A message template.
/// Property values.
void Error(Type reporting, Exception exception, string messageTemplate, params object[] propertyValues);
-
+
///
/// Logs an error message.
///
@@ -132,6 +132,7 @@ namespace Umbraco.Core.Logging
/// A message template.
/// Property values.
void Warn(Type reporting, Exception exception, string messageTemplate, params object[] propertyValues);
+
///
/// Logs an information message.
@@ -147,6 +148,7 @@ namespace Umbraco.Core.Logging
/// A message template.
/// Property values.
void Info(Type reporting, string messageTemplate, params object[] propertyValues);
+
///
/// Logs a debugging message.
@@ -177,5 +179,6 @@ namespace Umbraco.Core.Logging
/// A message template.
/// Property values.
void Verbose(Type reporting, string messageTemplate, params object[] propertyValues);
+
}
}
diff --git a/src/Umbraco.Core/Logging/ILogger2.cs b/src/Umbraco.Core/Logging/ILogger2.cs
new file mode 100644
index 0000000000..0db8021f58
--- /dev/null
+++ b/src/Umbraco.Core/Logging/ILogger2.cs
@@ -0,0 +1,240 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Umbraco.Core.Logging
+{
+ public interface ILogger2 : ILogger
+ {
+ ///
+ /// Logs a fatal message with an exception.
+ ///
+ /// The reporting type.
+ /// An exception.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ /// Property value 2
+ void Fatal(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2);
+ ///
+ /// Logs a fatal message with an exception.
+ ///
+ /// The reporting type.
+ /// An exception.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ void Fatal(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1);
+ ///
+ /// Logs a fatal message with an exception.
+ ///
+ /// The reporting type.
+ /// An exception.
+ /// A message template.
+ /// Property value 0
+ void Fatal(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0);
+
+ ///
+ /// Logs an error message with an exception.
+ ///
+ /// The reporting type.
+ /// An exception.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ /// Property value 2
+ void Error(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2);
+ ///
+ /// Logs an error message with an exception.
+ ///
+ /// The reporting type.
+ /// An exception.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ void Error(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1);
+ ///
+ /// Logs an error message with an exception.
+ ///
+ /// The reporting type.
+ /// An exception.
+ /// A message template.
+ /// Property value 0
+ void Error(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0);
+
+ ///
+ /// Logs a warning message with an exception.
+ ///
+ /// The reporting type.
+ /// An exception.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ /// Property value 2
+ void Warn(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2);
+ ///
+ /// Logs a warning message with an exception.
+ ///
+ /// The reporting type.
+ /// An exception.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ void Warn(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1);
+ ///
+ /// Logs a warning message with an exception.
+ ///
+ /// The reporting type.
+ /// An exception.
+ /// A message template.
+ /// Property value 0
+ void Warn(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0);
+ ///
+ /// Logs a warning message with an exception.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ void Warn(Type reporting, string message, T0 propertyValue0);
+
+ ///
+ /// Logs a info message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ /// Property value 2
+ void Info(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2);
+ ///
+ /// Logs a info message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ void Info(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1);
+ ///
+ /// Logs a info message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ void Info(Type reporting, string messageTemplate, T0 propertyValue0);
+
+ ///
+ /// Logs a debug message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ /// Property value 2
+ void Debug(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2);
+ ///
+ /// Logs a debug message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ void Debug(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1);
+ ///
+ /// Logs a debug message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ void Debug(Type reporting, string messageTemplate, T0 propertyValue0);
+
+ ///
+ /// Logs a verbose message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ /// Property value 2
+ void Verbose(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2);
+ ///
+ /// Logs a verbose message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ void Verbose(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1);
+ ///
+ /// Logs a verbose message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ void Verbose(Type reporting, string messageTemplate, T0 propertyValue0);
+
+
+ ///
+ /// Logs a error message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ void Error(Type reporting, string messageTemplate, T0 propertyValue0);
+
+ ///
+ /// Logs a error message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ void Error(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1);
+
+ ///
+ /// Logs a error message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ /// Property value 2
+ void Error(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2);
+
+ ///
+ /// Logs a warning message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ /// Property value 2
+ void Warn(string messageTemplate, T0 propertyValue0, T1 propertyValue1);
+ ///
+ /// Logs a warning message.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ void Warn(string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2);
+ ///
+ /// Logs a warning message with an exception.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ /// Property value 2
+ void Warn(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2);
+ ///
+ /// Logs a warning message with an exception.
+ ///
+ /// The reporting type.
+ /// A message template.
+ /// Property value 0
+ /// Property value 1
+ void Warn(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1);
+ }
+}
diff --git a/src/Umbraco.Core/Logging/LogProfiler.cs b/src/Umbraco.Core/Logging/LogProfiler.cs
index 74dae545b4..c0f8d1b525 100644
--- a/src/Umbraco.Core/Logging/LogProfiler.cs
+++ b/src/Umbraco.Core/Logging/LogProfiler.cs
@@ -24,8 +24,8 @@ namespace Umbraco.Core.Logging
///
public IDisposable Step(string name)
{
- _logger.Debug("Begin: {ProfileName}", name);
- return new LightDisposableTimer(duration => _logger.Info("End {ProfileName} ({ProfileDuration}ms)", name, duration));
+ _logger.Debug("Begin: {ProfileName}", name);
+ return new LightDisposableTimer(duration => _logger.Info("End {ProfileName} ({ProfileDuration}ms)", name, duration));
}
///
diff --git a/src/Umbraco.Core/Logging/Logger2Extensions.cs b/src/Umbraco.Core/Logging/Logger2Extensions.cs
new file mode 100644
index 0000000000..c6c1352055
--- /dev/null
+++ b/src/Umbraco.Core/Logging/Logger2Extensions.cs
@@ -0,0 +1,442 @@
+using System;
+
+namespace Umbraco.Core.Logging
+{
+ public static class Logger2Extensions
+ {
+ public static void Debug(this ILogger logger, Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Debug(reporting, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ else
+ {
+ logger.Debug(reporting, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ }
+
+ public static void Debug(this ILogger logger, Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Debug(reporting, messageTemplate, propertyValue0, propertyValue1);
+ }
+ else
+ {
+ logger.Debug(reporting, messageTemplate, propertyValue0, propertyValue1);
+ }
+ }
+
+ public static void Debug(this ILogger logger, Type reporting, string messageTemplate, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Debug(reporting, messageTemplate, propertyValue0);
+ }
+ else
+ {
+ logger.Debug(reporting, messageTemplate, propertyValue0);
+ }
+ }
+
+ public static void Error(this ILogger logger, Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Error(reporting, exception, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ else
+ {
+ logger.Error(reporting, exception, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ }
+
+ public static void Error(this ILogger logger, Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Error(reporting, exception, messageTemplate, propertyValue0, propertyValue1);
+ }
+ else
+ {
+ logger.Error(reporting, exception, messageTemplate, propertyValue0, propertyValue1);
+ }
+ }
+
+ public static void Error(this ILogger logger, Type reporting, Exception exception, string messageTemplate, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Error(reporting, exception, messageTemplate, propertyValue0);
+ }
+ else
+ {
+ logger.Error(reporting, exception, messageTemplate, propertyValue0);
+ }
+ }
+
+ public static void Fatal(this ILogger logger, Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Fatal(reporting, exception, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ else
+ {
+ logger.Fatal(reporting, exception, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ }
+
+ public static void Fatal(this ILogger logger, Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Fatal(reporting, exception, messageTemplate, propertyValue0, propertyValue1);
+ }
+ else
+ {
+ logger.Fatal(reporting, exception, messageTemplate, propertyValue0, propertyValue1);
+ }
+ }
+
+ public static void Fatal(this ILogger logger, Type reporting, Exception exception, string messageTemplate, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Fatal(reporting, exception, messageTemplate, propertyValue0);
+ }
+ else
+ {
+ logger.Fatal(reporting, exception, messageTemplate, propertyValue0);
+ }
+ }
+
+ public static void Info(this ILogger logger, Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Info(reporting, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ else
+ {
+ logger.Info(reporting, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ }
+
+ public static void Info(this ILogger logger, Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Info(reporting, messageTemplate, propertyValue0, propertyValue1);
+ }
+ else
+ {
+ logger.Info(reporting, messageTemplate, propertyValue0, propertyValue1);
+ }
+ }
+
+ public static void Info(this ILogger logger, Type reporting, string messageTemplate, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Info(reporting, messageTemplate, propertyValue0);
+ }
+ else
+ {
+ logger.Info(reporting, messageTemplate, propertyValue0);
+ }
+ }
+
+ public static void Verbose(this ILogger logger, Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Verbose(reporting, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ else
+ {
+ logger.Verbose(reporting, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ }
+
+ public static void Verbose(this ILogger logger, Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Verbose(reporting, messageTemplate, propertyValue0, propertyValue1);
+ }
+ else
+ {
+ logger.Verbose(reporting, messageTemplate, propertyValue0, propertyValue1);
+ }
+ }
+
+ public static void Verbose(this ILogger logger, Type reporting, string messageTemplate, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Verbose(reporting, messageTemplate, propertyValue0);
+ }
+ else
+ {
+ logger.Verbose(reporting, messageTemplate, propertyValue0);
+ }
+ }
+
+ public static void Warn(this ILogger logger, Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Warn(reporting, messageTemplate, exception, propertyValue0, propertyValue1, propertyValue2);
+ }
+ else
+ {
+ logger.Warn(reporting, messageTemplate, exception, propertyValue0, propertyValue1, propertyValue2);
+ }
+ }
+
+ public static void Warn(this ILogger logger, Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Warn(reporting, messageTemplate, exception, propertyValue0, propertyValue1);
+ }
+ else
+ {
+ logger.Warn(reporting, messageTemplate, exception, propertyValue0, propertyValue1);
+ }
+ }
+
+ public static void Warn(this ILogger logger, Type reporting, Exception exception, string messageTemplate, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Warn(reporting, messageTemplate, exception, propertyValue0);
+ }
+ else
+ {
+ logger.Warn(reporting, messageTemplate, exception, propertyValue0);
+ }
+ }
+
+ public static void Warn(this ILogger logger, Type reporting, string message, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Warn(reporting, message, propertyValue0);
+ }
+ else
+ {
+ logger.Warn(reporting, message, propertyValue0);
+ }
+ }
+
+ //
+ public static void Error(this ILogger logger, Exception exception, string messageTemplate, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Error(typeof(T), exception, messageTemplate, propertyValue0);
+ }
+ else
+ {
+ logger.Error(typeof(T), exception, messageTemplate, propertyValue0);
+ }
+ }
+
+ public static void Error(this ILogger logger, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Error(typeof(T), exception, messageTemplate, propertyValue0, propertyValue1);
+ }
+ else
+ {
+ logger.Error(typeof(T), exception, messageTemplate, propertyValue0, propertyValue1);
+ }
+ }
+
+ public static void Error(this ILogger logger, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Error(typeof(T), exception, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ else
+ {
+ logger.Error(typeof(T), exception, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ }
+ public static void Error(this ILogger logger, string messageTemplate, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Error(typeof(T), messageTemplate, propertyValue0);
+ }
+ else
+ {
+ logger.Error(typeof(T), messageTemplate, propertyValue0);
+ }
+ }
+ public static void Error(this ILogger logger, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Error(typeof(T), messageTemplate, propertyValue0, propertyValue1);
+ }
+ else
+ {
+ logger.Error(typeof(T), messageTemplate, propertyValue0, propertyValue1);
+ }
+ }
+ public static void Error(this ILogger logger, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Error(typeof(T), messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ else
+ {
+ logger.Error(typeof(T), messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ }
+ public static void Warn(this ILogger logger, Exception exception, string messageTemplate, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Warn(typeof(T), exception, messageTemplate, propertyValue0);
+ }
+ else
+ {
+ logger.Warn(typeof(T), exception, messageTemplate, propertyValue0);
+ }
+ }
+
+ public static void Warn(this ILogger logger, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Warn(typeof(T), exception, messageTemplate, propertyValue0, propertyValue1);
+ }
+ else
+ {
+ logger.Warn(typeof(T), exception, messageTemplate, propertyValue0, propertyValue1);
+ }
+ }
+
+ public static void Warn(this ILogger logger, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Warn(typeof(T), exception, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ else
+ {
+ logger.Warn(typeof(T), exception, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ }
+
+ public static void Warn(this ILogger logger, string messageTemplate, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Warn(typeof(T), messageTemplate, propertyValue0);
+ }
+ else
+ {
+ logger.Warn(typeof(T), messageTemplate, propertyValue0);
+ }
+ }
+ public static void Warn(this ILogger logger, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Warn(typeof(T), messageTemplate, propertyValue0, propertyValue1);
+ }
+ else
+ {
+ logger.Warn(typeof(T), messageTemplate, propertyValue0, propertyValue1);
+ }
+ }
+ public static void Warn(this ILogger logger, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Warn(typeof(T), messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ else
+ {
+ logger.Warn(typeof(T), messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ }
+
+
+ public static void Info(this ILogger logger, string messageTemplate, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Info(typeof(T), messageTemplate, propertyValue0);
+ }
+ else
+ {
+ logger.Info(typeof(T), messageTemplate, propertyValue0);
+ }
+ }
+ public static void Info(this ILogger logger, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Info(typeof(T), messageTemplate, propertyValue0, propertyValue1);
+ }
+ else
+ {
+ logger.Info(typeof(T), messageTemplate, propertyValue0, propertyValue1);
+ }
+ }
+ public static void Info(this ILogger logger, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Info(typeof(T), messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ else
+ {
+ logger.Info(typeof(T), messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ }
+ public static void Debug(this ILogger logger, string messageTemplate, T0 propertyValue0)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Debug(typeof(T), messageTemplate, propertyValue0);
+ }
+ else
+ {
+ logger.Debug(typeof(T), messageTemplate, propertyValue0);
+ }
+ }
+ public static void Debug(this ILogger logger, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Debug(typeof(T), messageTemplate, propertyValue0, propertyValue1);
+ }
+ else
+ {
+ logger.Debug(typeof(T), messageTemplate, propertyValue0, propertyValue1);
+ }
+ }
+ public static void Debug(this ILogger logger, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ {
+ if (logger is ILogger2 logger2)
+ {
+ logger2.Debug(typeof(T), messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ else
+ {
+ logger.Debug(typeof(T), messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+ }
+ }
+ }
+}
diff --git a/src/Umbraco.Core/Logging/OwinLogger.cs b/src/Umbraco.Core/Logging/OwinLogger.cs
index 5601cb53f2..7fc36e748c 100644
--- a/src/Umbraco.Core/Logging/OwinLogger.cs
+++ b/src/Umbraco.Core/Logging/OwinLogger.cs
@@ -26,34 +26,34 @@ namespace Umbraco.Core.Logging
switch (eventType)
{
case TraceEventType.Critical:
- _logger.Fatal(_type.Value, exception, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
+ _logger.Fatal(_type.Value, exception, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
return true;
case TraceEventType.Error:
- _logger.Error(_type.Value, exception, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
+ _logger.Error(_type.Value, exception, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
return true;
case TraceEventType.Warning:
_logger.Warn(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
return true;
case TraceEventType.Information:
- _logger.Info(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
+ _logger.Info(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
return true;
case TraceEventType.Verbose:
- _logger.Debug(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
+ _logger.Debug(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
return true;
case TraceEventType.Start:
- _logger.Debug(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
+ _logger.Debug(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
return true;
case TraceEventType.Stop:
- _logger.Debug(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
+ _logger.Debug(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
return true;
case TraceEventType.Suspend:
- _logger.Debug(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
+ _logger.Debug(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
return true;
case TraceEventType.Resume:
- _logger.Debug(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
+ _logger.Debug(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
return true;
case TraceEventType.Transfer:
- _logger.Debug(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
+ _logger.Debug(_type.Value, "[{EventType}] Event Id: {EventId}, State: {State}", eventType, eventId, state);
return true;
default:
throw new ArgumentOutOfRangeException("eventType");
diff --git a/src/Umbraco.Core/Logging/ProfilingLogger.cs b/src/Umbraco.Core/Logging/ProfilingLogger.cs
index d642926147..e49aaa26c6 100644
--- a/src/Umbraco.Core/Logging/ProfilingLogger.cs
+++ b/src/Umbraco.Core/Logging/ProfilingLogger.cs
@@ -127,6 +127,64 @@ namespace Umbraco.Core.Logging
public void Verbose(Type reporting, string messageTemplate, params object[] propertyValues)
=> Logger.Verbose(reporting, messageTemplate, propertyValues);
+ public void Fatal(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0,
+ T1 propertyValue1, T2 propertyValue2)
+ => Logger.Fatal(reporting, exception, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+
+ public void Fatal(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ => Logger.Fatal(reporting, exception, messageTemplate, propertyValue0, propertyValue1);
+
+ public void Fatal(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0)
+ => Logger.Fatal(reporting, exception, messageTemplate, propertyValue0);
+
+ public void Error(Type reporting, Exception exception, string messageTemplate,
+ T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ => Logger.Error(reporting, exception, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+
+ public void Error(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ => Logger.Error(reporting, exception, messageTemplate, propertyValue0, propertyValue1);
+
+ public void Error(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0)
+ => Logger.Error(reporting, exception, messageTemplate, propertyValue0);
+
+ public void Warn(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ => Logger.Warn(reporting, exception, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+
+ public void Warn(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ => Logger.Warn(reporting, exception, messageTemplate, propertyValue0, propertyValue1);
+
+ public void Warn(Type reporting, Exception exception, string messageTemplate, T0 propertyValue0)
+ => Logger.Warn(reporting, exception, messageTemplate, propertyValue0);
+
+ public void Warn(Type reporting, string message, T0 propertyValue0) => Logger.Warn(reporting, message, propertyValue0);
+
+ public void Info(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ => Logger.Info(reporting, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+
+ public void Info(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ => Logger.Info(reporting, messageTemplate, propertyValue0, propertyValue1);
+
+ public void Info(Type reporting, string messageTemplate, T0 propertyValue0)
+ => Logger.Info(reporting, messageTemplate, propertyValue0);
+
+ public void Debug(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ => Logger.Debug(reporting, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+
+ public void Debug(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ => Logger.Debug(reporting, messageTemplate, propertyValue0, propertyValue1);
+
+ public void Debug(Type reporting, string messageTemplate, T0 propertyValue0)
+ => Logger.Debug(reporting, messageTemplate, propertyValue0);
+
+ public void Verbose(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1, T2 propertyValue2)
+ => Logger.Verbose(reporting, messageTemplate, propertyValue0, propertyValue1, propertyValue2);
+
+ public void Verbose(Type reporting, string messageTemplate, T0 propertyValue0, T1 propertyValue1)
+ => Logger.Verbose(reporting, messageTemplate, propertyValue0, propertyValue1);
+
+ public void Verbose(Type reporting, string messageTemplate, T0 propertyValue0)
+ => Logger.Verbose(reporting, messageTemplate, propertyValue0);
+
#endregion
}
}
diff --git a/src/Umbraco.Core/Logging/Serilog/SerilogLogger.cs b/src/Umbraco.Core/Logging/Serilog/SerilogLogger.cs
index a51628030e..0f6121c1ee 100644
--- a/src/Umbraco.Core/Logging/Serilog/SerilogLogger.cs
+++ b/src/Umbraco.Core/Logging/Serilog/SerilogLogger.cs
@@ -118,6 +118,30 @@ namespace Umbraco.Core.Logging.Serilog
logger.Fatal(exception, messageTemplate, propertyValues);
}
+ ///