diff --git a/Directory.Build.props b/Directory.Build.props index 951b29a775..78d22a3b4e 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -31,7 +31,7 @@ true false - 12.0.0-rc1 + 14.0.0 true true diff --git a/src/Umbraco.Cms.Persistence.EFCore.SqlServer/SqlServerMigrationProvider.cs b/src/Umbraco.Cms.Persistence.EFCore.SqlServer/SqlServerMigrationProvider.cs index bac08556a3..823a9e737f 100644 --- a/src/Umbraco.Cms.Persistence.EFCore.SqlServer/SqlServerMigrationProvider.cs +++ b/src/Umbraco.Cms.Persistence.EFCore.SqlServer/SqlServerMigrationProvider.cs @@ -1,4 +1,5 @@ using Microsoft.EntityFrameworkCore; +using Umbraco.Cms.Core; using Umbraco.Cms.Persistence.EFCore.Migrations; using Umbraco.Extensions; @@ -10,7 +11,7 @@ public class SqlServerMigrationProvider : IMigrationProvider public SqlServerMigrationProvider(IDbContextFactory dbContextFactory) => _dbContextFactory = dbContextFactory; - public string ProviderName => "Microsoft.Data.SqlClient"; + public string ProviderName => Constants.ProviderNames.SQLServer; public async Task MigrateAsync(EFCoreMigration migration) { diff --git a/src/Umbraco.Cms.Persistence.EFCore.SqlServer/SqlServerMigrationProviderSetup.cs b/src/Umbraco.Cms.Persistence.EFCore.SqlServer/SqlServerMigrationProviderSetup.cs index 6b161fc47f..2d561e9f5a 100644 --- a/src/Umbraco.Cms.Persistence.EFCore.SqlServer/SqlServerMigrationProviderSetup.cs +++ b/src/Umbraco.Cms.Persistence.EFCore.SqlServer/SqlServerMigrationProviderSetup.cs @@ -1,11 +1,12 @@ using Microsoft.EntityFrameworkCore; +using Umbraco.Cms.Core; using Umbraco.Cms.Persistence.EFCore.Migrations; namespace Umbraco.Cms.Persistence.EFCore.SqlServer; public class SqlServerMigrationProviderSetup : IMigrationProviderSetup { - public string ProviderName => "Microsoft.Data.SqlClient"; + public string ProviderName => Constants.ProviderNames.SQLServer; public void Setup(DbContextOptionsBuilder builder, string? connectionString) { diff --git a/src/Umbraco.Cms.Persistence.EFCore.SqlServer/Umbraco.Cms.Persistence.EFCore.SqlServer.csproj b/src/Umbraco.Cms.Persistence.EFCore.SqlServer/Umbraco.Cms.Persistence.EFCore.SqlServer.csproj index a75d681949..04e711f8d9 100644 --- a/src/Umbraco.Cms.Persistence.EFCore.SqlServer/Umbraco.Cms.Persistence.EFCore.SqlServer.csproj +++ b/src/Umbraco.Cms.Persistence.EFCore.SqlServer/Umbraco.Cms.Persistence.EFCore.SqlServer.csproj @@ -2,8 +2,6 @@ Umbraco CMS - Persistence - Entity Framework Core - SQL Server migrations Adds support for Entity Framework Core SQL Server migrations to Umbraco CMS. - - false diff --git a/src/Umbraco.Cms.Persistence.EFCore.Sqlite/SqliteMigrationProvider.cs b/src/Umbraco.Cms.Persistence.EFCore.Sqlite/SqliteMigrationProvider.cs index 05d4024bb3..468f52021f 100644 --- a/src/Umbraco.Cms.Persistence.EFCore.Sqlite/SqliteMigrationProvider.cs +++ b/src/Umbraco.Cms.Persistence.EFCore.Sqlite/SqliteMigrationProvider.cs @@ -1,4 +1,5 @@ using Microsoft.EntityFrameworkCore; +using Umbraco.Cms.Core; using Umbraco.Cms.Persistence.EFCore.Migrations; using Umbraco.Extensions; @@ -11,7 +12,7 @@ public class SqliteMigrationProvider : IMigrationProvider public SqliteMigrationProvider(IDbContextFactory dbContextFactory) => _dbContextFactory = dbContextFactory; - public string ProviderName => "Microsoft.Data.Sqlite"; + public string ProviderName => Constants.ProviderNames.SQLLite; public async Task MigrateAsync(EFCoreMigration migration) { diff --git a/src/Umbraco.Cms.Persistence.EFCore.Sqlite/SqliteMigrationProviderSetup.cs b/src/Umbraco.Cms.Persistence.EFCore.Sqlite/SqliteMigrationProviderSetup.cs index 4cba457768..3a1b97e76c 100644 --- a/src/Umbraco.Cms.Persistence.EFCore.Sqlite/SqliteMigrationProviderSetup.cs +++ b/src/Umbraco.Cms.Persistence.EFCore.Sqlite/SqliteMigrationProviderSetup.cs @@ -1,11 +1,12 @@ using Microsoft.EntityFrameworkCore; +using Umbraco.Cms.Core; using Umbraco.Cms.Persistence.EFCore.Migrations; namespace Umbraco.Cms.Persistence.EFCore.Sqlite; public class SqliteMigrationProviderSetup : IMigrationProviderSetup { - public string ProviderName => "Microsoft.Data.Sqlite"; + public string ProviderName => Constants.ProviderNames.SQLLite; public void Setup(DbContextOptionsBuilder builder, string? connectionString) { diff --git a/src/Umbraco.Cms.Persistence.EFCore.Sqlite/Umbraco.Cms.Persistence.EFCore.Sqlite.csproj b/src/Umbraco.Cms.Persistence.EFCore.Sqlite/Umbraco.Cms.Persistence.EFCore.Sqlite.csproj index d6559a35ea..5cb9949c04 100644 --- a/src/Umbraco.Cms.Persistence.EFCore.Sqlite/Umbraco.Cms.Persistence.EFCore.Sqlite.csproj +++ b/src/Umbraco.Cms.Persistence.EFCore.Sqlite/Umbraco.Cms.Persistence.EFCore.Sqlite.csproj @@ -2,8 +2,6 @@ Umbraco CMS - Persistence - Entity Framework Core - SQLite migrations Adds support for Entity Framework Core SQLite migrations to Umbraco CMS. - - false diff --git a/src/Umbraco.Cms.Persistence.EFCore/Composition/UmbracoEFCoreComposer.cs b/src/Umbraco.Cms.Persistence.EFCore/Composition/UmbracoEFCoreComposer.cs index 7795b97355..245bbe5534 100644 --- a/src/Umbraco.Cms.Persistence.EFCore/Composition/UmbracoEFCoreComposer.cs +++ b/src/Umbraco.Cms.Persistence.EFCore/Composition/UmbracoEFCoreComposer.cs @@ -19,7 +19,7 @@ public class UmbracoEFCoreComposer : IComposer builder.AddNotificationAsyncHandler(); builder.AddNotificationAsyncHandler(); - builder.Services.AddUmbracoEFCoreContext((options, connectionString, providerName) => + builder.Services.AddUmbracoDbContext((options) => { // Register the entity sets needed by OpenIddict. options.UseOpenIddict(); diff --git a/src/Umbraco.Cms.Persistence.EFCore/Extensions/UmbracoEFCoreServiceCollectionExtensions.cs b/src/Umbraco.Cms.Persistence.EFCore/Extensions/UmbracoEFCoreServiceCollectionExtensions.cs index ded5be40fd..d901088064 100644 --- a/src/Umbraco.Cms.Persistence.EFCore/Extensions/UmbracoEFCoreServiceCollectionExtensions.cs +++ b/src/Umbraco.Cms.Persistence.EFCore/Extensions/UmbracoEFCoreServiceCollectionExtensions.cs @@ -1,7 +1,9 @@ +using System; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; +using Serilog; using Umbraco.Cms.Core; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.DistributedLocking; @@ -16,6 +18,7 @@ public static class UmbracoEFCoreServiceCollectionExtensions { public delegate void DefaultEFCoreOptionsAction(DbContextOptionsBuilder options, string? providerName, string? connectionString); + [Obsolete("Use AddUmbracoDbContext(this IServiceCollection services, Action? optionsAction = null) instead.")] public static IServiceCollection AddUmbracoEFCoreContext(this IServiceCollection services, DefaultEFCoreOptionsAction? defaultEFCoreOptionsAction = null) where T : DbContext { @@ -24,7 +27,7 @@ public static class UmbracoEFCoreServiceCollectionExtensions sp => { SetupDbContext(defaultEFCoreOptionsAction, sp, optionsBuilder); - return new UmbracoPooledDbContextFactory(sp.GetRequiredService(),optionsBuilder.Options); + return new UmbracoPooledDbContextFactory(sp.GetRequiredService(), optionsBuilder.Options); }); services.AddPooledDbContextFactory((provider, builder) => SetupDbContext(defaultEFCoreOptionsAction, provider, builder)); services.AddTransient(services => services.GetRequiredService>().CreateDbContext()); @@ -38,6 +41,7 @@ public static class UmbracoEFCoreServiceCollectionExtensions return services; } + [Obsolete("Use AddUmbracoDbContext(this IServiceCollection services, Action? optionsAction = null) instead.")] public static IServiceCollection AddUmbracoEFCoreContext(this IServiceCollection services, string connectionString, string providerName, DefaultEFCoreOptionsAction? defaultEFCoreOptionsAction = null) where T : DbContext { @@ -52,8 +56,8 @@ public static class UmbracoEFCoreServiceCollectionExtensions services.TryAddSingleton>( sp => { - SetupDbContext(defaultEFCoreOptionsAction, sp, optionsBuilder); - return new UmbracoPooledDbContextFactory(sp.GetRequiredService(),optionsBuilder.Options); + defaultEFCoreOptionsAction?.Invoke(optionsBuilder, providerName, connectionString); + return new UmbracoPooledDbContextFactory(sp.GetRequiredService(), optionsBuilder.Options); }); services.AddPooledDbContextFactory(options => defaultEFCoreOptionsAction?.Invoke(options, providerName, connectionString)); services.AddTransient(services => services.GetRequiredService>().CreateDbContext()); @@ -67,12 +71,117 @@ public static class UmbracoEFCoreServiceCollectionExtensions return services; } + /// + /// Adds a EFCore DbContext with all the services needed to integrate with Umbraco scopes. + /// + /// + /// + /// + /// + public static IServiceCollection AddUmbracoDbContext(this IServiceCollection services, Action? optionsAction = null) + where T : DbContext + { + return AddUmbracoDbContext(services, (IServiceProvider _, DbContextOptionsBuilder options) => + { + optionsAction?.Invoke(options); + }); + } + + /// + /// Adds a EFCore DbContext with all the services needed to integrate with Umbraco scopes. + /// + /// + /// + /// + /// + public static IServiceCollection AddUmbracoDbContext(this IServiceCollection services, Action? optionsAction = null) + where T : DbContext + { + optionsAction ??= (sp, options) => { }; + + var optionsBuilder = new DbContextOptionsBuilder(); + + services.TryAddSingleton>(sp => + { + optionsAction.Invoke(sp, optionsBuilder); + return new UmbracoPooledDbContextFactory(sp.GetRequiredService(), optionsBuilder.Options); + }); + services.AddPooledDbContextFactory(optionsAction); + services.AddTransient(services => services.GetRequiredService>().CreateDbContext()); + + services.AddUnique, AmbientEFCoreScopeStack>(); + services.AddUnique, EFCoreScopeAccessor>(); + services.AddUnique, EFCoreScopeProvider>(); + services.AddSingleton>(); + services.AddSingleton>(); + + return services; + } + + /// + /// Sets the database provider. I.E UseSqlite or UseSqlServer based on the provider name. + /// + /// + /// + /// + /// + /// + /// Only supports the databases normally supported in Umbraco. + /// + public static void UseDatabaseProvider(this DbContextOptionsBuilder builder, string providerName, string connectionString) + { + switch (providerName) + { + case Constants.ProviderNames.SQLServer: + builder.UseSqlServer(connectionString); + break; + case Constants.ProviderNames.SQLLite: + builder.UseSqlite(connectionString); + break; + default: + throw new InvalidDataException($"The provider {providerName} is not supported. Manually add the add the UseXXX statement to the options. I.E UseNpgsql()"); + } + } + + /// + /// Sets the database provider to use based on the Umbraco connection string. + /// + /// + /// + public static void UseUmbracoDatabaseProvider(this DbContextOptionsBuilder builder, IServiceProvider serviceProvider) + { + ConnectionStrings connectionStrings = serviceProvider.GetRequiredService>().CurrentValue; + + // Replace data directory + string? dataDirectory = AppDomain.CurrentDomain.GetData(Constants.System.DataDirectoryName)?.ToString(); + if (string.IsNullOrEmpty(dataDirectory) is false) + { + connectionStrings.ConnectionString = connectionStrings.ConnectionString?.Replace(Constants.System.DataDirectoryPlaceholder, dataDirectory); + } + + if (string.IsNullOrEmpty(connectionStrings.ProviderName)) + { + Log.Warning("No database provider was set. ProviderName is null"); + return; + } + + if (string.IsNullOrEmpty(connectionStrings.ConnectionString)) + { + Log.Warning("No database provider was set. Connection string is null"); + return; + } + + builder.UseDatabaseProvider(connectionStrings.ProviderName, connectionStrings.ConnectionString); + } + + [Obsolete] private static void SetupDbContext(DefaultEFCoreOptionsAction? defaultEFCoreOptionsAction, IServiceProvider provider, DbContextOptionsBuilder builder) { ConnectionStrings connectionStrings = GetConnectionStringAndProviderName(provider); defaultEFCoreOptionsAction?.Invoke(builder, connectionStrings.ConnectionString, connectionStrings.ProviderName); } + [Obsolete] private static ConnectionStrings GetConnectionStringAndProviderName(IServiceProvider serviceProvider) { ConnectionStrings connectionStrings = serviceProvider.GetRequiredService>().CurrentValue; diff --git a/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs b/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs index 042cf2a52f..60e519de4c 100644 --- a/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs +++ b/src/Umbraco.Cms.Persistence.EFCore/UmbracoDbContext.cs @@ -3,7 +3,6 @@ using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using Umbraco.Cms.Core; using Umbraco.Cms.Core.Configuration.Models; using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Cms.Persistence.EFCore.Migrations; @@ -77,7 +76,7 @@ public class UmbracoDbContext : DbContext foreach (IMutableEntityType entity in modelBuilder.Model.GetEntityTypes()) { - entity.SetTableName(Constants.DatabaseSchema.TableNamePrefix + entity.GetTableName()); + entity.SetTableName(Core.Constants.DatabaseSchema.TableNamePrefix + entity.GetTableName()); } } } diff --git a/src/Umbraco.Cms.StaticAssets/wwwroot/App_Plugins/Umbraco.BlockGridEditor.DefaultCustomViews/umbBlockGridDemoRichTextBlock.html b/src/Umbraco.Cms.StaticAssets/wwwroot/App_Plugins/Umbraco.BlockGridEditor.DefaultCustomViews/umbBlockGridDemoRichTextBlock.html index b3362fcda9..adda418723 100644 --- a/src/Umbraco.Cms.StaticAssets/wwwroot/App_Plugins/Umbraco.BlockGridEditor.DefaultCustomViews/umbBlockGridDemoRichTextBlock.html +++ b/src/Umbraco.Cms.StaticAssets/wwwroot/App_Plugins/Umbraco.BlockGridEditor.DefaultCustomViews/umbBlockGridDemoRichTextBlock.html @@ -21,5 +21,5 @@ -
-
\ No newline at end of file +
+
diff --git a/src/Umbraco.Core/CompatibilitySuppressions.xml b/src/Umbraco.Core/CompatibilitySuppressions.xml deleted file mode 100644 index 18b3656b93..0000000000 --- a/src/Umbraco.Core/CompatibilitySuppressions.xml +++ /dev/null @@ -1,1607 +0,0 @@ - - - - - CP0001 - T:Umbraco.Cms.Core.IO.IManifestFileProviderFactory - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Manifest.CompositePackageManifest - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Manifest.IManifestFilter - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Manifest.IManifestParser - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Manifest.IPackageManifest - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Manifest.ManifestAssets - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Manifest.ManifestContentAppDefinition - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Manifest.ManifestContentAppFactory - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Manifest.ManifestDashboard - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Manifest.ManifestFilterCollection - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Manifest.ManifestFilterCollectionBuilder - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Manifest.ManifestSection - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.ContentEditing.IHaveUploadedFiles - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.ContentEditing.PostedFiles - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.Editors.ContentPropertyFile - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0001 - T:Umbraco.New.Cms.Core.Models.PagedModel`1 - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Configuration.Grid.GridConfig.#ctor(Umbraco.Cms.Core.Cache.AppCaches,Umbraco.Cms.Core.Manifest.IManifestParser,Umbraco.Cms.Core.Serialization.IJsonSerializer,Umbraco.Cms.Core.Hosting.IHostingEnvironment,Microsoft.Extensions.Logging.ILoggerFactory,Umbraco.Cms.Core.IO.IGridEditorsConfigFileProviderFactory) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Configuration.Grid.GridConfig.#ctor(Umbraco.Cms.Core.Cache.AppCaches,Umbraco.Cms.Core.Manifest.IManifestParser,Umbraco.Cms.Core.Serialization.IJsonSerializer,Umbraco.Cms.Core.Hosting.IHostingEnvironment,Microsoft.Extensions.Logging.ILoggerFactory) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_AllowPackageTelemetry - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_BundleOptions - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_ContentApps - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_Dashboards - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_GridEditors - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_PackageName - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_PackageView - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_ParameterEditors - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_PropertyEditors - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_Scripts - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_Sections - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_Source - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.get_Stylesheets - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_AllowPackageTelemetry(System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_BundleOptions(Umbraco.Cms.Core.Manifest.BundleOptions) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_ContentApps(Umbraco.Cms.Core.Manifest.ManifestContentAppDefinition[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_Dashboards(Umbraco.Cms.Core.Manifest.ManifestDashboard[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_GridEditors(Umbraco.Cms.Core.PropertyEditors.GridEditor[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_PackageName(System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_PackageView(System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_ParameterEditors(Umbraco.Cms.Core.PropertyEditors.IDataEditor[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_PropertyEditors(Umbraco.Cms.Core.PropertyEditors.IDataEditor[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_Scripts(System.String[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_Sections(Umbraco.Cms.Core.Manifest.ManifestSection[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_Source(System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Manifest.PackageManifest.set_Stylesheets(System.String[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.AuditItem.#ctor(System.Int32,Umbraco.Cms.Core.Models.AuditType,System.Int32,System.String,System.String,System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridItem.get_ForceLeft - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridItem.get_ForceRight - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridItem.set_ForceLeft(System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridItem.set_ForceRight(System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.ContentEditing.ContentBaseSave`1.get_UploadedFiles - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.ContentEditing.ContentItemSave.get_UploadedFiles - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.ContentEditing.ContentPropertyDisplay.get_ConfigNullable - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.ContentEditing.ContentPropertyDisplay.set_ConfigNullable(System.Collections.Generic.IDictionary{System.String,System.Object}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.ContentEditing.Language.get_FallbackLanguageId - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.ContentEditing.Language.set_FallbackLanguageId(System.Nullable{System.Int32}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.ContentTypeSort.#ctor(System.Lazy{System.Int32},System.Int32,System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.DataType.get_Configuration - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.DataType.set_Configuration(System.Object) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.DataType.SetLazyConfiguration(System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.DictionaryItem.get_GetLanguage - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.DictionaryItem.set_GetLanguage(System.Func{System.Int32,Umbraco.Cms.Core.Models.ILanguage}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.DictionaryTranslation.#ctor(System.Int32,System.String,System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.DictionaryTranslation.#ctor(System.Int32,System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.DictionaryTranslation.get_GetLanguage - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.DictionaryTranslation.get_Language - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.DictionaryTranslation.get_LanguageId - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.DictionaryTranslation.set_GetLanguage(System.Func{System.Int32,Umbraco.Cms.Core.Models.ILanguage}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.DictionaryTranslation.set_Language(Umbraco.Cms.Core.Models.ILanguage) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Editors.ContentPropertyData.get_Files - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Editors.ContentPropertyData.set_Files(Umbraco.Cms.Core.Models.Editors.ContentPropertyFile[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.IDataType.get_Configuration - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.IDataType.set_Configuration(System.Object) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.IDictionaryTranslation.get_Language - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.IDictionaryTranslation.get_LanguageId - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.IDictionaryTranslation.set_Language(Umbraco.Cms.Core.Models.ILanguage) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.ILanguage.get_FallbackLanguageId - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.ILanguage.set_FallbackLanguageId(System.Nullable{System.Int32}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Language.get_FallbackLanguageId - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Language.set_FallbackLanguageId(System.Nullable{System.Int32}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Mapping.UserMapDefinition.#ctor(Umbraco.Cms.Core.Services.ILocalizedTextService,Umbraco.Cms.Core.Services.IUserService,Umbraco.Cms.Core.Services.IEntityService,Umbraco.Cms.Core.Services.ISectionService,Umbraco.Cms.Core.Cache.AppCaches,Umbraco.Cms.Core.Actions.ActionCollection,Microsoft.Extensions.Options.IOptions{Umbraco.Cms.Core.Configuration.Models.GlobalSettings},Umbraco.Cms.Core.IO.MediaFileManager,Umbraco.Cms.Core.Strings.IShortStringHelper,Umbraco.Cms.Core.Media.IImageUrlGenerator) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Membership.ReadOnlyUserGroup.#ctor(System.Int32,System.String,System.String,System.Nullable{System.Int32},System.Nullable{System.Int32},System.String,System.Collections.Generic.IEnumerable{System.Int32},System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{System.String},System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Membership.ReadOnlyUserGroup.#ctor(System.Int32,System.String,System.String,System.Nullable{System.Int32},System.Nullable{System.Int32},System.String,System.Collections.Generic.IEnumerable{System.String},System.Collections.Generic.IEnumerable{System.String}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.PasswordChangedModel.get_ChangeError - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.PasswordChangedModel.set_ChangeError(System.ComponentModel.DataAnnotations.ValidationResult) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.PublishedContent.PublishedDataType.get_Configuration - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.RelationType.#ctor(System.String,System.String,System.Boolean,System.Nullable{System.Guid},System.Nullable{System.Guid},System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Notifications.ContentMovedToRecycleBinNotification.#ctor(System.Collections.Generic.IEnumerable{Umbraco.Cms.Core.Events.MoveEventInfo{Umbraco.Cms.Core.Models.IContent}},Umbraco.Cms.Core.Events.EventMessages) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Notifications.ContentMovedToRecycleBinNotification.#ctor(Umbraco.Cms.Core.Events.MoveEventInfo{Umbraco.Cms.Core.Models.IContent},Umbraco.Cms.Core.Events.EventMessages) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Notifications.ContentMovingToRecycleBinNotification.#ctor(System.Collections.Generic.IEnumerable{Umbraco.Cms.Core.Events.MoveEventInfo{Umbraco.Cms.Core.Models.IContent}},Umbraco.Cms.Core.Events.EventMessages) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Notifications.ContentMovingToRecycleBinNotification.#ctor(Umbraco.Cms.Core.Events.MoveEventInfo{Umbraco.Cms.Core.Models.IContent},Umbraco.Cms.Core.Events.EventMessages) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Notifications.MediaMovedToRecycleBinNotification.#ctor(System.Collections.Generic.IEnumerable{Umbraco.Cms.Core.Events.MoveEventInfo{Umbraco.Cms.Core.Models.IMedia}},Umbraco.Cms.Core.Events.EventMessages) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Notifications.MediaMovedToRecycleBinNotification.#ctor(Umbraco.Cms.Core.Events.MoveEventInfo{Umbraco.Cms.Core.Models.IMedia},Umbraco.Cms.Core.Events.EventMessages) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Notifications.MediaMovingToRecycleBinNotification.#ctor(System.Collections.Generic.IEnumerable{Umbraco.Cms.Core.Events.MoveEventInfo{Umbraco.Cms.Core.Models.IMedia}},Umbraco.Cms.Core.Events.EventMessages) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Notifications.MediaMovingToRecycleBinNotification.#ctor(Umbraco.Cms.Core.Events.MoveEventInfo{Umbraco.Cms.Core.Models.IMedia},Umbraco.Cms.Core.Events.EventMessages) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Notifications.MovedToRecycleBinNotification`1.#ctor(System.Collections.Generic.IEnumerable{Umbraco.Cms.Core.Events.MoveEventInfo{`0}},Umbraco.Cms.Core.Events.EventMessages) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Notifications.MovedToRecycleBinNotification`1.#ctor(Umbraco.Cms.Core.Events.MoveEventInfo{`0},Umbraco.Cms.Core.Events.EventMessages) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Notifications.MovingToRecycleBinNotification`1.#ctor(System.Collections.Generic.IEnumerable{Umbraco.Cms.Core.Events.MoveEventInfo{`0}},Umbraco.Cms.Core.Events.EventMessages) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Notifications.MovingToRecycleBinNotification`1.#ctor(Umbraco.Cms.Core.Events.MoveEventInfo{`0},Umbraco.Cms.Core.Events.EventMessages) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.ConfigurationEditor.FromConfigurationEditor(System.Collections.Generic.IDictionary{System.String,System.Object},System.Object) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.ConfigurationEditor.get_DefaultConfigurationObject - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.ConfigurationEditor.IsConfiguration(System.Object) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.ConfigurationEditor.ToConfigurationEditor(System.Object) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.ConfigurationEditor.ToDatabase(System.Object,Umbraco.Cms.Core.Serialization.IConfigurationEditorJsonSerializer) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.ConfigurationEditor.ToValueEditor(System.Object) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.ConfigurationEditor`1.FromConfigurationEditor(System.Collections.Generic.IDictionary{System.String,System.Object},`0) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.ConfigurationEditor`1.ToConfigurationEditor(`0) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.DataValueEditor.get_Configuration - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.DataValueEditor.set_Configuration(System.Object) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.FromConfigurationEditor(System.Collections.Generic.IDictionary{System.String,System.Object},System.Object) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.get_DefaultConfigurationObject - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.IsConfiguration(System.Object) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.ToConfigurationEditor(System.Object) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.ToConfigurationEditorNullable(System.Object) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.ToValueEditor(System.Object) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.MultipleTextStringConfiguration.get_Maximum - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.MultipleTextStringConfiguration.get_Minimum - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.MultipleTextStringConfiguration.set_Maximum(System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.MultipleTextStringConfiguration.set_Minimum(System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.ParameterEditorCollection.#ctor(Umbraco.Cms.Core.PropertyEditors.DataEditorCollection,Umbraco.Cms.Core.Manifest.IManifestParser) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.PropertyEditorCollection.#ctor(Umbraco.Cms.Core.PropertyEditors.DataEditorCollection,Umbraco.Cms.Core.Manifest.IManifestParser) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Services.Implement.AuditService.#ctor(Umbraco.Cms.Core.Scoping.ICoreScopeProvider,Microsoft.Extensions.Logging.ILoggerFactory,Umbraco.Cms.Core.Events.IEventMessagesFactory,Umbraco.Cms.Core.Persistence.Repositories.IAuditRepository,Umbraco.Cms.Core.Persistence.Repositories.IAuditEntryRepository) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Services.Implement.DataTypeService.#ctor(Umbraco.Cms.Core.PropertyEditors.IDataValueEditorFactory,Umbraco.Cms.Core.Scoping.ICoreScopeProvider,Microsoft.Extensions.Logging.ILoggerFactory,Umbraco.Cms.Core.Events.IEventMessagesFactory,Umbraco.Cms.Core.Persistence.Repositories.IDataTypeRepository,Umbraco.Cms.Core.Persistence.Repositories.IDataTypeContainerRepository,Umbraco.Cms.Core.Persistence.Repositories.IAuditRepository,Umbraco.Cms.Core.Persistence.Repositories.IEntityRepository,Umbraco.Cms.Core.Persistence.Repositories.IContentTypeRepository,Umbraco.Cms.Core.IO.IIOHelper,Umbraco.Cms.Core.Services.ILocalizedTextService,Umbraco.Cms.Core.Services.ILocalizationService,Umbraco.Cms.Core.Strings.IShortStringHelper,Umbraco.Cms.Core.Serialization.IJsonSerializer) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Extensions.DictionaryItemExtensions.GetDefaultValue(Umbraco.Cms.Core.Models.IDictionaryItem) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0002 - M:Umbraco.Extensions.DictionaryItemExtensions.GetTranslatedValue(Umbraco.Cms.Core.Models.IDictionaryItem,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0005 - M:Umbraco.Cms.Core.Models.PublishedContent.PublishedPropertyBase.GetDeliveryApiValue(System.Boolean,System.String,System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IDataTypeConfigurationConnector.FromArtifact(Umbraco.Cms.Core.Models.IDataType,System.String,Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IDataTypeConfigurationConnector.ToArtifact(Umbraco.Cms.Core.Models.IDataType,System.Collections.Generic.ICollection{Umbraco.Cms.Core.Deploy.ArtifactDependency},Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IServiceConnector.GetArtifact(System.Object,Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IServiceConnector.GetArtifact(Umbraco.Cms.Core.Udi,Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IValueConnector.FromArtifact(System.String,Umbraco.Cms.Core.Models.IPropertyType,System.Object,Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IValueConnector.ToArtifact(System.Object,Umbraco.Cms.Core.Models.IPropertyType,System.Collections.Generic.ICollection{Umbraco.Cms.Core.Deploy.ArtifactDependency},Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Models.IContentBase.RemoveValue(System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Models.PublishedContent.IPublishedProperty.GetDeliveryApiValue(System.Boolean,System.String,System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Models.PublishedContent.IPublishedPropertyType.ConvertInterToDeliveryApiObject(Umbraco.Cms.Core.Models.PublishedContent.IPublishedElement,Umbraco.Cms.Core.PropertyEditors.PropertyCacheLevel,System.Object,System.Boolean,System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Models.PublishedContent.IPublishedPropertyType.ConvertInterToDeliveryApiObject(Umbraco.Cms.Core.Models.PublishedContent.IPublishedElement,Umbraco.Cms.Core.PropertyEditors.PropertyCacheLevel,System.Object,System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Packaging.IPackageDefinitionRepository.GetByKey(System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Persistence.Repositories.IDataTypeContainerRepository.HasDuplicateName(System.Guid,System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Persistence.Repositories.IDataTypeContainerRepository.HasDuplicateName(System.Int32,System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Persistence.Repositories.IDataTypeRepository.Get(System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Persistence.Repositories.IDataTypeUsageRepository.HasSavedValuesAsync(System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Persistence.Repositories.IFileWithFoldersRepository.FolderExists(System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Persistence.Repositories.IFileWithFoldersRepository.FolderHasContent(System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Persistence.Repositories.IPropertyTypeUsageRepository.ContentTypeExistAsync(System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Persistence.Repositories.IPropertyTypeUsageRepository.HasSavedPropertyValuesAsync(System.Guid,System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Persistence.Repositories.ITrackedReferencesRepository.GetPagedDescendantsInReferences(System.Guid,System.Int64,System.Int64,System.Boolean,System.Int64@) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Persistence.Repositories.ITrackedReferencesRepository.GetPagedItemsWithRelations(System.Collections.Generic.ISet{System.Guid},System.Int64,System.Int64,System.Boolean,System.Int64@) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.FromConfigurationEditor(System.Collections.Generic.IDictionary{System.String,System.Object}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.FromConfigurationObject(System.Object,Umbraco.Cms.Core.Serialization.IConfigurationEditorJsonSerializer) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.ToConfigurationEditor(System.Collections.Generic.IDictionary{System.String,System.Object}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.ToConfigurationObject(System.Collections.Generic.IDictionary{System.String,System.Object},Umbraco.Cms.Core.Serialization.IConfigurationEditorJsonSerializer) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.ToDatabase(System.Collections.Generic.IDictionary{System.String,System.Object},Umbraco.Cms.Core.Serialization.IConfigurationEditorJsonSerializer) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.ToValueEditor(System.Collections.Generic.IDictionary{System.String,System.Object}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.PropertyEditors.IConfigurationEditor.Validate(System.Collections.Generic.IDictionary{System.String,System.Object}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.CopyAsync(Umbraco.Cms.Core.Models.IDataType,System.Nullable{System.Guid},System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.CopyAsync(Umbraco.Cms.Core.Models.IDataType,System.Nullable{System.Guid},System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.CreateAsync(Umbraco.Cms.Core.Models.IDataType,System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.CreateAsync(Umbraco.Cms.Core.Models.IDataType,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.DeleteAsync(System.Guid,System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.DeleteAsync(System.Guid,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.GetAsync(System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.GetAsync(System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.GetByEditorAliasAsync(System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.GetReferencesAsync(System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.MoveAsync(Umbraco.Cms.Core.Models.IDataType,System.Nullable{System.Guid},System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.MoveAsync(Umbraco.Cms.Core.Models.IDataType,System.Nullable{System.Guid},System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.UpdateAsync(Umbraco.Cms.Core.Models.IDataType,System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.UpdateAsync(Umbraco.Cms.Core.Models.IDataType,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeService.ValidateConfigurationData(Umbraco.Cms.Core.Models.IDataType) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDataTypeUsageService.HasSavedValuesAsync(System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDomainService.GetAllAsync(System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDomainService.GetAssignedDomainsAsync(System.Guid,System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IDomainService.UpdateDomainsAsync(System.Guid,Umbraco.Cms.Core.Models.ContentEditing.DomainsUpdateModel) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.ILocalizationService.Create(System.String,System.Nullable{System.Guid},System.Collections.Generic.IEnumerable{Umbraco.Cms.Core.Models.IDictionaryTranslation},System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.ILocalizationService.Create(Umbraco.Cms.Core.Models.ILanguage,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.ILocalizationService.Delete(System.Guid,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.ILocalizationService.Delete(System.String,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.ILocalizationService.Update(Umbraco.Cms.Core.Models.IDictionaryItem,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.ILocalizationService.Update(Umbraco.Cms.Core.Models.ILanguage,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IMemberService.GetByKeysAsync(System.Guid[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IPackagingService.CreateCreatedPackageAsync(Umbraco.Cms.Core.Packaging.PackageDefinition,System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IPackagingService.CreateCreatedPackageAsync(Umbraco.Cms.Core.Packaging.PackageDefinition,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IPackagingService.DeleteCreatedPackageAsync(System.Guid,System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IPackagingService.DeleteCreatedPackageAsync(System.Guid,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IPackagingService.GetCreatedPackageByKey(System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IPackagingService.GetCreatedPackageByKeyAsync(System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IPackagingService.GetInstalledPackagesFromMigrationPlans - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IPackagingService.GetInstalledPackagesFromMigrationPlansAsync(System.Int32,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IPackagingService.UpdateCreatedPackageAsync(Umbraco.Cms.Core.Packaging.PackageDefinition,System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IPackagingService.UpdateCreatedPackageAsync(Umbraco.Cms.Core.Packaging.PackageDefinition,System.Int32) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IPropertyTypeUsageService.HasSavedPropertyValuesAsync(System.Guid,System.String) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IRelationService.CreateAsync(Umbraco.Cms.Core.Models.IRelationType,System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IRelationService.DeleteAsync(System.Guid,System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IRelationService.GetAllowedObjectTypes - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IRelationService.GetPagedByRelationTypeKey(System.Guid,System.Int32,System.Int32,Umbraco.Cms.Core.Services.Ordering) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IRelationService.UpdateAsync(Umbraco.Cms.Core.Models.IRelationType,System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.ITrackedReferencesService.GetPagedDescendantsInReferencesAsync(System.Guid,System.Int64,System.Int64,System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.ITrackedReferencesService.GetPagedItemsWithRelationsAsync(System.Collections.Generic.ISet{System.Guid},System.Int64,System.Int64,System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.ITrackedReferencesService.GetPagedRelationsForItemAsync(System.Guid,System.Int64,System.Int64,System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.ChangePasswordAsync(System.Guid,Umbraco.Cms.Core.Models.Membership.ChangeBackofficeUserPasswordModel) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.ChangePasswordAsync(System.Guid,Umbraco.Cms.Core.Models.Membership.ChangeUserPasswordModel) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.ClearAvatarAsync(System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.CreateAsync(System.Guid,Umbraco.Cms.Core.Models.UserCreateModel,System.Boolean) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.DeleteAsync(System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.DisableAsync(System.Guid,System.Collections.Generic.ISet{System.Guid}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.DisableAsync(System.Guid,System.Guid[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.EnableAsync(System.Guid,System.Collections.Generic.ISet{System.Guid}) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.EnableAsync(System.Guid,System.Guid[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.InviteAsync(System.Guid,Umbraco.Cms.Core.Models.UserInviteModel) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.SetAvatarAsync(System.Guid,System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.SetAvatarAsync(Umbraco.Cms.Core.Models.Membership.IUser,System.Guid) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.UnlockAsync(System.Guid,System.Guid[]) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Services.IUserService.UpdateAsync(System.Guid,Umbraco.Cms.Core.Models.UserUpdateModel) - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Telemetry.ITelemetryService.GetTelemetryReportDataAsync - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - P:Umbraco.Cms.Core.Models.IDataType.ConfigurationData - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - P:Umbraco.Cms.Core.Models.IDataType.ConfigurationObject - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - P:Umbraco.Cms.Core.Models.IDataType.EditorUiAlias - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - P:Umbraco.Cms.Core.Models.IDictionaryTranslation.LanguageIsoCode - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - P:Umbraco.Cms.Core.Models.ILanguage.FallbackIsoCode - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - P:Umbraco.Cms.Core.Models.Membership.IUserGroup.PermissionNames - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - P:Umbraco.Cms.Core.Models.PublishedContent.IPublishedPropertyType.DeliveryApiCacheLevel - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0006 - P:Umbraco.Cms.Core.Scoping.ICoreScope.Locks - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0007 - T:Umbraco.Cms.Core.Notifications.MovedToRecycleBinNotification`1 - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0007 - T:Umbraco.Cms.Core.Notifications.MovingToRecycleBinNotification`1 - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0008 - T:Umbraco.Cms.Core.Events.MoveEventInfo`1 - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0008 - T:Umbraco.Cms.Core.Models.ContentEditing.ContentBaseSave`1 - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0008 - T:Umbraco.Cms.Core.Models.ContentEditing.ContentItemSave - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0008 - T:Umbraco.Cms.Core.Models.ContentEditing.IContentSave`1 - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0008 - T:Umbraco.Cms.Core.Models.ContentEditing.MediaItemSave - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - - CP0008 - T:Umbraco.Cms.Core.Models.ContentEditing.MemberSave - lib/net7.0/Umbraco.Core.dll - lib/net7.0/Umbraco.Core.dll - true - - \ No newline at end of file diff --git a/src/Umbraco.Core/Constants-ProviderNames.cs b/src/Umbraco.Core/Constants-ProviderNames.cs new file mode 100644 index 0000000000..67f376612c --- /dev/null +++ b/src/Umbraco.Core/Constants-ProviderNames.cs @@ -0,0 +1,11 @@ +namespace Umbraco.Cms.Core; + +public static partial class Constants +{ + public static class ProviderNames + { + public const string SQLLite = "Microsoft.Data.Sqlite"; + + public const string SQLServer = "Microsoft.Data.SqlClient"; + } +} diff --git a/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs b/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs index 94039ef836..1b204f7b40 100644 --- a/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs +++ b/src/Umbraco.Core/DependencyInjection/UmbracoBuilder.Collections.cs @@ -36,9 +36,9 @@ public static partial class UmbracoBuilderExtensions /// internal static void AddAllCoreCollectionBuilders(this IUmbracoBuilder builder) { - builder.CacheRefreshers().Add(() => builder.TypeLoader.GetCacheRefreshers()); - builder.DataEditors().Add(() => builder.TypeLoader.GetDataEditors()); - builder.Actions().Add(() => builder .TypeLoader.GetActions()); + builder.CacheRefreshers().Add(builder.TypeLoader.GetCacheRefreshers); + builder.DataEditors().Add(builder.TypeLoader.GetDataEditors); + builder.Actions().Add(builder.TypeLoader.GetActions); // register known content apps builder.ContentApps() @@ -242,14 +242,14 @@ public static partial class UmbracoBuilderExtensions /// Gets the partial view snippets collection builder. /// /// The builder. - public static PartialViewSnippetCollectionBuilder? PartialViewSnippets(this IUmbracoBuilder builder) + public static PartialViewSnippetCollectionBuilder PartialViewSnippets(this IUmbracoBuilder builder) => builder.WithCollectionBuilder(); /// /// Gets the partial view macro snippets collection builder. /// /// The builder. - public static PartialViewMacroSnippetCollectionBuilder? PartialViewMacroSnippets(this IUmbracoBuilder builder) + public static PartialViewMacroSnippetCollectionBuilder PartialViewMacroSnippets(this IUmbracoBuilder builder) => builder.WithCollectionBuilder(); /// diff --git a/src/Umbraco.Core/Deploy/ArtifactDependency.cs b/src/Umbraco.Core/Deploy/ArtifactDependency.cs index 07ba917dc2..31c8025ddb 100644 --- a/src/Umbraco.Core/Deploy/ArtifactDependency.cs +++ b/src/Umbraco.Core/Deploy/ArtifactDependency.cs @@ -1,42 +1,64 @@ +using System.Text.Json.Serialization; + namespace Umbraco.Cms.Core.Deploy; /// -/// Represents an artifact dependency. +/// Represents an artifact dependency. /// /// -/// Dependencies have an order property which indicates whether it must be respected when ordering artifacts. -/// -/// Dependencies have a mode which can be Match or Exist depending on whether the checksum should -/// match. -/// +/// +/// Dependencies have an order property which indicates whether it must be respected when ordering artifacts. +/// +/// +/// Dependencies have a mode which can be or depending on whether the checksum should match. +/// /// public class ArtifactDependency { /// - /// Initializes a new instance of the ArtifactDependency class with an entity identifier and a mode. + /// Initializes a new instance of the class. /// - /// The entity identifier of the artifact that is a dependency. + /// The entity identifier of the artifact dependency. /// A value indicating whether the dependency is ordering. /// The dependency mode. - public ArtifactDependency(Udi udi, bool ordering, ArtifactDependencyMode mode) + /// The checksum. + public ArtifactDependency(Udi udi, bool ordering, ArtifactDependencyMode mode, string? checksum = null) { Udi = udi; Ordering = ordering; Mode = mode; + Checksum = checksum; } /// - /// Gets the entity id of the artifact that is a dependency. + /// Gets the entity identifier of the artifact dependency. /// + /// + /// The entity identifier of the artifact dependency. + /// public Udi Udi { get; } /// - /// Gets a value indicating whether the dependency is ordering. + /// Gets a value indicating whether the dependency is ordering. /// + /// + /// true if the dependency is ordering; otherwise, false. + /// public bool Ordering { get; } /// - /// Gets the dependency mode. + /// Gets the dependency mode. /// + /// + /// The dependency mode. + /// public ArtifactDependencyMode Mode { get; } + + /// + /// Gets the checksum. + /// + /// + /// The checksum. + /// + public string? Checksum { get; } } diff --git a/src/Umbraco.Core/Deploy/DataTypeConfigurationConnectorExtensions.cs b/src/Umbraco.Core/Deploy/DataTypeConfigurationConnectorExtensions.cs deleted file mode 100644 index dbd501d277..0000000000 --- a/src/Umbraco.Core/Deploy/DataTypeConfigurationConnectorExtensions.cs +++ /dev/null @@ -1,48 +0,0 @@ -using Umbraco.Cms.Core.Models; - -namespace Umbraco.Cms.Core.Deploy; - -/// -/// Extension methods adding backwards-compatability between and . -/// -/// -/// These extension methods will be removed in Umbraco 13. -/// -public static class DataTypeConfigurationConnectorExtensions -{ - /// - /// Gets the artifact configuration value corresponding to a data type configuration and gather dependencies. - /// - /// The connector. - /// The data type. - /// The dependencies. - /// The context cache. - /// - /// The artifact configuration value. - /// - /// - /// This extension method tries to make use of the on types also implementing . - /// - public static string? ToArtifact(this IDataTypeConfigurationConnector connector, IDataType dataType, ICollection dependencies, IContextCache contextCache) - => connector is IDataTypeConfigurationConnector2 connector2 - ? connector2.ToArtifact(dataType, dependencies, contextCache) - : connector.ToArtifact(dataType, dependencies); - - /// - /// Gets the data type configuration corresponding to an artifact configuration value. - /// - /// The connector. - /// The data type. - /// The artifact configuration value. - /// The context cache. - /// - /// The data type configuration. - /// - /// - /// This extension method tries to make use of the on types also implementing . - /// - public static object? FromArtifact(this IDataTypeConfigurationConnector connector, IDataType dataType, string? configuration, IContextCache contextCache) - => connector is IDataTypeConfigurationConnector2 connector2 - ? connector2.FromArtifact(dataType, configuration, contextCache) - : connector.FromArtifact(dataType, configuration); -} diff --git a/src/Umbraco.Core/Deploy/IDataTypeConfigurationConnector.cs b/src/Umbraco.Core/Deploy/IDataTypeConfigurationConnector.cs index 36302efd07..4cb0690d1f 100644 --- a/src/Umbraco.Core/Deploy/IDataTypeConfigurationConnector.cs +++ b/src/Umbraco.Core/Deploy/IDataTypeConfigurationConnector.cs @@ -24,20 +24,20 @@ public interface IDataTypeConfigurationConnector /// /// The data type. /// The dependencies. + /// The context cache. /// /// The artifact configuration value. /// - [Obsolete($"Implement {nameof(IDataTypeConfigurationConnector2)} and use the overload accepting {nameof(IContextCache)} instead. This overload will be removed in Umbraco 13.")] - string? ToArtifact(IDataType dataType, ICollection dependencies); + string? ToArtifact(IDataType dataType, ICollection dependencies, IContextCache contextCache); /// /// Gets the data type configuration corresponding to an artifact configuration value. /// /// The data type. /// The artifact configuration value. + /// The context cache. /// /// The data type configuration. /// - [Obsolete($"Implement {nameof(IDataTypeConfigurationConnector2)} and use the overload accepting {nameof(IContextCache)} instead. This overload will be removed in Umbraco 13.")] - object? FromArtifact(IDataType dataType, string? configuration); + object? FromArtifact(IDataType dataType, string? configuration, IContextCache contextCache); } diff --git a/src/Umbraco.Core/Deploy/IDataTypeConfigurationConnector2.cs b/src/Umbraco.Core/Deploy/IDataTypeConfigurationConnector2.cs deleted file mode 100644 index 772bc35dc4..0000000000 --- a/src/Umbraco.Core/Deploy/IDataTypeConfigurationConnector2.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Umbraco.Cms.Core.Models; - -namespace Umbraco.Cms.Core.Deploy; - -/// -/// -/// This interface will be merged back into and removed in Umbraco 13. -/// -public interface IDataTypeConfigurationConnector2 : IDataTypeConfigurationConnector -{ - /// - /// Gets the artifact configuration value corresponding to a data type configuration and gather dependencies. - /// - /// The data type. - /// The dependencies. - /// - /// The artifact configuration value. - /// - [Obsolete($"Use the overload accepting {nameof(IContextCache)} instead. This overload will be removed in Umbraco 13.")] - string? IDataTypeConfigurationConnector.ToArtifact(IDataType dataType, ICollection dependencies) - => ToArtifact(dataType, dependencies, PassThroughCache.Instance); - - /// - /// Gets the artifact configuration value corresponding to a data type configuration and gather dependencies. - /// - /// The data type. - /// The dependencies. - /// The context cache. - /// - /// The artifact configuration value. - /// - string? ToArtifact(IDataType dataType, ICollection dependencies, IContextCache contextCache); - - /// - /// Gets the data type configuration corresponding to an artifact configuration value. - /// - /// The data type. - /// The artifact configuration value. - /// - /// The data type configuration. - /// - [Obsolete($"Use the overload accepting {nameof(IContextCache)} instead. This overload will be removed in Umbraco 13.")] - object? IDataTypeConfigurationConnector.FromArtifact(IDataType dataType, string? configuration) - => FromArtifact(dataType, configuration, PassThroughCache.Instance); - - /// - /// Gets the data type configuration corresponding to an artifact configuration value. - /// - /// The data type. - /// The artifact configuration value. - /// The context cache. - /// - /// The data type configuration. - /// - object? FromArtifact(IDataType dataType, string? configuration, IContextCache contextCache); -} diff --git a/src/Umbraco.Core/Deploy/IServiceConnector.cs b/src/Umbraco.Core/Deploy/IServiceConnector.cs index adf4c57502..84617943c6 100644 --- a/src/Umbraco.Core/Deploy/IServiceConnector.cs +++ b/src/Umbraco.Core/Deploy/IServiceConnector.cs @@ -12,21 +12,21 @@ public interface IServiceConnector : IDiscoverable /// Gets an artifact. /// /// The entity identifier of the artifact. + /// The context cache. /// /// The corresponding artifact, or null. /// - [Obsolete($"Implement {nameof(IServiceConnector2)} and use the overload accepting {nameof(IContextCache)} instead. This overload will be removed in Umbraco 13.")] - IArtifact? GetArtifact(Udi udi); + IArtifact? GetArtifact(Udi udi, IContextCache contextCache); /// /// Gets an artifact. /// /// The entity. + /// The context cache. /// /// The corresponding artifact. /// - [Obsolete($"Implement {nameof(IServiceConnector2)} and use the overload accepting {nameof(IContextCache)} instead. This overload will be removed in Umbraco 13.")] - IArtifact GetArtifact(object entity); + IArtifact GetArtifact(object entity, IContextCache contextCache); /// /// Initializes processing for an artifact. @@ -47,10 +47,10 @@ public interface IServiceConnector : IDiscoverable void Process(ArtifactDeployState dart, IDeployContext context, int pass); /// - /// Explodes a range into udis. + /// Explodes a range into UDIs. /// /// The range. - /// The list of udis where to add the new udis. + /// The list of UDIs where to add the new UDIs. /// /// Also, it's cool to have a method named Explode. Kaboom! /// @@ -78,9 +78,9 @@ public interface IServiceConnector : IDiscoverable /// /// This is temporary. At least we thought it would be, in sept. 2016. What day is it now? /// - /// At the moment our UI has a hard time returning proper udis, mainly because Core's tree do - /// not manage guids but only ints... so we have to provide a way to support it. The string id here - /// can be either a real string (for string udis) or an "integer as a string", using the value "-1" to + /// At the moment our UI has a hard time returning proper UDIs, mainly because Core's tree do + /// not manage GUIDs but only integers... so we have to provide a way to support it. The string id here + /// can be either a real string (for string UDIs) or an "integer as a string", using the value "-1" to /// indicate the "root" i.e. an open udi. /// /// diff --git a/src/Umbraco.Core/Deploy/IServiceConnector2.cs b/src/Umbraco.Core/Deploy/IServiceConnector2.cs deleted file mode 100644 index 6c1558a956..0000000000 --- a/src/Umbraco.Core/Deploy/IServiceConnector2.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace Umbraco.Cms.Core.Deploy; - -/// -/// -/// This interface will be merged back into and removed in Umbraco 13. -/// -public interface IServiceConnector2 : IServiceConnector -{ - /// - [Obsolete($"Use the overload accepting {nameof(IContextCache)} instead. This overload will be removed in Umbraco 13.")] - IArtifact? IServiceConnector.GetArtifact(Udi udi) - => GetArtifact(udi, PassThroughCache.Instance); - - /// - /// Gets an artifact. - /// - /// The entity identifier of the artifact. - /// The context cache. - /// - /// The corresponding artifact, or null. - /// - IArtifact? GetArtifact(Udi udi, IContextCache contextCache); - - /// - [Obsolete($"Use the overload accepting {nameof(IContextCache)} instead. This overload will be removed in Umbraco 13.")] - IArtifact IServiceConnector.GetArtifact(object entity) - => GetArtifact(entity, PassThroughCache.Instance); - - /// - /// Gets an artifact. - /// - /// The entity. - /// The context cache. - /// - /// The corresponding artifact. - /// - IArtifact GetArtifact(object entity, IContextCache contextCache); -} diff --git a/src/Umbraco.Core/Deploy/IValueConnector.cs b/src/Umbraco.Core/Deploy/IValueConnector.cs index fe28e41017..5e5e2da1a4 100644 --- a/src/Umbraco.Core/Deploy/IValueConnector.cs +++ b/src/Umbraco.Core/Deploy/IValueConnector.cs @@ -26,11 +26,11 @@ public interface IValueConnector /// The content property value. /// The value property type /// The content dependencies. + /// The context cache. /// /// The deploy property value. /// - [Obsolete($"Implement {nameof(IValueConnector2)} and use the overload accepting {nameof(IContextCache)} instead. This overload will be removed in Umbraco 13.")] - string? ToArtifact(object? value, IPropertyType propertyType, ICollection dependencies); + string? ToArtifact(object? value, IPropertyType propertyType, ICollection dependencies, IContextCache contextCache); /// /// Gets the content property value corresponding to a deploy property value. @@ -38,9 +38,9 @@ public interface IValueConnector /// The deploy property value. /// The value property type /// The current content property value. + /// The context cache. /// /// The content property value. /// - [Obsolete($"Implement {nameof(IValueConnector2)} and use the overload accepting {nameof(IContextCache)} instead. This overload will be removed in Umbraco 13.")] - object? FromArtifact(string? value, IPropertyType propertyType, object? currentValue); + object? FromArtifact(string? value, IPropertyType propertyType, object? currentValue, IContextCache contextCache); } diff --git a/src/Umbraco.Core/Deploy/IValueConnector2.cs b/src/Umbraco.Core/Deploy/IValueConnector2.cs deleted file mode 100644 index a0c99dca06..0000000000 --- a/src/Umbraco.Core/Deploy/IValueConnector2.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Umbraco.Cms.Core.Models; - -namespace Umbraco.Cms.Core.Deploy; - -/// -/// -/// This interface will be merged back into and removed in Umbraco 13. -/// -public interface IValueConnector2 : IValueConnector -{ - /// - [Obsolete($"Use the overload accepting {nameof(IContextCache)} instead. This overload will be removed in Umbraco 13.")] - string? IValueConnector.ToArtifact(object? value, IPropertyType propertyType, ICollection dependencies) - => ToArtifact(value, propertyType, dependencies, PassThroughCache.Instance); - - /// - /// Gets the deploy property value corresponding to a content property value, and gather dependencies. - /// - /// The content property value. - /// The value property type - /// The content dependencies. - /// The context cache. - /// - /// The deploy property value. - /// - string? ToArtifact(object? value, IPropertyType propertyType, ICollection dependencies, IContextCache contextCache); - - /// - [Obsolete($"Use the overload accepting {nameof(IContextCache)} instead. This overload will be removed in Umbraco 13.")] - object? IValueConnector.FromArtifact(string? value, IPropertyType propertyType, object? currentValue) - => FromArtifact(value, propertyType, currentValue, PassThroughCache.Instance); - - /// - /// Gets the content property value corresponding to a deploy property value. - /// - /// The deploy property value. - /// The value property type - /// The current content property value. - /// The context cache. - /// - /// The content property value. - /// - object? FromArtifact(string? value, IPropertyType propertyType, object? currentValue, IContextCache contextCache); -} diff --git a/src/Umbraco.Core/Deploy/ServiceConnectorExtensions.cs b/src/Umbraco.Core/Deploy/ServiceConnectorExtensions.cs deleted file mode 100644 index 0d0000f97c..0000000000 --- a/src/Umbraco.Core/Deploy/ServiceConnectorExtensions.cs +++ /dev/null @@ -1,44 +0,0 @@ -namespace Umbraco.Cms.Core.Deploy; - -/// -/// Extension methods adding backwards-compatability between and . -/// -/// -/// These extension methods will be removed in Umbraco 13. -/// -public static class ServiceConnectorExtensions -{ - /// - /// Gets an artifact. - /// - /// The connector. - /// The entity identifier of the artifact. - /// The context cache. - /// - /// The corresponding artifact, or null. - /// - /// - /// This extension method tries to make use of the on types also implementing . - /// - public static IArtifact? GetArtifact(this IServiceConnector connector, Udi udi, IContextCache contextCache) - => connector is IServiceConnector2 connector2 - ? connector2.GetArtifact(udi, contextCache) - : connector.GetArtifact(udi); - - /// - /// Gets an artifact. - /// - /// The connector. - /// The entity. - /// The context cache. - /// - /// The corresponding artifact. - /// - /// - /// This extension method tries to make use of the on types also implementing . - /// - public static IArtifact GetArtifact(this IServiceConnector connector, object entity, IContextCache contextCache) - => connector is IServiceConnector2 connector2 - ? connector2.GetArtifact(entity, contextCache) - : connector.GetArtifact(entity); -} diff --git a/src/Umbraco.Core/Deploy/ValueConnectorExtensions.cs b/src/Umbraco.Core/Deploy/ValueConnectorExtensions.cs deleted file mode 100644 index eadcee55e0..0000000000 --- a/src/Umbraco.Core/Deploy/ValueConnectorExtensions.cs +++ /dev/null @@ -1,50 +0,0 @@ -using Umbraco.Cms.Core.Models; - -namespace Umbraco.Cms.Core.Deploy; - -/// -/// Extension methods adding backwards-compatability between and . -/// -/// -/// These extension methods will be removed in Umbraco 13. -/// -public static class ValueConnectorExtensions -{ - /// - /// Gets the artifact value corresponding to a property value and gather dependencies. - /// - /// The connector. - /// The property value. - /// The property type. - /// The dependencies. - /// The context cache. - /// - /// The artifact value. - /// - /// - /// This extension method tries to make use of the on types also implementing . - /// - public static string? ToArtifact(this IValueConnector connector, object? value, IPropertyType propertyType, ICollection dependencies, IContextCache contextCache) - => connector is IValueConnector2 connector2 - ? connector2.ToArtifact(value, propertyType, dependencies, contextCache) - : connector.ToArtifact(value, propertyType, dependencies); - - /// - /// Gets the property value corresponding to an artifact value. - /// - /// The connector. - /// The artifact value. - /// The property type. - /// The current property value. - /// The context cache. - /// - /// The property value. - /// - /// - /// This extension method tries to make use of the on types also implementing . - /// - public static object? FromArtifact(this IValueConnector connector, string? value, IPropertyType propertyType, object? currentValue, IContextCache contextCache) - => connector is IValueConnector2 connector2 - ? connector2.FromArtifact(value, propertyType, currentValue, contextCache) - : connector.FromArtifact(value, propertyType, currentValue); -} diff --git a/src/Umbraco.Core/PropertyEditors/DataValueReferenceFactoryCollection.cs b/src/Umbraco.Core/PropertyEditors/DataValueReferenceFactoryCollection.cs index 24d6f17eb0..c605d45a9a 100644 --- a/src/Umbraco.Core/PropertyEditors/DataValueReferenceFactoryCollection.cs +++ b/src/Umbraco.Core/PropertyEditors/DataValueReferenceFactoryCollection.cs @@ -8,60 +8,119 @@ public class DataValueReferenceFactoryCollection : BuilderCollectionBase> items) : base(items) - { - } + { } // TODO: We could further reduce circular dependencies with PropertyEditorCollection by not having IDataValueReference implemented // by property editors and instead just use the already built in IDataValueReferenceFactory and/or refactor that into a more normal collection - public IEnumerable GetAllReferences( - IPropertyCollection properties, - PropertyEditorCollection propertyEditors) + public ISet GetAllReferences(IPropertyCollection properties, PropertyEditorCollection propertyEditors) { - var trackedRelations = new HashSet(); + var references = new HashSet(); - foreach (IProperty p in properties) + foreach (IProperty property in properties) { - if (!propertyEditors.TryGet(p.PropertyType.PropertyEditorAlias, out IDataEditor? editor)) + if (!propertyEditors.TryGet(property.PropertyType.PropertyEditorAlias, out IDataEditor? dataEditor)) { continue; } // TODO: We will need to change this once we support tracking via variants/segments // for now, we are tracking values from ALL variants - foreach (IPropertyValue propertyVal in p.Values) + foreach (IPropertyValue propertyValue in property.Values) { - var val = propertyVal.EditedValue; + object? value = propertyValue.EditedValue; - IDataValueEditor? valueEditor = editor?.GetValueEditor(); - if (valueEditor is IDataValueReference reference) + if (dataEditor.GetValueEditor() is IDataValueReference dataValueReference) { - IEnumerable refs = reference.GetReferences(val); - foreach (UmbracoEntityReference r in refs) - { - trackedRelations.Add(r); - } + references.UnionWith(dataValueReference.GetReferences(value)); } // Loop over collection that may be add to existing property editors // implementation of GetReferences in IDataValueReference. // Allows developers to add support for references by a // package /property editor that did not implement IDataValueReference themselves - foreach (IDataValueReferenceFactory item in this) + foreach (IDataValueReferenceFactory dataValueReferenceFactory in this) { // Check if this value reference is for this datatype/editor // Then call it's GetReferences method - to see if the value stored - // in the dataeditor/property has referecnes to media/content items - if (item.IsForEditor(editor)) + // in the dataeditor/property has references to media/content items + if (dataValueReferenceFactory.IsForEditor(dataEditor)) { - foreach (UmbracoEntityReference r in item.GetDataValueReference().GetReferences(val)) - { - trackedRelations.Add(r); - } + references.UnionWith(dataValueReferenceFactory.GetDataValueReference().GetReferences(value)); } } } } - return trackedRelations; + return references; + } + + /// + /// Gets all relation type aliases that are automatically tracked. + /// + /// The property editors. + /// + /// All relation type aliases that are automatically tracked. + /// + public ISet GetAutomaticRelationTypesAliases(PropertyEditorCollection propertyEditors) + { + // Always add default automatic relation types + var automaticRelationTypeAliases = new HashSet(Constants.Conventions.RelationTypes.AutomaticRelationTypes); + + // Add relation types for all property editors + foreach (IDataEditor dataEditor in propertyEditors) + { + automaticRelationTypeAliases.UnionWith(GetAutomaticRelationTypesAliases(dataEditor)); + } + + return automaticRelationTypeAliases; + } + + /// + /// Gets the relation type aliases that are automatically tracked for all properties. + /// + /// The properties. + /// The property editors. + /// + /// The relation type aliases that are automatically tracked for all properties. + /// + public ISet GetAutomaticRelationTypesAliases(IPropertyCollection properties, PropertyEditorCollection propertyEditors) + { + // Always add default automatic relation types + var automaticRelationTypeAliases = new HashSet(Constants.Conventions.RelationTypes.AutomaticRelationTypes); + + // Only add relation types that are used in the properties + foreach (IProperty property in properties) + { + if (propertyEditors.TryGet(property.PropertyType.PropertyEditorAlias, out IDataEditor? dataEditor)) + { + automaticRelationTypeAliases.UnionWith(GetAutomaticRelationTypesAliases(dataEditor)); + } + } + + return automaticRelationTypeAliases; + } + + private IEnumerable GetAutomaticRelationTypesAliases(IDataEditor dataEditor) + { + if (dataEditor.GetValueEditor() is IDataValueReference dataValueReference) + { + // Return custom relation types from value editor implementation + foreach (var alias in dataValueReference.GetAutomaticRelationTypesAliases()) + { + yield return alias; + } + } + + foreach (IDataValueReferenceFactory dataValueReferenceFactory in this) + { + if (dataValueReferenceFactory.IsForEditor(dataEditor)) + { + // Return custom relation types from factory + foreach (var alias in dataValueReferenceFactory.GetDataValueReference().GetAutomaticRelationTypesAliases()) + { + yield return alias; + } + } + } } } diff --git a/src/Umbraco.Core/PublishedCache/IPublishedSnapshotService.cs b/src/Umbraco.Core/PublishedCache/IPublishedSnapshotService.cs index 5bd5ff23cc..8e661aa758 100644 --- a/src/Umbraco.Core/PublishedCache/IPublishedSnapshotService.cs +++ b/src/Umbraco.Core/PublishedCache/IPublishedSnapshotService.cs @@ -125,4 +125,8 @@ public interface IPublishedSnapshotService : IDisposable /// Cleans up unused snapshots /// Task CollectAsync(); + + void ResetLocalDb() + { + } } diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 8cdb0d2b82..4f4dd097b1 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -16,18 +16,9 @@ - - - - - - - - - <_Parameter1>Umbraco.Tests diff --git a/src/Umbraco.Core/Webhooks/IWebhookEvent.cs b/src/Umbraco.Core/Webhooks/IWebhookEvent.cs index 85857c1aec..954055d104 100644 --- a/src/Umbraco.Core/Webhooks/IWebhookEvent.cs +++ b/src/Umbraco.Core/Webhooks/IWebhookEvent.cs @@ -2,5 +2,5 @@ public interface IWebhookEvent { - string EventName { get; set; } + string EventName { get; } } diff --git a/src/Umbraco.Infrastructure/CompatibilitySuppressions.xml b/src/Umbraco.Infrastructure/CompatibilitySuppressions.xml deleted file mode 100644 index 85cec7c6fc..0000000000 --- a/src/Umbraco.Infrastructure/CompatibilitySuppressions.xml +++ /dev/null @@ -1,354 +0,0 @@ - - - - - CP0001 - T:Umbraco.Cms.Core.Logging.Viewer.LogLevelCounts - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Logging.Viewer.LogTemplate - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Logging.Viewer.LogTimePeriod - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Manifest.ManifestParser - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.Blocks.BlockEditorData - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.Blocks.BlockEditorDataConverter - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.Blocks.BlockGridEditorDataConverter - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.Blocks.BlockGridLayoutAreaItem - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.Blocks.BlockGridLayoutItem - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.Blocks.BlockItemData - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.Blocks.BlockListEditorDataConverter - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.Blocks.BlockListLayoutItem - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.Blocks.BlockValue - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.Models.Blocks.IBlockLayoutItem - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.PropertyEditors.ValueConverters.BlockPropertyValueConverterBase`4 - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Core.PropertyEditors.ValueConverters.ImageCropperValueTypeConverter - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Infrastructure.Migrations.PostMigrations.ClearCsrfCookies - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Infrastructure.Migrations.PostMigrations.DeleteLogViewerQueryFile - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0001 - T:Umbraco.Cms.Infrastructure.Migrations.PostMigrations.RebuildPublishedSnapshot - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Migrations.IMigrationPlanExecutor.Execute(Umbraco.Cms.Infrastructure.Migrations.MigrationPlan,System.String) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridLayoutItem.get_ForceLeft - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridLayoutItem.get_ForceRight - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridLayoutItem.set_ForceLeft(System.Boolean) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Models.Blocks.BlockGridLayoutItem.set_ForceRight(System.Boolean) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.ValueConverters.BlockGridPropertyValueConverter.#ctor(Umbraco.Cms.Core.Logging.IProfilingLogger,Umbraco.Cms.Core.PropertyEditors.ValueConverters.BlockEditorConverter,Umbraco.Cms.Core.Serialization.IJsonSerializer) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.PropertyEditors.ValueConverters.ImageCropperValue.Prune(Newtonsoft.Json.Linq.JObject) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Security.BackOfficeUserStore.#ctor(Umbraco.Cms.Core.Scoping.ICoreScopeProvider,Umbraco.Cms.Core.Services.IUserService,Umbraco.Cms.Core.Services.IEntityService,Umbraco.Cms.Core.Services.IExternalLoginWithKeyService,Microsoft.Extensions.Options.IOptions{Umbraco.Cms.Core.Configuration.Models.GlobalSettings},Umbraco.Cms.Core.Mapping.IUmbracoMapper,Umbraco.Cms.Core.Security.BackOfficeErrorDescriber,Umbraco.Cms.Core.Cache.AppCaches) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Security.BackOfficeUserStore.#ctor(Umbraco.Cms.Core.Scoping.ICoreScopeProvider,Umbraco.Cms.Core.Services.IUserService,Umbraco.Cms.Core.Services.IEntityService,Umbraco.Cms.Core.Services.IExternalLoginWithKeyService,Microsoft.Extensions.Options.IOptionsSnapshot{Umbraco.Cms.Core.Configuration.Models.GlobalSettings},Umbraco.Cms.Core.Mapping.IUmbracoMapper,Umbraco.Cms.Core.Security.BackOfficeErrorDescriber,Umbraco.Cms.Core.Cache.AppCaches,Umbraco.Cms.Core.Services.ITwoFactorLoginService) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Core.Services.Implement.PackagingService.#ctor(Umbraco.Cms.Core.Services.IAuditService,Umbraco.Cms.Core.Packaging.ICreatedPackagesRepository,Umbraco.Cms.Core.Packaging.IPackageInstallation,Umbraco.Cms.Core.Events.IEventAggregator,Umbraco.Cms.Core.Manifest.IManifestParser,Umbraco.Cms.Core.Services.IKeyValueService,Umbraco.Cms.Core.Packaging.PackageMigrationPlanCollection) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Infrastructure.Install.PackageMigrationRunner.#ctor(Umbraco.Cms.Core.Logging.IProfilingLogger,Umbraco.Cms.Core.Scoping.ICoreScopeProvider,Umbraco.Cms.Core.Packaging.PendingPackageMigrations,Umbraco.Cms.Core.Packaging.PackageMigrationPlanCollection,Umbraco.Cms.Core.Migrations.IMigrationPlanExecutor,Umbraco.Cms.Core.Services.IKeyValueService,Umbraco.Cms.Core.Events.IEventAggregator) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Infrastructure.Migrations.IMigrationContext.AddPostMigration``1 - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Infrastructure.Migrations.Install.DatabaseBuilder.#ctor(Umbraco.Cms.Core.Scoping.ICoreScopeProvider,Umbraco.Cms.Infrastructure.Scoping.IScopeAccessor,Umbraco.Cms.Infrastructure.Persistence.IUmbracoDatabaseFactory,Umbraco.Cms.Core.Services.IRuntimeState,Microsoft.Extensions.Logging.ILoggerFactory,Umbraco.Cms.Core.Services.IKeyValueService,Umbraco.Cms.Infrastructure.Persistence.IDbProviderFactoryCreator,Umbraco.Cms.Core.Configuration.IConfigManipulator,Microsoft.Extensions.Options.IOptionsMonitor{Umbraco.Cms.Core.Configuration.Models.GlobalSettings},Microsoft.Extensions.Options.IOptionsMonitor{Umbraco.Cms.Core.Configuration.Models.ConnectionStrings},Umbraco.Cms.Core.Migrations.IMigrationPlanExecutor,Umbraco.Cms.Infrastructure.Migrations.Install.DatabaseSchemaCreatorFactory,System.Collections.Generic.IEnumerable{Umbraco.Cms.Infrastructure.Persistence.IDatabaseProviderMetadata}) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Infrastructure.Migrations.MigrationPlan.AddPostMigration``1 - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Infrastructure.Migrations.MigrationPlan.get_PostMigrationTypes - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.#ctor(Umbraco.Cms.Core.Scoping.ICoreScopeProvider,Umbraco.Cms.Infrastructure.Scoping.IScopeAccessor,Microsoft.Extensions.Logging.ILoggerFactory,Umbraco.Cms.Infrastructure.Migrations.IMigrationBuilder) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Infrastructure.Migrations.MigrationPlanExecutor.Execute(Umbraco.Cms.Infrastructure.Migrations.MigrationPlan,System.String) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Infrastructure.Migrations.Upgrade.Upgrader.Execute(Umbraco.Cms.Core.Migrations.IMigrationPlanExecutor,Umbraco.Cms.Core.Scoping.IScopeProvider,Umbraco.Cms.Core.Services.IKeyValueService) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Infrastructure.WebAssets.BackOfficeWebAssets.#ctor(Umbraco.Cms.Core.WebAssets.IRuntimeMinifier,Umbraco.Cms.Core.Manifest.IManifestParser,Umbraco.Cms.Core.PropertyEditors.PropertyEditorCollection,Umbraco.Cms.Core.Hosting.IHostingEnvironment,Microsoft.Extensions.Options.IOptionsMonitor{Umbraco.Cms.Core.Configuration.Models.GlobalSettings},Umbraco.Cms.Core.WebAssets.CustomBackOfficeAssetsCollection) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0002 - M:Umbraco.Cms.Infrastructure.WebAssets.BackOfficeWebAssets.GetIndependentPackageBundleName(Umbraco.Cms.Core.Manifest.ManifestAssets,Umbraco.Cms.Core.WebAssets.AssetType) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0005 - M:Umbraco.Cms.Core.Security.UmbracoUserStore`2.ResolveEntityIdFromIdentityId(System.String) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IGridCellValueConnector.GetValue(Umbraco.Cms.Core.Models.GridValue.GridControl,System.Collections.Generic.ICollection{Umbraco.Cms.Core.Deploy.ArtifactDependency},Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Deploy.IGridCellValueConnector.SetValue(Umbraco.Cms.Core.Models.GridValue.GridControl,Umbraco.Cms.Core.Deploy.IContextCache) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Logging.Viewer.ILogViewer.GetLogsAsPagedModel(Umbraco.Cms.Core.Logging.Viewer.LogTimePeriod,System.Int32,System.Int32,Umbraco.Cms.Core.Direction,System.String,System.String[]) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0006 - M:Umbraco.Cms.Core.Migrations.IMigrationPlanExecutor.ExecutePlan(Umbraco.Cms.Infrastructure.Migrations.MigrationPlan,System.String) - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0007 - T:Umbraco.Cms.Core.Models.Blocks.BlockGridEditorDataConverter - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0007 - T:Umbraco.Cms.Core.Models.Blocks.BlockListEditorDataConverter - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0007 - T:Umbraco.Cms.Core.PropertyEditors.ValueConverters.BlockGridPropertyValueConverter - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0007 - T:Umbraco.Cms.Core.PropertyEditors.ValueConverters.BlockListPropertyValueConverter - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0006 - M:Umbraco.Cms.Infrastructure.Search.IUmbracoIndexingHandler.RemoveProtectedContent - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - - CP0006 - P:Umbraco.Cms.Infrastructure.Examine.IUmbracoIndex.SupportProtectedContent - lib/net7.0/Umbraco.Infrastructure.dll - lib/net7.0/Umbraco.Infrastructure.dll - true - - diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Collections.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Collections.cs index 609c5305dc..0dd42485a2 100644 --- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Collections.cs +++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.Collections.cs @@ -15,21 +15,21 @@ public static partial class UmbracoBuilderExtensions /// Gets the mappers collection builder. /// /// The builder. - public static MapperCollectionBuilder? Mappers(this IUmbracoBuilder builder) + public static MapperCollectionBuilder Mappers(this IUmbracoBuilder builder) => builder.WithCollectionBuilder(); /// /// Gets the NPoco mappers collection builder. /// /// The builder. - public static NPocoMapperCollectionBuilder? NPocoMappers(this IUmbracoBuilder builder) + public static NPocoMapperCollectionBuilder NPocoMappers(this IUmbracoBuilder builder) => builder.WithCollectionBuilder(); /// /// Gets the package migration plans collection builder. /// /// The builder. - public static PackageMigrationPlanCollectionBuilder? PackageMigrationPlans(this IUmbracoBuilder builder) + public static PackageMigrationPlanCollectionBuilder PackageMigrationPlans(this IUmbracoBuilder builder) => builder.WithCollectionBuilder(); /// diff --git a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs index 909dd7704a..73b657ff59 100644 --- a/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs +++ b/src/Umbraco.Infrastructure/DependencyInjection/UmbracoBuilder.CoreServices.cs @@ -82,8 +82,8 @@ public static partial class UmbracoBuilderExtensions builder.Services.AddSingleton(); builder.Services.AddSingleton(); builder.Services.AddSingleton(factory => factory.GetRequiredService().SqlContext); - builder.NPocoMappers()?.Add(); - builder.PackageMigrationPlans()?.Add(() => builder.TypeLoader.GetPackageMigrationPlans()); + builder.NPocoMappers().Add(); + builder.PackageMigrationPlans().Add(builder.TypeLoader.GetPackageMigrationPlans()); builder.Services.AddSingleton(); builder.Services.AddSingleton(); @@ -111,7 +111,7 @@ public static partial class UmbracoBuilderExtensions // register persistence mappers - required by database factory so needs to be done here // means the only place the collection can be modified is in a runtime - afterwards it // has been frozen and it is too late - builder.Mappers()?.AddCoreMappers(); + builder.Mappers().AddCoreMappers(); // register the scope provider builder.Services.AddSingleton(sp => ActivatorUtilities.CreateInstance(sp, sp.GetRequiredService())); // implements IScopeProvider, IScopeAccessor diff --git a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_12_0_0/ResetCache.cs b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_12_0_0/ResetCache.cs index b55b4c4ca7..0e41ad89ca 100644 --- a/src/Umbraco.Infrastructure/Migrations/Upgrade/V_12_0_0/ResetCache.cs +++ b/src/Umbraco.Infrastructure/Migrations/Upgrade/V_12_0_0/ResetCache.cs @@ -1,22 +1,34 @@ -using IHostingEnvironment = Umbraco.Cms.Core.Hosting.IHostingEnvironment; +using Microsoft.Extensions.DependencyInjection; +using Umbraco.Cms.Core.DependencyInjection; +using Umbraco.Cms.Core.PublishedCache; +using IHostingEnvironment = Umbraco.Cms.Core.Hosting.IHostingEnvironment; namespace Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_12_0_0; public class ResetCache : MigrationBase { private readonly IHostingEnvironment _hostingEnvironment; + private readonly IPublishedSnapshotService _publishedSnapshotService; + [Obsolete("Use ctor with all params - This will be removed in Umbraco 14.")] public ResetCache(IMigrationContext context, IHostingEnvironment hostingEnvironment) - : base(context) => + : this(context, hostingEnvironment, StaticServiceProvider.Instance.GetRequiredService()) + { + } + + public ResetCache(IMigrationContext context, IHostingEnvironment hostingEnvironment, IPublishedSnapshotService publishedSnapshotService) + : base(context) + { _hostingEnvironment = hostingEnvironment; + _publishedSnapshotService = publishedSnapshotService; + } protected override void Migrate() { RebuildCache = true; var distCacheFolderAbsolutePath = Path.Combine(_hostingEnvironment.LocalTempPath, "DistCache"); - var nuCacheFolderAbsolutePath = Path.Combine(_hostingEnvironment.LocalTempPath, "NuCache"); DeleteAllFilesInFolder(distCacheFolderAbsolutePath); - DeleteAllFilesInFolder(nuCacheFolderAbsolutePath); + _publishedSnapshotService.ResetLocalDb(); } private void DeleteAllFilesInFolder(string path) diff --git a/src/Umbraco.Infrastructure/Packaging/PackageMigrationPlanCollectionBuilder.cs b/src/Umbraco.Infrastructure/Packaging/PackageMigrationPlanCollectionBuilder.cs index 91b1364139..324257286e 100644 --- a/src/Umbraco.Infrastructure/Packaging/PackageMigrationPlanCollectionBuilder.cs +++ b/src/Umbraco.Infrastructure/Packaging/PackageMigrationPlanCollectionBuilder.cs @@ -2,7 +2,7 @@ using Umbraco.Cms.Core.Composing; namespace Umbraco.Cms.Core.Packaging; -public class PackageMigrationPlanCollectionBuilder : LazyCollectionBuilderBase { protected override PackageMigrationPlanCollectionBuilder This => this; diff --git a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs index 354083dfa8..0821232826 100644 --- a/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs +++ b/src/Umbraco.Infrastructure/Persistence/Dtos/AccessDto.cs @@ -37,5 +37,5 @@ internal class AccessDto [ResultColumn] [Reference(ReferenceType.Many, ReferenceMemberName = "AccessId")] - public List Rules { get; set; } = null!; + public List Rules { get; set; } = new(); } diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs index 6141a2eadf..5ff8fe11c7 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentRepositoryBase.cs @@ -1083,13 +1083,11 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement protected void PersistRelations(TEntity entity) { // Get all references from our core built in DataEditors/Property Editors - // Along with seeing if deverlopers want to collect additional references from the DataValueReferenceFactories collection - var trackedRelations = new List(); - trackedRelations.AddRange(_dataValueReferenceFactories.GetAllReferences(entity.Properties, PropertyEditors)); - - var relationTypeAliases = GetAutomaticRelationTypesAliases(entity.Properties, PropertyEditors).ToArray(); + // Along with seeing if developers want to collect additional references from the DataValueReferenceFactories collection + var trackedRelations = _dataValueReferenceFactories.GetAllReferences(entity.Properties, PropertyEditors); // First delete all auto-relations for this entity + var relationTypeAliases = _dataValueReferenceFactories.GetAutomaticRelationTypesAliases(entity.Properties, PropertyEditors).ToArray(); RelationRepository.DeleteByParent(entity.Id, relationTypeAliases); if (trackedRelations.Count == 0) @@ -1097,23 +1095,20 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement return; } - trackedRelations = trackedRelations.Distinct().ToList(); - var udiToGuids = trackedRelations.Select(x => x.Udi as GuidUdi) - .ToDictionary(x => (Udi)x!, x => x!.Guid); + var udiToGuids = trackedRelations.Select(x => x.Udi as GuidUdi).WhereNotNull().ToDictionary(x => (Udi)x, x => x.Guid); // lookup in the DB all INT ids for the GUIDs and chuck into a dictionary - var keyToIds = Database.Fetch(Sql() + var keyToIds = Database.FetchByGroups(udiToGuids.Values, Constants.Sql.MaxParameterCount, guids => Sql() .Select(x => x.NodeId, x => x.UniqueId) .From() - .WhereIn(x => x.UniqueId, udiToGuids.Values)) + .WhereIn(x => x.UniqueId, guids)) .ToDictionary(x => x.UniqueId, x => x.NodeId); - var allRelationTypes = RelationTypeRepository.GetMany(Array.Empty())? - .ToDictionary(x => x.Alias, x => x); + var allRelationTypes = RelationTypeRepository.GetMany(Array.Empty()).ToDictionary(x => x.Alias, x => x); IEnumerable toSave = trackedRelations.Select(rel => { - if (allRelationTypes is null || !allRelationTypes.TryGetValue(rel.RelationTypeAlias, out IRelationType? relationType)) + if (!allRelationTypes.TryGetValue(rel.RelationTypeAlias, out IRelationType? relationType)) { throw new InvalidOperationException($"The relation type {rel.RelationTypeAlias} does not exist"); } @@ -1135,31 +1130,6 @@ namespace Umbraco.Cms.Infrastructure.Persistence.Repositories.Implement RelationRepository.SaveBulk(toSave); } - private IEnumerable GetAutomaticRelationTypesAliases( - IPropertyCollection properties, - PropertyEditorCollection propertyEditors) - { - var automaticRelationTypesAliases = new HashSet(Constants.Conventions.RelationTypes.AutomaticRelationTypes); - - foreach (IProperty property in properties) - { - if (propertyEditors.TryGet(property.PropertyType.PropertyEditorAlias, out IDataEditor? editor) is false ) - { - continue; - } - - if (editor.GetValueEditor() is IDataValueReference reference) - { - foreach (var alias in reference.GetAutomaticRelationTypesAliases()) - { - automaticRelationTypesAliases.Add(alias); - } - } - } - - return automaticRelationTypesAliases; - } - /// /// Inserts property values for the content entity /// diff --git a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs index f9a6af1603..84eda76fa5 100644 --- a/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs +++ b/src/Umbraco.Infrastructure/Persistence/Repositories/Implement/ContentTypeRepositoryBase.cs @@ -1391,10 +1391,15 @@ AND umbracoNode.id <> @id", } // Now bulk update the umbracoDocument table - foreach (IGrouping> editValue in editedDocument.GroupBy(x => x.Value)) + // we need to do this in batches as the WhereIn Npoco method translates to all the nodeIds being passed in as parameters when using the SqlClient provider + // this results in to many parameters (>2100) being passed to the client when there are a lot of documents being normalized + foreach (IGrouping> groupByValue in editedDocument.GroupBy(x => x.Value)) { - Database.Execute(Sql().Update(u => u.Set(x => x.Edited, editValue.Key)) - .WhereIn(x => x.NodeId, editValue.Select(x => x.Key))); + foreach (IEnumerable> batch in groupByValue.InGroupsOf(2000)) + { + Database.Execute(Sql().Update(u => u.Set(x => x.Edited, groupByValue.Key)) + .WhereIn(x => x.NodeId, batch.Select(x => x.Key))); + } } } diff --git a/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj b/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj index 5e4948e538..14e82f73a7 100644 --- a/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj +++ b/src/Umbraco.Infrastructure/Umbraco.Infrastructure.csproj @@ -37,9 +37,6 @@ - - - diff --git a/src/Umbraco.PublishedCache.NuCache/Property.cs b/src/Umbraco.PublishedCache.NuCache/Property.cs index d921eb3f7c..6a9e1a982c 100644 --- a/src/Umbraco.PublishedCache.NuCache/Property.cs +++ b/src/Umbraco.PublishedCache.NuCache/Property.cs @@ -25,6 +25,7 @@ internal class Property : PublishedPropertyBase // the invariant-neutral source and inter values private readonly object? _sourceValue; private readonly ContentVariation _variations; + private bool _sourceValueIsInvariant; // the variant and non-variant object values private CacheValues? _cacheValues; @@ -89,6 +90,7 @@ internal class Property : PublishedPropertyBase // this variable is used for contextualizing the variation level when calculating property values. // it must be set to the union of variance (the combination of content type and property type variance). _variations = propertyType.Variations | content.ContentType.Variations; + _sourceValueIsInvariant = propertyType.Variations is ContentVariation.Nothing; } // clone for previewing as draft a published content that is published and has no draft @@ -104,6 +106,7 @@ internal class Property : PublishedPropertyBase _isMember = origin._isMember; _publishedSnapshotAccessor = origin._publishedSnapshotAccessor; _variations = origin._variations; + _sourceValueIsInvariant = origin._sourceValueIsInvariant; } // used to cache the CacheValues of this property @@ -152,7 +155,7 @@ internal class Property : PublishedPropertyBase { _content.VariationContextAccessor.ContextualizeVariation(_variations, _content.Id, ref culture, ref segment); - if (culture == string.Empty && segment == string.Empty) + if (_sourceValueIsInvariant || (culture == string.Empty && segment == string.Empty)) { return _sourceValue; } diff --git a/src/Umbraco.PublishedCache.NuCache/PublishedSnapshotService.cs b/src/Umbraco.PublishedCache.NuCache/PublishedSnapshotService.cs index 68b50cfd91..a7f8c42823 100644 --- a/src/Umbraco.PublishedCache.NuCache/PublishedSnapshotService.cs +++ b/src/Umbraco.PublishedCache.NuCache/PublishedSnapshotService.cs @@ -70,6 +70,8 @@ internal class PublishedSnapshotService : IPublishedSnapshotService private long _mediaGen; private ContentStore _mediaStore = null!; + private string LocalFilePath => Path.Combine(_hostingEnvironment.LocalTempPath, "NuCache"); + public PublishedSnapshotService( PublishedSnapshotServiceOptions options, ISyncBootStateAccessor syncBootStateAccessor, @@ -475,6 +477,22 @@ internal class PublishedSnapshotService : IPublishedSnapshotService return GetUid(_mediaStore, id); } + + public void ResetLocalDb() + { + _logger.LogInformation( + "Resetting NuCache local db"); + var path = LocalFilePath; + if (Directory.Exists(path) is false) + { + return; + } + + MainDomRelease(); + Directory.Delete(path, true); + MainDomRegister(); + } + /// /// Lazily populates the stores only when they are first requested /// @@ -603,7 +621,7 @@ internal class PublishedSnapshotService : IPublishedSnapshotService /// private void MainDomRegister() { - var path = GetLocalFilesPath(); + var path = GetAndEnsureLocalFilesPathExists(); var localContentDbPath = Path.Combine(path, "NuCache.Content.db"); var localMediaDbPath = Path.Combine(path, "NuCache.Media.db"); @@ -652,9 +670,9 @@ internal class PublishedSnapshotService : IPublishedSnapshotService } } - private string GetLocalFilesPath() + private string GetAndEnsureLocalFilesPathExists() { - var path = Path.Combine(_hostingEnvironment.LocalTempPath, "NuCache"); + var path = LocalFilePath; if (!Directory.Exists(path)) { diff --git a/src/Umbraco.Web.BackOffice/CompatibilitySuppressions.xml b/src/Umbraco.Web.BackOffice/CompatibilitySuppressions.xml deleted file mode 100644 index 6802ead0ff..0000000000 --- a/src/Umbraco.Web.BackOffice/CompatibilitySuppressions.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - CP0001 - T:Umbraco.Cms.Web.BackOffice.Filters.FileUploadCleanupFilterAttribute - lib/net7.0/Umbraco.Web.BackOffice.dll - lib/net7.0/Umbraco.Web.BackOffice.dll - true - - - CP0002 - M:Umbraco.Cms.Web.BackOffice.Controllers.BackOfficeController.#ctor(Umbraco.Cms.Core.Security.IBackOfficeUserManager,Umbraco.Cms.Core.Services.IRuntimeState,Umbraco.Cms.Core.WebAssets.IRuntimeMinifier,Microsoft.Extensions.Options.IOptionsSnapshot{Umbraco.Cms.Core.Configuration.Models.GlobalSettings},Umbraco.Cms.Core.Hosting.IHostingEnvironment,Umbraco.Cms.Core.Services.ILocalizedTextService,Umbraco.Cms.Core.Configuration.Grid.IGridConfig,Umbraco.Cms.Web.BackOffice.Controllers.BackOfficeServerVariables,Umbraco.Cms.Core.Cache.AppCaches,Umbraco.Cms.Web.BackOffice.Security.IBackOfficeSignInManager,Umbraco.Cms.Core.Security.IBackOfficeSecurityAccessor,Microsoft.Extensions.Logging.ILogger{Umbraco.Cms.Web.BackOffice.Controllers.BackOfficeController},Umbraco.Cms.Core.Serialization.IJsonSerializer,Umbraco.Cms.Web.BackOffice.Security.IBackOfficeExternalLoginProviders,Microsoft.AspNetCore.Http.IHttpContextAccessor,Umbraco.Cms.Web.BackOffice.Security.IBackOfficeTwoFactorOptions,Umbraco.Cms.Core.Manifest.IManifestParser,Umbraco.Cms.Infrastructure.WebAssets.ServerVariablesParser,Microsoft.Extensions.Options.IOptions{Umbraco.Cms.Core.Configuration.Models.SecuritySettings}) - lib/net7.0/Umbraco.Web.BackOffice.dll - lib/net7.0/Umbraco.Web.BackOffice.dll - true - - - CP0002 - M:Umbraco.Cms.Web.BackOffice.Controllers.ContentController.#ctor(Umbraco.Cms.Core.Dictionary.ICultureDictionary,Microsoft.Extensions.Logging.ILoggerFactory,Umbraco.Cms.Core.Strings.IShortStringHelper,Umbraco.Cms.Core.Events.IEventMessagesFactory,Umbraco.Cms.Core.Services.ILocalizedTextService,Umbraco.Cms.Core.PropertyEditors.PropertyEditorCollection,Umbraco.Cms.Core.Services.IContentService,Umbraco.Cms.Core.Services.IUserService,Umbraco.Cms.Core.Security.IBackOfficeSecurityAccessor,Umbraco.Cms.Core.Services.IContentTypeService,Umbraco.Cms.Core.Mapping.IUmbracoMapper,Umbraco.Cms.Core.Routing.IPublishedUrlProvider,Umbraco.Cms.Core.Services.IDomainService,Umbraco.Cms.Core.Services.IDataTypeService,Umbraco.Cms.Core.Services.ILocalizationService,Umbraco.Cms.Core.Services.IFileService,Umbraco.Cms.Core.Services.INotificationService,Umbraco.Cms.Core.Actions.ActionCollection,Umbraco.Cms.Infrastructure.Persistence.ISqlContext,Umbraco.Cms.Core.Serialization.IJsonSerializer,Umbraco.Cms.Core.Scoping.ICoreScopeProvider,Microsoft.AspNetCore.Authorization.IAuthorizationService,Umbraco.Cms.Core.Services.IContentVersionService) - lib/net7.0/Umbraco.Web.BackOffice.dll - lib/net7.0/Umbraco.Web.BackOffice.dll - true - - - CP0002 - M:Umbraco.Cms.Web.BackOffice.Controllers.MediaController.PostAddFile(System.String,System.String,System.String,System.Collections.Generic.List{Microsoft.AspNetCore.Http.IFormFile}) - lib/net7.0/Umbraco.Web.BackOffice.dll - lib/net7.0/Umbraco.Web.BackOffice.dll - true - - - CP0002 - M:Umbraco.Cms.Web.BackOffice.Controllers.TemplateController.#ctor(Umbraco.Cms.Core.Services.IFileService,Umbraco.Cms.Core.Mapping.IUmbracoMapper,Umbraco.Cms.Core.Strings.IShortStringHelper,Umbraco.Cms.Core.IO.IDefaultViewContentProvider) - lib/net7.0/Umbraco.Web.BackOffice.dll - lib/net7.0/Umbraco.Web.BackOffice.dll - true - - - CP0002 - M:Umbraco.Extensions.RuntimeMinifierExtensions.GetScriptForLoadingBackOfficeAsync(Umbraco.Cms.Core.WebAssets.IRuntimeMinifier,Umbraco.Cms.Core.Configuration.Models.GlobalSettings,Umbraco.Cms.Core.Hosting.IHostingEnvironment,Umbraco.Cms.Core.Manifest.IManifestParser) - lib/net7.0/Umbraco.Web.BackOffice.dll - lib/net7.0/Umbraco.Web.BackOffice.dll - true - - \ No newline at end of file diff --git a/src/Umbraco.Web.BackOffice/Filters/ContentSaveValidationAttribute.cs b/src/Umbraco.Web.BackOffice/Filters/ContentSaveValidationAttribute.cs index 5c9a96b71c..100d089451 100644 --- a/src/Umbraco.Web.BackOffice/Filters/ContentSaveValidationAttribute.cs +++ b/src/Umbraco.Web.BackOffice/Filters/ContentSaveValidationAttribute.cs @@ -188,7 +188,7 @@ internal sealed class ContentSaveValidationAttribute : TypeFilterAttribute break; case ContentSaveAction.Schedule: permissionToCheck.Add(ActionUpdate.ActionLetter); - permissionToCheck.Add(ActionToPublish.ActionLetter); + permissionToCheck.Add(ActionPublish.ActionLetter); contentToCheck = contentItem.PersistedContent; contentIdToCheck = contentToCheck?.Id ?? default; break; diff --git a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj index 12364baaf1..a64d0d2408 100644 --- a/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj +++ b/src/Umbraco.Web.BackOffice/Umbraco.Web.BackOffice.csproj @@ -7,7 +7,6 @@ - diff --git a/src/Umbraco.Web.Common/CompatibilitySuppressions.xml b/src/Umbraco.Web.Common/CompatibilitySuppressions.xml deleted file mode 100644 index 95a26a3f01..0000000000 --- a/src/Umbraco.Web.Common/CompatibilitySuppressions.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - CP0002 - M:Umbraco.Cms.Web.Common.Profiler.WebProfiler.#ctor - lib/net7.0/Umbraco.Web.Common.dll - lib/net7.0/Umbraco.Web.Common.dll - true - - - CP0002 - M:Umbraco.Cms.Web.Common.Security.BackOfficeUserManager.#ctor(Umbraco.Cms.Core.Net.IIpResolver,Microsoft.AspNetCore.Identity.IUserStore{Umbraco.Cms.Core.Security.BackOfficeIdentityUser},Microsoft.Extensions.Options.IOptions{Umbraco.Cms.Core.Security.BackOfficeIdentityOptions},Microsoft.AspNetCore.Identity.IPasswordHasher{Umbraco.Cms.Core.Security.BackOfficeIdentityUser},System.Collections.Generic.IEnumerable{Microsoft.AspNetCore.Identity.IUserValidator{Umbraco.Cms.Core.Security.BackOfficeIdentityUser}},System.Collections.Generic.IEnumerable{Microsoft.AspNetCore.Identity.IPasswordValidator{Umbraco.Cms.Core.Security.BackOfficeIdentityUser}},Umbraco.Cms.Core.Security.BackOfficeErrorDescriber,System.IServiceProvider,Microsoft.AspNetCore.Http.IHttpContextAccessor,Microsoft.Extensions.Logging.ILogger{Microsoft.AspNetCore.Identity.UserManager{Umbraco.Cms.Core.Security.BackOfficeIdentityUser}},Microsoft.Extensions.Options.IOptions{Umbraco.Cms.Core.Configuration.Models.UserPasswordConfigurationSettings},Umbraco.Cms.Core.Events.IEventAggregator,Umbraco.Cms.Core.Security.IBackOfficeUserPasswordChecker) - lib/net7.0/Umbraco.Web.Common.dll - lib/net7.0/Umbraco.Web.Common.dll - true - - - CP0008 - T:Umbraco.Cms.Web.Common.FileProviders.WebRootFileProviderFactory - lib/net7.0/Umbraco.Web.Common.dll - lib/net7.0/Umbraco.Web.Common.dll - true - - \ No newline at end of file diff --git a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js index 3099bc561c..1e455aea5f 100644 --- a/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js +++ b/src/Umbraco.Web.UI.Client/src/common/directives/components/content/edit.controller.js @@ -35,15 +35,18 @@ $scope.activeApp = null; //initializes any watches - function startWatches(content) { + var watchers = []; - $scope.$watchGroup(['culture', 'segment'], + function startWatches(content) { + clearWatchers(); + + watchers.push($scope.$watchGroup(['culture', 'segment'], function (value, oldValue) { createPreviewButton($scope.content, value[0], value[1]); - }); + })); //watch for changes to isNew, set the page.isNew accordingly and load the breadcrumb if we can - $scope.$watch('isNew', function (newVal, oldVal) { + watchers.push($scope.$watch('isNew', function (newVal, oldVal) { $scope.page.isNew = Object.toBoolean(newVal); @@ -59,8 +62,12 @@ }); } } - }); + })); + } + function clearWatchers () { + watchers.forEach(w => w()); + watchers = []; } //this initializes the editor with the data which will be called more than once if the data is re-loaded @@ -109,6 +116,7 @@ bindEvents(); resetVariantFlags(); + startWatches($scope.content); } function loadBreadcrumb() { @@ -241,7 +249,6 @@ appendRuntimeData(); init(); - startWatches($scope.content); syncTreeNode($scope.content, $scope.content.path, true); @@ -265,7 +272,6 @@ appendRuntimeData(); init(); - startWatches($scope.content); resetLastListPageNumber($scope.content); @@ -346,7 +352,10 @@ labelKey: "buttons_saveAndPreview" }; - const activeVariant = content.variants?.find((variant) => content.documentType?.variations === "Nothing" || variant.compositeId === compositeId); + let activeVariant = content.variants?.find((variant) => content.documentType?.variations === "Nothing" || variant.compositeId === compositeId); + /* if we can't find the active variant and there is only one variant available, we will use that. + this happens if we have a node that can vary by culture but there is only one language available. */ + activeVariant = !activeVariant && content.variants.length === 1 ? content.variants[0] : activeVariant; $scope.previewSubButtons = activeVariant?.additionalPreviewUrls?.map((additionalPreviewUrl) => { return { diff --git a/src/Umbraco.Web.UI.Client/src/common/filters/nestedcontent.filter.js b/src/Umbraco.Web.UI.Client/src/common/filters/nestedcontent.filter.js index 2d09b521e3..4fc10dbfa3 100644 --- a/src/Umbraco.Web.UI.Client/src/common/filters/nestedcontent.filter.js +++ b/src/Umbraco.Web.UI.Client/src/common/filters/nestedcontent.filter.js @@ -1,4 +1,4 @@ -// Filter to take a node id and grab it's name instead +// Filter to take a node id and grab it's name instead // Usage: {{ pickerAlias | ncNodeName }} // Cache for node names so we don't make a ton of requests @@ -78,6 +78,9 @@ angular.module("umbraco.filters").filter("ncNodeName", function (editorState, en }).filter("ncRichText", function () { return function (input) { - return $("
").html(input).text(); + // Get markup from RTE object or assume HTML + var html = input && Object.hasOwn(input, 'markup') ? input.markup : input; + + return $("
").html(html).text(); }; }); diff --git a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj index 05c87e763c..695f25b4fe 100644 --- a/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj +++ b/src/Umbraco.Web.UI/Umbraco.Web.UI.csproj @@ -9,6 +9,8 @@ + + @@ -17,23 +19,23 @@ - - - - - - - - - - - all + + <_ContentIncludedByDefault Remove="umbraco\UmbracoBackOffice\AuthorizeUpgrade.cshtml" /> + <_ContentIncludedByDefault Remove="umbraco\UmbracoBackOffice\Default.cshtml" /> + <_ContentIncludedByDefault Remove="umbraco\UmbracoBackOffice\Preview.cshtml" /> + <_ContentIncludedByDefault Remove="umbraco\UmbracoInstall\Index.cshtml" /> + <_ContentIncludedByDefault Remove="umbraco\UmbracoLogin\Index.cshtml" /> + <_ContentIncludedByDefault Remove="umbraco\UmbracoWebsite\Maintenance.cshtml" /> + <_ContentIncludedByDefault Remove="umbraco\UmbracoWebsite\NoNodes.cshtml" /> + <_ContentIncludedByDefault Remove="umbraco\UmbracoWebsite\NotFound.cshtml" /> + + true diff --git a/src/Umbraco.Web.UI/umbraco/UmbracoBackOffice/AuthorizeUpgrade.cshtml b/src/Umbraco.Web.UI/umbraco/UmbracoBackOffice/AuthorizeUpgrade.cshtml index ab45a61ed0..cce2140d06 100644 --- a/src/Umbraco.Web.UI/umbraco/UmbracoBackOffice/AuthorizeUpgrade.cshtml +++ b/src/Umbraco.Web.UI/umbraco/UmbracoBackOffice/AuthorizeUpgrade.cshtml @@ -56,15 +56,6 @@ @await Html.BareMinimumServerVariablesScriptAsync(backOfficeServerVariables) - - @*And finally we can load in our angular app*@ diff --git a/src/Umbraco.Web.UI/umbraco/UmbracoWebsite/Maintenance.cshtml b/src/Umbraco.Web.UI/umbraco/UmbracoWebsite/Maintenance.cshtml index 94de5f3c52..46739cdef7 100644 --- a/src/Umbraco.Web.UI/umbraco/UmbracoWebsite/Maintenance.cshtml +++ b/src/Umbraco.Web.UI/umbraco/UmbracoWebsite/Maintenance.cshtml @@ -17,7 +17,7 @@ Website is Under Maintainance - +