Merge remote-tracking branch 'origin/v12/dev' into v13/dev
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Configuration;
|
||||
using Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_10_7_0;
|
||||
|
||||
namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade;
|
||||
|
||||
@@ -68,12 +69,21 @@ public class UmbracoPlan : MigrationPlan
|
||||
// To 10.5.0 / 11.2.0
|
||||
To<V_10_5_0.AddPrimaryKeyConstrainToContentVersionCleanupDtos>("{83AF7945-DADE-4A02-9041-F3F6EBFAC319}");
|
||||
|
||||
// to 10.7.0
|
||||
To<MigrateTagsFromNVarcharToNText>("{EF93F398-1385-4F07-808A-D3C518984442}");
|
||||
|
||||
// To 11.3.0
|
||||
To<V_11_3_0.AddDomainSortOrder>("{BB3889ED-E2DE-49F2-8F71-5FD8616A2661}");
|
||||
|
||||
// To 11.4.0
|
||||
To<V_11_4_0.AlterKeyValueDataType>("{FFB6B9B0-F1A8-45E9-9CD7-25700577D1CA}");
|
||||
|
||||
// to 11.4.3
|
||||
// This is here twice since it was added in 10, so if you had already upgraded you wouldn't get it
|
||||
// But we still need the first once, since if you upgraded to 10.7.0 then the "From" state would be unknown otherwise.
|
||||
// This has it's own key, we essentially consider it a separate migration.
|
||||
To<MigrateTagsFromNVarcharToNText>("{2CA0C5BB-170B-45E5-8179-E73DA4B41A46}");
|
||||
|
||||
// To 12.0.0
|
||||
To<V_12_0_0.UseNvarcharInsteadOfNText>("{888A0D5D-51E4-4C7E-AA0A-01306523C7FB}");
|
||||
To<V_12_0_0.ResetCache>("{539F2F83-FBA7-4C48-81A3-75081A56BB9D}");
|
||||
@@ -81,5 +91,8 @@ public class UmbracoPlan : MigrationPlan
|
||||
// To 12.1.0
|
||||
To<V_12_1_0.TablesIndexesImprovement>("{1187192D-EDB5-4619-955D-91D48D738871}");
|
||||
To<V_12_1_0.AddOpenIddict>("{47DE85CE-1E16-42A0-8AF6-3EC3BCEF5471}");
|
||||
|
||||
// And once more for 12
|
||||
To<MigrateTagsFromNVarcharToNText>("{2D4C9FBD-08B3-472D-A76C-6ED467A0CD20}");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
using NPoco;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Infrastructure.Persistence;
|
||||
using Umbraco.Cms.Infrastructure.Persistence.Dtos;
|
||||
using Umbraco.Extensions;
|
||||
|
||||
namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_10_7_0;
|
||||
|
||||
public class MigrateTagsFromNVarcharToNText : MigrationBase
|
||||
{
|
||||
public MigrateTagsFromNVarcharToNText(IMigrationContext context)
|
||||
: base(context)
|
||||
{
|
||||
}
|
||||
|
||||
protected override void Migrate()
|
||||
{
|
||||
// Firstly change the storage type for the Umbraco.Tags property editor
|
||||
Sql<ISqlContext> updateDbTypeForTagsQuery = Database.SqlContext.Sql()
|
||||
.Update<DataTypeDto>(x => x.Set(dt => dt.DbType, ValueStorageType.Ntext.ToString()))
|
||||
.Where<DataTypeDto>(dt => dt.EditorAlias == Constants.PropertyEditors.Aliases.Tags);
|
||||
|
||||
Database.Execute(updateDbTypeForTagsQuery);
|
||||
|
||||
// Then migrate the data from "varcharValue" column to "textValue"
|
||||
Sql<ISqlContext> tagsDataTypeIdQuery = Database.SqlContext.Sql()
|
||||
.Select<DataTypeDto>(dt => dt.NodeId)
|
||||
.From<DataTypeDto>()
|
||||
.Where<DataTypeDto>(dt => dt.EditorAlias == Constants.PropertyEditors.Aliases.Tags);
|
||||
|
||||
Sql<ISqlContext> tagsPropertyTypeIdQuery = Database.SqlContext.Sql()
|
||||
.Select<PropertyTypeDto>(pt => pt.Id)
|
||||
.From<PropertyTypeDto>()
|
||||
.WhereIn<PropertyTypeDto>(pt => pt.DataTypeId, tagsDataTypeIdQuery);
|
||||
|
||||
Sql<ISqlContext> updatePropertyDataColumnsQuery = Database.SqlContext.Sql()
|
||||
.Update<PropertyDataDto>()
|
||||
.Append("SET textValue = varcharValue, varcharValue = null")
|
||||
.WhereIn<PropertyDataDto>(pd => pd.PropertyTypeId, tagsPropertyTypeIdQuery)
|
||||
.Where<PropertyDataDto>(pd => pd.TextValue == null)
|
||||
.Where<PropertyDataDto>(pd => pd.VarcharValue != null);
|
||||
|
||||
Database.Execute(updatePropertyDataColumnsQuery);
|
||||
}
|
||||
}
|
||||
@@ -25,7 +25,8 @@ namespace Umbraco.Cms.Core.PropertyEditors;
|
||||
"Tags",
|
||||
"tags",
|
||||
Icon = "icon-tags",
|
||||
ValueEditorIsReusable = true)]
|
||||
ValueEditorIsReusable = true,
|
||||
ValueType = ValueTypes.Text)]
|
||||
public class TagsPropertyEditor : DataEditor
|
||||
{
|
||||
private readonly IEditorConfigurationParser _editorConfigurationParser;
|
||||
|
||||
@@ -218,7 +218,7 @@ public class RuntimeState : IRuntimeState
|
||||
if (_globalSettings.Value.InstallMissingDatabase || _databaseProviderMetadata.CanForceCreateDatabase(_databaseFactory))
|
||||
{
|
||||
// ok to install on a configured but missing database
|
||||
Level = RuntimeLevel.Install;
|
||||
Level = RuntimeLevel.BootFailed;
|
||||
Reason = RuntimeLevelReason.InstallMissingDatabase;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Reflection;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using Umbraco.Cms.Core;
|
||||
@@ -25,8 +26,6 @@ namespace Umbraco.Cms.Web.BackOffice.Install;
|
||||
[Area(Constants.Web.Mvc.InstallArea)]
|
||||
public class InstallApiController : ControllerBase
|
||||
{
|
||||
private readonly IBackOfficeSignInManager _backOfficeSignInManager;
|
||||
private readonly IBackOfficeUserManager _backOfficeUserManager;
|
||||
private readonly DatabaseBuilder _databaseBuilder;
|
||||
private readonly InstallStatusTracker _installStatusTracker;
|
||||
private readonly InstallStepCollection _installSteps;
|
||||
@@ -34,6 +33,7 @@ public class InstallApiController : ControllerBase
|
||||
private readonly IProfilingLogger _proflog;
|
||||
private readonly IRuntime _runtime;
|
||||
|
||||
[Obsolete("Use the constructor without IBackOfficeUserManager & IBackOfficeSignInManager instead, scheduled for removal in v14")]
|
||||
public InstallApiController(
|
||||
DatabaseBuilder databaseBuilder,
|
||||
IProfilingLogger proflog,
|
||||
@@ -44,14 +44,25 @@ public class InstallApiController : ControllerBase
|
||||
IRuntime runtime,
|
||||
IBackOfficeUserManager backOfficeUserManager,
|
||||
IBackOfficeSignInManager backOfficeSignInManager)
|
||||
: this(databaseBuilder, proflog, logger, installHelper, installSteps, installStatusTracker, runtime)
|
||||
{
|
||||
}
|
||||
|
||||
[ActivatorUtilitiesConstructor]
|
||||
public InstallApiController(
|
||||
DatabaseBuilder databaseBuilder,
|
||||
IProfilingLogger proflog,
|
||||
ILogger<InstallApiController> logger,
|
||||
InstallHelper installHelper,
|
||||
InstallStepCollection installSteps,
|
||||
InstallStatusTracker installStatusTracker,
|
||||
IRuntime runtime)
|
||||
{
|
||||
_databaseBuilder = databaseBuilder ?? throw new ArgumentNullException(nameof(databaseBuilder));
|
||||
_proflog = proflog ?? throw new ArgumentNullException(nameof(proflog));
|
||||
_installSteps = installSteps;
|
||||
_installStatusTracker = installStatusTracker;
|
||||
_runtime = runtime;
|
||||
_backOfficeUserManager = backOfficeUserManager;
|
||||
_backOfficeSignInManager = backOfficeSignInManager;
|
||||
InstallHelper = installHelper;
|
||||
_logger = logger;
|
||||
}
|
||||
@@ -88,20 +99,8 @@ public class InstallApiController : ControllerBase
|
||||
[HttpPost]
|
||||
public async Task<ActionResult> CompleteInstall()
|
||||
{
|
||||
RuntimeLevel levelBeforeRestart = _runtime.State.Level;
|
||||
|
||||
await _runtime.RestartAsync();
|
||||
|
||||
if (levelBeforeRestart == RuntimeLevel.Install)
|
||||
{
|
||||
BackOfficeIdentityUser? identityUser =
|
||||
await _backOfficeUserManager.FindByIdAsync(Core.Constants.Security.SuperUserIdAsString);
|
||||
if (identityUser is not null)
|
||||
{
|
||||
_backOfficeSignInManager.SignInAsync(identityUser, false);
|
||||
}
|
||||
}
|
||||
|
||||
return NoContent();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user