Add the default date-with-time configuration if missing (#16902)

This commit is contained in:
Kenn Jacobsen
2024-08-12 14:25:27 +02:00
committed by Nikolaj Geisle
parent 506d3b3a9c
commit 79807999ee
2 changed files with 53 additions and 0 deletions

View File

@@ -88,5 +88,8 @@ public class UmbracoPlan : MigrationPlan
// To 14.1.0
To<V_14_1_0.MigrateRichTextConfiguration>("{FEF2DAF4-5408-4636-BB0E-B8798DF8F095}");
To<V_14_1_0.MigrateOldRichTextSeedConfiguration>("{A385C5DF-48DC-46B4-A742-D5BB846483BC}");
// To 14.2.0
To<V_14_2_0.AddMissingDateTimeConfiguration>("{20ED404C-6FF9-4F91-8AC9-2B298E0002EB}");
}
}

View File

@@ -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<ISqlContext> sql = Sql()
.Select<DataTypeDto>()
.From<DataTypeDto>()
.Where<DataTypeDto>(dto =>
dto.NodeId == Constants.DataTypes.DateTime
&& dto.EditorAlias.Equals(Constants.PropertyEditors.Aliases.DateTime));
DataTypeDto? dataTypeDto = Database.FirstOrDefault<DataTypeDto>(sql);
if (dataTypeDto is null)
{
return;
}
Dictionary<string, object> configurationData = dataTypeDto.Configuration.IsNullOrWhiteSpace()
? new Dictionary<string, object>()
: _configurationEditorJsonSerializer
.Deserialize<Dictionary<string, object?>>(dataTypeDto.Configuration)?
.Where(item => item.Value is not null)
.ToDictionary(item => item.Key, item => item.Value!)
?? new Dictionary<string, object>();
// 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);
}
}