From 9085f0b21775c85868c14e74ce7d1ac6fbdf42f5 Mon Sep 17 00:00:00 2001 From: Mike Alhayek Date: Wed, 21 Feb 2024 12:50:50 -0800 Subject: [PATCH] Register JsonSerializerOptions in the IoC Container (#15328) --- .../Deployment/AdminMenuDeploymentSource.cs | 11 +----- .../Recipes/AdminMenuStep.cs | 13 +++---- .../OrchardCore.Apis.GraphQL/Startup.cs | 2 +- .../Handlers/AutoroutePartHandler.cs | 1 + .../OrchardCore.ContentFields/Migrations.cs | 4 +- .../Settings/LinkFieldSettingsDriver.cs | 3 +- .../Settings/TextFieldSettingsDriver.cs | 3 +- .../OrchardCore.ContentFields/Startup.cs | 2 +- .../Startup.cs | 4 +- .../AuditTrailContentEventDisplayDriver.cs | 4 +- .../Deployment/Download/DownloadController.cs | 3 +- .../Liquid/BuildDisplayFilter.cs | 3 +- .../Liquid/FullTextFilter.cs | 4 +- .../Recipes/ContentStep.cs | 2 +- .../OrchardCore.Contents/Startup.cs | 4 +- .../Workflows/Activities/ContentActivity.cs | 1 + .../Activities/ContentCreatedEvent.cs | 6 ++- .../Activities/ContentDeletedEvent.cs | 6 ++- .../Activities/ContentDraftSavedEvent.cs | 6 ++- .../Workflows/Activities/ContentEvent.cs | 6 ++- .../Activities/ContentPublishedEvent.cs | 6 ++- .../Workflows/Activities/ContentTask.cs | 5 ++- .../Activities/ContentUnpublishedEvent.cs | 6 ++- .../Activities/ContentUpdatedEvent.cs | 6 ++- .../Activities/ContentVersionedEvent.cs | 5 ++- .../Workflows/Activities/DeleteContentTask.cs | 5 ++- .../Activities/PublishContentTask.cs | 6 ++- .../Activities/RetrieveContentTask.cs | 6 ++- .../Activities/UnpublishContentTask.cs | 6 ++- .../OrchardCore.Cors/Startup.cs | 2 +- .../Services/CustomSettingsService.cs | 2 +- .../DeploymentPlanDeploymentSource.cs | 9 ++++- .../Recipes/DeploymentPlansRecipeStep.cs | 7 +++- .../Steps/CustomFileDeploymentSource.cs | 4 +- .../Login/Services/FacebookLoginService.cs | 6 +-- .../Services/FacebookService.cs | 1 + .../Deployment/AllFeaturesDeploymentSource.cs | 4 +- .../Recipes/Executors/FeatureStep.cs | 11 +++--- .../OrchardCore.Flows/Startup.cs | 7 ---- .../Deployment/AllLayersDeploymentSource.cs | 19 +++------- .../OrchardCore.Layers/Recipes/LayerStep.cs | 10 +---- .../OrchardCore.Lists/Startup.cs | 2 - .../Controllers/AdminController.cs | 2 - .../OrchardCore.Media.Azure/Startup.cs | 4 -- .../AllMediaProfilesDeploymentSource.cs | 4 +- .../OrchardCore.Media/Migrations.cs | 4 +- .../OrchardCore.Media/Startup.cs | 4 +- .../Deployment/AzureADDeploymentSource.cs | 7 ++-- .../Recipes/OpenIdServerSettingsStep.cs | 4 +- .../Recipes/OpenIdValidationSettingsStep.cs | 7 +++- .../OpenIdValidationSettingsStepModel.cs | 3 +- .../Services/OpenIdClientService.cs | 1 + .../Services/OpenIdServerService.cs | 6 ++- .../Services/OpenIdValidationService.cs | 1 + .../Settings/OpenIdValidationSettings.cs | 1 - .../OrchardCore.OpenId/Startup.cs | 10 ++--- .../Deployment/PlacementsDeploymentSource.cs | 14 ++++--- .../Deployment/AllQueriesDeploymentSource.cs | 10 ++++- .../OrchardCore.Queries/Recipes/QueryStep.cs | 9 ++++- .../OrchardCore.Queries/Sql/SqlQuerySource.cs | 6 ++- .../Deployment/AllRolesDeploymentSource.cs | 4 +- .../OrchardCore.Roles/Recipes/RolesStep.cs | 2 + ...tPickerFieldElasticEditorSettingsDriver.cs | 3 +- .../Startup.cs | 4 +- .../Deployment/LuceneIndexDeploymentSource.cs | 4 +- .../LuceneSettingsDeploymentSource.cs | 4 +- .../Recipes/LuceneIndexRebuildStep.cs | 4 +- .../OrchardCore.Search.Lucene/Startup.cs | 2 +- .../SearchSettingsDeploymentSource.cs | 4 +- .../SiteSettingsDeploymentSource.cs | 3 +- .../AllShortcodeTemplatesDeploymentSource.cs | 4 +- .../Recipes/SitemapsStep.cs | 3 +- .../OrchardCore.Sitemaps/Startup.cs | 4 +- .../Drivers/GeoPointFieldSettingsDriver.cs | 3 +- .../Controllers/AdminController.cs | 9 +++-- .../TaxonomyContentsAdminListDisplayDriver.cs | 1 + .../Drivers/TaxonomyFieldDisplayDriver.cs | 2 + .../Drivers/TaxonomyFieldDriverHelper.cs | 1 + .../Drivers/TaxonomyFieldTagsDisplayDriver.cs | 5 ++- .../Indexing/TaxonomyIndex.cs | 3 +- .../Settings/TaxonomyFieldSettingsDriver.cs | 3 +- .../TaxonomyFieldTagsEditorSettingsDriver.cs | 3 +- .../OrchardCore.Taxonomies/Startup.cs | 2 +- .../Views/Content.TermAdmin.cshtml | 37 +++++++++---------- .../AllAdminTemplatesDeploymentSource.cs | 4 +- .../Recipes/TemplateStep.cs | 3 +- .../OrchardCore.Tenants/Startup.cs | 4 +- .../CustomUserSettingsDeploymentSource.cs | 11 +++--- .../CustomUserSettingsDisplayDriver.cs | 2 + .../Models/UsersStepUserModel.cs | 1 + .../Services/CustomUserSettingsService.cs | 2 +- .../OrchardCore.Users/Startup.cs | 1 - .../TwoFactorAuthenticationStartup.cs | 2 +- .../Controllers/AdminController.cs | 2 +- .../AllWorkflowTypeDeploymentSource.cs | 14 ++++--- .../Recipes/WorkflowTypeStep.cs | 7 +++- .../Services/WorkflowManager.cs | 13 +++++-- .../Drivers/UserTaskEventContentDriver.cs | 10 ++++- .../JsonSerializerOptionsConfiguration.cs | 32 ++++++++++++++++ .../Records/Migrations.cs | 1 + .../DefaultJsonContentSerializer.cs | 31 +++++----------- .../OrchardCoreBuilderExtensions.cs | 10 ++--- .../Notify/NotifyFilter.cs | 2 +- .../Documents/DocumentEntityManager.cs | 5 ++- .../Documents/DocumentEntityManagerOfT.cs | 3 +- .../VolatileDocumentEntityManager.cs | 3 +- .../AzureAISearchSettingsDeploymentSource.cs | 4 +- .../Recipes/AzureAISearchIndexSettingsStep.cs | 27 +++++++++----- .../ElasticIndexDeploymentSource.cs | 4 +- .../ElasticSettingsDeploymentSource.cs | 4 +- .../SiteSettingsPropertyDeploymentSource.cs | 3 +- .../Services/IWorkflowManager.cs | 5 ++- .../Extensions/ServiceCollectionExtensions.cs | 4 ++ .../ContentStepLuceneQueryTests.cs | 2 +- .../GraphQL/ContentItemsFieldTypeTests.cs | 22 +++++++++-- .../OpenIdApplicationStepTests.cs | 1 + .../OpenIdServerDeploymentSourceTests.cs | 6 +++ .../Recipes/RecipeExecutorTests.cs | 3 +- .../Workflows/WorkflowManagerTests.cs | 4 ++ 119 files changed, 408 insertions(+), 278 deletions(-) create mode 100644 src/OrchardCore/OrchardCore.Abstractions/Extensions/JsonSerializerOptionsConfiguration.cs diff --git a/src/OrchardCore.Modules/OrchardCore.AdminMenu/Deployment/AdminMenuDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.AdminMenu/Deployment/AdminMenuDeploymentSource.cs index e07ba5551ef..0cb65240c45 100644 --- a/src/OrchardCore.Modules/OrchardCore.AdminMenu/Deployment/AdminMenuDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.AdminMenu/Deployment/AdminMenuDeploymentSource.cs @@ -1,11 +1,9 @@ using System.Text.Json; using System.Text.Json.Nodes; -using System.Text.Json.Serialization; using System.Threading.Tasks; using Microsoft.Extensions.Options; using OrchardCore.AdminMenu.Services; using OrchardCore.Deployment; -using OrchardCore.Json; namespace OrchardCore.AdminMenu.Deployment { @@ -14,15 +12,10 @@ public class AdminMenuDeploymentSource : IDeploymentSource private readonly IAdminMenuService _adminMenuService; private readonly JsonSerializerOptions _serializationOptions; - public AdminMenuDeploymentSource(IAdminMenuService adminMenuService, IOptions derivedTypesOptions) + public AdminMenuDeploymentSource(IAdminMenuService adminMenuService, IOptions serializationOptions) { _adminMenuService = adminMenuService; - - // The recipe step contains polymorphic types which need to be resolved - _serializationOptions = new() - { - TypeInfoResolver = new PolymorphicJsonTypeInfoResolver(derivedTypesOptions.Value) - }; + _serializationOptions = serializationOptions.Value; } public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) diff --git a/src/OrchardCore.Modules/OrchardCore.AdminMenu/Recipes/AdminMenuStep.cs b/src/OrchardCore.Modules/OrchardCore.AdminMenu/Recipes/AdminMenuStep.cs index 1e578340f61..dff8ef5d672 100644 --- a/src/OrchardCore.Modules/OrchardCore.AdminMenu/Recipes/AdminMenuStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.AdminMenu/Recipes/AdminMenuStep.cs @@ -2,11 +2,9 @@ using System.Linq; using System.Text.Json; using System.Text.Json.Nodes; -using System.Text.Json.Serialization; using System.Threading.Tasks; using Microsoft.Extensions.Options; using OrchardCore.AdminMenu.Services; -using OrchardCore.Json; using OrchardCore.Recipes.Models; using OrchardCore.Recipes.Services; @@ -20,15 +18,14 @@ public class AdminMenuStep : IRecipeStepHandler private readonly IAdminMenuService _adminMenuService; private readonly JsonSerializerOptions _serializationOptions; - public AdminMenuStep(IAdminMenuService adminMenuService, IOptions derivedTypesOptions) + public AdminMenuStep( + IAdminMenuService adminMenuService, + IOptions serializationOptions) { _adminMenuService = adminMenuService; // The recipe step contains polymorphic types (menu items) which need to be resolved - _serializationOptions = new() - { - TypeInfoResolver = new PolymorphicJsonTypeInfoResolver(derivedTypesOptions.Value) - }; + _serializationOptions = serializationOptions.Value; } public async Task ExecuteAsync(RecipeExecutionContext context) @@ -38,7 +35,7 @@ public async Task ExecuteAsync(RecipeExecutionContext context) return; } - var model = context.Step.ToObject(); + var model = context.Step.ToObject(_serializationOptions); foreach (var token in model.Data.Cast()) { diff --git a/src/OrchardCore.Modules/OrchardCore.Apis.GraphQL/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Apis.GraphQL/Startup.cs index 963237964a4..8bdf71dda32 100644 --- a/src/OrchardCore.Modules/OrchardCore.Apis.GraphQL/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Apis.GraphQL/Startup.cs @@ -1,3 +1,4 @@ +using System; using GraphQL; using GraphQL.DataLoader; using GraphQL.Execution; @@ -14,7 +15,6 @@ using OrchardCore.Modules; using OrchardCore.Navigation; using OrchardCore.Security.Permissions; -using System; namespace OrchardCore.Apis.GraphQL { diff --git a/src/OrchardCore.Modules/OrchardCore.Autoroute/Handlers/AutoroutePartHandler.cs b/src/OrchardCore.Modules/OrchardCore.Autoroute/Handlers/AutoroutePartHandler.cs index 833546fdd66..d8690e060be 100644 --- a/src/OrchardCore.Modules/OrchardCore.Autoroute/Handlers/AutoroutePartHandler.cs +++ b/src/OrchardCore.Modules/OrchardCore.Autoroute/Handlers/AutoroutePartHandler.cs @@ -37,6 +37,7 @@ public class AutoroutePartHandler : ContentPartHandler private readonly ITagCache _tagCache; private readonly ISession _session; private readonly IServiceProvider _serviceProvider; + protected readonly IStringLocalizer S; private IContentManager _contentManager; diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Migrations.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Migrations.cs index 4131435aa4e..5a49971612d 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Migrations.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Migrations.cs @@ -14,7 +14,9 @@ public class Migrations : DataMigration private readonly IContentDefinitionManager _contentDefinitionManager; private readonly ShellDescriptor _shellDescriptor; - public Migrations(IContentDefinitionManager contentDefinitionManager, ShellDescriptor shellDescriptor) + public Migrations( + IContentDefinitionManager contentDefinitionManager, + ShellDescriptor shellDescriptor) { _contentDefinitionManager = contentDefinitionManager; _shellDescriptor = shellDescriptor; diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/LinkFieldSettingsDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/LinkFieldSettingsDriver.cs index 6d61f64e832..2f2131a9216 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/LinkFieldSettingsDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/LinkFieldSettingsDriver.cs @@ -23,8 +23,7 @@ public override IDisplayResult Edit(ContentPartFieldDefinition partFieldDefiniti model.TextPlaceholder = settings.TextPlaceholder; model.DefaultUrl = settings.DefaultUrl; model.DefaultText = settings.DefaultText; - }) - .Location("Content"); + }).Location("Content"); } public override async Task UpdateAsync(ContentPartFieldDefinition partFieldDefinition, UpdatePartFieldEditorContext context) diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/TextFieldSettingsDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/TextFieldSettingsDriver.cs index ed5eb8d2c5e..d0de20ad677 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/TextFieldSettingsDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/TextFieldSettingsDriver.cs @@ -18,8 +18,7 @@ public override IDisplayResult Edit(ContentPartFieldDefinition partFieldDefiniti model.Hint = settings.Hint; model.Required = settings.Required; model.DefaultValue = settings.DefaultValue; - }) - .Location("Content"); + }).Location("Content"); } public override async Task UpdateAsync(ContentPartFieldDefinition partFieldDefinition, UpdatePartFieldEditorContext context) diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Startup.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Startup.cs index 105438153e8..d49cde5fd74 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Startup.cs @@ -1,3 +1,4 @@ +using System; using Fluid; using Microsoft.Extensions.DependencyInjection; using OrchardCore.ContentFields.Drivers; @@ -15,7 +16,6 @@ using OrchardCore.Data.Migration; using OrchardCore.Indexing; using OrchardCore.Modules; -using System; namespace OrchardCore.ContentFields { diff --git a/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Startup.cs b/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Startup.cs index 1e465f9c8a2..337ca81f121 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Startup.cs @@ -1,3 +1,5 @@ +using System; +using System.Globalization; using Fluid; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Builder; @@ -23,8 +25,6 @@ using OrchardCore.Security.Permissions; using OrchardCore.Settings; using OrchardCore.Sitemaps.Builders; -using System; -using System.Globalization; namespace OrchardCore.ContentLocalization { diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/AuditTrail/Drivers/AuditTrailContentEventDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Contents/AuditTrail/Drivers/AuditTrailContentEventDisplayDriver.cs index 4baba6ce656..7c42f547bdc 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/AuditTrail/Drivers/AuditTrailContentEventDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/AuditTrail/Drivers/AuditTrailContentEventDisplayDriver.cs @@ -22,7 +22,9 @@ public class AuditTrailContentEventDisplayDriver : AuditTrailEventSectionDisplay private readonly IAuditTrailManager _auditTrailManager; private readonly ISession _session; - public AuditTrailContentEventDisplayDriver(IAuditTrailManager auditTrailManager, ISession session) + public AuditTrailContentEventDisplayDriver( + IAuditTrailManager auditTrailManager, + ISession session) { _auditTrailManager = auditTrailManager; _session = session; diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Deployment/Download/DownloadController.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Deployment/Download/DownloadController.cs index 376f143cb7a..2f1a4cf918a 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Deployment/Download/DownloadController.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Deployment/Download/DownloadController.cs @@ -18,8 +18,7 @@ public class DownloadController : Controller public DownloadController( IAuthorizationService authorizationService, - IContentManager contentManager - ) + IContentManager contentManager) { _authorizationService = authorizationService; _contentManager = contentManager; diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Liquid/BuildDisplayFilter.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Liquid/BuildDisplayFilter.cs index 2185293499a..8112c3aa4b4 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Liquid/BuildDisplayFilter.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Liquid/BuildDisplayFilter.cs @@ -19,7 +19,8 @@ public class BuildDisplayFilter : ILiquidFilter private readonly IContentItemDisplayManager _contentItemDisplayManager; private readonly IUpdateModelAccessor _updateModelAccessor; - public BuildDisplayFilter(IContentItemRecursionHelper buildDisplayRecursionHelper, + public BuildDisplayFilter( + IContentItemRecursionHelper buildDisplayRecursionHelper, IContentItemDisplayManager contentItemDisplayManager, IUpdateModelAccessor updateModelAccessor) { diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Liquid/FullTextFilter.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Liquid/FullTextFilter.cs index adea189a572..58577201e44 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Liquid/FullTextFilter.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Liquid/FullTextFilter.cs @@ -15,7 +15,9 @@ public class FullTextFilter : ILiquidFilter private readonly IContentManager _contentManager; private readonly IContentItemRecursionHelper _fullTextRecursionHelper; - public FullTextFilter(IContentManager contentManager, IContentItemRecursionHelper fullTextRecursionHelper) + public FullTextFilter( + IContentManager contentManager, + IContentItemRecursionHelper fullTextRecursionHelper) { _contentManager = contentManager; _fullTextRecursionHelper = fullTextRecursionHelper; diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Recipes/ContentStep.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Recipes/ContentStep.cs index f59787d0cd6..7791ffb436d 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Recipes/ContentStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Recipes/ContentStep.cs @@ -32,7 +32,7 @@ public Task ExecuteAsync(RecipeExecutionContext context) } // Otherwise, the import of content items is deferred after all migrations are completed, - // this prevents e.g. a content handler to trigger a workflow before worflows migrations. + // this prevents e.g. a content handler to trigger a workflow before workflows migrations. ShellScope.AddDeferredTask(scope => { var contentManager = scope.ServiceProvider.GetRequiredService(); diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Startup.cs index cf2abe2e624..67a3ac3d519 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Startup.cs @@ -1,3 +1,5 @@ +using System; +using System.Threading.Tasks; using Fluid; using Fluid.Values; using Microsoft.AspNetCore.Authorization; @@ -50,8 +52,6 @@ using OrchardCore.Sitemaps.Handlers; using OrchardCore.Sitemaps.Models; using OrchardCore.Sitemaps.Services; -using System; -using System.Threading.Tasks; using YesSql.Filters.Query; namespace OrchardCore.Contents diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentActivity.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentActivity.cs index ce7900fa5ce..21d9d9ceb3f 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentActivity.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentActivity.cs @@ -16,6 +16,7 @@ namespace OrchardCore.Contents.Workflows.Activities { public abstract class ContentActivity : Activity { + protected readonly IStringLocalizer S; protected ContentActivity( diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentCreatedEvent.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentCreatedEvent.cs index 289783fe5a2..2df0fd8d65e 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentCreatedEvent.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentCreatedEvent.cs @@ -6,7 +6,11 @@ namespace OrchardCore.Contents.Workflows.Activities { public class ContentCreatedEvent : ContentEvent { - public ContentCreatedEvent(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) + public ContentCreatedEvent( + IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) + : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentDeletedEvent.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentDeletedEvent.cs index fd3e6662b7c..4b4ea669d4e 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentDeletedEvent.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentDeletedEvent.cs @@ -6,7 +6,11 @@ namespace OrchardCore.Contents.Workflows.Activities { public class ContentDeletedEvent : ContentEvent { - public ContentDeletedEvent(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) + public ContentDeletedEvent( + IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) + : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentDraftSavedEvent.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentDraftSavedEvent.cs index 21b93d631e6..96d69de978b 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentDraftSavedEvent.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentDraftSavedEvent.cs @@ -6,7 +6,11 @@ namespace OrchardCore.Contents.Workflows.Activities { public class ContentDraftSavedEvent : ContentEvent { - public ContentDraftSavedEvent(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) + public ContentDraftSavedEvent( + IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) + : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentEvent.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentEvent.cs index d2e3c401a7d..7e0efd08885 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentEvent.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentEvent.cs @@ -11,7 +11,11 @@ namespace OrchardCore.Contents.Workflows.Activities { public abstract class ContentEvent : ContentActivity, IEvent { - protected ContentEvent(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) + protected ContentEvent( + IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) + : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentPublishedEvent.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentPublishedEvent.cs index 9e37381ed4f..470f663f340 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentPublishedEvent.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentPublishedEvent.cs @@ -6,7 +6,11 @@ namespace OrchardCore.Contents.Workflows.Activities { public class ContentPublishedEvent : ContentEvent { - public ContentPublishedEvent(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) + public ContentPublishedEvent( + IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) + : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentTask.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentTask.cs index b261683acab..cebe217c0a3 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentTask.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentTask.cs @@ -7,7 +7,10 @@ namespace OrchardCore.Contents.Workflows.Activities { public abstract class ContentTask : ContentActivity, ITask { - protected ContentTask(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) + protected ContentTask( + IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentUnpublishedEvent.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentUnpublishedEvent.cs index 64938986b15..49da36b13b6 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentUnpublishedEvent.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentUnpublishedEvent.cs @@ -6,7 +6,11 @@ namespace OrchardCore.Contents.Workflows.Activities { public class ContentUnpublishedEvent : ContentEvent { - public ContentUnpublishedEvent(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) + public ContentUnpublishedEvent( + IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) + : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentUpdatedEvent.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentUpdatedEvent.cs index 8ecc1238f3d..57cfa6446bc 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentUpdatedEvent.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentUpdatedEvent.cs @@ -6,7 +6,11 @@ namespace OrchardCore.Contents.Workflows.Activities { public class ContentUpdatedEvent : ContentEvent { - public ContentUpdatedEvent(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) + public ContentUpdatedEvent( + IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) + : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentVersionedEvent.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentVersionedEvent.cs index 51322519090..c7364c7319f 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentVersionedEvent.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/ContentVersionedEvent.cs @@ -6,7 +6,10 @@ namespace OrchardCore.Contents.Workflows.Activities { public class ContentVersionedEvent : ContentEvent { - public ContentVersionedEvent(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) + public ContentVersionedEvent(IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) + : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/DeleteContentTask.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/DeleteContentTask.cs index 7022ebc6185..5381862eae4 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/DeleteContentTask.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/DeleteContentTask.cs @@ -12,7 +12,10 @@ namespace OrchardCore.Contents.Workflows.Activities { public class DeleteContentTask : ContentTask { - public DeleteContentTask(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) + public DeleteContentTask(IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) + : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/PublishContentTask.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/PublishContentTask.cs index f6919242a23..2875b2fd763 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/PublishContentTask.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/PublishContentTask.cs @@ -12,7 +12,11 @@ namespace OrchardCore.Contents.Workflows.Activities { public class PublishContentTask : ContentTask { - public PublishContentTask(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) + public PublishContentTask( + IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) + : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/RetrieveContentTask.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/RetrieveContentTask.cs index b5475c5debb..0663dd93607 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/RetrieveContentTask.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/RetrieveContentTask.cs @@ -13,7 +13,11 @@ namespace OrchardCore.Contents.Workflows.Activities { public class RetrieveContentTask : ContentTask { - public RetrieveContentTask(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) + public RetrieveContentTask( + IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) + : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/UnpublishContentTask.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/UnpublishContentTask.cs index af2b8a4a3af..a74c535cb18 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/UnpublishContentTask.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Workflows/Activities/UnpublishContentTask.cs @@ -12,7 +12,11 @@ namespace OrchardCore.Contents.Workflows.Activities { public class UnpublishContentTask : ContentTask { - public UnpublishContentTask(IContentManager contentManager, IWorkflowScriptEvaluator scriptEvaluator, IStringLocalizer localizer) : base(contentManager, scriptEvaluator, localizer) + public UnpublishContentTask( + IContentManager contentManager, + IWorkflowScriptEvaluator scriptEvaluator, + IStringLocalizer localizer) + : base(contentManager, scriptEvaluator, localizer) { } diff --git a/src/OrchardCore.Modules/OrchardCore.Cors/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Cors/Startup.cs index 43d74afe38a..5b90899adb4 100644 --- a/src/OrchardCore.Modules/OrchardCore.Cors/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Cors/Startup.cs @@ -1,3 +1,4 @@ +using System; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Cors.Infrastructure; using Microsoft.AspNetCore.Routing; @@ -8,7 +9,6 @@ using OrchardCore.Modules; using OrchardCore.Navigation; using OrchardCore.Security.Permissions; -using System; using CorsService = OrchardCore.Cors.Services.CorsService; namespace OrchardCore.Cors diff --git a/src/OrchardCore.Modules/OrchardCore.CustomSettings/Services/CustomSettingsService.cs b/src/OrchardCore.Modules/OrchardCore.CustomSettings/Services/CustomSettingsService.cs index 6d57abc5c9c..319fe4684f4 100644 --- a/src/OrchardCore.Modules/OrchardCore.CustomSettings/Services/CustomSettingsService.cs +++ b/src/OrchardCore.Modules/OrchardCore.CustomSettings/Services/CustomSettingsService.cs @@ -33,7 +33,7 @@ public CustomSettingsService( _httpContextAccessor = httpContextAccessor; _authorizationService = authorizationService; _contentDefinitionManager = contentDefinitionManager; - _settingsTypes = new Lazy>>(async () => await GetContentTypeAsync()); + _settingsTypes = new Lazy>>(GetContentTypeAsync()); } public async Task> GetAllSettingsTypeNamesAsync() diff --git a/src/OrchardCore.Modules/OrchardCore.Deployment/Deployment/DeploymentPlanDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Deployment/Deployment/DeploymentPlanDeploymentSource.cs index f122b92eded..8f3c6f1b867 100644 --- a/src/OrchardCore.Modules/OrchardCore.Deployment/Deployment/DeploymentPlanDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Deployment/Deployment/DeploymentPlanDeploymentSource.cs @@ -1,7 +1,9 @@ using System.Collections.Generic; using System.Linq; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; +using Microsoft.Extensions.Options; namespace OrchardCore.Deployment.Deployment { @@ -9,13 +11,16 @@ public class DeploymentPlanDeploymentSource : IDeploymentSource { private readonly IDeploymentPlanService _deploymentPlanService; private readonly IEnumerable _deploymentStepFactories; + private readonly JsonSerializerOptions _jsonSerializerOptions; public DeploymentPlanDeploymentSource( IDeploymentPlanService deploymentPlanService, - IEnumerable deploymentStepFactories) + IEnumerable deploymentStepFactories, + IOptions jsonSerializerOptions) { _deploymentPlanService = deploymentPlanService; _deploymentStepFactories = deploymentStepFactories; + _jsonSerializerOptions = jsonSerializerOptions.Value; } public async Task ProcessDeploymentStepAsync(DeploymentStep deploymentStep, DeploymentPlanResult result) @@ -52,7 +57,7 @@ public async Task ProcessDeploymentStepAsync(DeploymentStep deploymentStep, Depl result.Steps.Add(new JsonObject { ["name"] = "deployment", - ["Plans"] = JArray.FromObject(plans), + ["Plans"] = JArray.FromObject(plans, _jsonSerializerOptions), }); } diff --git a/src/OrchardCore.Modules/OrchardCore.Deployment/Recipes/DeploymentPlansRecipeStep.cs b/src/OrchardCore.Modules/OrchardCore.Deployment/Recipes/DeploymentPlansRecipeStep.cs index 22af8f5010b..aa4b85650f4 100644 --- a/src/OrchardCore.Modules/OrchardCore.Deployment/Recipes/DeploymentPlansRecipeStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.Deployment/Recipes/DeploymentPlansRecipeStep.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using OrchardCore.Recipes.Models; using OrchardCore.Recipes.Services; @@ -15,13 +17,16 @@ namespace OrchardCore.Deployment.Recipes public class DeploymentPlansRecipeStep : IRecipeStepHandler { private readonly IServiceProvider _serviceProvider; + private readonly JsonSerializerOptions _jsonSerializerOptions; private readonly IDeploymentPlanService _deploymentPlanService; public DeploymentPlansRecipeStep( IServiceProvider serviceProvider, + IOptions jsonSerializerOptions, IDeploymentPlanService deploymentPlanService) { _serviceProvider = serviceProvider; + _jsonSerializerOptions = jsonSerializerOptions.Value; _deploymentPlanService = deploymentPlanService; } @@ -50,7 +55,7 @@ public Task ExecuteAsync(RecipeExecutionContext context) { if (deploymentStepFactories.TryGetValue(step.Type, out var deploymentStepFactory)) { - var deploymentStep = (DeploymentStep)step.Step.ToObject(deploymentStepFactory.Create().GetType()); + var deploymentStep = (DeploymentStep)step.Step.ToObject(deploymentStepFactory.Create().GetType(), _jsonSerializerOptions); deploymentPlan.DeploymentSteps.Add(deploymentStep); } diff --git a/src/OrchardCore.Modules/OrchardCore.Deployment/Steps/CustomFileDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Deployment/Steps/CustomFileDeploymentSource.cs index 677ad1323f8..c5586213017 100644 --- a/src/OrchardCore.Modules/OrchardCore.Deployment/Steps/CustomFileDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Deployment/Steps/CustomFileDeploymentSource.cs @@ -7,9 +7,7 @@ public class CustomFileDeploymentSource : IDeploymentSource { public Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var customFile = step as CustomFileDeploymentStep; - - if (customFile == null) + if (step is not CustomFileDeploymentStep customFile) { return Task.CompletedTask; } diff --git a/src/OrchardCore.Modules/OrchardCore.Facebook/Login/Services/FacebookLoginService.cs b/src/OrchardCore.Modules/OrchardCore.Facebook/Login/Services/FacebookLoginService.cs index a992d8151b5..adcd8ce2967 100644 --- a/src/OrchardCore.Modules/OrchardCore.Facebook/Login/Services/FacebookLoginService.cs +++ b/src/OrchardCore.Modules/OrchardCore.Facebook/Login/Services/FacebookLoginService.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.ComponentModel.DataAnnotations; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; using OrchardCore.Facebook.Login.Settings; @@ -13,8 +14,7 @@ public class FacebookLoginService : IFacebookLoginService { private readonly ISiteService _siteService; - public FacebookLoginService( - ISiteService siteService) + public FacebookLoginService(ISiteService siteService) { _siteService = siteService; } @@ -36,7 +36,7 @@ public async Task UpdateSettingsAsync(FacebookLoginSettings settings) ArgumentNullException.ThrowIfNull(settings); var container = await _siteService.LoadSiteSettingsAsync(); - container.Properties[nameof(FacebookLoginSettings)] = JObject.FromObject(settings); + container.Properties[nameof(FacebookLoginSettings)] = JObject.FromObject(settings, JOptions.Default); await _siteService.UpdateSiteSettingsAsync(container); } diff --git a/src/OrchardCore.Modules/OrchardCore.Facebook/Services/FacebookService.cs b/src/OrchardCore.Modules/OrchardCore.Facebook/Services/FacebookService.cs index 0679fbb3009..c4e0ff96c47 100644 --- a/src/OrchardCore.Modules/OrchardCore.Facebook/Services/FacebookService.cs +++ b/src/OrchardCore.Modules/OrchardCore.Facebook/Services/FacebookService.cs @@ -12,6 +12,7 @@ namespace OrchardCore.Facebook.Services public class FacebookService : IFacebookService { private readonly ISiteService _siteService; + protected readonly IStringLocalizer S; public FacebookService( diff --git a/src/OrchardCore.Modules/OrchardCore.Features/Deployment/AllFeaturesDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Features/Deployment/AllFeaturesDeploymentSource.cs index 882fceed3fd..04c038b74ca 100644 --- a/src/OrchardCore.Modules/OrchardCore.Features/Deployment/AllFeaturesDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Features/Deployment/AllFeaturesDeploymentSource.cs @@ -17,9 +17,7 @@ public AllFeaturesDeploymentSource(IModuleService moduleService) public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var allFeaturesStep = step as AllFeaturesDeploymentStep; - - if (allFeaturesStep == null) + if (step is not AllFeaturesDeploymentStep allFeaturesStep) { return; } diff --git a/src/OrchardCore.Modules/OrchardCore.Features/Recipes/Executors/FeatureStep.cs b/src/OrchardCore.Modules/OrchardCore.Features/Recipes/Executors/FeatureStep.cs index 26a7f701851..411c423f494 100644 --- a/src/OrchardCore.Modules/OrchardCore.Features/Recipes/Executors/FeatureStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.Features/Recipes/Executors/FeatureStep.cs @@ -15,7 +15,8 @@ public class FeatureStep : IRecipeStepHandler { private readonly IShellFeaturesManager _shellFeaturesManager; - public FeatureStep(IShellFeaturesManager shellFeaturesManager) + public FeatureStep( + IShellFeaturesManager shellFeaturesManager) { _shellFeaturesManager = shellFeaturesManager; } @@ -29,12 +30,12 @@ public async Task ExecuteAsync(RecipeExecutionContext context) var step = context.Step.ToObject(); - var features = (await _shellFeaturesManager.GetAvailableFeaturesAsync()); + var features = await _shellFeaturesManager.GetAvailableFeaturesAsync(); - var featuresToDisable = features.Where(x => step.Disable?.Contains(x.Id) == true).ToList(); - var featuresToEnable = features.Where(x => step.Enable?.Contains(x.Id) == true).ToList(); + var featuresToDisable = features.Where(x => step.Disable?.Contains(x.Id) == true).ToArray(); + var featuresToEnable = features.Where(x => step.Enable?.Contains(x.Id) == true).ToArray(); - if (featuresToDisable.Count > 0 || featuresToEnable.Count > 0) + if (featuresToDisable.Length > 0 || featuresToEnable.Length > 0) { await _shellFeaturesManager.UpdateFeaturesAsync(featuresToDisable, featuresToEnable, true); } diff --git a/src/OrchardCore.Modules/OrchardCore.Flows/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Flows/Startup.cs index 58884ad145d..ba65ad68400 100644 --- a/src/OrchardCore.Modules/OrchardCore.Flows/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Flows/Startup.cs @@ -1,15 +1,9 @@ -using System; using Fluid; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using OrchardCore.Admin; using OrchardCore.ContentManagement; using OrchardCore.ContentManagement.Display.ContentDisplay; using OrchardCore.ContentTypes.Editors; using OrchardCore.Data.Migration; -using OrchardCore.Flows.Controllers; using OrchardCore.Flows.Drivers; using OrchardCore.Flows.Handlers; using OrchardCore.Flows.Indexing; @@ -18,7 +12,6 @@ using OrchardCore.Flows.ViewModels; using OrchardCore.Indexing; using OrchardCore.Modules; -using OrchardCore.Mvc.Core.Utilities; namespace OrchardCore.Flows { diff --git a/src/OrchardCore.Modules/OrchardCore.Layers/Deployment/AllLayersDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Layers/Deployment/AllLayersDeploymentSource.cs index 7b30fe6f5bf..a1fb33a8497 100644 --- a/src/OrchardCore.Modules/OrchardCore.Layers/Deployment/AllLayersDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Layers/Deployment/AllLayersDeploymentSource.cs @@ -1,10 +1,8 @@ using System.Text.Json; using System.Text.Json.Nodes; -using System.Text.Json.Serialization; using System.Threading.Tasks; using Microsoft.Extensions.Options; using OrchardCore.Deployment; -using OrchardCore.Json; using OrchardCore.Layers.Models; using OrchardCore.Layers.Services; using OrchardCore.Settings; @@ -15,28 +13,21 @@ public class AllLayersDeploymentSource : IDeploymentSource { private readonly ILayerService _layerService; private readonly ISiteService _siteService; - private readonly JsonSerializerOptions _serializationOptions; + private readonly JsonSerializerOptions _jsonSerializerOptions; public AllLayersDeploymentSource( ILayerService layerService, ISiteService siteService, - IOptions derivedTypesOptions) + IOptions serializationOptions) { _layerService = layerService; _siteService = siteService; - - // The recipe step contains polymorphic types which need to be resolved - _serializationOptions = new() - { - TypeInfoResolver = new PolymorphicJsonTypeInfoResolver(derivedTypesOptions.Value) - }; + _jsonSerializerOptions = serializationOptions.Value; } public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var allLayersStep = step as AllLayersDeploymentStep; - - if (allLayersStep == null) + if (step is not AllLayersDeploymentStep) { return; } @@ -46,7 +37,7 @@ public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlan result.Steps.Add(new JsonObject { ["name"] = "Layers", - ["Layers"] = JArray.FromObject(layers.Layers, _serializationOptions), + ["Layers"] = JArray.FromObject(layers.Layers, _jsonSerializerOptions), }); var siteSettings = await _siteService.GetSiteSettingsAsync(); diff --git a/src/OrchardCore.Modules/OrchardCore.Layers/Recipes/LayerStep.cs b/src/OrchardCore.Modules/OrchardCore.Layers/Recipes/LayerStep.cs index 2c6ba7d64dd..43ec709329e 100644 --- a/src/OrchardCore.Modules/OrchardCore.Layers/Recipes/LayerStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.Layers/Recipes/LayerStep.cs @@ -3,10 +3,8 @@ using System.Linq; using System.Text.Json; using System.Text.Json.Nodes; -using System.Text.Json.Serialization; using System.Threading.Tasks; using Microsoft.Extensions.Options; -using OrchardCore.Json; using OrchardCore.Layers.Models; using OrchardCore.Layers.Services; using OrchardCore.Recipes.Models; @@ -32,17 +30,13 @@ public LayerStep( IRuleMigrator ruleMigrator, IConditionIdGenerator conditionIdGenerator, IEnumerable factories, - IOptions derivedTypesOptions) + IOptions serializationOptions) { _layerService = layerService; _ruleMigrator = ruleMigrator; _conditionIdGenerator = conditionIdGenerator; _factories = factories; - - _serializationOptions = new() - { - TypeInfoResolver = new PolymorphicJsonTypeInfoResolver(derivedTypesOptions.Value) - }; + _serializationOptions = serializationOptions.Value; } public async Task ExecuteAsync(RecipeExecutionContext context) diff --git a/src/OrchardCore.Modules/OrchardCore.Lists/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Lists/Startup.cs index c2c99f1bc04..1e306ffbbaa 100644 --- a/src/OrchardCore.Modules/OrchardCore.Lists/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Lists/Startup.cs @@ -3,8 +3,6 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using OrchardCore.Admin; using OrchardCore.AdminMenu; using OrchardCore.ContentLocalization.Handlers; using OrchardCore.ContentLocalization.Models; diff --git a/src/OrchardCore.Modules/OrchardCore.Media.AmazonS3/Controllers/AdminController.cs b/src/OrchardCore.Modules/OrchardCore.Media.AmazonS3/Controllers/AdminController.cs index 31c67894a66..3db2145da07 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media.AmazonS3/Controllers/AdminController.cs +++ b/src/OrchardCore.Modules/OrchardCore.Media.AmazonS3/Controllers/AdminController.cs @@ -1,6 +1,4 @@ -using System; using System.Linq; -using System.Text; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; diff --git a/src/OrchardCore.Modules/OrchardCore.Media.Azure/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Media.Azure/Startup.cs index 513fc37613a..435dc5f42cb 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media.Azure/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Media.Azure/Startup.cs @@ -1,15 +1,12 @@ using System; using System.IO; -using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.StaticFiles; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -using OrchardCore.Admin; using OrchardCore.Environment.Shell; using OrchardCore.Environment.Shell.Configuration; using OrchardCore.FileStorage; @@ -18,7 +15,6 @@ using OrchardCore.Media.Core.Events; using OrchardCore.Media.Events; using OrchardCore.Modules; -using OrchardCore.Mvc.Core.Utilities; using OrchardCore.Navigation; using OrchardCore.Security.Permissions; diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Deployment/AllMediaProfilesDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Media/Deployment/AllMediaProfilesDeploymentSource.cs index 6c88cdf7683..0c64a52b54b 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Deployment/AllMediaProfilesDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Media/Deployment/AllMediaProfilesDeploymentSource.cs @@ -16,9 +16,7 @@ public AllMediaProfilesDeploymentSource(MediaProfilesManager mediaProfilesManage public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var allMediaProfilesStep = step as AllMediaProfilesDeploymentStep; - - if (allMediaProfilesStep == null) + if (step is not AllMediaProfilesDeploymentStep) { return; } diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Migrations.cs b/src/OrchardCore.Modules/OrchardCore.Media/Migrations.cs index bc35f2ceaa2..f1e1f87a8c2 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Migrations.cs +++ b/src/OrchardCore.Modules/OrchardCore.Media/Migrations.cs @@ -13,7 +13,9 @@ public class Migrations : DataMigration private readonly IContentDefinitionManager _contentDefinitionManager; private readonly ShellDescriptor _shellDescriptor; - public Migrations(IContentDefinitionManager contentDefinitionManager, ShellDescriptor shellDescriptor) + public Migrations( + IContentDefinitionManager contentDefinitionManager, + ShellDescriptor shellDescriptor) { _contentDefinitionManager = contentDefinitionManager; _shellDescriptor = shellDescriptor; diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Media/Startup.cs index aabbd807d39..58c196e338b 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Media/Startup.cs @@ -1,3 +1,5 @@ +using System; +using System.IO; using Fluid; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Builder; @@ -48,8 +50,6 @@ using SixLabors.ImageSharp.Web.DependencyInjection; using SixLabors.ImageSharp.Web.Middleware; using SixLabors.ImageSharp.Web.Providers; -using System; -using System.IO; namespace OrchardCore.Media { diff --git a/src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/Deployment/AzureADDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/Deployment/AzureADDeploymentSource.cs index ce399d0b817..a252c36473d 100644 --- a/src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/Deployment/AzureADDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/Deployment/AzureADDeploymentSource.cs @@ -1,3 +1,4 @@ +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; using OrchardCore.Deployment; @@ -17,9 +18,7 @@ public AzureADDeploymentSource(IAzureADService azureADService) public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var azureADStep = step as AzureADDeploymentStep; - - if (azureADStep == null) + if (step is not AzureADDeploymentStep azureADStep) { return; } @@ -28,7 +27,7 @@ public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlan var obj = new JsonObject { ["name"] = nameof(AzureADSettings) }; - obj.Merge(JObject.FromObject(settings)); + obj.Merge(JObject.FromObject(settings, JOptions.Default)); result.Steps.Add(obj); } diff --git a/src/OrchardCore.Modules/OrchardCore.OpenId/Recipes/OpenIdServerSettingsStep.cs b/src/OrchardCore.Modules/OrchardCore.OpenId/Recipes/OpenIdServerSettingsStep.cs index fc40623cb37..91f5c8b8d4a 100644 --- a/src/OrchardCore.Modules/OrchardCore.OpenId/Recipes/OpenIdServerSettingsStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.OpenId/Recipes/OpenIdServerSettingsStep.cs @@ -17,7 +17,9 @@ public class OpenIdServerSettingsStep : IRecipeStepHandler private readonly IOpenIdServerService _serverService; public OpenIdServerSettingsStep(IOpenIdServerService serverService) - => _serverService = serverService; + { + _serverService = serverService; + } public async Task ExecuteAsync(RecipeExecutionContext context) { diff --git a/src/OrchardCore.Modules/OrchardCore.OpenId/Recipes/OpenIdValidationSettingsStep.cs b/src/OrchardCore.Modules/OrchardCore.OpenId/Recipes/OpenIdValidationSettingsStep.cs index e305181a7ca..fbf75ec3595 100644 --- a/src/OrchardCore.Modules/OrchardCore.OpenId/Recipes/OpenIdValidationSettingsStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.OpenId/Recipes/OpenIdValidationSettingsStep.cs @@ -15,8 +15,11 @@ public class OpenIdValidationSettingsStep : IRecipeStepHandler { private readonly IOpenIdValidationService _validationService; - public OpenIdValidationSettingsStep(IOpenIdValidationService validationService) - => _validationService = validationService; + public OpenIdValidationSettingsStep( + IOpenIdValidationService validationService) + { + _validationService = validationService; + } public async Task ExecuteAsync(RecipeExecutionContext context) { diff --git a/src/OrchardCore.Modules/OrchardCore.OpenId/Recipes/OpenIdValidationSettingsStepModel.cs b/src/OrchardCore.Modules/OrchardCore.OpenId/Recipes/OpenIdValidationSettingsStepModel.cs index 729fdfef66f..deb28ced670 100644 --- a/src/OrchardCore.Modules/OrchardCore.OpenId/Recipes/OpenIdValidationSettingsStepModel.cs +++ b/src/OrchardCore.Modules/OrchardCore.OpenId/Recipes/OpenIdValidationSettingsStepModel.cs @@ -2,11 +2,12 @@ namespace OrchardCore.OpenId.Recipes { public class OpenIdValidationSettingsStepModel { - public string MetadataAddress { get; set; } + public string Audience { get; set; } public string Authority { get; set; } + public bool DisableTokenTypeValidation { get; set; } public string Tenant { get; set; } diff --git a/src/OrchardCore.Modules/OrchardCore.OpenId/Services/OpenIdClientService.cs b/src/OrchardCore.Modules/OrchardCore.OpenId/Services/OpenIdClientService.cs index 6fad5099a0b..af48416387c 100644 --- a/src/OrchardCore.Modules/OrchardCore.OpenId/Services/OpenIdClientService.cs +++ b/src/OrchardCore.Modules/OrchardCore.OpenId/Services/OpenIdClientService.cs @@ -13,6 +13,7 @@ namespace OrchardCore.OpenId.Services public class OpenIdClientService : IOpenIdClientService { private readonly ISiteService _siteService; + protected readonly IStringLocalizer S; public OpenIdClientService( diff --git a/src/OrchardCore.Modules/OrchardCore.OpenId/Services/OpenIdServerService.cs b/src/OrchardCore.Modules/OrchardCore.OpenId/Services/OpenIdServerService.cs index 81b6f398c94..381f4185c9c 100644 --- a/src/OrchardCore.Modules/OrchardCore.OpenId/Services/OpenIdServerService.cs +++ b/src/OrchardCore.Modules/OrchardCore.OpenId/Services/OpenIdServerService.cs @@ -7,6 +7,7 @@ using System.Runtime.InteropServices; using System.Security.Cryptography; using System.Security.Cryptography.X509Certificates; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; using Microsoft.AspNetCore.DataProtection; @@ -29,6 +30,7 @@ public class OpenIdServerService : IOpenIdServerService private readonly IOptionsMonitor _shellOptions; private readonly ShellSettings _shellSettings; private readonly ISiteService _siteService; + protected readonly IStringLocalizer S; public OpenIdServerService( @@ -65,7 +67,7 @@ private OpenIdServerSettings GetSettingsFromContainer(ISite container) { if (container.Properties.TryGetPropertyValue(nameof(OpenIdServerSettings), out var settings)) { - return settings.ToObject(); + return settings.ToObject(JOptions.Default); } // If the OpenID server settings haven't been populated yet, the authorization, @@ -89,7 +91,7 @@ public async Task UpdateSettingsAsync(OpenIdServerSettings settings) ArgumentNullException.ThrowIfNull(settings); var container = await _siteService.LoadSiteSettingsAsync(); - container.Properties[nameof(OpenIdServerSettings)] = JObject.FromObject(settings); + container.Properties[nameof(OpenIdServerSettings)] = JObject.FromObject(settings, JOptions.Default); await _siteService.UpdateSiteSettingsAsync(container); } diff --git a/src/OrchardCore.Modules/OrchardCore.OpenId/Services/OpenIdValidationService.cs b/src/OrchardCore.Modules/OrchardCore.OpenId/Services/OpenIdValidationService.cs index 4b17a6d5887..52fbef3f6d3 100644 --- a/src/OrchardCore.Modules/OrchardCore.OpenId/Services/OpenIdValidationService.cs +++ b/src/OrchardCore.Modules/OrchardCore.OpenId/Services/OpenIdValidationService.cs @@ -22,6 +22,7 @@ public class OpenIdValidationService : IOpenIdValidationService private readonly ShellSettings _shellSettings; private readonly IShellHost _shellHost; private readonly ISiteService _siteService; + protected readonly IStringLocalizer S; public OpenIdValidationService( diff --git a/src/OrchardCore.Modules/OrchardCore.OpenId/Settings/OpenIdValidationSettings.cs b/src/OrchardCore.Modules/OrchardCore.OpenId/Settings/OpenIdValidationSettings.cs index 3aacb8406de..873bd399c00 100644 --- a/src/OrchardCore.Modules/OrchardCore.OpenId/Settings/OpenIdValidationSettings.cs +++ b/src/OrchardCore.Modules/OrchardCore.OpenId/Settings/OpenIdValidationSettings.cs @@ -9,6 +9,5 @@ public class OpenIdValidationSettings public bool DisableTokenTypeValidation { get; set; } public string Tenant { get; set; } public Uri MetadataAddress { get; set; } - } } diff --git a/src/OrchardCore.Modules/OrchardCore.OpenId/Startup.cs b/src/OrchardCore.Modules/OrchardCore.OpenId/Startup.cs index 4b011821039..709b4fc4cd6 100644 --- a/src/OrchardCore.Modules/OrchardCore.OpenId/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.OpenId/Startup.cs @@ -1,3 +1,8 @@ +using System; +using System.ComponentModel.DataAnnotations; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Builder; @@ -29,11 +34,6 @@ using OrchardCore.Security; using OrchardCore.Security.Permissions; using OrchardCore.Settings; -using System; -using System.ComponentModel.DataAnnotations; -using System.Diagnostics; -using System.Linq; -using System.Threading.Tasks; namespace OrchardCore.OpenId { diff --git a/src/OrchardCore.Modules/OrchardCore.Placements/Deployment/PlacementsDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Placements/Deployment/PlacementsDeploymentSource.cs index f2c92873ab3..be178f4910b 100644 --- a/src/OrchardCore.Modules/OrchardCore.Placements/Deployment/PlacementsDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Placements/Deployment/PlacementsDeploymentSource.cs @@ -1,5 +1,7 @@ +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; +using Microsoft.Extensions.Options; using OrchardCore.Deployment; using OrchardCore.Placements.Services; @@ -8,17 +10,19 @@ namespace OrchardCore.Placements.Deployment public class PlacementsDeploymentSource : IDeploymentSource { private readonly PlacementsManager _placementsManager; + private readonly JsonSerializerOptions _jsonSerializerOptions; - public PlacementsDeploymentSource(PlacementsManager placementsManager) + public PlacementsDeploymentSource( + PlacementsManager placementsManager, + IOptions jsonSerializerOptions) { _placementsManager = placementsManager; + _jsonSerializerOptions = jsonSerializerOptions.Value; } public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var placementsStep = step as PlacementsDeploymentStep; - - if (placementsStep == null) + if (step is not PlacementsDeploymentStep) { return; } @@ -28,7 +32,7 @@ public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlan foreach (var placement in placements) { - placementObjects[placement.Key] = JArray.FromObject(placement.Value); + placementObjects[placement.Key] = JArray.FromObject(placement.Value, _jsonSerializerOptions); } result.Steps.Add(new JsonObject diff --git a/src/OrchardCore.Modules/OrchardCore.Queries/Deployment/AllQueriesDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Queries/Deployment/AllQueriesDeploymentSource.cs index 7c7b4643f07..7ecdc9e65a8 100644 --- a/src/OrchardCore.Modules/OrchardCore.Queries/Deployment/AllQueriesDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Queries/Deployment/AllQueriesDeploymentSource.cs @@ -1,5 +1,7 @@ +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; +using Microsoft.Extensions.Options; using OrchardCore.Deployment; namespace OrchardCore.Queries.Deployment @@ -7,10 +9,14 @@ namespace OrchardCore.Queries.Deployment public class AllQueriesDeploymentSource : IDeploymentSource { private readonly IQueryManager _queryManager; + private readonly JsonSerializerOptions _jsonSerializerOptions; - public AllQueriesDeploymentSource(IQueryManager queryManager) + public AllQueriesDeploymentSource( + IQueryManager queryManager, + IOptions jsonSerializerOptions) { _queryManager = queryManager; + _jsonSerializerOptions = jsonSerializerOptions.Value; } public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) @@ -27,7 +33,7 @@ public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlan result.Steps.Add(new JsonObject { ["name"] = "Queries", - ["Queries"] = JArray.FromObject(queries), + ["Queries"] = JArray.FromObject(queries, _jsonSerializerOptions), }); } } diff --git a/src/OrchardCore.Modules/OrchardCore.Queries/Recipes/QueryStep.cs b/src/OrchardCore.Modules/OrchardCore.Queries/Recipes/QueryStep.cs index 56f988b7913..e46b2baaf17 100644 --- a/src/OrchardCore.Modules/OrchardCore.Queries/Recipes/QueryStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.Queries/Recipes/QueryStep.cs @@ -1,9 +1,11 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using OrchardCore.Recipes.Models; using OrchardCore.Recipes.Services; @@ -16,15 +18,18 @@ public class QueryStep : IRecipeStepHandler { private readonly IQueryManager _queryManager; private readonly IEnumerable _querySources; + private readonly JsonSerializerOptions _jsonSerializerOptions; private readonly ILogger _logger; public QueryStep( IQueryManager queryManager, IEnumerable querySources, + IOptions jsonSerializerOptions, ILogger logger) { _queryManager = queryManager; _querySources = querySources; + _jsonSerializerOptions = jsonSerializerOptions.Value; _logger = logger; } @@ -35,7 +40,7 @@ public async Task ExecuteAsync(RecipeExecutionContext context) return; } - var model = context.Step.ToObject(); + var model = context.Step.ToObject(_jsonSerializerOptions); foreach (var token in model.Queries.Cast()) { @@ -49,7 +54,7 @@ public async Task ExecuteAsync(RecipeExecutionContext context) continue; } - var query = token.ToObject(sample.GetType()) as Query; + var query = token.ToObject(sample.GetType(), _jsonSerializerOptions) as Query; await _queryManager.SaveQueryAsync(query.Name, query); } } diff --git a/src/OrchardCore.Modules/OrchardCore.Queries/Sql/SqlQuerySource.cs b/src/OrchardCore.Modules/OrchardCore.Queries/Sql/SqlQuerySource.cs index 555b43c186c..dac4c8d7120 100644 --- a/src/OrchardCore.Modules/OrchardCore.Queries/Sql/SqlQuerySource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Queries/Sql/SqlQuerySource.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; using Dapper; @@ -19,17 +20,20 @@ public class SqlQuerySource : IQuerySource private readonly ILiquidTemplateManager _liquidTemplateManager; private readonly IDbConnectionAccessor _dbConnectionAccessor; private readonly ISession _session; + private readonly JsonSerializerOptions _jsonSerializerOptions; private readonly TemplateOptions _templateOptions; public SqlQuerySource( ILiquidTemplateManager liquidTemplateManager, IDbConnectionAccessor dbConnectionAccessor, ISession session, + IOptions jsonSerializerOptions, IOptions templateOptions) { _liquidTemplateManager = liquidTemplateManager; _dbConnectionAccessor = dbConnectionAccessor; _session = session; + _jsonSerializerOptions = jsonSerializerOptions.Value; _templateOptions = templateOptions.Value; } @@ -82,7 +86,7 @@ public async Task ExecuteQueryAsync(Query query, IDictionary(); foreach (var document in queryResults) { - results.Add(JObject.FromObject(document)); + results.Add(JObject.FromObject(document, _jsonSerializerOptions)); } sqlQueryResults.Items = results; diff --git a/src/OrchardCore.Modules/OrchardCore.Roles/Deployment/AllRolesDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Roles/Deployment/AllRolesDeploymentSource.cs index 80bf4a3c077..49a769415fa 100644 --- a/src/OrchardCore.Modules/OrchardCore.Roles/Deployment/AllRolesDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Roles/Deployment/AllRolesDeploymentSource.cs @@ -16,7 +16,9 @@ public class AllRolesDeploymentSource : IDeploymentSource private readonly RoleManager _roleManager; private readonly IRoleService _roleService; - public AllRolesDeploymentSource(RoleManager roleManager, IRoleService roleService) + public AllRolesDeploymentSource( + RoleManager roleManager, + IRoleService roleService) { _roleManager = roleManager; _roleService = roleService; diff --git a/src/OrchardCore.Modules/OrchardCore.Roles/Recipes/RolesStep.cs b/src/OrchardCore.Modules/OrchardCore.Roles/Recipes/RolesStep.cs index 22368501705..133d4bcb525 100644 --- a/src/OrchardCore.Modules/OrchardCore.Roles/Recipes/RolesStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.Roles/Recipes/RolesStep.cs @@ -34,7 +34,9 @@ public async Task ExecuteAsync(RecipeExecutionContext context) foreach (var importedRole in model.Roles) { if (string.IsNullOrWhiteSpace(importedRole.Name)) + { continue; + } var role = (Role)await _roleManager.FindByNameAsync(importedRole.Name); var isNewRole = role == null; diff --git a/src/OrchardCore.Modules/OrchardCore.Search.Elasticsearch/Drivers/ContentPickerFieldElasticEditorSettingsDriver.cs b/src/OrchardCore.Modules/OrchardCore.Search.Elasticsearch/Drivers/ContentPickerFieldElasticEditorSettingsDriver.cs index f8e99254417..b0bdf7a7a52 100644 --- a/src/OrchardCore.Modules/OrchardCore.Search.Elasticsearch/Drivers/ContentPickerFieldElasticEditorSettingsDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Search.Elasticsearch/Drivers/ContentPickerFieldElasticEditorSettingsDriver.cs @@ -13,7 +13,8 @@ public class ContentPickerFieldElasticEditorSettingsDriver : ContentPartFieldDef { private readonly ElasticIndexSettingsService _elasticIndexSettingsService; - public ContentPickerFieldElasticEditorSettingsDriver(ElasticIndexSettingsService elasticIndexSettingsService) + public ContentPickerFieldElasticEditorSettingsDriver( + ElasticIndexSettingsService elasticIndexSettingsService) { _elasticIndexSettingsService = elasticIndexSettingsService; } diff --git a/src/OrchardCore.Modules/OrchardCore.Search.Elasticsearch/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Search.Elasticsearch/Startup.cs index bcdb989d4ff..2bb7960ad40 100644 --- a/src/OrchardCore.Modules/OrchardCore.Search.Elasticsearch/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Search.Elasticsearch/Startup.cs @@ -1,3 +1,5 @@ +using System.Text.Json; +using System.Text.Json.Nodes; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -23,8 +25,6 @@ using OrchardCore.Search.Lucene.Handler; using OrchardCore.Security.Permissions; using OrchardCore.Settings; -using System.Text.Json; -using System.Text.Json.Nodes; namespace OrchardCore.Search.Elasticsearch { diff --git a/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Deployment/LuceneIndexDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Deployment/LuceneIndexDeploymentSource.cs index 6d0b56f9339..a2c024f00c8 100644 --- a/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Deployment/LuceneIndexDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Deployment/LuceneIndexDeploymentSource.cs @@ -18,9 +18,7 @@ public LuceneIndexDeploymentSource(LuceneIndexSettingsService luceneIndexSetting public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var luceneIndexStep = step as LuceneIndexDeploymentStep; - - if (luceneIndexStep == null) + if (step is not LuceneIndexDeploymentStep luceneIndexStep) { return; } diff --git a/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Deployment/LuceneSettingsDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Deployment/LuceneSettingsDeploymentSource.cs index 1dd1a929c3e..40191ae032d 100644 --- a/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Deployment/LuceneSettingsDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Deployment/LuceneSettingsDeploymentSource.cs @@ -15,9 +15,7 @@ public LuceneSettingsDeploymentSource(LuceneIndexingService luceneIndexingServic public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var luceneSettingsStep = step as LuceneSettingsDeploymentStep; - - if (luceneSettingsStep == null) + if (step is not LuceneSettingsDeploymentStep) { return; } diff --git a/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Recipes/LuceneIndexRebuildStep.cs b/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Recipes/LuceneIndexRebuildStep.cs index 3131c9a8638..c3dfae69f51 100644 --- a/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Recipes/LuceneIndexRebuildStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Recipes/LuceneIndexRebuildStep.cs @@ -1,8 +1,10 @@ using System; using System.Linq; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; using OrchardCore.BackgroundJobs; using OrchardCore.Recipes.Models; using OrchardCore.Recipes.Services; @@ -10,7 +12,7 @@ namespace OrchardCore.Search.Lucene.Recipes { /// - /// This recipe step rebuilds a lucene index. + /// This recipe step rebuilds a Lucene index. /// public class LuceneIndexRebuildStep : IRecipeStepHandler { diff --git a/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Startup.cs index c1131e3a7b4..9d06c767f65 100644 --- a/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Search.Lucene/Startup.cs @@ -1,3 +1,4 @@ +using System.Text.Json.Serialization; using Lucene.Net.Analysis.Standard; using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.DependencyInjection; @@ -24,7 +25,6 @@ using OrchardCore.Search.Lucene.Settings; using OrchardCore.Security.Permissions; using OrchardCore.Settings; -using System.Text.Json.Serialization; namespace OrchardCore.Search.Lucene { diff --git a/src/OrchardCore.Modules/OrchardCore.Search/Deployment/SearchSettingsDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Search/Deployment/SearchSettingsDeploymentSource.cs index 392dc578ab3..a461a61f723 100644 --- a/src/OrchardCore.Modules/OrchardCore.Search/Deployment/SearchSettingsDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Search/Deployment/SearchSettingsDeploymentSource.cs @@ -17,9 +17,7 @@ public SearchSettingsDeploymentSource(ISiteService site) public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var searchSettingsStep = step as SearchSettingsDeploymentStep; - - if (searchSettingsStep == null) + if (step is not SearchSettingsDeploymentStep) { return; } diff --git a/src/OrchardCore.Modules/OrchardCore.Settings/Deployment/SiteSettingsDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Settings/Deployment/SiteSettingsDeploymentSource.cs index 8a09407607a..3a163c5705d 100644 --- a/src/OrchardCore.Modules/OrchardCore.Settings/Deployment/SiteSettingsDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Settings/Deployment/SiteSettingsDeploymentSource.cs @@ -16,8 +16,7 @@ public SiteSettingsDeploymentSource(ISiteService siteService) public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var settingsStep = step as SiteSettingsDeploymentStep; - if (settingsStep == null) + if (step is not SiteSettingsDeploymentStep settingsStep) { return; } diff --git a/src/OrchardCore.Modules/OrchardCore.Shortcodes/Deployment/AllShortcodeTemplatesDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Shortcodes/Deployment/AllShortcodeTemplatesDeploymentSource.cs index 5c4eaf2d69c..277093f5b0d 100644 --- a/src/OrchardCore.Modules/OrchardCore.Shortcodes/Deployment/AllShortcodeTemplatesDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Shortcodes/Deployment/AllShortcodeTemplatesDeploymentSource.cs @@ -16,9 +16,7 @@ public AllShortcodeTemplatesDeploymentSource(ShortcodeTemplatesManager templates public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var allTemplatesStep = step as AllShortcodeTemplatesDeploymentStep; - - if (allTemplatesStep == null) + if (step is not AllShortcodeTemplatesDeploymentStep) { return; } diff --git a/src/OrchardCore.Modules/OrchardCore.Sitemaps/Recipes/SitemapsStep.cs b/src/OrchardCore.Modules/OrchardCore.Sitemaps/Recipes/SitemapsStep.cs index edfc620e226..340ae02b6e3 100644 --- a/src/OrchardCore.Modules/OrchardCore.Sitemaps/Recipes/SitemapsStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.Sitemaps/Recipes/SitemapsStep.cs @@ -16,7 +16,8 @@ public class SitemapsStep : IRecipeStepHandler { private readonly ISitemapManager _sitemapManager; - public SitemapsStep(ISitemapManager sitemapManager) + public SitemapsStep( + ISitemapManager sitemapManager) { _sitemapManager = sitemapManager; } diff --git a/src/OrchardCore.Modules/OrchardCore.Sitemaps/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Sitemaps/Startup.cs index 3ea66075970..139db9fdec1 100644 --- a/src/OrchardCore.Modules/OrchardCore.Sitemaps/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Sitemaps/Startup.cs @@ -1,3 +1,5 @@ +using System; +using System.Text.Json.Serialization; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; @@ -23,8 +25,6 @@ using OrchardCore.Sitemaps.Recipes; using OrchardCore.Sitemaps.Routing; using OrchardCore.Sitemaps.Services; -using System; -using System.Text.Json.Serialization; namespace OrchardCore.Sitemaps { diff --git a/src/OrchardCore.Modules/OrchardCore.Spatial/Drivers/GeoPointFieldSettingsDriver.cs b/src/OrchardCore.Modules/OrchardCore.Spatial/Drivers/GeoPointFieldSettingsDriver.cs index d33fcdce8c1..aa314a4afb2 100644 --- a/src/OrchardCore.Modules/OrchardCore.Spatial/Drivers/GeoPointFieldSettingsDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Spatial/Drivers/GeoPointFieldSettingsDriver.cs @@ -18,8 +18,7 @@ public override IDisplayResult Edit(ContentPartFieldDefinition partFieldDefiniti model.Hint = settings.Hint; model.Required = settings.Required; - }) - .Location("Content"); + }).Location("Content"); } public override async Task UpdateAsync(ContentPartFieldDefinition partFieldDefinition, UpdatePartFieldEditorContext context) diff --git a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Controllers/AdminController.cs b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Controllers/AdminController.cs index 08b5ad0b717..ffc2d45e3fc 100644 --- a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Controllers/AdminController.cs +++ b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Controllers/AdminController.cs @@ -1,10 +1,12 @@ using System.Linq; +using System.Text.Json; using System.Text.Json.Nodes; using System.Text.Json.Settings; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.Extensions.Options; using OrchardCore.Admin; using OrchardCore.ContentManagement; using OrchardCore.ContentManagement.Display; @@ -25,10 +27,11 @@ public class AdminController : Controller private readonly IContentItemDisplayManager _contentItemDisplayManager; private readonly IContentDefinitionManager _contentDefinitionManager; private readonly ISession _session; - protected readonly IHtmlLocalizer H; private readonly INotifier _notifier; private readonly IUpdateModelAccessor _updateModelAccessor; + protected readonly IHtmlLocalizer H; + public AdminController( ISession session, IContentManager contentManager, @@ -182,7 +185,7 @@ public async Task Edit(string taxonomyContentItemId, string taxon } // Look for the target taxonomy item in the hierarchy. - JsonObject taxonomyItem = FindTaxonomyItem((JsonObject)taxonomy.As().Content, taxonomyItemId); + var taxonomyItem = FindTaxonomyItem((JsonObject)taxonomy.As().Content, taxonomyItemId); // Couldn't find targeted taxonomy item. if (taxonomyItem == null) @@ -235,7 +238,7 @@ public async Task EditPost(string taxonomyContentItemId, string t } // Look for the target taxonomy item in the hierarchy. - JsonObject taxonomyItem = FindTaxonomyItem((JsonObject)taxonomy.As().Content, taxonomyItemId); + var taxonomyItem = FindTaxonomyItem((JsonObject)taxonomy.As().Content, taxonomyItemId); // Couldn't find targeted taxonomy item. if (taxonomyItem == null) diff --git a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Drivers/TaxonomyContentsAdminListDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Drivers/TaxonomyContentsAdminListDisplayDriver.cs index 865ea3d37a4..4e3cb88a468 100644 --- a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Drivers/TaxonomyContentsAdminListDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Drivers/TaxonomyContentsAdminListDisplayDriver.cs @@ -28,6 +28,7 @@ public class TaxonomyContentsAdminListDisplayDriver : DisplayDriver { private readonly IContentManager _contentManager; + protected readonly IStringLocalizer S; public TaxonomyFieldTagsDisplayDriver( IContentManager contentManager, - IStringLocalizer s) + IStringLocalizer stringLocalizer) { _contentManager = contentManager; - S = s; + S = stringLocalizer; } public override IDisplayResult Display(TaxonomyField field, BuildFieldDisplayContext context) diff --git a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Indexing/TaxonomyIndex.cs b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Indexing/TaxonomyIndex.cs index a0500909d4e..2a48c14b072 100644 --- a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Indexing/TaxonomyIndex.cs +++ b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Indexing/TaxonomyIndex.cs @@ -29,7 +29,8 @@ public class TaxonomyIndexProvider : IndexProvider, IScopedIndexPro private readonly HashSet _ignoredTypes = []; private IContentDefinitionManager _contentDefinitionManager; - public TaxonomyIndexProvider(IServiceProvider serviceProvider) + public TaxonomyIndexProvider( + IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } diff --git a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Settings/TaxonomyFieldSettingsDriver.cs b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Settings/TaxonomyFieldSettingsDriver.cs index e70cc65b180..d1d6bc215dc 100644 --- a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Settings/TaxonomyFieldSettingsDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Settings/TaxonomyFieldSettingsDriver.cs @@ -21,8 +21,7 @@ public override IDisplayResult Edit(ContentPartFieldDefinition partFieldDefiniti model.Unique = settings.Unique; model.LeavesOnly = settings.LeavesOnly; model.Open = settings.Open; - }) - .Location("Content"); + }).Location("Content"); } public override async Task UpdateAsync(ContentPartFieldDefinition partFieldDefinition, UpdatePartFieldEditorContext context) diff --git a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Settings/TaxonomyFieldTagsEditorSettingsDriver.cs b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Settings/TaxonomyFieldTagsEditorSettingsDriver.cs index b40c5972991..654094f2d1b 100644 --- a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Settings/TaxonomyFieldTagsEditorSettingsDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Settings/TaxonomyFieldTagsEditorSettingsDriver.cs @@ -16,8 +16,7 @@ public override IDisplayResult Edit(ContentPartFieldDefinition partFieldDefiniti var settings = partFieldDefinition.Settings.ToObject(); model.Open = settings.Open; - }) - .Location("Content"); + }).Location("Content"); } public override async Task UpdateAsync(ContentPartFieldDefinition partFieldDefinition, UpdatePartFieldEditorContext context) diff --git a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Startup.cs index 9add4f47987..48845159375 100644 --- a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Startup.cs @@ -1,3 +1,4 @@ +using System; using Fluid; using Microsoft.Extensions.DependencyInjection; using OrchardCore.Apis; @@ -28,7 +29,6 @@ using OrchardCore.Taxonomies.Services; using OrchardCore.Taxonomies.Settings; using OrchardCore.Taxonomies.ViewModels; -using System; namespace OrchardCore.Taxonomies { diff --git a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Views/Content.TermAdmin.cshtml b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Views/Content.TermAdmin.cshtml index 3f7a4ae7e53..fa6c90b4d0e 100644 --- a/src/OrchardCore.Modules/OrchardCore.Taxonomies/Views/Content.TermAdmin.cshtml +++ b/src/OrchardCore.Modules/OrchardCore.Taxonomies/Views/Content.TermAdmin.cshtml @@ -2,7 +2,6 @@ @inject OrchardCore.ContentManagement.Display.IContentItemDisplayManager ContentItemDisplayManager @inject OrchardCore.DisplayManagement.ModelBinding.IUpdateModelAccessor ModelUpdaterAccessor - @{ ContentItem contentItem = Model.ContentItem; var termsArray = (JsonArray)contentItem.Content.Terms; @@ -19,29 +18,29 @@ } @@ -62,5 +61,5 @@ } } - + diff --git a/src/OrchardCore.Modules/OrchardCore.Templates/Deployment/AllAdminTemplatesDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Templates/Deployment/AllAdminTemplatesDeploymentSource.cs index a7c3c0cd5c9..243f1d83879 100644 --- a/src/OrchardCore.Modules/OrchardCore.Templates/Deployment/AllAdminTemplatesDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Templates/Deployment/AllAdminTemplatesDeploymentSource.cs @@ -18,9 +18,7 @@ public AllAdminTemplatesDeploymentSource(AdminTemplatesManager templatesManager) public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var allTemplatesStep = step as AllAdminTemplatesDeploymentStep; - - if (allTemplatesStep == null) + if (step is not AllAdminTemplatesDeploymentStep allTemplatesStep) { return; } diff --git a/src/OrchardCore.Modules/OrchardCore.Templates/Recipes/TemplateStep.cs b/src/OrchardCore.Modules/OrchardCore.Templates/Recipes/TemplateStep.cs index f2de0b831c5..0bfbc887fff 100644 --- a/src/OrchardCore.Modules/OrchardCore.Templates/Recipes/TemplateStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.Templates/Recipes/TemplateStep.cs @@ -15,7 +15,8 @@ public class TemplateStep : IRecipeStepHandler { private readonly TemplatesManager _templatesManager; - public TemplateStep(TemplatesManager templatesManager) + public TemplateStep( + TemplatesManager templatesManager) { _templatesManager = templatesManager; } diff --git a/src/OrchardCore.Modules/OrchardCore.Tenants/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Tenants/Startup.cs index 470987bca65..7b64bf8fcf8 100644 --- a/src/OrchardCore.Modules/OrchardCore.Tenants/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Tenants/Startup.cs @@ -1,3 +1,5 @@ +using System; +using System.IO; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; @@ -17,8 +19,6 @@ using OrchardCore.Tenants.Deployment; using OrchardCore.Tenants.Recipes; using OrchardCore.Tenants.Services; -using System; -using System.IO; namespace OrchardCore.Tenants { diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Deployment/CustomUserSettingsDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Users/Deployment/CustomUserSettingsDeploymentSource.cs index ab00d50ab2e..06b53cf77e3 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/Deployment/CustomUserSettingsDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/Deployment/CustomUserSettingsDeploymentSource.cs @@ -13,7 +13,9 @@ public class CustomUserSettingsDeploymentSource : IDeploymentSource private readonly CustomUserSettingsService _customUserSettingsService; private readonly ISession _session; - public CustomUserSettingsDeploymentSource(CustomUserSettingsService customUserSettingsService, ISession session) + public CustomUserSettingsDeploymentSource( + CustomUserSettingsService customUserSettingsService, + ISession session) { _customUserSettingsService = customUserSettingsService; _session = session; @@ -21,15 +23,14 @@ public CustomUserSettingsDeploymentSource(CustomUserSettingsService customUserSe public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var customUserSettingsStep = step as CustomUserSettingsDeploymentStep; - if (customUserSettingsStep == null) + if (step is not CustomUserSettingsDeploymentStep customUserSettingsStep) { return; } var settingsTypes = customUserSettingsStep.IncludeAll - ? (await _customUserSettingsService.GetAllSettingsTypesAsync()).ToList() - : (await _customUserSettingsService.GetSettingsTypesAsync(customUserSettingsStep.SettingsTypeNames)).ToList(); + ? (await _customUserSettingsService.GetAllSettingsTypesAsync()).ToArray() + : (await _customUserSettingsService.GetSettingsTypesAsync(customUserSettingsStep.SettingsTypeNames)).ToArray(); // Todo: check permissions for each settings type var userData = new JsonArray(); diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Drivers/CustomUserSettingsDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Users/Drivers/CustomUserSettingsDisplayDriver.cs index e0a71092b96..7ae07d472aa 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/Drivers/CustomUserSettingsDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/Drivers/CustomUserSettingsDisplayDriver.cs @@ -1,10 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Options; using OrchardCore.ContentManagement; using OrchardCore.ContentManagement.Display; using OrchardCore.ContentManagement.Metadata; diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Models/UsersStepUserModel.cs b/src/OrchardCore.Modules/OrchardCore.Users/Models/UsersStepUserModel.cs index 5b38e5be2bc..f8cd2d4791a 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/Models/UsersStepUserModel.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/Models/UsersStepUserModel.cs @@ -25,6 +25,7 @@ public class UsersStepUserModel public string SecurityStamp { get; set; } public string ResetToken { get; set; } + public string PhoneNumber { get; set; } public bool PhoneNumberConfirmed { get; set; } diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Services/CustomUserSettingsService.cs b/src/OrchardCore.Modules/OrchardCore.Users/Services/CustomUserSettingsService.cs index c9ada8479ed..029e8db97de 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/Services/CustomUserSettingsService.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/Services/CustomUserSettingsService.cs @@ -25,7 +25,7 @@ public CustomUserSettingsService( { _contentManager = contentManager; _contentDefinitionManager = contentDefinitionManager; - _settingsTypes = new Lazy>>(async () => await GetContentTypeAsync()); + _settingsTypes = new Lazy>>(GetContentTypeAsync); _session = session; } diff --git a/src/OrchardCore.Modules/OrchardCore.Users/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Users/Startup.cs index d406e0555bb..dcaff32d83a 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/Startup.cs @@ -13,7 +13,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Options; -using OrchardCore.Admin; using OrchardCore.Admin.Models; using OrchardCore.Data; using OrchardCore.Data.Migration; diff --git a/src/OrchardCore.Modules/OrchardCore.Users/TwoFactorAuthenticationStartup.cs b/src/OrchardCore.Modules/OrchardCore.Users/TwoFactorAuthenticationStartup.cs index 26de0d6b210..6c88617f953 100644 --- a/src/OrchardCore.Modules/OrchardCore.Users/TwoFactorAuthenticationStartup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Users/TwoFactorAuthenticationStartup.cs @@ -1,3 +1,4 @@ +using System; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; @@ -14,7 +15,6 @@ using OrchardCore.Users.Filters; using OrchardCore.Users.Models; using OrchardCore.Users.Services; -using System; namespace OrchardCore.Users; diff --git a/src/OrchardCore.Modules/OrchardCore.Widgets/Controllers/AdminController.cs b/src/OrchardCore.Modules/OrchardCore.Widgets/Controllers/AdminController.cs index 588be470081..aa616ab6d58 100644 --- a/src/OrchardCore.Modules/OrchardCore.Widgets/Controllers/AdminController.cs +++ b/src/OrchardCore.Modules/OrchardCore.Widgets/Controllers/AdminController.cs @@ -1,3 +1,4 @@ +using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using OrchardCore.Admin; using OrchardCore.ContentManagement; @@ -6,7 +7,6 @@ using OrchardCore.DisplayManagement.ModelBinding; using OrchardCore.Widgets.Models; using OrchardCore.Widgets.ViewModels; -using System.Threading.Tasks; namespace OrchardCore.Widgets.Controllers { diff --git a/src/OrchardCore.Modules/OrchardCore.Workflows/Deployment/AllWorkflowTypeDeploymentSource.cs b/src/OrchardCore.Modules/OrchardCore.Workflows/Deployment/AllWorkflowTypeDeploymentSource.cs index 40e1bf881a5..c432d37790d 100644 --- a/src/OrchardCore.Modules/OrchardCore.Workflows/Deployment/AllWorkflowTypeDeploymentSource.cs +++ b/src/OrchardCore.Modules/OrchardCore.Workflows/Deployment/AllWorkflowTypeDeploymentSource.cs @@ -1,5 +1,7 @@ +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; +using Microsoft.Extensions.Options; using OrchardCore.Deployment; using OrchardCore.Workflows.Services; @@ -8,17 +10,19 @@ namespace OrchardCore.Workflows.Deployment public class AllWorkflowTypeDeploymentSource : IDeploymentSource { private readonly IWorkflowTypeStore _workflowTypeStore; + private readonly JsonSerializerOptions _jsonSerializerOptions; - public AllWorkflowTypeDeploymentSource(IWorkflowTypeStore workflowTypeStore) + public AllWorkflowTypeDeploymentSource( + IWorkflowTypeStore workflowTypeStore, + IOptions jsonSerializerOptions) { _workflowTypeStore = workflowTypeStore; + _jsonSerializerOptions = jsonSerializerOptions.Value; } public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var allContentStep = step as AllWorkflowTypeDeploymentStep; - - if (allContentStep == null) + if (step is not AllWorkflowTypeDeploymentStep) { return; } @@ -32,7 +36,7 @@ public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlan foreach (var workflow in await _workflowTypeStore.ListAsync()) { - var objectData = JObject.FromObject(workflow); + var objectData = JObject.FromObject(workflow, _jsonSerializerOptions); // Don't serialize the Id as it could be interpreted as an updated object when added back to YesSql objectData.Remove(nameof(workflow.Id)); diff --git a/src/OrchardCore.Modules/OrchardCore.Workflows/Recipes/WorkflowTypeStep.cs b/src/OrchardCore.Modules/OrchardCore.Workflows/Recipes/WorkflowTypeStep.cs index a452ce70521..9064096a911 100644 --- a/src/OrchardCore.Modules/OrchardCore.Workflows/Recipes/WorkflowTypeStep.cs +++ b/src/OrchardCore.Modules/OrchardCore.Workflows/Recipes/WorkflowTypeStep.cs @@ -1,10 +1,12 @@ using System; using System.Linq; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc.Routing; +using Microsoft.Extensions.Options; using OrchardCore.Recipes.Models; using OrchardCore.Recipes.Services; using OrchardCore.Workflows.Http.Activities; @@ -19,15 +21,18 @@ public class WorkflowTypeStep : IRecipeStepHandler { private readonly IWorkflowTypeStore _workflowTypeStore; private readonly ISecurityTokenService _securityTokenService; + private readonly JsonSerializerOptions _jsonSerializerOptions; private readonly IUrlHelper _urlHelper; public WorkflowTypeStep(IWorkflowTypeStore workflowTypeStore, ISecurityTokenService securityTokenService, IActionContextAccessor actionContextAccessor, + IOptions jsonSerializerOptions, IUrlHelperFactory urlHelperFactory) { _workflowTypeStore = workflowTypeStore; _securityTokenService = securityTokenService; + _jsonSerializerOptions = jsonSerializerOptions.Value; _urlHelper = urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext); } @@ -42,7 +47,7 @@ public async Task ExecuteAsync(RecipeExecutionContext context) foreach (var token in model.Data.Cast()) { - var workflow = token.ToObject(); + var workflow = token.ToObject(_jsonSerializerOptions); foreach (var activity in workflow.Activities.Where(a => a.Name == nameof(HttpRequestEvent))) { diff --git a/src/OrchardCore.Modules/OrchardCore.Workflows/Services/WorkflowManager.cs b/src/OrchardCore.Modules/OrchardCore.Workflows/Services/WorkflowManager.cs index 301096184a9..2e691299e54 100644 --- a/src/OrchardCore.Modules/OrchardCore.Workflows/Services/WorkflowManager.cs +++ b/src/OrchardCore.Modules/OrchardCore.Workflows/Services/WorkflowManager.cs @@ -1,11 +1,13 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; using OrchardCore.Locking.Distributed; using OrchardCore.Modules; using OrchardCore.Workflows.Activities; @@ -30,6 +32,7 @@ public class WorkflowManager : IWorkflowManager private readonly ILogger _logger; private readonly ILogger _missingActivityLogger; private readonly IStringLocalizer _missingActivityLocalizer; + private readonly JsonSerializerOptions _jsonSerializerOptions; private readonly IClock _clock; private readonly Dictionary _recursions = []; @@ -47,6 +50,7 @@ public WorkflowManager ILogger logger, ILogger missingActivityLogger, IStringLocalizer missingActivityLocalizer, + IOptions jsonSerializerOptions, IClock clock) { _activityLibrary = activityLibrary; @@ -59,6 +63,7 @@ public WorkflowManager _logger = logger; _missingActivityLogger = missingActivityLogger; _missingActivityLocalizer = missingActivityLocalizer; + _jsonSerializerOptions = jsonSerializerOptions.Value; _clock = clock; } @@ -73,7 +78,7 @@ public Workflow NewWorkflow(WorkflowType workflowType, string correlationId = nu State = JObject.FromObject(new WorkflowState { ActivityStates = workflowType.Activities.ToDictionary(x => x.ActivityId, x => x.Properties) - }), + }, _jsonSerializerOptions), CorrelationId = correlationId, LockTimeout = workflowType.LockTimeout, LockExpiration = workflowType.LockExpiration, @@ -90,7 +95,7 @@ public async Task CreateWorkflowExecutionContextAsync( ArgumentNullException.ThrowIfNull(workflow); - var state = workflow.State.ToObject(); + var state = workflow.State.ToObject(_jsonSerializerOptions); var activityQuery = await Task.WhenAll(workflowType.Activities.Select(x => { if (!state.ActivityStates.TryGetValue(x.ActivityId, out var activityState)) @@ -551,7 +556,7 @@ private void DecrementRecursion(Workflow workflow) private async Task PersistAsync(WorkflowExecutionContext workflowContext) { - var state = workflowContext.Workflow.State.ToObject(); + var state = workflowContext.Workflow.State.ToObject(_jsonSerializerOptions); state.Input = await SerializeAsync(workflowContext.Input); state.Output = await SerializeAsync(workflowContext.Output); @@ -560,7 +565,7 @@ private async Task PersistAsync(WorkflowExecutionContext workflowContext) state.ExecutedActivities = workflowContext.ExecutedActivities.ToList(); state.ActivityStates = workflowContext.Activities.ToDictionary(x => x.Key, x => x.Value.Activity.Properties); - workflowContext.Workflow.State = JObject.FromObject(state); + workflowContext.Workflow.State = JObject.FromObject(state, _jsonSerializerOptions); await _workflowStore.SaveAsync(workflowContext.Workflow); } diff --git a/src/OrchardCore.Modules/OrchardCore.Workflows/UserTasks/Drivers/UserTaskEventContentDriver.cs b/src/OrchardCore.Modules/OrchardCore.Workflows/UserTasks/Drivers/UserTaskEventContentDriver.cs index d9b0be556d2..8c0c478c5eb 100644 --- a/src/OrchardCore.Modules/OrchardCore.Workflows/UserTasks/Drivers/UserTaskEventContentDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Workflows/UserTasks/Drivers/UserTaskEventContentDriver.cs @@ -2,10 +2,12 @@ using System.Collections.Generic; using System.Linq; using System.Security.Claims; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.Extensions.Options; using OrchardCore.ContentManagement; using OrchardCore.ContentManagement.Display.ContentDisplay; using OrchardCore.ContentManagement.Workflows; @@ -26,6 +28,8 @@ public class UserTaskEventContentDriver : ContentDisplayDriver private readonly IWorkflowManager _workflowManager; private readonly INotifier _notifier; private readonly IHttpContextAccessor _httpContextAccessor; + private readonly JsonSerializerOptions _jsonSerializerOptions; + protected readonly IHtmlLocalizer H; public UserTaskEventContentDriver( @@ -34,6 +38,7 @@ public UserTaskEventContentDriver( IWorkflowManager workflowManager, INotifier notifier, IHtmlLocalizer localizer, + IOptions jsonSerializerOptions, IHttpContextAccessor httpContextAccessor) { _workflowStore = workflowStore; @@ -41,6 +46,7 @@ public UserTaskEventContentDriver( _workflowManager = workflowManager; _notifier = notifier; _httpContextAccessor = httpContextAccessor; + _jsonSerializerOptions = jsonSerializerOptions.Value; H = localizer; } @@ -103,7 +109,7 @@ private async Task> GetUserTaskActionsAsync(string contentItemId) var userRoles = user.Claims.Where(x => x.Type == ClaimTypes.Role).Select(x => x.Value).ToList(); var actionsQuery = from workflow in workflows - let workflowState = workflow.State.ToObject() + let workflowState = workflow.State.ToObject(_jsonSerializerOptions) from blockingActivity in workflow.BlockingActivities where blockingActivity.Name == nameof(UserTaskEvent) from action in GetUserTaskActions(workflowState, blockingActivity.ActivityId, userRoles) @@ -118,7 +124,7 @@ private IEnumerable GetUserTaskActions(WorkflowState workflowState, stri { var activity = _activityLibrary.InstantiateActivity(nameof(UserTaskEvent), activityState); - if (activity.Roles.Any() && !userRoles.Any(x => activity.Roles.Contains(x))) + if (activity.Roles.Count > 0 && !userRoles.Any(activity.Roles.Contains)) yield break; foreach (var action in activity.Actions) diff --git a/src/OrchardCore/OrchardCore.Abstractions/Extensions/JsonSerializerOptionsConfiguration.cs b/src/OrchardCore/OrchardCore.Abstractions/Extensions/JsonSerializerOptionsConfiguration.cs new file mode 100644 index 00000000000..4461b6ba52b --- /dev/null +++ b/src/OrchardCore/OrchardCore.Abstractions/Extensions/JsonSerializerOptionsConfiguration.cs @@ -0,0 +1,32 @@ +using System.Text.Json; +using System.Text.Json.Serialization; +using Microsoft.Extensions.Options; +using OrchardCore.Json; +using OrchardCore.Json.Serialization; + +namespace OrchardCore.Extensions; + +public class JsonSerializerOptionsConfiguration : IConfigureOptions +{ + private readonly JsonDerivedTypesOptions _derivedTypesOptions; + + public JsonSerializerOptionsConfiguration( + IOptions derivedTypesOptions) + { + _derivedTypesOptions = derivedTypesOptions.Value; + } + + public void Configure(JsonSerializerOptions options) + { + options.DefaultIgnoreCondition = JOptions.Base.DefaultIgnoreCondition; + options.ReferenceHandler = JOptions.Base.ReferenceHandler; + options.ReadCommentHandling = JOptions.Base.ReadCommentHandling; + options.PropertyNameCaseInsensitive = JOptions.Base.PropertyNameCaseInsensitive; + options.AllowTrailingCommas = JOptions.Base.AllowTrailingCommas; + options.WriteIndented = JOptions.Base.WriteIndented; + + options.TypeInfoResolverChain.Add(new PolymorphicJsonTypeInfoResolver(_derivedTypesOptions)); + options.Converters.Add(DynamicJsonConverter.Instance); + options.Converters.Add(PathStringJsonConverter.Instance); + } +} diff --git a/src/OrchardCore/OrchardCore.ContentManagement/Records/Migrations.cs b/src/OrchardCore/OrchardCore.ContentManagement/Records/Migrations.cs index 7f543586908..456db5f02e5 100644 --- a/src/OrchardCore/OrchardCore.ContentManagement/Records/Migrations.cs +++ b/src/OrchardCore/OrchardCore.ContentManagement/Records/Migrations.cs @@ -11,6 +11,7 @@ namespace OrchardCore.ContentManagement.Records public class Migrations : DataMigration { private readonly IContentDefinitionManager _contentDefinitionManager; + public Migrations(IContentDefinitionManager contentDefinitionManager) { _contentDefinitionManager = contentDefinitionManager; diff --git a/src/OrchardCore/OrchardCore.Data.YesSql/DefaultJsonContentSerializer.cs b/src/OrchardCore/OrchardCore.Data.YesSql/DefaultJsonContentSerializer.cs index 1758f2834b6..d62507cb738 100644 --- a/src/OrchardCore/OrchardCore.Data.YesSql/DefaultJsonContentSerializer.cs +++ b/src/OrchardCore/OrchardCore.Data.YesSql/DefaultJsonContentSerializer.cs @@ -1,8 +1,6 @@ using System; -using System.Collections.Generic; using System.Text.Json; -using System.Text.Json.Serialization.Metadata; -using OrchardCore.Json.Serialization; +using Microsoft.Extensions.Options; namespace YesSql.Serialization { @@ -10,32 +8,21 @@ public class DefaultJsonContentSerializer : IContentSerializer { private readonly JsonSerializerOptions _options; - public DefaultJsonContentSerializer() + public DefaultJsonContentSerializer(IOptions options) { - _options = new(JOptions.Base); - _options.Converters.Add(System.Text.Json.Serialization.DynamicJsonConverter.Instance); - _options.Converters.Add(PathStringJsonConverter.Instance); + _options = options.Value; } - public DefaultJsonContentSerializer(IEnumerable typeInfoResolvers) - { - _options = new(JOptions.Base); - foreach (var resolver in typeInfoResolvers) - { - _options.TypeInfoResolverChain.Add(resolver); - } - - _options.Converters.Add(System.Text.Json.Serialization.DynamicJsonConverter.Instance); - _options.Converters.Add(PathStringJsonConverter.Instance); - } - - public DefaultJsonContentSerializer(JsonSerializerOptions options) => _options = options; + public DefaultJsonContentSerializer(JsonSerializerOptions options) + => _options = options; public object Deserialize(string content, Type type) => JsonSerializer.Deserialize(content, type, _options); - public dynamic DeserializeDynamic(string content) => JsonSerializer.Deserialize(content, _options); + public dynamic DeserializeDynamic(string content) + => JsonSerializer.Deserialize(content, _options); - public string Serialize(object item) => JsonSerializer.Serialize(item, _options); + public string Serialize(object item) + => JsonSerializer.Serialize(item, _options); } } diff --git a/src/OrchardCore/OrchardCore.Data.YesSql/OrchardCoreBuilderExtensions.cs b/src/OrchardCore/OrchardCore.Data.YesSql/OrchardCoreBuilderExtensions.cs index 3c80b76df40..d30376f643f 100644 --- a/src/OrchardCore/OrchardCore.Data.YesSql/OrchardCoreBuilderExtensions.cs +++ b/src/OrchardCore/OrchardCore.Data.YesSql/OrchardCoreBuilderExtensions.cs @@ -3,8 +3,7 @@ using System.Data; using System.IO; using System.Linq; -using System.Text.Json.Serialization; -using System.Text.Json.Serialization.Metadata; +using System.Text.Json; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using OrchardCore.Data; @@ -14,7 +13,6 @@ using OrchardCore.Environment.Shell; using OrchardCore.Environment.Shell.Removing; using OrchardCore.Environment.Shell.Scope; -using OrchardCore.Json; using OrchardCore.Modules; using YesSql; using YesSql.Indexes; @@ -182,9 +180,7 @@ private static YesSql.Configuration GetStoreConfiguration(IServiceProvider sp, Y var tableNameFactory = sp.GetRequiredService(); var loggerFactory = sp.GetRequiredService(); - var typeInfoResolvers = sp.GetServices().ToList(); - var derivedTypesOptions = sp.GetService>(); - typeInfoResolvers.Add(new PolymorphicJsonTypeInfoResolver(derivedTypesOptions.Value)); + var serializerOptions = sp.GetRequiredService>(); var storeConfiguration = new YesSql.Configuration { @@ -193,7 +189,7 @@ private static YesSql.Configuration GetStoreConfiguration(IServiceProvider sp, Y TableNameConvention = tableNameFactory.Create(databaseTableOptions), IdentityColumnSize = Enum.Parse(databaseTableOptions.IdentityColumnSize), Logger = loggerFactory.CreateLogger("YesSql"), - ContentSerializer = new DefaultJsonContentSerializer(typeInfoResolvers) + ContentSerializer = new DefaultJsonContentSerializer(serializerOptions.Value) }; if (yesSqlOptions.IdGenerator != null) diff --git a/src/OrchardCore/OrchardCore.DisplayManagement/Notify/NotifyFilter.cs b/src/OrchardCore/OrchardCore.DisplayManagement/Notify/NotifyFilter.cs index 84c8ab54ba8..870c22c4703 100644 --- a/src/OrchardCore/OrchardCore.DisplayManagement/Notify/NotifyFilter.cs +++ b/src/OrchardCore/OrchardCore.DisplayManagement/Notify/NotifyFilter.cs @@ -44,7 +44,7 @@ public NotifyFilter( _htmlEncoder = htmlEncoder; _logger = logger; - _settings = new(System.Text.Json.JOptions.Default); + _settings = new(JOptions.Default); _settings.Converters.Add(new NotifyEntryConverter(htmlEncoder)); } diff --git a/src/OrchardCore/OrchardCore.Infrastructure/Documents/DocumentEntityManager.cs b/src/OrchardCore/OrchardCore.Infrastructure/Documents/DocumentEntityManager.cs index 14b7714994b..bd2769a3765 100644 --- a/src/OrchardCore/OrchardCore.Infrastructure/Documents/DocumentEntityManager.cs +++ b/src/OrchardCore/OrchardCore.Infrastructure/Documents/DocumentEntityManager.cs @@ -12,7 +12,10 @@ namespace OrchardCore.Documents { private readonly IDocumentManager _documentManager; - public DocumentEntityManager(IDocumentManager documentManager) => _documentManager = documentManager; + public DocumentEntityManager(IDocumentManager documentManager) + { + _documentManager = documentManager; + } public async Task GetAsync(string key) where T : new() { diff --git a/src/OrchardCore/OrchardCore.Infrastructure/Documents/DocumentEntityManagerOfT.cs b/src/OrchardCore/OrchardCore.Infrastructure/Documents/DocumentEntityManagerOfT.cs index e6f4cc0030a..30804762639 100644 --- a/src/OrchardCore/OrchardCore.Infrastructure/Documents/DocumentEntityManagerOfT.cs +++ b/src/OrchardCore/OrchardCore.Infrastructure/Documents/DocumentEntityManagerOfT.cs @@ -8,7 +8,8 @@ namespace OrchardCore.Documents public class DocumentEntityManager : DocumentEntityManager, IDocumentEntityManager where TDocumentStore : IDocumentStore where TDocumentEntity : class, IDocumentEntity, new() { - public DocumentEntityManager(IDocumentManager documentManager) : base(documentManager) + public DocumentEntityManager(IDocumentManager documentManager) + : base(documentManager) { } } diff --git a/src/OrchardCore/OrchardCore.Infrastructure/Documents/VolatileDocumentEntityManager.cs b/src/OrchardCore/OrchardCore.Infrastructure/Documents/VolatileDocumentEntityManager.cs index 352ebf227b7..b33d4ea9be6 100644 --- a/src/OrchardCore/OrchardCore.Infrastructure/Documents/VolatileDocumentEntityManager.cs +++ b/src/OrchardCore/OrchardCore.Infrastructure/Documents/VolatileDocumentEntityManager.cs @@ -5,7 +5,8 @@ namespace OrchardCore.Documents /// public class VolatileDocumentEntityManager : DocumentEntityManager, IVolatileDocumentEntityManager where TDocumentEntity : class, IDocumentEntity, new() { - public VolatileDocumentEntityManager(IVolatileDocumentManager documentManager) : base(documentManager) + public VolatileDocumentEntityManager(IVolatileDocumentManager documentManager) + : base(documentManager) { } } diff --git a/src/OrchardCore/OrchardCore.Search.AzureAI.Core/Deployment/AzureAISearchSettingsDeploymentSource.cs b/src/OrchardCore/OrchardCore.Search.AzureAI.Core/Deployment/AzureAISearchSettingsDeploymentSource.cs index 14f24ef9ccc..f813c5d06ee 100644 --- a/src/OrchardCore/OrchardCore.Search.AzureAI.Core/Deployment/AzureAISearchSettingsDeploymentSource.cs +++ b/src/OrchardCore/OrchardCore.Search.AzureAI.Core/Deployment/AzureAISearchSettingsDeploymentSource.cs @@ -12,9 +12,7 @@ public class AzureAISearchSettingsDeploymentSource(ISiteService siteService) : I public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var settingsStep = step as AzureAISearchSettingsDeploymentStep; - - if (settingsStep == null) + if (step is not AzureAISearchSettingsDeploymentStep) { return; } diff --git a/src/OrchardCore/OrchardCore.Search.AzureAI.Core/Recipes/AzureAISearchIndexSettingsStep.cs b/src/OrchardCore/OrchardCore.Search.AzureAI.Core/Recipes/AzureAISearchIndexSettingsStep.cs index d48f4159295..13d481feea6 100644 --- a/src/OrchardCore/OrchardCore.Search.AzureAI.Core/Recipes/AzureAISearchIndexSettingsStep.cs +++ b/src/OrchardCore/OrchardCore.Search.AzureAI.Core/Recipes/AzureAISearchIndexSettingsStep.cs @@ -13,19 +13,26 @@ namespace OrchardCore.Search.AzureAI.Recipes; -public class AzureAISearchIndexSettingsStep( - AzureAISearchIndexManager indexManager, - AzureAIIndexDocumentManager azureAIIndexDocumentManager, - AzureAISearchIndexSettingsService azureAISearchIndexSettingsService, - ILogger logger - ) : IRecipeStepHandler +public class AzureAISearchIndexSettingsStep : IRecipeStepHandler { public const string Name = "azureai-index-create"; - private readonly AzureAISearchIndexManager _indexManager = indexManager; - private readonly AzureAIIndexDocumentManager _azureAIIndexDocumentManager = azureAIIndexDocumentManager; - private readonly AzureAISearchIndexSettingsService _azureAISearchIndexSettingsService = azureAISearchIndexSettingsService; - private readonly ILogger _logger = logger; + private readonly AzureAISearchIndexManager _indexManager; + private readonly AzureAIIndexDocumentManager _azureAIIndexDocumentManager; + private readonly AzureAISearchIndexSettingsService _azureAISearchIndexSettingsService; + private readonly ILogger _logger; + + public AzureAISearchIndexSettingsStep( + AzureAISearchIndexManager indexManager, + AzureAIIndexDocumentManager azureAIIndexDocumentManager, + AzureAISearchIndexSettingsService azureAISearchIndexSettingsService, + ILogger logger) + { + _indexManager = indexManager; + _azureAIIndexDocumentManager = azureAIIndexDocumentManager; + _azureAISearchIndexSettingsService = azureAISearchIndexSettingsService; + _logger = logger; + } public async Task ExecuteAsync(RecipeExecutionContext context) { diff --git a/src/OrchardCore/OrchardCore.Search.Elasticsearch.Core/Deployment/ElasticIndexDeploymentSource.cs b/src/OrchardCore/OrchardCore.Search.Elasticsearch.Core/Deployment/ElasticIndexDeploymentSource.cs index 44e5493c995..1f3b28376bf 100644 --- a/src/OrchardCore/OrchardCore.Search.Elasticsearch.Core/Deployment/ElasticIndexDeploymentSource.cs +++ b/src/OrchardCore/OrchardCore.Search.Elasticsearch.Core/Deployment/ElasticIndexDeploymentSource.cs @@ -19,9 +19,7 @@ public ElasticIndexDeploymentSource(ElasticIndexSettingsService elasticIndexSett public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var elasticIndexStep = step as ElasticIndexDeploymentStep; - - if (elasticIndexStep == null) + if (step is not ElasticIndexDeploymentStep elasticIndexStep) { return; } diff --git a/src/OrchardCore/OrchardCore.Search.Elasticsearch.Core/Deployment/ElasticSettingsDeploymentSource.cs b/src/OrchardCore/OrchardCore.Search.Elasticsearch.Core/Deployment/ElasticSettingsDeploymentSource.cs index ecbe1d9e763..f0e249f0e99 100644 --- a/src/OrchardCore/OrchardCore.Search.Elasticsearch.Core/Deployment/ElasticSettingsDeploymentSource.cs +++ b/src/OrchardCore/OrchardCore.Search.Elasticsearch.Core/Deployment/ElasticSettingsDeploymentSource.cs @@ -16,9 +16,7 @@ public ElasticSettingsDeploymentSource(ElasticIndexingService elasticIndexingSer public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var elasticSettingsStep = step as ElasticSettingsDeploymentStep; - - if (elasticSettingsStep == null) + if (step is not ElasticSettingsDeploymentStep) { return; } diff --git a/src/OrchardCore/OrchardCore.Settings.Core/Deployment/SiteSettingsPropertyDeploymentSource.cs b/src/OrchardCore/OrchardCore.Settings.Core/Deployment/SiteSettingsPropertyDeploymentSource.cs index f98b0e12209..1f57c38402c 100644 --- a/src/OrchardCore/OrchardCore.Settings.Core/Deployment/SiteSettingsPropertyDeploymentSource.cs +++ b/src/OrchardCore/OrchardCore.Settings.Core/Deployment/SiteSettingsPropertyDeploymentSource.cs @@ -16,8 +16,7 @@ public SiteSettingsPropertyDeploymentSource(ISiteService siteService) public async Task ProcessDeploymentStepAsync(DeploymentStep step, DeploymentPlanResult result) { - var settingsStep = step as SiteSettingsPropertyDeploymentStep; - if (settingsStep == null) + if (step is not SiteSettingsPropertyDeploymentStep settingsStep) { return; } diff --git a/src/OrchardCore/OrchardCore.Workflows.Abstractions/Services/IWorkflowManager.cs b/src/OrchardCore/OrchardCore.Workflows.Abstractions/Services/IWorkflowManager.cs index 03a3cccaf44..78e620e6deb 100644 --- a/src/OrchardCore/OrchardCore.Workflows.Abstractions/Services/IWorkflowManager.cs +++ b/src/OrchardCore/OrchardCore.Workflows.Abstractions/Services/IWorkflowManager.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Text.Json; using System.Text.Json.Nodes; using System.Threading.Tasks; using Microsoft.AspNetCore.Routing; @@ -77,13 +78,13 @@ public static Task> TriggerEventAsync(this return workflowManager.TriggerEventAsync(name, new RouteValueDictionary(input), correlationId); } - public static Task RestartWorkflowAsync(this IWorkflowManager workflowManager, Workflow workflow, WorkflowType workflowType) + public static Task RestartWorkflowAsync(this IWorkflowManager workflowManager, Workflow workflow, WorkflowType workflowType, JsonSerializerOptions jsonSerializerOptions = null) { ArgumentNullException.ThrowIfNull(workflow); ArgumentNullException.ThrowIfNull(workflowType); - var state = workflow.State.ToObject(); + var state = workflow.State.ToObject(jsonSerializerOptions); return workflowManager.RestartWorkflowAsync(workflowType, state.Input, workflow.CorrelationId); } diff --git a/src/OrchardCore/OrchardCore/Modules/Extensions/ServiceCollectionExtensions.cs b/src/OrchardCore/OrchardCore/Modules/Extensions/ServiceCollectionExtensions.cs index 27d408d61ed..f3bf77e1cea 100644 --- a/src/OrchardCore/OrchardCore/Modules/Extensions/ServiceCollectionExtensions.cs +++ b/src/OrchardCore/OrchardCore/Modules/Extensions/ServiceCollectionExtensions.cs @@ -3,6 +3,7 @@ using System.IO; using System.Linq; using System.Net.Http; +using System.Text.Json; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.DataProtection; @@ -28,6 +29,7 @@ using OrchardCore.Environment.Shell.Builders; using OrchardCore.Environment.Shell.Configuration; using OrchardCore.Environment.Shell.Descriptor.Models; +using OrchardCore.Extensions; using OrchardCore.Localization; using OrchardCore.Locking; using OrchardCore.Locking.Distributed; @@ -152,6 +154,8 @@ private static void AddDefaultServices(OrchardCoreBuilder builder) services.AddSingleton(); + services.AddTransient, JsonSerializerOptionsConfiguration>(); + services.AddScoped(); services.AddSingleton(); diff --git a/test/OrchardCore.Tests/Apis/ContentManagement/DeploymentPlans/ContentStepLuceneQueryTests.cs b/test/OrchardCore.Tests/Apis/ContentManagement/DeploymentPlans/ContentStepLuceneQueryTests.cs index c07bdebe3df..c6829ce6855 100644 --- a/test/OrchardCore.Tests/Apis/ContentManagement/DeploymentPlans/ContentStepLuceneQueryTests.cs +++ b/test/OrchardCore.Tests/Apis/ContentManagement/DeploymentPlans/ContentStepLuceneQueryTests.cs @@ -46,7 +46,7 @@ public async Task ShouldUpdateLuceneIndexesOnImport() var nodes = result["data"]["recentBlogPosts"]; - Assert.Equal(2, nodes.AsArray().Count()); + Assert.Equal(2, nodes.AsArray().Count); Assert.Equal("new version", nodes[0]["displayText"].ToString()); Assert.Equal("second content item display text", nodes[1]["displayText"].ToString()); } diff --git a/test/OrchardCore.Tests/Apis/GraphQL/ContentItemsFieldTypeTests.cs b/test/OrchardCore.Tests/Apis/GraphQL/ContentItemsFieldTypeTests.cs index 626640b937c..34fc2f52d9f 100644 --- a/test/OrchardCore.Tests/Apis/GraphQL/ContentItemsFieldTypeTests.cs +++ b/test/OrchardCore.Tests/Apis/GraphQL/ContentItemsFieldTypeTests.cs @@ -1,3 +1,4 @@ +using System.Text.Json; using System.Text.Json.Nodes; using GraphQL; using GraphQL.Execution; @@ -11,6 +12,8 @@ using OrchardCore.ContentManagement.Records; using OrchardCore.Data; using OrchardCore.Environment.Shell; +using OrchardCore.Json; +using OrchardCore.Json.Serialization; using YesSql.Indexes; using YesSql.Provider.Sqlite; using YesSql.Serialization; @@ -36,8 +39,21 @@ public async Task InitializeAsync() _prefix = "tp"; _prefixedStore = await StoreFactory.CreateAndInitializeAsync(new Configuration().UseSqLite(string.Format(connectionStringTemplate, _tempFilename + _prefix)).SetTablePrefix(_prefix + "_")); - _store.Configuration.ContentSerializer = new DefaultJsonContentSerializer(); - _prefixedStore.Configuration.ContentSerializer = new DefaultJsonContentSerializer(); + var jsonDerivedTypesOptions = new JsonDerivedTypesOptions(); + + var jsonOptions = new JsonSerializerOptions(JOptions.Base); + jsonOptions.TypeInfoResolverChain.Add(new System.Text.Json.Serialization.PolymorphicJsonTypeInfoResolver(jsonDerivedTypesOptions)); + jsonOptions.Converters.Add(DynamicJsonConverter.Instance); + jsonOptions.Converters.Add(PathStringJsonConverter.Instance); + + var jsonSerializerOptions = new Mock>(); + jsonSerializerOptions.Setup(x => x.Value) + .Returns(jsonOptions); + + var contentSerializer = new DefaultJsonContentSerializer(jsonSerializerOptions.Object); + + _store.Configuration.ContentSerializer = contentSerializer; + _prefixedStore.Configuration.ContentSerializer = contentSerializer; await CreateTablesAsync(_store); await CreateTablesAsync(_prefixedStore); @@ -141,7 +157,7 @@ public async Task ShouldFilterByContentItemIndex() context.Arguments["where"] = new ArgumentValue(JObject.Parse("{ \"contentItemId\": \"1\" }"), ArgumentSource.Variable); var dogs = await ((LockedAsyncFieldResolver>)type.Resolver) - .ResolveAsync(context) as IEnumerable; + .ResolveAsync(context) as IEnumerable; Assert.Single(dogs); Assert.Equal("doug", dogs.First().As().Name); diff --git a/test/OrchardCore.Tests/Modules/OrchardCore.OpenId/OpenIdApplicationStepTests.cs b/test/OrchardCore.Tests/Modules/OrchardCore.OpenId/OpenIdApplicationStepTests.cs index 8bb3535a655..21340c8a500 100644 --- a/test/OrchardCore.Tests/Modules/OrchardCore.OpenId/OpenIdApplicationStepTests.cs +++ b/test/OrchardCore.Tests/Modules/OrchardCore.OpenId/OpenIdApplicationStepTests.cs @@ -34,6 +34,7 @@ public async Task OpenIdApplicationCanBeParsed(string recipeName, OpenIdApplicat .Returns( new ValueTask(actual)); + var step = new OpenIdApplicationStep(appManagerMock.Object); var recipe = JsonNode.Parse(GetRecipeFileContent(recipeName)); var context = new RecipeExecutionContext diff --git a/test/OrchardCore.Tests/Modules/OrchardCore.OpenId/OpenIdServerDeploymentSourceTests.cs b/test/OrchardCore.Tests/Modules/OrchardCore.OpenId/OpenIdServerDeploymentSourceTests.cs index 8cc39a4d739..cd6f0dfd020 100644 --- a/test/OrchardCore.Tests/Modules/OrchardCore.OpenId/OpenIdServerDeploymentSourceTests.cs +++ b/test/OrchardCore.Tests/Modules/OrchardCore.OpenId/OpenIdServerDeploymentSourceTests.cs @@ -1,5 +1,7 @@ +using System.Text.Json; using System.Text.Json.Nodes; using OrchardCore.Deployment; +using OrchardCore.Json.Serialization; using OrchardCore.OpenId.Deployment; using OrchardCore.OpenId.Recipes; using OrchardCore.OpenId.Services; @@ -93,6 +95,10 @@ public async Task ServerDeploymentSourceIsReadableByRecipe() var descriptor = new RecipeDescriptor(); var result = new DeploymentPlanResult(fileBuilder, descriptor); + var jsonOptions = new JsonSerializerOptions(JOptions.Base); + jsonOptions.Converters.Add(System.Text.Json.Serialization.DynamicJsonConverter.Instance); + jsonOptions.Converters.Add(PathStringJsonConverter.Instance); + var deploymentSource = new OpenIdServerDeploymentSource(deployServerServiceMock.Object); // Act diff --git a/test/OrchardCore.Tests/Recipes/RecipeExecutorTests.cs b/test/OrchardCore.Tests/Recipes/RecipeExecutorTests.cs index 76b16d9fa39..17d67f131b6 100644 --- a/test/OrchardCore.Tests/Recipes/RecipeExecutorTests.cs +++ b/test/OrchardCore.Tests/Recipes/RecipeExecutorTests.cs @@ -31,6 +31,7 @@ public async Task ShouldTrimValidScriptExpression(string recipeName, string expe var recipeEventHandlers = new List { new RecipeEventHandler() }; var loggerMock = new Mock>(); + var recipeExecutor = new RecipeExecutor( shellHostMock.Object, scope.ShellContext.Settings, @@ -57,7 +58,7 @@ public async Task ShouldTrimValidScriptExpression(string recipeName, string expe ServiceProvider = CreateServiceProvider(), }; - private static IServiceProvider CreateServiceProvider() => new ServiceCollection() + private static ServiceProvider CreateServiceProvider() => new ServiceCollection() .AddScripting() .AddSingleton() .AddLogging() diff --git a/test/OrchardCore.Tests/Workflows/WorkflowManagerTests.cs b/test/OrchardCore.Tests/Workflows/WorkflowManagerTests.cs index 45a7842f869..f379bbb2198 100644 --- a/test/OrchardCore.Tests/Workflows/WorkflowManagerTests.cs +++ b/test/OrchardCore.Tests/Workflows/WorkflowManagerTests.cs @@ -1,3 +1,4 @@ +using System.Text.Json; using System.Text.Json.Nodes; using OrchardCore.DisplayManagement; using OrchardCore.Locking.Distributed; @@ -113,6 +114,8 @@ WorkflowType workflowType var missingActivityLocalizer = new Mock>(); var clock = new Mock(); var workflowFaultHandler = new Mock(); + var jsonOptionsMock = new Mock>(); + var workflowManager = new WorkflowManager( activityLibrary.Object, workflowTypeStore.Object, @@ -124,6 +127,7 @@ WorkflowType workflowType workflowManagerLogger.Object, missingActivityLogger.Object, missingActivityLocalizer.Object, + jsonOptionsMock.Object, clock.Object );