diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs index 8502e4c529f6..d2bed38ce31f 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/UmbracoPlan.cs @@ -88,5 +88,8 @@ protected virtual void DefinePlan() // To 14.1.0 To("{FEF2DAF4-5408-4636-BB0E-B8798DF8F095}"); To("{A385C5DF-48DC-46B4-A742-D5BB846483BC}"); + + // To 14.2.0 + To("{20ED404C-6FF9-4F91-8AC9-2B298E0002EB}"); } } diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_2_0/AddMissingDateTimeConfiguration.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_2_0/AddMissingDateTimeConfiguration.cs new file mode 100644 index 000000000000..6691ed7e5b9a --- /dev/null +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_14_2_0/AddMissingDateTimeConfiguration.cs @@ -0,0 +1,50 @@ +using NPoco; +using Umbraco.Cms.Core; +using Umbraco.Cms.Core.Serialization; +using Umbraco.Cms.Infrastructure.Persistence; +using Umbraco.Cms.Infrastructure.Persistence.Dtos; +using Umbraco.Extensions; + +namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_14_2_0; + +public class AddMissingDateTimeConfiguration : MigrationBase +{ + private readonly IConfigurationEditorJsonSerializer _configurationEditorJsonSerializer; + + public AddMissingDateTimeConfiguration(IMigrationContext context, IConfigurationEditorJsonSerializer configurationEditorJsonSerializer) + : base(context) + => _configurationEditorJsonSerializer = configurationEditorJsonSerializer; + + protected override void Migrate() + { + Sql sql = Sql() + .Select() + .From() + .Where(dto => + dto.NodeId == Constants.DataTypes.DateTime + && dto.EditorAlias.Equals(Constants.PropertyEditors.Aliases.DateTime)); + + DataTypeDto? dataTypeDto = Database.FirstOrDefault(sql); + if (dataTypeDto is null) + { + return; + } + + Dictionary configurationData = dataTypeDto.Configuration.IsNullOrWhiteSpace() + ? new Dictionary() + : _configurationEditorJsonSerializer + .Deserialize>(dataTypeDto.Configuration)? + .Where(item => item.Value is not null) + .ToDictionary(item => item.Key, item => item.Value!) + ?? new Dictionary(); + + // only proceed with the migration if the data-type has no format assigned + if (configurationData.TryAdd("format", "YYYY-MM-DD HH:mm:ss") is false) + { + return; + } + + dataTypeDto.Configuration = _configurationEditorJsonSerializer.Serialize(configurationData); + Database.Update(dataTypeDto); + } +}