diff --git a/.github/workflows/nuget.yml b/.github/workflows/nuget.yml index 2a10e6980..6db549af5 100644 --- a/.github/workflows/nuget.yml +++ b/.github/workflows/nuget.yml @@ -42,13 +42,14 @@ jobs: run: | npm install --prefix src/MasterData.Web cd ${{ matrix.project }} - BASE_VERSION=$(dotnet msbuild -nologo -getProperty:Version | tail -n 1 | tr -d '\r') + BASE_VERSION=$(dotnet msbuild -nologo -getProperty:VersionPrefix | tail -n 1 | tr -d '\r') + PREVIEW_SUFFIX=$(dotnet msbuild -nologo -getProperty:PreviewVersionSuffix | tail -n 1 | tr -d '\r') if [ "${GITHUB_REF_NAME}" = "rc" ]; then - PACKAGE_VERSION="${BASE_VERSION}-preview" + PACKAGE_VERSION="${BASE_VERSION}-${PREVIEW_SUFFIX}" else PACKAGE_VERSION="${BASE_VERSION}" fi - dotnet build -c release -p:PackageVersion="${PACKAGE_VERSION}" - dotnet pack -c release --no-build --output="nuget" -p:PackageVersion="${PACKAGE_VERSION}" + dotnet build -c release -p:Version="${PACKAGE_VERSION}" -p:PackageVersion="${PACKAGE_VERSION}" -p:InformationalVersion="${PACKAGE_VERSION}" + dotnet pack -c release --no-build --output="nuget" -p:Version="${PACKAGE_VERSION}" -p:PackageVersion="${PACKAGE_VERSION}" -p:InformationalVersion="${PACKAGE_VERSION}" cd nuget dotnet nuget push "*.nupkg" --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate diff --git a/Directory.Build.props b/Directory.Build.props index 263357fc9..ce387470e 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -3,10 +3,15 @@ https://www.github.com/JJConsulting/JJMasterData https://www.github.com/JJConsulting/JJMasterData JJMasterData.png - 4.5.29 + 5.0.0 + 4 + preview$(PreviewNumber) + $(VersionPrefix) + $(VersionPrefix)-$(VersionSuffix) $(Version) - $(Version) - $(Version) + $(VersionPrefix) + $(VersionPrefix) + $(Version) README.NuGet.md true true diff --git a/Directory.Packages.props b/Directory.Packages.props index 29bd8861a..181727105 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -9,6 +9,7 @@ + diff --git a/JJMasterData.slnx b/JJMasterData.slnx index 53968bbcf..0d6997b7c 100644 --- a/JJMasterData.slnx +++ b/JJMasterData.slnx @@ -13,7 +13,6 @@ - diff --git a/doc/MasterData.Docs/MasterData.Docs.csproj b/doc/MasterData.Docs/MasterData.Docs.csproj index bb4645869..3f6fc7fa6 100644 --- a/doc/MasterData.Docs/MasterData.Docs.csproj +++ b/doc/MasterData.Docs/MasterData.Docs.csproj @@ -1,7 +1,7 @@  - netstandard2.0 + net10.0 13 JJMasterData.Documentation JJMasterData.Documentation diff --git a/doc/MasterData.Docs/articles/configurations.md b/doc/MasterData.Docs/articles/configurations.md index b766c5416..e26b30ee6 100644 --- a/doc/MasterData.Docs/articles/configurations.md +++ b/doc/MasterData.Docs/articles/configurations.md @@ -5,7 +5,7 @@ There are three ways to configure an application:

-**1)** Add your configuration keys in appsettings.json. On .NET Framework you will need to add `IConfiguration` via `Microsoft.Extensions.Configuration` +**1)** Add your configuration keys in appsettings.json. > [!TIP] > To autocomplete with JJMasterData keys in your text editor, put this URL in the JSON Schema of your IDE. @@ -70,4 +70,3 @@ You can change any property from: [Read more](localization.md) about localization.
- diff --git a/doc/MasterData.Docs/articles/custom_rules.md b/doc/MasterData.Docs/articles/customizations.md similarity index 92% rename from doc/MasterData.Docs/articles/custom_rules.md rename to doc/MasterData.Docs/articles/customizations.md index 283ca6261..be5026bf9 100644 --- a/doc/MasterData.Docs/articles/custom_rules.md +++ b/doc/MasterData.Docs/articles/customizations.md @@ -1,4 +1,6 @@ -# Custom Rules +# Customizations + +If you are looking for declarative validations configured directly in the Data Dictionary UI, see [Rules](rules.md). There are three ways to customize MasterData @@ -82,7 +84,6 @@ IF (MyCustomLogic, you can use your @Parameters) ``` > [!WARNING] -> It is not a best practice write business rules at database, recommended only for simple validations. +> It is not a best practice write business rules as exceptions at the database, please use [Rules](rules.md). --- - diff --git a/doc/MasterData.Docs/articles/errors/connection_string.md b/doc/MasterData.Docs/articles/errors/connection_string.md index e0aae288a..6110ec9d6 100644 --- a/doc/MasterData.Docs/articles/errors/connection_string.md +++ b/doc/MasterData.Docs/articles/errors/connection_string.md @@ -4,7 +4,7 @@ This is probably the first error you can find setting up JJMasterData. You can easily solve it in different ways. -## ..NET 8+ +## .NET 10 Add a default connection string to appsettings.json. ```json { @@ -14,8 +14,8 @@ Add a default connection string to appsettings.json. } ``` -## .NET Framework 4.8 and .NET Standard 2.0 -Using any supported .NET version, you can set programmatically your connection string. +## Programmatic configuration +You can set your connection string programmatically. ```csharp builder.Services.AddJJMasterDataCore(new MasterDataCoreOptionsConfiguration() { diff --git a/doc/MasterData.Docs/articles/getting_started.md b/doc/MasterData.Docs/articles/getting_started.md index 262f85dfd..133691f9b 100644 --- a/doc/MasterData.Docs/articles/getting_started.md +++ b/doc/MasterData.Docs/articles/getting_started.md @@ -1,7 +1,6 @@ # Getting Started -This tutorial assumes you will use .NET 8+, for .NET Framework 4.8 support, -check our [documentation](miscellaneous/netframework.md). +This tutorial assumes you will use .NET 10. ## 1. Install JJMasterData.Web from NuGet ![JJMasterData Nuget](../media/NuGet.png) diff --git a/doc/MasterData.Docs/articles/miscellaneous/assemblies.md b/doc/MasterData.Docs/articles/miscellaneous/assemblies.md index a0f6fc177..38a32e339 100644 --- a/doc/MasterData.Docs/articles/miscellaneous/assemblies.md +++ b/doc/MasterData.Docs/articles/miscellaneous/assemblies.md @@ -7,21 +7,21 @@ JJMasterData dependency tree can be represented by the following diagram: ## Assemblies ### JJMasterData.Web -Target Frameworks: ..NET 8 +Target Framework: .NET 10
Razor Class Library with web graphical interfaces to manipulate and render your metadata. ### JJMasterData.WebApi -Target Framework: ..NET 8 +Target Framework: .NET 10
Restful API to consume your metadata at any front-end. ### JJMasterData.Core -Target Frameworks: ..NET 8, .NET Standard 2.0 and .NET Framework 4.8 +Target Framework: .NET 10
Library to access your metadata from .NET and/or render it at HTML components. ### JJMasterData.Commons -Target: .NET Standard 2.0 +Target Framework: .NET 10
-Utilities to all assemblies, like database access, l10n, logging and utils. \ No newline at end of file +Utilities to all assemblies, like database access, l10n, logging and utils. diff --git a/doc/MasterData.Docs/articles/miscellaneous/netframework.md b/doc/MasterData.Docs/articles/miscellaneous/netframework.md deleted file mode 100644 index 549208783..000000000 --- a/doc/MasterData.Docs/articles/miscellaneous/netframework.md +++ /dev/null @@ -1,13 +0,0 @@ -# .NET Framework Support - -JJMasterData supports legacy .NET Framework systems, including ASP.NET WebForms and MVC5. - -## Differences from ASP.NET Core - -- JJMasterData.Web is not supported, we recommend starting a [incremental migration](https://devblogs.microsoft.com/dotnet/incremental-asp-net-to-asp-net-core-migration/) -and use the DataDictionary Razor Class Library in a external website. -- At Global.asax, use AddJJMasterDataCore() instead of AddJJMasterDataWeb() -- You will need to include in your Template.master or _Layout.cshtml, all JJMasterData front-end dependencies, check `_MasterDataScripts` and `_MasterDataStylesheets` source code. -- You will need a custom DI container like SimpleInjector -- After these steps, simply instantiate your using or use the Render route in your external ..NET 8 website. -- You will need to handle your manually \ No newline at end of file diff --git a/doc/MasterData.Docs/articles/rules.md b/doc/MasterData.Docs/articles/rules.md new file mode 100644 index 000000000..1164e4fe2 --- /dev/null +++ b/doc/MasterData.Docs/articles/rules.md @@ -0,0 +1,193 @@ +# Rules + +Rules allow you to run custom scripts before `insert` and `update` operations in a `FormElement`. + +Use them when field-level validations are not enough, and you need to validate combinations of values, check data in the database, or apply custom business rules. + +## Where to configure + +In the Data Dictionary UI, open your element and go to the `Rules` tab. + +Each rule has: + +- **Name**: Friendly identification for the rule +- **Rule Type**: Script language used by the rule +- **Script**: The validation logic itself + +Currently supported languages: + +- `SQL` +- `JavaScript` + +## How errors work + +Rules must produce validation errors only when something is wrong. + +If a rule does not produce any error, the operation continues normally. + +## SQL rules + +SQL rules execute a query and interpret the returned rows as validation errors. + +### Result contract + +- Return **no rows**: validation succeeded +- Return **1 column**: general validation error +- Return **2 columns**: field error, where: + - first column = field name + - second column = error message +- Column names do not matter + +### Available parameters + +You can use form values as parameters with the syntax: + +```sql +{FieldName} +``` + +### SQL examples + +General error: + +```sql +if exists ( + select 1 + from Customer + where Document = {Document} + and Id <> isnull({Id}, 0) +) + select 'There is already another customer with this document.' +``` + +Field error: + +```sql +if exists ( + select 1 + from Customer + where Email = {Email} + and Id <> isnull({Id}, 0) +) + select 'Email', 'This email is already in use.' +``` + +Multiple errors: + +```sql +-- Validation: required +IF @Nome IS NULL OR LTRIM(RTRIM(@Nome)) = '' +BEGIN + SELECT 'Name', 'Name is required'; +END; + +-- Validation: minimum and maximum length +IF LEN(@Nome) < 2 OR LEN(@Nome) > 100 +BEGIN + SELECT 'Name must be between 2 and 100 characters'; +END; + +-- Validation: only letters and spaces (no numbers or special characters) +IF @Nome LIKE '%[^A-Za-zÀ-ÿ ]%' +BEGIN + SELECT 'Name', 'Name contains invalid characters'; +END; + +-- Validation: avoid multiple consecutive spaces +IF @Nome LIKE '% %' +BEGIN + SELECT 'Name', 'Name cannot contain consecutive spaces'; +END; + +-- Validation: blacklist (business rule example) +IF UPPER(@Nome) IN ('ADMIN', 'ROOT', 'SYSTEM') +BEGIN + SELECT 'Name', 'Name not allowed'; +END; + +-- Validation: avoid unrealistically short names +IF LEN(REPLACE(@Nome, ' ', '')) < 2 +BEGIN + SELECT 'Name', 'Invalid name'; +END; + +-- Specific validation (example business rule) +IF @Nome = 'Bola' +BEGIN + SELECT 'Name', 'Name blocked by internal rule'; +END; + +``` + +## JavaScript rules + +JavaScript rules run with [Jint](https://github.com/sebastienros/jint). +They are executed **server-side**, not in the browser. + +The script receives: + +- `values`: object containing form values +- `addError(message)`: adds a general error +- `addError(name, message)`: adds a field error + +### JavaScript examples + +General error: + +```javascript +if (!values.Name && !values.CompanyName) { + addError("Either Name or CompanyName must be filled."); +} +``` + +Field error: + +```javascript +if (!values.Email) { + addError("Email", "Email is required."); +} +``` + +Multiple errors: + +```javascript +if (!values.StartDate) { + addError("StartDate", "Start date is required."); +} + +if (!values.EndDate) { + addError("EndDate", "End date is required."); +} + +if (values.StartDate && values.EndDate && values.StartDate > values.EndDate) { + addError("EndDate", "End date must be greater than or equal to start date."); +} +``` + +Cross-field validation: + +```javascript +if (values.Type === "Company" && !values.Document) { + addError("Document", "Document is required for companies."); +} +``` + +## Choosing between SQL and JavaScript + +Use `SQL` when: + +- validation depends on database queries +- you want to reuse database-side logic +- you need to validate against existing persisted data + +Use `JavaScript` when: + +- validation depends only on current form values +- you want simpler cross-field logic +- you want a more expressive scripting syntax for conditional rules + +## Notes + +- Rule field names must match the dictionary field names when you add field errors +- General errors are shown as form-level validation messages +- Field errors are attached to the corresponding field when possible diff --git a/doc/MasterData.Docs/articles/toc.yml b/doc/MasterData.Docs/articles/toc.yml index b362b253f..b7c709240 100644 --- a/doc/MasterData.Docs/articles/toc.yml +++ b/doc/MasterData.Docs/articles/toc.yml @@ -48,8 +48,10 @@ href: actions/cancel_action.md - name: Back href: actions/back_action.md - - name: Custom Rules - href: custom_rules.md + - name: Customizations + href: customizations.md + - name: Rules + href: rules.md - name: TagHelpers href: taghelpers.md - name: Localization @@ -146,7 +148,5 @@ items: - name: Multiple Forms Support href: multiple_forms.md - - name: .NET Framework Support - href: miscellaneous/netframework.md - name: Assemblies href: miscellaneous/assemblies.md diff --git a/doc/MasterData.Docs/articles/tutorials/creating_data_dictionary.md b/doc/MasterData.Docs/articles/tutorials/creating_data_dictionary.md index 628dbf936..09291753d 100644 --- a/doc/MasterData.Docs/articles/tutorials/creating_data_dictionary.md +++ b/doc/MasterData.Docs/articles/tutorials/creating_data_dictionary.md @@ -108,9 +108,6 @@ With Alignment At Grid at Right: #### Export You can define whether or not the field will be exported. -#### Validade Request -On .NET Framework 4.8 systems, the field will validate dangerous values, like Html tags and SQL commands. - ## **Panels** Allows you to separate the dictionary fields into panels. But only for add, edit and view actions. @@ -149,6 +146,14 @@ The Actions field is divided into two, Grid and Toolbar. - Filter: Shows all filter options for searching items within the table. - Log: Records and displays the actions performed within the table, including adding, editing and deleting. +## Rules +Within the Rules tab you can create script-based validations executed before `insert` and `update`. + +- SQL rules can return rows representing validation errors +- JavaScript rules can call `addError(message)` or `addError(fieldName, message)` + +For the complete reference, see [Rules](../rules.md). + ## **API** Within this tab it will be possible to edit each verb responsible for http permissions within the REST API. - ApplyUseridOn: Name of the field where the user ID filter will be applied. diff --git a/doc/MasterData.Docs/articles/tutorials/data_file.md b/doc/MasterData.Docs/articles/tutorials/data_file.md index 5bcfe697e..86b081f16 100644 --- a/doc/MasterData.Docs/articles/tutorials/data_file.md +++ b/doc/MasterData.Docs/articles/tutorials/data_file.md @@ -51,7 +51,7 @@ Where we configure the maximum size in bytes allowed in the upload. The maximum ### What can you do If you want to increase the size of this field, you will need to change the setting **MaxRequestLength** -The default size is 4 MB for .NET Framework and 30MB for .NET Core. +The default size is 30 MB for ASP.NET Core. ## Why when enabling a MultipleFile property I cannot enable ExportAsLink? @@ -66,4 +66,4 @@ Unfortunately in this scenario you will have to create a field for each file. ## Como acessar o arquivo de fora do elemento em uma rota externa? -Utilize o endpoint `/MasterData/File/Index/{elementName}/{fieldName}/{id}?fileName=YourFileName.png` para recuperar seu arquivo. Onde {id} é sua chave primária, caso seja mais de um campo, utilize vírgula para separar os valores. \ No newline at end of file +Utilize o endpoint `/MasterData/File/Index/{elementName}/{fieldName}/{id}?fileName=YourFileName.png` para recuperar seu arquivo. Onde {id} é sua chave primária, caso seja mais de um campo, utilize vírgula para separar os valores. diff --git a/doc/README.md b/doc/README.md index 5a6b431ff..fa59e1a22 100644 --- a/doc/README.md +++ b/doc/README.md @@ -3,7 +3,7 @@ We use docfx to build the documentation in markdown to learn more visit [DocFx Documetantion](https://dotnet.github.io/docfx/) ## Building from source -1. Install [.NET Framework 4.8] +1. Install [.NET 10 SDK](https://dotnet.microsoft.com/download) 2. Install [NodeJS](https://nodejs.org/en/download/) diff --git a/jjmasterdata.json b/jjmasterdata.json index f2c6f6210..245bb34bc 100644 --- a/jjmasterdata.json +++ b/jjmasterdata.json @@ -23,9 +23,6 @@ "null" ] }, - "SupportNetFramework": { - "type": "boolean" - }, "EnableBundleAndMinification": { "type": "boolean" }, @@ -53,12 +50,6 @@ "null" ] }, - "MasterDataUrl": { - "type": [ - "string", - "null" - ] - }, "ExportationFolderPath": { "type": [ "string", @@ -111,12 +102,10 @@ "LayoutPath", "ModalLayoutPath", "CustomBootstrapPath", - "SupportNetFramework", "EnableBundleAndMinification", "CustomScriptsPaths", "DataDictionaryTableName", "AuditLogTableName", - "MasterDataUrl", "ExportationFolderPath", "ConnectionString", "ConnectionProvider", @@ -127,4 +116,4 @@ ] } } -} \ No newline at end of file +} diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/ExpressionsMigrationService.cs b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/ExpressionsMigrationService.cs deleted file mode 100644 index e9408003f..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/ExpressionsMigrationService.cs +++ /dev/null @@ -1,166 +0,0 @@ -using JJMasterData.Commons.Util; -using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.DataDictionary.Models.Actions; -using JJMasterData.Core.DataDictionary.Repository.Abstractions; - -namespace JJMasterData.LegacyMetadataMigrator; - -public class ExpressionsMigrationService( - IDataDictionaryRepository dataDictionaryRepository) -{ - private IDataDictionaryRepository DataDictionaryRepository { get; } = dataDictionaryRepository; - - public void Migrate() - { - var start = DateTime.Now; - - var formElements = DataDictionaryRepository.GetFormElementListAsync().GetAwaiter().GetResult(); - - foreach (var formElement in formElements) - { - foreach (var field in formElement.Fields) - { - FixFieldExpressions(field); - } - - foreach (var panel in formElement.Panels) - { - FixPanelExpressions(panel); - } - - foreach (var action in formElement.Options.GridTableActions) - { - FixActionExpressions(action); - } - - foreach (var action in formElement.Options.GridToolbarActions) - { - FixActionExpressions(action); - } - - foreach (var action in formElement.Options.FormToolbarActions) - { - FixActionExpressions(action); - } - - DataDictionaryRepository.InsertOrReplace(formElement); - } - - Console.WriteLine("Process started: {0}", start); - Console.WriteLine("Process finished: {0}", DateTime.Now); - } - - private void FixFieldExpressions(FormElementField field) - { - var visibleExpressionBefore = field.VisibleExpression; - - field.VisibleExpression = FixQuotationMarks(visibleExpressionBefore); - - if (visibleExpressionBefore != field.VisibleExpression) - { - Console.WriteLine("{0} VisibleExpression Before: {1}", field.Name, - visibleExpressionBefore); - Console.WriteLine("{0} VisibleExpression After: {1}", field.Name, - field.VisibleExpression); - } - - var enableExpressionBefore = field.EnableExpression; - - field.EnableExpression = FixQuotationMarks(enableExpressionBefore); - - if (enableExpressionBefore != field.EnableExpression) - { - Console.WriteLine("{0} EnableExpression Before: {1}", field.Name, - enableExpressionBefore); - Console.WriteLine("{0} EnableExpression After: {1}", field.Name, field.EnableExpression); - } - - foreach (var action in field.Actions) - { - FixActionExpressions(action); - } - } - - // ReSharper disable once MemberCanBeMadeStatic.Local -#pragma warning disable CA1822 - private void FixPanelExpressions(FormElementPanel panel) -#pragma warning restore CA1822 - { - var visibleExpressionBefore = panel.VisibleExpression; - - panel.VisibleExpression = FixQuotationMarks(visibleExpressionBefore); - - if (visibleExpressionBefore != panel.VisibleExpression) - { - Console.WriteLine("Panel {0} VisibleExpression Before: {1}", panel.PanelId, - visibleExpressionBefore); - Console.WriteLine("Panel {0} VisibleExpression After: {1}", panel.PanelId, - panel.VisibleExpression); - } - - var enableExpressionBefore = panel.EnableExpression; - - panel.EnableExpression = FixQuotationMarks(enableExpressionBefore); - - if (enableExpressionBefore != panel.EnableExpression) - { - Console.WriteLine("Panel {0} EnableExpression Before: {1}", panel.PanelId, - enableExpressionBefore); - Console.WriteLine("Panel {0} EnableExpression After: {1}", panel.PanelId, - panel.EnableExpression); - } - } - - // ReSharper disable once MemberCanBeMadeStatic.Local -#pragma warning disable CA1822 - private void FixActionExpressions(BasicAction action) -#pragma warning restore CA1822 - { - var visibleExpressionBefore = action.VisibleExpression; - - action.VisibleExpression = FixQuotationMarks(visibleExpressionBefore); - - if (visibleExpressionBefore != action.VisibleExpression) - { - Console.WriteLine("Action {0} VisibleExpression Before: {1}", action.Name, - visibleExpressionBefore); - Console.WriteLine("Action {0} VisibleExpression After: {1}", action.Name, - action.VisibleExpression); - } - - var enableExpressionBefore = action.EnableExpression; - - action.EnableExpression = FixQuotationMarks(enableExpressionBefore); - - if (enableExpressionBefore != action.EnableExpression) - { - Console.WriteLine("Action {0} EnableExpression Before: {1}", action.Name, - enableExpressionBefore); - Console.WriteLine("Action {0} EnableExpression After: {1}", action.Name, - action.EnableExpression); - } - } - - private static string FixQuotationMarks(string? expression) - { - if (string.IsNullOrEmpty(expression)) - return "val:1"; - - var quotedValues = StringManager.FindValuesByInterval(expression, '\'','\'').ToList(); - var bracedValues = StringManager.FindValuesByInterval(expression, '{','}').ToList(); - - var newExpression = expression; - - foreach (var bracedValue in bracedValues) - { - var hasQuotes = quotedValues.Any(quotedValue => quotedValue.Contains(bracedValue)); - - if(hasQuotes) - continue; - - newExpression = expression.Replace($"{{{bracedValue}}}", $"'{{{bracedValue}}}'"); - } - - return newExpression; - } -} \ No newline at end of file diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/GridActions.cs b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/GridActions.cs deleted file mode 100644 index c59da8d9a..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/GridActions.cs +++ /dev/null @@ -1,260 +0,0 @@ -#nullable disable - -using JJMasterData.Core.DataDictionary.Models.Actions; -using Newtonsoft.Json; - -namespace JJMasterData.LegacyMetadataMigrator.FormElementMigration; - - -public class GridActions -{ - [JsonProperty("editAction")] - public EditAction EditAction { get; set; } = new(); - - [JsonProperty("deleteAction")] - public DeleteAction DeleteAction { get; set; } = new(); - - [JsonProperty("viewAction")] - public ViewAction ViewAction { get; set; } = new(); - - [JsonProperty("commandActions")] - private List CommandActions { get; set; } = []; - - [JsonProperty("urlRedirectActions")] - private List UrlRedirectActions { get; set; } = []; - - [JsonProperty("internalActions")] - private List InternalActions { get; set; } = []; - - [JsonProperty("jsActions")] - private List JsActions { get; set; } = []; - - - public void Set(BasicAction action) - { - if (action is ViewAction viewAction) - { - ViewAction = viewAction; - } - else if (action is EditAction editAction) - { - EditAction = editAction; - } - else if (action is DeleteAction deleteAction) - { - DeleteAction = deleteAction; - } - else if (action is SqlCommandAction cmdAction) - { - for (int i = 0; i < CommandActions.Count; i++) - { - if (CommandActions[i].Name.Equals(action.Name)) - { - CommandActions[i] = cmdAction; - return; - } - } - CommandActions.Add(cmdAction); - } - else if (action is UrlRedirectAction urlAction) - { - for(int i =0;i< UrlRedirectActions.Count; i++) - { - if (UrlRedirectActions[i].Name.Equals(action.Name)) - { - UrlRedirectActions[i] = urlAction; - return; - } - } - UrlRedirectActions.Add(urlAction); - } - else if (action is InternalAction internalAction) - { - for (int i = 0; i < InternalActions.Count; i++) - { - if (InternalActions[i].Name.Equals(action.Name)) - { - InternalActions[i] = internalAction; - return; - } - } - InternalActions.Add(internalAction); - } - else if (action is ScriptAction jsAction) - { - for (int i = 0; i < JsActions.Count; i++) - { - if (JsActions[i].Name.Equals(action.Name)) - { - JsActions[i] = jsAction; - return; - } - } - JsActions.Add(jsAction); - } - else - { - throw new ArgumentException("Invalid Action"); - } - } - - public void Add(SqlCommandAction action) - { - ValidateAction(action); - CommandActions.Add(action); - } - - - public void Add(UrlRedirectAction action) - { - ValidateAction(action); - UrlRedirectActions.Add(action); - } - - public void Add(InternalAction action) - { - ValidateAction(action); - InternalActions.Add(action); - } - - public void Add(ScriptAction action) - { - ValidateAction(action); - JsActions.Add(action); - } - - public void Remove(SqlCommandAction action) - { - ValidateAction(action); - CommandActions.Remove(action); - } - public void Remove(UrlRedirectAction action) - { - ValidateAction(action); - UrlRedirectActions.Remove(action); - } - - public void Remove(InternalAction action) - { - ValidateAction(action); - InternalActions.Remove(action); - } - - public void Remove(ScriptAction action) - { - ValidateAction(action); - JsActions.Remove(action); - } - - - public void Remove(BasicAction action) - { - if (action is SqlCommandAction acSql) - { - Remove(acSql); - } - else if (action is UrlRedirectAction acUrl) - { - Remove(acUrl); - } - else if (action is InternalAction acInternal) - { - Remove(acInternal); - } - else if (action is ScriptAction acJs) - { - Remove(acJs); - } - else - { - throw new ArgumentException("Invalid Action"); - } - } - - public void Remove(string actionName) - { - BasicAction action = Get(actionName); - Remove(action); - } - -#pragma warning disable CA1822 - // ReSharper disable once MemberCanBeMadeStatic.Local - private void ValidateAction(BasicAction action) -#pragma warning restore CA1822 - { - if (action == null) - throw new ArgumentNullException(nameof(action)); - - if (string.IsNullOrEmpty(action.Name)) - throw new ArgumentException("Property name action is not valid"); - } - - public BasicAction Get(string name) - { - BasicAction action = null; - if (ViewAction.Name.Equals(name)) - return ViewAction; - - if (EditAction.Name.Equals(name)) - return EditAction; - - if (DeleteAction.Name.Equals(name)) - return DeleteAction; - - action = CommandActions.Find(x => x.Name.Equals(name)); - if (action != null) - return action; - - action = UrlRedirectActions.Find(x => x.Name.Equals(name)); - if (action != null) - return action; - - action = InternalActions.Find(x => x.Name.Equals(name)); - if (action != null) - return action; - - action = JsActions.Find(x => x.Name.Equals(name)); - if (action != null) - return action; - - return null; - } - - public void SetDefault(string actionName) - { - foreach (var action in GetAll()) - { - action.IsDefaultOption = action.Name.Equals(actionName); - } - } - - public List GetAll() - { - var listAction = new List(); - - if (ViewAction is not null) - listAction.Add(ViewAction); - - if (EditAction is not null) - listAction.Add(EditAction); - - if (DeleteAction is not null) - listAction.Add(DeleteAction); - - if (CommandActions is { Count: > 0 }) - listAction.AddRange(CommandActions.ToArray()); - - if (UrlRedirectActions is { Count: > 0 }) - listAction.AddRange(UrlRedirectActions.ToArray()); - - if (InternalActions is { Count: > 0 }) - listAction.AddRange(InternalActions.ToArray()); - - if (JsActions is { Count: > 0 }) - listAction.AddRange(JsActions.ToArray()); - - return listAction.OrderBy(x => x.Order).ToList(); - } - - public int Count => GetAll().FindAll(x => x.IsVisible).Count; -} \ No newline at end of file diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/GridToolbarActions.cs b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/GridToolbarActions.cs deleted file mode 100644 index 7fe8cd2f9..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/GridToolbarActions.cs +++ /dev/null @@ -1,311 +0,0 @@ -#nullable disable - -using JJMasterData.Core.DataDictionary.Models.Actions; -using Newtonsoft.Json; - -namespace JJMasterData.LegacyMetadataMigrator.FormElementMigration; - -public class GridToolbarActions -{ - [JsonProperty("insertAction")] - public InsertAction InsertAction { get; set; } = new(); - - [JsonProperty("legendAction")] - public LegendAction LegendAction { get; set; } = new(); - - [JsonProperty("refreshAction")] - public RefreshAction RefreshAction { get; set; } = new(); - - [JsonProperty("filterAction")] - public FilterAction FilterAction { get; set; } = new(); - - [JsonProperty("importAction")] - public ImportAction ImportAction { get; set; } = new(); - - [JsonProperty("exportAction")] - public ExportAction ExportAction { get; set; } = new(); - - [JsonProperty("configAction")] - public ConfigAction ConfigAction { get; set; } = new(); - - [JsonProperty("sortAction")] - public SortAction SortAction { get; set; } = new(); - - [JsonProperty("logAction")] - public AuditLogGridToolbarAction AuditLogGridToolbarAction { get; set; } = new(); - - [JsonProperty("commandActions")] - private List CommandActions { get; set; } = []; - - [JsonProperty("urlRedirectActions")] - private List UrlRedirectActions { get; set; } = []; - - [JsonProperty("internalActions")] - private List InternalActions { get; set; } = []; - - [JsonProperty("jsActions")] - private List JsActions { get; set; } = []; - - - public void Set(BasicAction action) - { - switch (action) - { - case InsertAction insertAction: - InsertAction = insertAction; - break; - case LegendAction legendAction: - LegendAction = legendAction; - break; - case RefreshAction refreshAction: - RefreshAction = refreshAction; - break; - case FilterAction filterAction: - FilterAction = filterAction; - break; - case ImportAction importAction: - ImportAction = importAction; - break; - case ExportAction exportAction: - ExportAction = exportAction; - break; - case ConfigAction configAction: - ConfigAction = configAction; - break; - case SortAction sortAction: - SortAction = sortAction; - break; - case AuditLogGridToolbarAction logAction: - AuditLogGridToolbarAction = logAction; - break; - case SqlCommandAction cmdAction: - { - for (int i = 0; i < CommandActions.Count; i++) - { - if (CommandActions[i].Name.Equals(action.Name)) - { - CommandActions[i] = cmdAction; - return; - } - } - CommandActions.Add(cmdAction); - break; - } - case UrlRedirectAction urlAction: - { - for (int i = 0; i < UrlRedirectActions.Count; i++) - { - if (UrlRedirectActions[i].Name.Equals(action.Name)) - { - UrlRedirectActions[i] = urlAction; - return; - } - } - UrlRedirectActions.Add(urlAction); - break; - } - case InternalAction internalAction: - { - for (int i = 0; i < InternalActions.Count; i++) - { - if (InternalActions[i].Name.Equals(action.Name)) - { - InternalActions[i] = internalAction; - return; - } - } - InternalActions.Add(internalAction); - break; - } - case ScriptAction scriptAction: - { - for (int i = 0; i < JsActions.Count; i++) - { - if (JsActions[i].Name.Equals(action.Name)) - { - JsActions[i] = scriptAction; - return; - } - } - JsActions.Add(scriptAction); - break; - } - default: - throw new ArgumentException("Invalid Action"); - } - } - - - public void Add(SqlCommandAction action) - { - ValidateAction(action); - CommandActions.Add(action); - } - - public void Add(UrlRedirectAction action) - { - ValidateAction(action); - UrlRedirectActions.Add(action); - } - - public void Add(InternalAction action) - { - ValidateAction(action); - InternalActions.Add(action); - } - - public void Add(ScriptAction action) - { - ValidateAction(action); - JsActions.Add(action); - } - - public void Add(BasicAction action) - { - if (action is SqlCommandAction cmdAction) - Add(cmdAction); - else if (action is UrlRedirectAction urlAction) - Add(urlAction); - else if (action is InternalAction internalAction) - Add(internalAction); - else if (action is ScriptAction scriptAction) - Add(scriptAction); - else - throw new ArgumentException("Invalid Action"); - } - - public void Remove(SqlCommandAction action) - { - ValidateAction(action); - CommandActions.Remove(action); - } - public void Remove(UrlRedirectAction action) - { - ValidateAction(action); - UrlRedirectActions.Remove(action); - } - - public void Remove(InternalAction action) - { - ValidateAction(action); - InternalActions.Remove(action); - } - public void Remove(ScriptAction action) - { - ValidateAction(action); - JsActions.Remove(action); - } - - public void Remove(BasicAction action) - { - if (action is SqlCommandAction acSql) - { - Remove(acSql); - } - else if (action is UrlRedirectAction acUrl) - { - Remove(acUrl); - } - else if (action is InternalAction acInternal) - { - Remove(acInternal); - } - else if (action is ScriptAction jScriptAction) - { - Remove(jScriptAction); - } - else - { - throw new ArgumentException("Invalid Action"); - } - } - - public void Remove(string actionName) - { - BasicAction action = Get(actionName); - Remove(action); - } - -#pragma warning disable CA1822 - // ReSharper disable once MemberCanBeMadeStatic.Local - private void ValidateAction(BasicAction action) -#pragma warning restore CA1822 - { - if (action == null) - throw new ArgumentNullException(nameof(action)); - - if (string.IsNullOrEmpty(action.Name)) - throw new ArgumentException("Property name action is not valid"); - } - - public BasicAction Get(string name) - { - return GetAll().Find(x => x.Name.Equals(name)); - } - - - public List GetAll() - { - var actionList = new List(); - - if (InsertAction is not null) - { - } - else - { - InsertAction = new InsertAction(); - } - - actionList.Add(InsertAction); - - if (LegendAction is not null) - { - } - else - { - LegendAction = new LegendAction(); - } - - actionList.Add(LegendAction); - - RefreshAction ??= new RefreshAction(); - - actionList.Add(RefreshAction); - - FilterAction ??= new FilterAction(); - - actionList.Add(FilterAction); - - ImportAction ??= new ImportAction(); - - actionList.Add(ImportAction); - - ExportAction ??= new ExportAction(); - - actionList.Add(ExportAction); - - ConfigAction ??= new ConfigAction(); - - actionList.Add(ConfigAction); - - SortAction ??= new SortAction(); - - actionList.Add(SortAction); - - AuditLogGridToolbarAction ??= new AuditLogGridToolbarAction(); - - actionList.Add(AuditLogGridToolbarAction); - if (CommandActions is { Count: > 0 }) - actionList.AddRange(CommandActions.ToArray()); - - if (UrlRedirectActions is { Count: > 0 }) - actionList.AddRange(UrlRedirectActions.ToArray()); - - if (InternalActions is { Count: > 0 }) - actionList.AddRange(InternalActions.ToArray()); - - if (JsActions is { Count: > 0 }) - actionList.AddRange(JsActions.ToArray()); - return actionList.OrderBy(x => x.Order).ToList(); - } -} \ No newline at end of file diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/Metadata.cs b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/Metadata.cs deleted file mode 100644 index 67d0bee45..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/Metadata.cs +++ /dev/null @@ -1,101 +0,0 @@ -#nullable disable - -using System.Collections; -using JJMasterData.Commons.Data.Entity.Models; -using JJMasterData.Core.DataDictionary.Models; -using Newtonsoft.Json; - -namespace JJMasterData.LegacyMetadataMigrator.FormElementMigration; - -[JsonObject("elementInfo")] -public class Metadata -{ - [JsonProperty("table")] - public Element Table { get; set; } - - [JsonProperty("form")] - public MetadataForm Form { get; set; } - - [JsonProperty("uioptions")] - public MetadataOptions Options { get; set; } - - [JsonProperty("api")] - public MetadataApiOptions ApiOptions { get; set; } - - public static explicit operator FormElement(Metadata metadata) => metadata.GetFormElement(); - - public FormElement GetFormElement() - { - var formElement = new FormElement(Table) - { - Title = Form.Title, - SubTitle = Form.SubTitle, - Panels = Form.Panels, - Info = Table.Info, - Indexes = Table.Indexes, - EnableSynchronism = Table.EnableSynchronism, - SynchronismMode = Table.SynchronismMode, - }; - - foreach (var item in Form.FormFields) - { - var field = formElement.Fields[item.Name]; - field.Component = item.Component; - field.VisibleExpression = item.VisibleExpression; - field.EnableExpression = item.EnableExpression; - field.TriggerExpression = item.TriggerExpression; - field.LineGroup = item.LineGroup; - field.CssClass = item.CssClass; - field.HelpDescription = item.HelpDescription; - field.DataItem = item.DataItem; - field.Attributes[FormElementField.MinValueAttribute] = item.MinValue; - field.Attributes[FormElementField.MaxValueAttribute] = item.MaxValue; - field.DataFile = item.DataFile; - field.Export = item.Export; - field.ValidateRequest = item.ValidateRequest ?? true; - field.AutoPostBack = item.AutoPostBack; - field.NumberOfDecimalPlaces = item.NumberOfDecimalPlaces; - field.Actions = item.Actions; - field.Attributes = item.Attributes?.Cast() - .ToDictionary(kvp => kvp.Key.ToString(), kvp => kvp.Value) ?? new Dictionary(); - field.PanelId = item.PanelId; - field.InternalNotes = item.InternalNotes; - } - - - formElement.Options = new FormElementOptions - { - Form = Options.Form, - Grid = Options.Grid - }; - - formElement.Options.GridTableActions.Clear(); - - foreach (var a in Options.GridActions.GetAll()) - { - formElement.Options.GridTableActions.Add(a); - } - - formElement.Options.GridToolbarActions.Clear(); - - foreach (var a in Options.ToolbarActions.GetAll()) - { - formElement.Options.GridToolbarActions.Add(a); - } - - formElement.ApiOptions = new FormElementApiOptions - { - JsonFormatting = ApiOptions.FormatType, - EnableAdd = ApiOptions.EnableAdd, - EnableGetAll = ApiOptions.EnableGetAll, - EnableDel = ApiOptions.EnableDel, - EnableUpdate = ApiOptions.EnableUpdate, - EnableGetDetail = ApiOptions.EnableGetDetail, - EnableUpdatePart = ApiOptions.EnableUpdatePart, - ApplyUserIdOn = ApiOptions.ApplyUserIdOn - }; - - return formElement; - } - -} \ No newline at end of file diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataApiOptions.cs b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataApiOptions.cs deleted file mode 100644 index 50ec645c7..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataApiOptions.cs +++ /dev/null @@ -1,78 +0,0 @@ -#nullable disable - -using System.Runtime.Serialization; -using JJMasterData.Core.DataDictionary.Models; -using Newtonsoft.Json; - -namespace JJMasterData.LegacyMetadataMigrator.FormElementMigration; - -[DataContract] -public class MetadataApiOptions -{ - /// - /// Get all records. Verb GET - /// - [JsonProperty("enableGetAll")] - public bool EnableGetAll { get; set; } - - /// - /// Get a record detail. Verb GET - /// - [JsonProperty("enableGetDetail")] - public bool EnableGetDetail { get; set; } - - /// - /// Add new records. Verb POST - /// - [JsonProperty("enableAdd")] - public bool EnableAdd { get; set; } - - /// - /// Update records. Verb PUT - /// - [JsonProperty("enableUpdate")] - public bool EnableUpdate { get; set; } - - /// - /// Update some especifics fields. Verb PATCH - /// - [JsonProperty("enableUpdatePart")] - public bool EnableUpdatePart { get; set; } - - /// - /// Delete a record. Verb DEL - /// - [JsonProperty("enableDel")] - public bool EnableDel { get; set; } - - /// - /// Json Format - /// - [JsonProperty("formatType")] - public ApiJsonFormatting FormatType { get; set; } = ApiJsonFormatting.Lowercase; - - /// - /// Aways apply UserId (from login) as filter or on set - /// - [JsonProperty("applyUserIdOn")] - public string ApplyUserIdOn { get; set; } - - - /// - /// Format the field according to the dictionary parameterization - /// - public string GetFieldNameParsed(string fieldName) - { - return FormatType == ApiJsonFormatting.Lowercase ? fieldName.ToLower() : fieldName; - } - - - public bool HasSetMehtod() - { - return EnableAdd || - EnableUpdate || - EnableUpdatePart || - EnableDel; - } - -} \ No newline at end of file diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataForm.cs b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataForm.cs deleted file mode 100644 index cb16bca43..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataForm.cs +++ /dev/null @@ -1,23 +0,0 @@ -#nullable disable - -using System.Runtime.Serialization; -using JJMasterData.Core.DataDictionary.Models; -using Newtonsoft.Json; - -namespace JJMasterData.LegacyMetadataMigrator.FormElementMigration; - -[DataContract] -public class MetadataForm -{ - [JsonProperty("formfields")] - public List FormFields { get; set; } = []; - - [JsonProperty("title")] - public string Title { get; set; } - - [JsonProperty("subtitle")] - public string SubTitle { get; set; } - - [JsonProperty("panels")] - public List Panels { get; set; } = []; -} \ No newline at end of file diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataFormField.cs b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataFormField.cs deleted file mode 100644 index 02221833f..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataFormField.cs +++ /dev/null @@ -1,75 +0,0 @@ -#nullable disable - -using System.Collections; -using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.DataDictionary.Models.Actions; -using Newtonsoft.Json; - -namespace JJMasterData.LegacyMetadataMigrator.FormElementMigration; - - -public class MetadataFormField -{ - [JsonProperty("name")] - public string Name { get; set; } - - [JsonProperty("component")] - public FormComponent Component { get; set; } - - [JsonProperty("visibleexpression")] - public string VisibleExpression { get; set; } - - [JsonProperty("enableexpression")] - public string EnableExpression { get; set; } - - [JsonProperty("triggerexpression")] - public string TriggerExpression { get; set; } - - [JsonProperty("order")] - public int Order { get; set; } - - [JsonProperty("linegroup")] - public int LineGroup { get; set; } - - [JsonProperty("cssclass")] - public string CssClass { get; set; } - - [JsonProperty("helpdescription")] - public string HelpDescription { get; set; } - - [JsonProperty("dataitem")] - public FormElementDataItem DataItem { get; set; } - - [JsonProperty("datafile")] - public FormElementDataFile DataFile { get; set; } - - [JsonProperty("export")] - public bool Export { get; set; } - - [JsonProperty("validaterequest")] - public bool? ValidateRequest { get; set; } - - [JsonProperty("autopostback")] - public bool AutoPostBack { get; set; } - - [JsonProperty("maxvalue")] - public float? MaxValue { get; set; } - - [JsonProperty("minvalue")] - public float? MinValue { get; set; } - - [JsonProperty("numberdecimalplaces")] - public int NumberOfDecimalPlaces { get; set; } - - [JsonProperty("actions")] - public FormElementFieldActionList Actions { get; set; } - - [JsonProperty("attributes")] - public Hashtable Attributes { get; set; } - - [JsonProperty("panelid")] - public int PanelId { get; set; } - - [JsonProperty("internalnotes")] - public string InternalNotes { get; set; } -} \ No newline at end of file diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataInfo.cs b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataInfo.cs deleted file mode 100644 index fa2ca232c..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataInfo.cs +++ /dev/null @@ -1,37 +0,0 @@ -#nullable disable -using Newtonsoft.Json; - -namespace JJMasterData.LegacyMetadataMigrator.FormElementMigration; - -public class MetadataInfo -{ - [JsonProperty("name")] - public string Name { get; set; } - - [JsonProperty("tablename")] - public string TableName { get; set; } - - [JsonProperty("info")] - public string Info { get; set; } - - [JsonProperty("sync")] - public string Sync { get; set; } - - [JsonProperty("modified")] - public DateTime Modified { get; set; } - - public MetadataInfo() - { - - } - - public MetadataInfo(Metadata metadata, DateTime modified) - { - Name = metadata.Table.Name; - TableName = metadata.Table.TableName; - Info = metadata.Table.Info; - Sync = metadata.Table.EnableSynchronism ? "1" : "0"; - Modified = modified; - } - -} \ No newline at end of file diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataOptions.cs b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataOptions.cs deleted file mode 100644 index 65688e4c9..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigration/MetadataOptions.cs +++ /dev/null @@ -1,21 +0,0 @@ -#nullable disable -using JJMasterData.Core.DataDictionary.Models; -using Newtonsoft.Json; - -namespace JJMasterData.LegacyMetadataMigrator.FormElementMigration; - - -public class MetadataOptions -{ - [JsonProperty("grid")] - public GridUI Grid { get; set; } = new(); - - [JsonProperty("form")] - public FormUI Form { get; set; } = new(); - - [JsonProperty("toolBarActions")] - public GridToolbarActions ToolbarActions { get; set; } = new(); - - [JsonProperty("gridActions")] - public GridActions GridActions { get; set; } = new(); -} \ No newline at end of file diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigrationService.cs b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigrationService.cs deleted file mode 100644 index 7c24d7bf5..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/FormElementMigrationService.cs +++ /dev/null @@ -1,121 +0,0 @@ -using JJMasterData.Commons.Configuration.Options; -using JJMasterData.Commons.Data; -using JJMasterData.Commons.Exceptions; -using JJMasterData.Core.Configuration.Options; -using JJMasterData.Core.DataDictionary.Repository.Abstractions; -using Microsoft.Extensions.Options; - -namespace JJMasterData.LegacyMetadataMigrator; - -public class FormElementMigrationService(IDataDictionaryRepository dataDictionaryRepository, - MetadataRepository metadataRepository, - IOptions commonsOptions, - IOptions options, - ExpressionsMigrationService expressionsMigrationService) -{ - private DataAccess? _dataAccess; - private IDataDictionaryRepository DataDictionaryRepository { get; } = dataDictionaryRepository; - private MetadataRepository MetadataRepository { get; } = metadataRepository; - private ExpressionsMigrationService ExpressionsMigrationService { get; } = expressionsMigrationService; - - private DataAccess DataAccess - { - get - { - if (_dataAccess == null) - { - var connStr = commonsOptions.Value.ConnectionString; - var connProvider = commonsOptions.Value.ConnectionProvider; - - if (connStr == null) - throw new DataAccessException("Connection string not found"); - - _dataAccess = new(connStr, connProvider); - } - - return _dataAccess; - } - } - - private string TableName => Options.DataDictionaryTableName; - private MasterDataCoreOptions Options { get; } = options.Value; - - public void Migrate() - { - var start = DateTime.Now; - - var containsLegacyType = DataAccess.GetResult($"SELECT [type] from {TableName} where [type] <> 'F'"); - - if (containsLegacyType is null) - { - Console.WriteLine("✅ DataDictionary is already migrated"); - return; - } - - var databaseDictionaries = MetadataRepository.GetMetadataList(); - - DataAccess.SetCommand($"DROP TABLE {TableName}"); - // DataAccess.SetCommand($"DROP PROCEDURE {Options.GetReadProcedureName(TableName)}"); - // DataAccess.SetCommand($"DROP PROCEDURE {Options.GetWriteProcedureName(TableName)}"); - - DataDictionaryRepository.CreateStructureIfNotExistsAsync().GetAwaiter().GetResult(); - - Console.WriteLine("\u2705 Re-created {0} and all related stored procedures", TableName); - - foreach (var metadata in databaseDictionaries) - { - var formElement = metadata.GetFormElement(); - - formElement.UseReadProcedure = true; - formElement.UseWriteProcedure = true; - - foreach (var field in formElement.Fields) - { - if (field.DataFile is not null) - { - field.DataFile.MaxFileSize /= 1000000; - } - } - - DataDictionaryRepository.InsertOrReplaceAsync(formElement).GetAwaiter().GetResult(); - Console.WriteLine("\u2705 {0}", formElement.Name); - } - - DataAccess.SetCommand($"delete from {TableName} where type <> 'F'"); - - DataAccess.SetCommand($$""" - UPDATE {{TableName}} - SET [json] = REPLACE([json], - '{search_id}', - '{SearchId}') - WHERE [json] LIKE '%{search_id}%'; - """); - - Console.WriteLine("✅ Replaced {{search_id}} to {{SearchId}} in all elements"); - - DataAccess.SetCommand($$""" - UPDATE {{TableName}} - SET [json] = REPLACE([json], - '{search_text}', - '{SearchText}') - WHERE [json] LIKE '%{search_text}%'; - """); - - Console.WriteLine("✅ Replaced {{search_text}} to {{SearchText}} in all elements"); - - DataAccess.SetCommand($$""" - UPDATE {{TableName}} - SET [json] = REPLACE([json], - '{objname}', - '{FieldName}') - WHERE [json] LIKE '%{objname}%'; - """); - - Console.WriteLine("✅ Replaced {{objname}} to {{FieldName}} in all elements"); - - Console.WriteLine($"Process started: {start}"); - Console.WriteLine($"Process finished: {DateTime.Now}"); - - ExpressionsMigrationService.Migrate(); - } -} \ No newline at end of file diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/MasterData.LegacyMetadataMigrator.csproj b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/MasterData.LegacyMetadataMigrator.csproj deleted file mode 100644 index e72049fdb..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/MasterData.LegacyMetadataMigrator.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - Exe - net10.0 - enable - enable - - JJMasterData.LegacyMetadataMigrator - JJMasterData.LegacyMetadataMigrator - - - - - - - - - - - diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/MetadataRepository.cs b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/MetadataRepository.cs deleted file mode 100644 index 7296a64bd..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/MetadataRepository.cs +++ /dev/null @@ -1,173 +0,0 @@ -#nullable disable - -using JJMasterData.Commons.Data.Entity.Models; -using JJMasterData.Commons.Data.Entity.Repository; -using JJMasterData.Commons.Data.Entity.Repository.Abstractions; -using JJMasterData.Core.Configuration.Options; -using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.DataDictionary.Models.Actions; -using JJMasterData.Core.DataDictionary.Repository.Abstractions; -using JJMasterData.Core.DataDictionary.Structure; -using JJMasterData.LegacyMetadataMigrator.FormElementMigration; -using Microsoft.Extensions.Options; -using Newtonsoft.Json; - -namespace JJMasterData.LegacyMetadataMigrator; - -public class MetadataRepository(IEntityRepository entityRepository, IOptions options) -{ - private Element _masterDataElement; - - internal Element MasterDataElement - { - get - { - if (_masterDataElement == null) - { - var tableName = options.Value.DataDictionaryTableName; - _masterDataElement = DataDictionaryStructure.GetElement("dbo", tableName); - } - return _masterDataElement; - } - } - - /// - public IEnumerable GetMetadataList(bool? sync = null) - { - var list = new List(); - var entityParameters = new EntityParameters(); - entityParameters.OrderBy.AddOrReplace("name", OrderByDirection.Asc); - entityParameters.OrderBy.AddOrReplace("type", OrderByDirection.Asc); - if (sync.HasValue) - entityParameters.Filters.Add("sync", (bool)sync ? "1" : "0"); - - MasterDataElement.Fields.Add(new ElementField - { - Name = "namefilter", - Filter = new ElementFilter(FilterMode.Contain), - DataBehavior = FieldBehavior.ViewOnly - }); - - //Ignore procedures to apply compatibility - MasterDataElement.UseReadProcedure = false; - MasterDataElement.UseWriteProcedure = false; - - string currentName = ""; - var dt = entityRepository.GetDictionaryListResultAsync(MasterDataElement,entityParameters, false).GetAwaiter().GetResult(); - Metadata currentParser = null; - foreach (var row in dt.Data) - { - string name = row["name"].ToString(); - if (!currentName.Equals(name)) - { - ApplyCompatibility(currentParser); - - currentName = name; - list.Add(new Metadata()); - currentParser = list[^1]; - } - - string json = row["json"].ToString(); - var type = row["type"].ToString()!; - switch (type) - { - case "T": - currentParser!.Table = JsonConvert.DeserializeObject(json); - break; - case "F": - currentParser!.Form = JsonConvert.DeserializeObject(json, new JsonSerializerSettings - { - Error = (sender, args) => - { - args.ErrorContext.Handled = true; - } - }); - break; - case "L": - currentParser!.Options = JsonConvert.DeserializeObject(json); - break; - case "A": - currentParser!.ApiOptions = JsonConvert.DeserializeObject(json); - break; - } - } - - ApplyCompatibility(currentParser); - - return list; - } - - - public static void ApplyCompatibility(Metadata dicParser) - { - if (dicParser?.Table == null) - return; - - //Nairobi - dicParser.Options ??= new MetadataOptions(); - - dicParser.Options.ToolbarActions ??= new GridToolbarActions(); - - dicParser.Options.GridActions ??= new GridActions(); - - - //Denver - if (dicParser.ApiOptions == null) - { - dicParser.ApiOptions = new MetadataApiOptions(); - if (dicParser.Table.EnableSynchronism) - { - dicParser.ApiOptions.EnableGetAll = true; - dicParser.ApiOptions.EnableGetDetail = true; - dicParser.ApiOptions.EnableAdd = true; - dicParser.ApiOptions.EnableUpdate = true; - dicParser.ApiOptions.EnableUpdatePart = true; - dicParser.ApiOptions.EnableDel = true; - } - } - - if (string.IsNullOrEmpty(dicParser.Table.TableName)) - { - dicParser.Table.TableName = dicParser.Table.Name; - } - - //Tokio - if (dicParser.Form is { Panels: null }) dicParser.Form.Panels = []; - - //Professor - if (dicParser.Form != null) - { - foreach (var field in dicParser.Form.FormFields) - { - if (field.DataItem is not { DataItemType: DataItemType.Manual }) - continue; - - if (field.DataItem.Command != null && !string.IsNullOrEmpty(field.DataItem.Command.Sql)) - field.DataItem.DataItemType = DataItemType.SqlCommand; - else if (field.DataItem.ElementMap != null && !string.IsNullOrEmpty(field.DataItem.ElementMap.ElementName)) - field.DataItem.DataItemType = DataItemType.ElementMap; - } - } - - //Arturito - // foreach (var action in dicParser.Options.GridActions.GetAll() - // .Where(action => action is UrlRedirectAction or InternalAction or ScriptAction or SqlCommandAction)) - // { - // //action.IsUserCreated = true; - // } - // - // foreach (var action in dicParser.Options.ToolbarActions - // .GetAll() - // .Where(action => action is UrlRedirectAction or InternalAction or ScriptAction or SqlCommandAction)) - // { - // //action.IsUserCreated = true; - // } - - - //Sirius - - dicParser.Options.ToolbarActions.ExportAction.ProcessOptions ??= new ProcessOptions(); - - dicParser.Options.ToolbarActions.ImportAction.ProcessOptions ??= new ProcessOptions(); - } -} \ No newline at end of file diff --git a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/Program.cs b/src/ConsoleApps/MasterData.LegacyMetadataMigrator/Program.cs deleted file mode 100644 index 759bb5798..000000000 --- a/src/ConsoleApps/MasterData.LegacyMetadataMigrator/Program.cs +++ /dev/null @@ -1,20 +0,0 @@ -using JJMasterData.Core.Configuration; -using JJMasterData.LegacyMetadataMigrator; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; - -var services = new ServiceCollection(); -var configurationBuilder = new ConfigurationBuilder(); -configurationBuilder.AddJsonFile("appsettings.json"); -services.AddJJMasterDataCore(); - -services.AddSingleton(configurationBuilder.Build()); -services.AddTransient(); -services.AddTransient(); -services.AddTransient(); - -var serviceProvider = services.BuildServiceProvider(); - -var service = serviceProvider.GetRequiredService(); - -service.Migrate(); \ No newline at end of file diff --git a/src/MasterData.Commons/Configuration/Options/MasterDataCommonsOptions.cs b/src/MasterData.Commons/Configuration/Options/MasterDataCommonsOptions.cs index 9ba14eca1..418149053 100644 --- a/src/MasterData.Commons/Configuration/Options/MasterDataCommonsOptions.cs +++ b/src/MasterData.Commons/Configuration/Options/MasterDataCommonsOptions.cs @@ -3,7 +3,6 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.Runtime.InteropServices; using System.Text.Json.Serialization; using JJMasterData.Commons.Data; using JJMasterData.Commons.Data.Entity.Models; @@ -16,7 +15,6 @@ namespace JJMasterData.Commons.Configuration.Options; /// /// JJMasterData key/value configurations. /// They're populated from JJMasterData section on , following its implementations. -/// On .NET Framework, add an builder to your application. /// public sealed class MasterDataCommonsOptions { @@ -53,9 +51,6 @@ public sealed class MasterDataCommonsOptions [Display(Name = "Cryptography Secret Key")] public string? SecretKey { get; set; } - [JsonIgnore] - public static bool IsNetFramework { get; } = RuntimeInformation.FrameworkDescription.StartsWith(".NET Framework"); - internal ConnectionString GetConnectionString(Guid? guid) { if (guid is null) @@ -131,4 +126,4 @@ public static string RemoveTbPrefix(string tableName) return tableName; } -} \ No newline at end of file +} diff --git a/src/MasterData.Commons/Data/DataAccessAsync.cs b/src/MasterData.Commons/Data/DataAccessAsync.cs index 9371d5508..21605ccc2 100644 --- a/src/MasterData.Commons/Data/DataAccessAsync.cs +++ b/src/MasterData.Commons/Data/DataAccessAsync.cs @@ -72,12 +72,12 @@ private async Task ExecuteDataCommandAsync( { try { - using var dbCommand = CreateDbCommand(command); + await using var dbCommand = CreateDbCommand(command); dbCommand.Connection = await CreateConnectionAsync(cancellationToken); - using (dbCommand.Connection) + await using (dbCommand.Connection) { - using (var reader = await dbCommand.ExecuteReaderAsync(cancellationToken)) + await using (var reader = await dbCommand.ExecuteReaderAsync(cancellationToken)) { await readerAction(reader, state, cancellationToken); @@ -103,9 +103,9 @@ private async Task ExecuteDataCommandAsync( object? scalarResult; try { - using var dbCommand = CreateDbCommand(command); + await using var dbCommand = CreateDbCommand(command); dbCommand.Connection = await CreateConnectionAsync(cancellationToken); - using (dbCommand.Connection) + await using (dbCommand.Connection) { scalarResult = await dbCommand.ExecuteScalarAsync(cancellationToken); @@ -126,9 +126,9 @@ public async Task SetCommandAsync(DataAccessCommand command, CancellationTo int rowsAffected; try { - using var dbCommand = CreateDbCommand(command); + await using var dbCommand = CreateDbCommand(command); dbCommand.Connection = await CreateConnectionAsync(cancellationToken); - using (dbCommand.Connection) + await using (dbCommand.Connection) { rowsAffected = await dbCommand.ExecuteNonQueryAsync(cancellationToken); @@ -150,37 +150,25 @@ public async Task SetCommandListAsync(IEnumerable comman int numberOfRowsAffected = 0; DataAccessCommand? currentCommand = null; - using var connection = await CreateConnectionAsync(cancellationToken); + await using var connection = await CreateConnectionAsync(cancellationToken); -#if NET48 - using var transaction = connection.BeginTransaction(); -#else - using var transaction = await connection.BeginTransactionAsync(cancellationToken); -#endif + await using var transaction = await connection.BeginTransactionAsync(cancellationToken); try { foreach (var command in commands) { currentCommand = command; - using var dbCommand = CreateDbCommand(command); + await using var dbCommand = CreateDbCommand(command); dbCommand.Connection = connection; dbCommand.Transaction = transaction; numberOfRowsAffected += await dbCommand.ExecuteNonQueryAsync(cancellationToken); } -#if NET48 - transaction.Commit(); -#else await transaction.CommitAsync(cancellationToken); -#endif } catch (Exception ex) { -#if NET48 - transaction.Rollback(); -#else await transaction.RollbackAsync(cancellationToken); -#endif throw GetDataAccessException(ex, currentCommand); } @@ -234,13 +222,13 @@ private async Task GetDataAsync( { try { - using var dbCommand = CreateDbCommand(command); + await using var dbCommand = CreateDbCommand(command); dbCommand.Connection = await CreateConnectionAsync(cancellationToken); - using (dbCommand.Connection) + await using (dbCommand.Connection) { - using (var dataReader = - await dbCommand.ExecuteReaderAsync(CommandBehavior.SingleRow, cancellationToken)) + await using (var dataReader = + await dbCommand.ExecuteReaderAsync(CommandBehavior.SingleRow, cancellationToken)) { while (await dataReader.ReadAsync(cancellationToken)) { @@ -273,11 +261,11 @@ await dbCommand.ExecuteReaderAsync(CommandBehavior.SingleRow, cancellationToken) try { - using var dbCommand = CreateDbCommand(command); + await using var dbCommand = CreateDbCommand(command); dbCommand.Connection = await CreateConnectionAsync(cancellationToken); - using var connection = dbCommand.Connection; - using (var dataReader = await dbCommand.ExecuteReaderAsync(cancellationToken)) + await using var connection = dbCommand.Connection; + await using (var dataReader = await dbCommand.ExecuteReaderAsync(cancellationToken)) { List columnNames = []; @@ -342,7 +330,7 @@ public async Task TryConnectionAsync(CancellationToken cancell { if (connection.State == ConnectionState.Open) { - connection.Close(); + await connection.CloseAsync(); } connection.Dispose(); @@ -397,4 +385,4 @@ public async Task ExecuteBatchAsync(string script, int? timeoutSeconds = n return true; } -} \ No newline at end of file +} diff --git a/src/MasterData.Commons/Data/DataAccessProviderHelper.cs b/src/MasterData.Commons/Data/DataAccessProviderHelper.cs index 716fcf602..cc7e4fcb5 100644 --- a/src/MasterData.Commons/Data/DataAccessProviderHelper.cs +++ b/src/MasterData.Commons/Data/DataAccessProviderHelper.cs @@ -33,8 +33,7 @@ public static DataAccessProvider GetDataAccessProviderFromString(string provider "Oracle.ManagedDataAccess.Core.Client" => DataAccessProvider.OracleNetCore, "MySql" => DataAccessProvider.MySql, "MySql.Data.MySqlClient.MySqlClientFactory" => DataAccessProvider.MySql, - "PostgreSql" => DataAccessProvider.PostgreSql, - "Npgsql.NpgsqlFactory" => DataAccessProvider.PostgreSql, + "PostgreSql" or "Npgsql.NpgsqlFactory" => DataAccessProvider.PostgreSql, _ => throw new DataAccessProviderException("Unknown data access provider name.") }; } diff --git a/src/MasterData.Commons/Extensions/DictionaryExtensions.cs b/src/MasterData.Commons/Extensions/DictionaryExtensions.cs deleted file mode 100644 index e8c93112c..000000000 --- a/src/MasterData.Commons/Extensions/DictionaryExtensions.cs +++ /dev/null @@ -1,15 +0,0 @@ -#if !NET -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace JJMasterData.Commons.Extensions; - -internal static class DictionaryExtensions -{ - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static TValue GetValueOrDefault(this IDictionary dictionary, TKey key, TValue defaultValue) - { - return dictionary.TryGetValue(key, out var value) ? value : defaultValue; - } -} -#endif \ No newline at end of file diff --git a/src/MasterData.Commons/MasterData.Commons.csproj b/src/MasterData.Commons/MasterData.Commons.csproj index b0e93038e..73757ae35 100644 --- a/src/MasterData.Commons/MasterData.Commons.csproj +++ b/src/MasterData.Commons/MasterData.Commons.csproj @@ -1,6 +1,6 @@ - net4.8;net10.0 + net10.0 latest disable JJMasterData.Commons - Sun Version @@ -21,17 +21,6 @@ - - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - - - - - diff --git a/src/MasterData.Commons/Resources/MasterDataResources.pt.resx b/src/MasterData.Commons/Resources/MasterDataResources.pt.resx index 067fd5760..460205cc9 100644 --- a/src/MasterData.Commons/Resources/MasterDataResources.pt.resx +++ b/src/MasterData.Commons/Resources/MasterDataResources.pt.resx @@ -2605,6 +2605,52 @@ Sincronizar JJMasterData.Commons + + Validações + JJMasterData.Commons + + + Regras + + + Tipo de validação + + + Tipo de regra + + + Ler mais + + + Executa antes do insert + + + Executa antes do update + + + Executa antes do delete + + + Tem certeza que deseja deletar esta regra? + + + Selecione pelo menos uma operação. + + + As regras em JavaScript rodam no servidor com Jint. Use addError(message) para um erro geral ou addError(name, message) para um erro de campo. + + + Antes de inserir e atualizar + + + Retorne uma coluna com a mensagem de erro ou duas colunas com campo e mensagem. Os nomes das colunas não importam. + + + Já existe uma validação com esse nome. + + + Já existe uma regra com esse nome. + Modo do Sincronismo JJMasterDataWeb @@ -3697,9 +3743,6 @@ Quando o painel está no modo visualuização, mostra apenas os valores sem os componentes. - - Valida valores potencialmente perigosos na requisição no .NET Framework 4.8 - Tamanho do campo. Utilize -1 para utilizar a keyword MAX. diff --git a/src/MasterData.Commons/Security/Cryptography/AesEncryptionAlgorithm.cs b/src/MasterData.Commons/Security/Cryptography/AesEncryptionAlgorithm.cs index cf5527bbb..349406ddf 100644 --- a/src/MasterData.Commons/Security/Cryptography/AesEncryptionAlgorithm.cs +++ b/src/MasterData.Commons/Security/Cryptography/AesEncryptionAlgorithm.cs @@ -1,7 +1,6 @@ #nullable enable using System; -using System.Collections.Concurrent; using System.IO; using System.Security.Cryptography; using System.Text; @@ -15,8 +14,6 @@ namespace JJMasterData.Commons.Security.Cryptography; /// public sealed class AesEncryptionAlgorithm : IEncryptionAlgorithm { - private readonly ConcurrentDictionary _aesCache = new(); - public string EncryptString(string plainText, string secretKey) { using var aes = CreateAes(secretKey); @@ -25,7 +22,7 @@ public string EncryptString(string plainText, string secretKey) using var memoryStream = new MemoryStream(); using var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write); - using (var streamWriter = new StreamWriter(cryptoStream)) + using (var streamWriter = new StreamWriter(cryptoStream, Encoding.UTF8)) { streamWriter.Write(plainText); } @@ -43,7 +40,7 @@ public string DecryptString(string cipherText, string secretKey) using var memoryStream = new MemoryStream(buffer); using var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read); - using var streamReader = new StreamReader(cryptoStream); + using var streamReader = new StreamReader(cryptoStream, Encoding.UTF8); return streamReader.ReadToEnd(); } @@ -54,34 +51,15 @@ public string DecryptString(string cipherText, string secretKey) } [MustDisposeResource] - private Aes CreateAes(string secretKey) + private static Aes CreateAes(string secretKey) { - if (_aesCache.TryGetValue(secretKey, out var aesEntry)) - { - return CreateAes(aesEntry.Key, aesEntry.IV); - } - var keyBytes = Encoding.UTF8.GetBytes(secretKey); + var aesKey = SHA256.HashData(keyBytes); + var aesIv = MD5.HashData(keyBytes); - using var sha256 = SHA256.Create(); - var aesKey = sha256.ComputeHash(keyBytes); - - using var md5 = MD5.Create(); - var aesIv = md5.ComputeHash(keyBytes); - - aesEntry = new(aesKey, aesIv); - - _aesCache.TryAdd(secretKey, aesEntry); - - return CreateAes(aesEntry.Key, aesEntry.IV); - } - - [MustDisposeResource] - private static Aes CreateAes(byte[] key, byte[] iv) - { var aes = Aes.Create(); - aes.Key = key; - aes.IV = iv; + aes.Key = aesKey; + aes.IV = aesIv; return aes; } } \ No newline at end of file diff --git a/src/MasterData.Commons/Security/Hashing/Md5HashHelper.cs b/src/MasterData.Commons/Security/Hashing/Md5HashHelper.cs index 71017efee..d0e687585 100644 --- a/src/MasterData.Commons/Security/Hashing/Md5HashHelper.cs +++ b/src/MasterData.Commons/Security/Hashing/Md5HashHelper.cs @@ -8,12 +8,8 @@ public static class Md5HashHelper { public static string ComputeHash(string input) { - byte[] data; - using (var md5Hasher = MD5.Create()) - { - data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input)); - } - + var data = MD5.HashData(Encoding.Default.GetBytes(input)); + var stringBuilder = new StringBuilder(); for (var i = 0; i <= data.Length - 1; i++) { @@ -22,7 +18,7 @@ public static string ComputeHash(string input) return stringBuilder.ToString(); } - + public static bool VerifyHash(string input, string hash) { var hashOfInput = ComputeHash(input); diff --git a/src/MasterData.Commons/Util/DictionaryHash.cs b/src/MasterData.Commons/Util/DictionaryHash.cs index e376786fc..e73a2d7c5 100644 --- a/src/MasterData.Commons/Util/DictionaryHash.cs +++ b/src/MasterData.Commons/Util/DictionaryHash.cs @@ -13,14 +13,8 @@ public static string ComputeHash(Dictionary dict) { var ordered = dict.OrderBy(x => x.Key); var json = JsonSerializer.Serialize(ordered); - - using var sha = SHA256.Create(); - var bytes = sha.ComputeHash(Encoding.UTF8.GetBytes(json)); - - #if NETFRAMEWORK - return BitConverter.ToString(bytes).Replace("-", ""); - #else + var bytes = SHA256.HashData(Encoding.UTF8.GetBytes(json)); + return Convert.ToHexString(bytes); - #endif } -} \ No newline at end of file +} diff --git a/src/MasterData.Commons/Util/FileIO.cs b/src/MasterData.Commons/Util/FileIO.cs index b2f6d44f9..ee799e177 100644 --- a/src/MasterData.Commons/Util/FileIO.cs +++ b/src/MasterData.Commons/Util/FileIO.cs @@ -2,8 +2,6 @@ using System.Data; using System.Globalization; using System.IO; -using JJMasterData.Commons.Configuration.Options; - namespace JJMasterData.Commons.Util; public static class FileIO @@ -50,13 +48,11 @@ public static string ResolveFilePath(string filepath) /// /// Returns the application path. - /// .NET Framework: AppDomain.CurrentDomain.BaseDirectory - /// ..NET 8+: Environment.CurrentDirectory /// /// public static string GetApplicationPath() { - return MasterDataCommonsOptions.IsNetFramework ? AppDomain.CurrentDomain.BaseDirectory : Environment.CurrentDirectory; + return Environment.CurrentDirectory; } /// diff --git a/src/MasterData.Commons/Util/MimeTypeUtil.cs b/src/MasterData.Commons/Util/MimeTypeUtil.cs index 929f617c4..82eeab804 100644 --- a/src/MasterData.Commons/Util/MimeTypeUtil.cs +++ b/src/MasterData.Commons/Util/MimeTypeUtil.cs @@ -2,10 +2,6 @@ using System.Collections.Frozen; using System.Collections.Generic; -#if NET48 -using JJMasterData.Commons.Extensions; -#endif - namespace JJMasterData.Commons.Util; public static class MimeTypeUtil @@ -596,4 +592,4 @@ public static string GetMimeType(string extension) return Mappings.GetValueOrDefault(extension, "application/octet-stream"); } -} \ No newline at end of file +} diff --git a/src/MasterData.Commons/Util/StringManager.cs b/src/MasterData.Commons/Util/StringManager.cs index ff7fa91b7..9223e690b 100644 --- a/src/MasterData.Commons/Util/StringManager.cs +++ b/src/MasterData.Commons/Util/StringManager.cs @@ -462,21 +462,12 @@ private static string Soma1(string baseVal, int size) public static string FirstCharToUpper(this string input) { - //Since .NET Core 3.0 / .NET Standard 2.1 String.Concat() - //supports ReadonlySpan which saves one allocation if we use .AsSpan(1) instead of .Substring(1). -#if NET return input switch { null => throw new ArgumentNullException(nameof(input)), "" => throw new ArgumentException(@$"{nameof(input)} cannot be empty", nameof(input)), _ => string.Concat(input[0].ToString().ToUpper(), input.AsSpan(1)) }; -#else - if (!string.IsNullOrEmpty(input)) - return input[0].ToString().ToUpper() + input[1..].ToLower(); - return input; -#endif - } public static string ToParamCase(string input) diff --git a/src/MasterData.Commons/Validations/Validations.cs b/src/MasterData.Commons/Validations/Validations.cs index ad30cdfd2..5699af66e 100644 --- a/src/MasterData.Commons/Validations/Validations.cs +++ b/src/MasterData.Commons/Validations/Validations.cs @@ -23,7 +23,7 @@ public static bool ValidateCnpj(string cnpj) /// E-Mail public static bool ValidateEmail(string email) { - if (email.Contains("'")) + if (email.Contains('\'')) return false; if (email.Contains('@') && email.Contains('.') && !email.Contains("..")) diff --git a/src/MasterData.Core/Configuration/DataDictionaryServiceExtensions.cs b/src/MasterData.Core/Configuration/DataDictionaryServiceExtensions.cs index 766880d2f..04c4c0736 100644 --- a/src/MasterData.Core/Configuration/DataDictionaryServiceExtensions.cs +++ b/src/MasterData.Core/Configuration/DataDictionaryServiceExtensions.cs @@ -20,6 +20,7 @@ public static IServiceCollection AddDataDictionaryServices(this IServiceCollecti services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); services.AddTransient(); return services; diff --git a/src/MasterData.Core/Configuration/DataManagerServiceExtensions.cs b/src/MasterData.Core/Configuration/DataManagerServiceExtensions.cs index 3afeefef7..417284e28 100644 --- a/src/MasterData.Core/Configuration/DataManagerServiceExtensions.cs +++ b/src/MasterData.Core/Configuration/DataManagerServiceExtensions.cs @@ -1,7 +1,9 @@ using JJMasterData.Core.DataManager; using JJMasterData.Core.DataManager.IO; using JJMasterData.Core.DataManager.Services; +using JJMasterData.Core.DataManager.Services.Abstractions; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; namespace JJMasterData.Core.Configuration; @@ -15,6 +17,8 @@ public static IServiceCollection AddDataManagerServices(this IServiceCollection services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.TryAddEnumerable(ServiceDescriptor.Scoped()); + services.TryAddEnumerable(ServiceDescriptor.Scoped()); services.AddScoped(); services.AddScoped(); services.AddScoped(); @@ -29,4 +33,4 @@ public static IServiceCollection AddDataManagerServices(this IServiceCollection return services; } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/Configuration/HttpServiceExtensions.cs b/src/MasterData.Core/Configuration/HttpServiceExtensions.cs index 036190000..71bac93c9 100644 --- a/src/MasterData.Core/Configuration/HttpServiceExtensions.cs +++ b/src/MasterData.Core/Configuration/HttpServiceExtensions.cs @@ -1,10 +1,7 @@ -using JJMasterData.Core.Http; -using JJMasterData.Core.Http.Abstractions; -using Microsoft.Extensions.DependencyInjection; -#if NET +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc.Routing; -#endif +using Microsoft.Extensions.DependencyInjection; namespace JJMasterData.Core.Configuration; @@ -12,16 +9,7 @@ public static class HttpServiceExtensions { public static void AddHttpServices(this IServiceCollection services) { - services.AddScoped(); -#if NET services.AddHttpContextAccessor(); - services.AddScoped(); - - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); #pragma warning disable ASPDEPR006 services.AddSingleton(); @@ -33,19 +21,5 @@ public static void AddHttpServices(this IServiceCollection services) var urlHelperFactory = serviceProvider.GetRequiredService(); return urlHelperFactory.GetUrlHelper(actionContextAccessor.ActionContext!); }); -#endif - - -#if NETFRAMEWORK - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); - services.AddScoped(); -#endif - - } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/Configuration/Options/MasterDataCoreOptions.cs b/src/MasterData.Core/Configuration/Options/MasterDataCoreOptions.cs index 44a8b28a3..b1fa49c85 100644 --- a/src/MasterData.Core/Configuration/Options/MasterDataCoreOptions.cs +++ b/src/MasterData.Core/Configuration/Options/MasterDataCoreOptions.cs @@ -33,15 +33,6 @@ public sealed class MasterDataCoreOptions [Display(Name = "Audit Log Table Name")] public string AuditLogTableName { get; set; } = "tb_masterdata_auditlog"; -#if !NET - /// - /// Default value: null - /// - public string? MasterDataUrl { get; set; } - - public bool EnableCultureProviderAtUrl { get; set; } = true; -#endif - [Display(Name = "Enable Data Dictionary Caching")] public bool EnableDataDictionaryCaching { get; set; } = true; @@ -108,4 +99,4 @@ public sealed class MasterDataCoreOptions } } }; -} \ No newline at end of file +} diff --git a/src/MasterData.Core/DataDictionary/Models/FormElement.cs b/src/MasterData.Core/DataDictionary/Models/FormElement.cs index 7543b6a85..f2fee90b5 100644 --- a/src/MasterData.Core/DataDictionary/Models/FormElement.cs +++ b/src/MasterData.Core/DataDictionary/Models/FormElement.cs @@ -69,6 +69,10 @@ public class FormElement : Element [JsonPropertyName("options")] public FormElementOptions Options { get; set; } + [Required] + [JsonPropertyName("rules")] + public List Rules { get; set; } + [Required] [JsonPropertyName("apiOptions")] public FormElementApiOptions ApiOptions { get; set; } @@ -78,6 +82,7 @@ public FormElement() Fields = new FormElementFieldList(base.Fields); Panels = []; Options = new FormElementOptions(); + Rules = []; Relationships = new FormElementRelationshipList(base.Relationships); ApiOptions = new FormElementApiOptions(); } @@ -102,6 +107,7 @@ public FormElement(Element element) Panels = []; ApiOptions = new FormElementApiOptions(); Options = new FormElementOptions(); + Rules = []; } [SetsRequiredMembers] @@ -139,6 +145,7 @@ private FormElement( List? panels, FormElementRelationshipList relationships, FormElementOptions? options, + List? rules, FormElementApiOptions? apiOptions) { base.Fields = new ElementFieldList(fields.Cast().ToList()); @@ -149,6 +156,7 @@ private FormElement( .ToList()!; Relationships = relationships; Options = options ?? new FormElementOptions(); + Rules = rules ?? []; ApiOptions = apiOptions ?? new FormElementApiOptions(); Panels = panels ?? []; } @@ -226,6 +234,7 @@ public FormElement DeepCopy() copy.Fields = Fields.DeepCopy(); copy.Options = Options.DeepCopy(); + copy.Rules = Rules.ConvertAll(v => v.DeepCopy()); copy.Panels = Panels.ConvertAll(p => p.DeepCopy()); copy.Relationships = Relationships.DeepCopy(); copy.Indexes = Indexes.ConvertAll(i => i.DeepCopy()); @@ -233,4 +242,9 @@ public FormElement DeepCopy() return copy; } + + public FormElementRule GetRuleById(int id) + { + return Rules.First(v => v.Id == id); + } } diff --git a/src/MasterData.Core/DataDictionary/Models/FormElementField.cs b/src/MasterData.Core/DataDictionary/Models/FormElementField.cs index 94d11efdf..157bd7e08 100644 --- a/src/MasterData.Core/DataDictionary/Models/FormElementField.cs +++ b/src/MasterData.Core/DataDictionary/Models/FormElementField.cs @@ -122,17 +122,6 @@ public class FormElementField : ElementField [Display(Name = "Enable Exportation")] public bool Export { get; set; } - /// - /// Validates possibly dangerous values in the request for .NET Framework - /// - /// - /// Important for lower versions of .NET Framework to enable the parameter: - /// httpRuntime requestValidationMode="4.5" ... - /// - [JsonPropertyName("validateRequest")] - [Display(Name = "Validate Request")] - public bool ValidateRequest { get; set; } - /// /// Ao alterar o conteúdo recarrega todos os campos do formulário /// (Default=false) @@ -201,7 +190,6 @@ public FormElementField() { Component = FormComponent.Text; Export = true; - ValidateRequest = true; VisibleExpression = "val:1"; EnableExpression = "val:1"; TextCase = TextCase.None; @@ -254,9 +242,8 @@ public FormElementField(ElementField elementField) } Export = true; - ValidateRequest = true; TextCase = TextCase.None; - Actions = new(); + Actions = []; } diff --git a/src/MasterData.Core/DataDictionary/Models/FormElementRule.cs b/src/MasterData.Core/DataDictionary/Models/FormElementRule.cs new file mode 100644 index 000000000..6278f799a --- /dev/null +++ b/src/MasterData.Core/DataDictionary/Models/FormElementRule.cs @@ -0,0 +1,56 @@ +using System.ComponentModel.DataAnnotations; +using System.Text.Json.Serialization; + +namespace JJMasterData.Core.DataDictionary.Models; + +public class FormElementRule +{ + [JsonPropertyName("id")] + public int Id { get; set; } + + [Required] + [Display(Name = "Name")] + [JsonPropertyName("name")] + public string Name { get; set; } = string.Empty; + + [Display(Name = "Run On Before Insert")] + [JsonPropertyName("runOnBeforeInsert")] + public bool RunOnBeforeInsert { get; set; } = true; + + [Display(Name = "Run On Before Update")] + [JsonPropertyName("runOnBeforeUpdate")] + public bool RunOnBeforeUpdate { get; set; } = true; + + [Display(Name = "Run On Before Import")] + [JsonPropertyName("runOnBeforeImport")] + public bool RunOnBeforeImport { get; set; } = true; + + [Display(Name = "Run On Before Delete")] + [JsonPropertyName("runOnBeforeDelete")] + public bool RunOnBeforeDelete { get; set; } + + [Display(Name = "Rule Type")] + [JsonPropertyName("language")] + public RuleLanguage Language { get; set; } = RuleLanguage.Sql; + + [Display(Name = "Script")] + [JsonPropertyName("script")] + public string Script { get; set; } = string.Empty; + + public bool ShouldRun(PageState pageState) + { + return pageState switch + { + PageState.Insert => RunOnBeforeInsert, + PageState.Update => RunOnBeforeUpdate, + PageState.Import => RunOnBeforeImport, + PageState.Delete => RunOnBeforeDelete, + _ => false + }; + } + + public FormElementRule DeepCopy() + { + return (FormElementRule)MemberwiseClone(); + } +} diff --git a/src/MasterData.Core/DataDictionary/Models/RuleLanguage.cs b/src/MasterData.Core/DataDictionary/Models/RuleLanguage.cs new file mode 100644 index 000000000..4098b7065 --- /dev/null +++ b/src/MasterData.Core/DataDictionary/Models/RuleLanguage.cs @@ -0,0 +1,11 @@ +using System.ComponentModel.DataAnnotations; + +namespace JJMasterData.Core.DataDictionary.Models; + +public enum RuleLanguage +{ + [Display(Name = "SQL")] + Sql = 0, + [Display(Name = "JavaScript")] + JavaScript = 1 +} diff --git a/src/MasterData.Core/DataDictionary/Services/DataDictionaryServiceBase.cs b/src/MasterData.Core/DataDictionary/Services/DataDictionaryServiceBase.cs index 6412cc99c..459ca9e10 100644 --- a/src/MasterData.Core/DataDictionary/Services/DataDictionaryServiceBase.cs +++ b/src/MasterData.Core/DataDictionary/Services/DataDictionaryServiceBase.cs @@ -91,6 +91,17 @@ public bool ValidateName(string name) return validationDictionary.IsValid; } + protected bool ValidateScriptName(string name, string fieldName = "Name") + { + if (string.IsNullOrWhiteSpace(name)) + { + AddError(fieldName, StringLocalizer["Required [Name] field"]); + return false; + } + + return true; + } + protected static bool ValidateExpression(string value, IEnumerable args) { return args.Any(value.StartsWith); @@ -120,4 +131,4 @@ public async ValueTask> GetElementsDictionaryAsync() return elementList; } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/DataDictionary/Services/ElementService.cs b/src/MasterData.Core/DataDictionary/Services/ElementService.cs index 3d3e63e37..4ffa09189 100644 --- a/src/MasterData.Core/DataDictionary/Services/ElementService.cs +++ b/src/MasterData.Core/DataDictionary/Services/ElementService.cs @@ -14,7 +14,7 @@ using JJMasterData.Core.DataDictionary.Repository.Abstractions; using JJMasterData.Core.DataDictionary.Structure; using JJMasterData.Core.Html; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.Tasks; using JJMasterData.Core.UI.Components; diff --git a/src/MasterData.Core/DataDictionary/Services/FormElementRulesService.cs b/src/MasterData.Core/DataDictionary/Services/FormElementRulesService.cs new file mode 100644 index 000000000..f8352f48d --- /dev/null +++ b/src/MasterData.Core/DataDictionary/Services/FormElementRulesService.cs @@ -0,0 +1,76 @@ +using System; +using System.Linq; +using System.Threading.Tasks; +using JJMasterData.Core.DataDictionary.Models; +using JJMasterData.Core.DataDictionary.Repository.Abstractions; +using Microsoft.Extensions.Localization; + +namespace JJMasterData.Core.DataDictionary.Services; + +public class FormElementRulesService( + IValidationDictionary validationDictionary, + IDataDictionaryRepository dataDictionaryRepository, + IStringLocalizer stringLocalizer) + : DataDictionaryServiceBase(validationDictionary, dataDictionaryRepository, stringLocalizer) +{ + public async Task SaveAsync(string elementName, FormElementRule rule) + { + var formElement = await DataDictionaryRepository.GetFormElementAsync(elementName); + + if (!Validate(rule, formElement)) + return; + + if (rule.Id == 0) + { + rule.Id = formElement.Rules.Count == 0 + ? 1 + : formElement.Rules.Max(v => v.Id) + 1; + + formElement.Rules.Add(rule); + } + else + { + for (var i = 0; i < formElement.Rules.Count; i++) + { + if (formElement.Rules[i].Id != rule.Id) + continue; + + formElement.Rules[i] = rule; + break; + } + } + + await DataDictionaryRepository.InsertOrReplaceAsync(formElement); + } + + public async Task DeleteAsync(string elementName, int ruleId) + { + var formElement = await DataDictionaryRepository.GetFormElementAsync(elementName); + var rule = formElement.Rules.FirstOrDefault(v => v.Id == ruleId); + if (rule == null) + return; + + formElement.Rules.Remove(rule); + await DataDictionaryRepository.InsertOrReplaceAsync(formElement); + } + + public bool Validate(FormElementRule rule, FormElement formElement) + { + ValidateScriptName(rule.Name); + + if (!rule.RunOnBeforeInsert && !rule.RunOnBeforeUpdate && !rule.RunOnBeforeDelete && !rule.RunOnBeforeImport) + AddError(nameof(rule.RunOnBeforeInsert), StringLocalizer["Select at least one operation."]); + + if (string.IsNullOrWhiteSpace(rule.Script)) + AddError(nameof(rule.Script), StringLocalizer["Required [Script] field"]); + + if (formElement.Rules.Any(v => + v.Id != rule.Id && + v.Name.Equals(rule.Name, StringComparison.OrdinalIgnoreCase))) + { + AddError(nameof(rule.Name), StringLocalizer["There is already a rule with this name."]); + } + + return IsValid; + } +} diff --git a/src/MasterData.Core/DataDictionary/Structure/DataDictionaryFormElementFactory.cs b/src/MasterData.Core/DataDictionary/Structure/DataDictionaryFormElementFactory.cs index bc39c02d3..141d17fca 100644 --- a/src/MasterData.Core/DataDictionary/Structure/DataDictionaryFormElementFactory.cs +++ b/src/MasterData.Core/DataDictionary/Structure/DataDictionaryFormElementFactory.cs @@ -4,7 +4,7 @@ using JJMasterData.Core.Configuration.Options; using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataDictionary.Models.Actions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Options; diff --git a/src/MasterData.Core/DataManager/Exportation/Abstractions/DataExportationWriterBase.cs b/src/MasterData.Core/DataManager/Exportation/Abstractions/DataExportationWriterBase.cs index 0e18cd870..a6586928e 100644 --- a/src/MasterData.Core/DataManager/Exportation/Abstractions/DataExportationWriterBase.cs +++ b/src/MasterData.Core/DataManager/Exportation/Abstractions/DataExportationWriterBase.cs @@ -162,17 +162,10 @@ private static void CreateFolderPathIfNotExits(string folderPath) public string UserId { get; set; } -#if NETFRAMEWORK - internal HttpContext HttpContext { get; set; } -#endif - #endregion public async Task RunWorkerAsync(CancellationToken token) { -#if NETFRAMEWORK - HttpContext.Current = HttpContext; -#endif if (FormElement == null) throw new ArgumentNullException(nameof(FormElement)); @@ -295,4 +288,4 @@ private string GetFilePath() return $"{fileName}_{DateTime.Now:yyyMMdd_HHmmss}.{extension}"; } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/DataManager/Exportation/Configuration/ExportOptions.cs b/src/MasterData.Core/DataManager/Exportation/Configuration/ExportOptions.cs index 2ca3e1ab6..e8f5e5335 100644 --- a/src/MasterData.Core/DataManager/Exportation/Configuration/ExportOptions.cs +++ b/src/MasterData.Core/DataManager/Exportation/Configuration/ExportOptions.cs @@ -1,5 +1,6 @@ using JJMasterData.Commons.Util; -using JJMasterData.Core.Http.Abstractions; +using JJMasterData.Core.Extensions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.DataManager.Exportation.Configuration; @@ -20,16 +21,21 @@ public class ExportOptions public bool IsLandScape { get; set; } = false; public string Delimiter { get; set; } = ";"; - internal static ExportOptions LoadFromForm(IFormValues formValues, string componentName) + internal static ExportOptions LoadFromForm(IHttpContextAccessor httpContextAccessor, string componentName) { var expConfig = new ExportOptions(); - if (formValues[componentName + FileName] != null) + + if (!httpContextAccessor.HttpContext!.Request.HasFormContentType) + return expConfig; + + var form = httpContextAccessor.HttpContext!.Request.Form; + if (form.TryGetValue(componentName + FileName, out var fileName)) { - expConfig.FileExtension = (ExportFileExtension)int.Parse(formValues[componentName + FileName]); - expConfig.IsLandScape = StringManager.ParseBool(formValues[componentName + TableOrientation]); - expConfig.ExportFirstLine = StringManager.ParseBool(formValues[componentName + ExportTableFirstLine]); - expConfig.ExportAllFields = StringManager.ParseBool(formValues[componentName + ExportAll]); - expConfig.Delimiter = formValues[componentName + ExportDelimiter]; + expConfig.FileExtension = (ExportFileExtension)int.Parse(fileName.ToString()); + expConfig.IsLandScape = StringManager.ParseBool(form[componentName + TableOrientation]); + expConfig.ExportFirstLine = StringManager.ParseBool(form[componentName + ExportTableFirstLine]); + expConfig.ExportAllFields = StringManager.ParseBool(form[componentName + ExportAll]); + expConfig.Delimiter = form[componentName + ExportDelimiter]; } return expConfig; diff --git a/src/MasterData.Core/DataManager/Exportation/DataExportationWriterFactory.cs b/src/MasterData.Core/DataManager/Exportation/DataExportationWriterFactory.cs index c6285cd72..f50cd3e77 100644 --- a/src/MasterData.Core/DataManager/Exportation/DataExportationWriterFactory.cs +++ b/src/MasterData.Core/DataManager/Exportation/DataExportationWriterFactory.cs @@ -87,7 +87,7 @@ private static void ConfigureWriter(JJDataExportation dataExportation, DataExpor writer.Configuration = dataExportation.ExportOptions; writer.UserId = dataExportation.UserId; writer.ProcessOptions = dataExportation.ProcessOptions; - writer.AbsoluteUri = dataExportation.CurrentContext.Request.AbsoluteUri; + writer.AbsoluteUri = dataExportation.CurrentContext.HttpContext!.Request.GetAbsoluteUri(); } diff --git a/src/MasterData.Core/DataManager/Expressions/ExpressionParser.cs b/src/MasterData.Core/DataManager/Expressions/ExpressionParser.cs index 7574a5eee..b852771fa 100644 --- a/src/MasterData.Core/DataManager/Expressions/ExpressionParser.cs +++ b/src/MasterData.Core/DataManager/Expressions/ExpressionParser.cs @@ -8,14 +8,15 @@ using JJMasterData.Commons.Util; using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager.Models; -using JJMasterData.Core.Http.Abstractions; +using JJMasterData.Core.Extensions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.Logging; using Microsoft.Extensions.Logging; namespace JJMasterData.Core.DataManager.Expressions; public sealed class ExpressionParser( - IHttpContext httpContext, + IHttpContextAccessor httpContext, IMasterDataUser masterDataUser, ILogger logger) { @@ -68,7 +69,7 @@ public sealed class ExpressionParser( case "isdelete": return pageState is PageState.Delete ? 1 : 0; case "fieldname": - return httpContext.Request.QueryString["fieldName"]; + return httpContext.HttpContext?.Request.Query["fieldName"].ToString(); case "userid": return masterDataUser.Id; case "currentculture": @@ -92,9 +93,9 @@ public sealed class ExpressionParser( else parsedValue = objValue; } - else if (httpContext.Session.HasSession() && httpContext.Session.HasKey(field)) + else if (httpContext.HttpContext?.Session.Keys.Contains(field) == true) { - parsedValue = httpContext.Session[field]; + parsedValue = httpContext.HttpContext.Session.GetString(field); } else { @@ -106,6 +107,6 @@ public sealed class ExpressionParser( private string? GetClaimValue(string claimType) { - return httpContext.User?.FindFirst(claimType)?.Value; + return httpContext.HttpContext?.User?.FindFirst(claimType)?.Value; } } diff --git a/src/MasterData.Core/DataManager/IO/FormFileManager.cs b/src/MasterData.Core/DataManager/IO/FormFileManager.cs index a3211bcc6..40801a17b 100644 --- a/src/MasterData.Core/DataManager/IO/FormFileManager.cs +++ b/src/MasterData.Core/DataManager/IO/FormFileManager.cs @@ -5,7 +5,7 @@ using JJMasterData.Commons.Exceptions; using JJMasterData.Commons.Util; using JJMasterData.Core.DataManager.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Events.Args; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; @@ -13,7 +13,7 @@ namespace JJMasterData.Core.DataManager.IO; public class FormFileManager(string memoryFilesSessionName, - IHttpContext httpContext, + IHttpContextAccessor httpContext, IStringLocalizer stringLocalizer, ILogger logger) { @@ -45,8 +45,8 @@ public class FormFileManager(string memoryFilesSessionName, public List MemoryFiles { - get => httpContext.Session.GetSessionValue>(MemoryFilesSessionName); - set => httpContext.Session.SetSessionValue(MemoryFilesSessionName, value); + get => httpContext.HttpContext!.Session.GetObject>(MemoryFilesSessionName); + set => httpContext.HttpContext!.Session.SetObject(MemoryFilesSessionName, value); } public List GetFiles() diff --git a/src/MasterData.Core/DataManager/IO/FormFileManagerFactory.cs b/src/MasterData.Core/DataManager/IO/FormFileManagerFactory.cs index e578a07a9..63598e230 100644 --- a/src/MasterData.Core/DataManager/IO/FormFileManagerFactory.cs +++ b/src/MasterData.Core/DataManager/IO/FormFileManagerFactory.cs @@ -1,10 +1,10 @@ -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; namespace JJMasterData.Core.DataManager.IO; -public class FormFileManagerFactory(IHttpContext httpContext, IStringLocalizer stringLocalizer, ILoggerFactory loggerFactory) +public class FormFileManagerFactory(IHttpContextAccessor httpContext, IStringLocalizer stringLocalizer, ILoggerFactory loggerFactory) { public FormFileManager Create(string memoryFilesSessionName) diff --git a/src/MasterData.Core/DataManager/Importation/DataImportationWorker.cs b/src/MasterData.Core/DataManager/Importation/DataImportationWorker.cs index 829b649a5..ce1f558b9 100644 --- a/src/MasterData.Core/DataManager/Importation/DataImportationWorker.cs +++ b/src/MasterData.Core/DataManager/Importation/DataImportationWorker.cs @@ -66,14 +66,8 @@ public class DataImportationWorker( internal FormService FormService { get; } = formService; -#if NETFRAMEWORK - private System.Web.HttpContext HttpContext { get; } = System.Web.HttpContext.Current; -#endif public async Task RunWorkerAsync(CancellationToken token) { -#if NETFRAMEWORK - System.Web.HttpContext.Current = HttpContext; -#endif var currentProcess = new DataImportationReporter(StringLocalizer); try { @@ -308,4 +302,4 @@ private async Task> SaveRowValues(Dictionary coreOptions) : IMasterDataUser { - public string Id { get; set; } = httpContext.User?.GetUserId(coreOptions.Value.UserIdClaimType); + public string Id { get; set; } = httpContext.HttpContext?.User.GetUserId(coreOptions.Value.UserIdClaimType); } \ No newline at end of file diff --git a/src/MasterData.Core/DataManager/Models/DataContext.cs b/src/MasterData.Core/DataManager/Models/DataContext.cs index 6414e38da..6953d643c 100644 --- a/src/MasterData.Core/DataManager/Models/DataContext.cs +++ b/src/MasterData.Core/DataManager/Models/DataContext.cs @@ -1,6 +1,7 @@ #nullable enable -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; +using JJMasterData.Core.Extensions; namespace JJMasterData.Core.DataManager.Models; @@ -18,11 +19,16 @@ public DataContext() { } - public DataContext(IHttpRequest request, DataContextSource source, string? userId) + public DataContext(IHttpContextAccessor request, DataContextSource source, string? userId) + : this(request.HttpContext?.Request, source, userId) + { + } + + public DataContext(HttpRequest? request, DataContextSource source, string? userId) { Source = source; UserId = userId; - IpAddress = request.UserHostAddress; - BrowserInfo = request.UserAgent; + IpAddress = request?.HttpContext.Connection.RemoteIpAddress?.ToString(); + BrowserInfo = request?.Headers.UserAgent.ToString(); } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/DataManager/Services/Abstractions/IRuleExecutor.cs b/src/MasterData.Core/DataManager/Services/Abstractions/IRuleExecutor.cs new file mode 100644 index 000000000..3e76a9792 --- /dev/null +++ b/src/MasterData.Core/DataManager/Services/Abstractions/IRuleExecutor.cs @@ -0,0 +1,16 @@ +#nullable enable +using System.Collections.Generic; +using System.Threading.Tasks; +using JJMasterData.Core.DataDictionary.Models; + +namespace JJMasterData.Core.DataManager.Services.Abstractions; + +public interface IRuleExecutor +{ + RuleLanguage Language { get; } + + Task> ExecuteAsync( + FormElement formElement, + FormElementRule rule, + Dictionary values); +} diff --git a/src/MasterData.Core/DataManager/Services/FieldValidationService.cs b/src/MasterData.Core/DataManager/Services/FieldValidationService.cs index 7d9678961..36886aa36 100644 --- a/src/MasterData.Core/DataManager/Services/FieldValidationService.cs +++ b/src/MasterData.Core/DataManager/Services/FieldValidationService.cs @@ -1,6 +1,9 @@ -using System; +#nullable enable +using System; using System.Collections.Generic; using System.Globalization; +using System.Linq; +using System.Threading.Tasks; using JJConsulting.Html; using JJConsulting.Html.Extensions; using JJMasterData.Commons.Data.Entity.Models; @@ -8,6 +11,7 @@ using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager.Expressions; using JJMasterData.Core.DataManager.Models; +using JJMasterData.Core.DataManager.Services.Abstractions; using Microsoft.Extensions.Localization; @@ -15,11 +19,29 @@ namespace JJMasterData.Core.DataManager.Services; public class FieldValidationService( ExpressionsService expressionsService, + IEnumerable validationScriptExecutors, IStringLocalizer localizer) { + private Dictionary ValidationScriptExecutors { get; } = + validationScriptExecutors.ToDictionary(e => e.Language); + public Dictionary ValidateFields( FormElement formElement, - Dictionary formValues, + Dictionary formValues, + PageState pageState, + bool enableErrorLink) + { + var valueTask = ValidateFieldsAsync(formElement, formValues, pageState, enableErrorLink); + + if (valueTask.IsCompletedSuccessfully) + return valueTask.Result; + + return valueTask.AsTask().GetAwaiter().GetResult(); + } + + public async ValueTask> ValidateFieldsAsync( + FormElement formElement, + Dictionary formValues, PageState pageState, bool enableErrorLink) { @@ -49,20 +71,67 @@ public Dictionary ValidateFields( var error = ValidateField(field, field.Name, value, enableErrorLink); if (!string.IsNullOrEmpty(error)) - errors.Add(field.Name, error); + errors.Add(field.Name, error!); + } + + foreach (var error in await ValidateRulesAsync(formElement, formValues, enableErrorLink, pageState)) + { + errors[error.Key] = error.Value; + } + + return errors; + } + + public async Task> ValidateRulesAsync( + FormElement formElement, + Dictionary values, + bool enableErrorLink, + PageState pageState) + { + var errors = new Dictionary(); + + foreach (var rule in formElement.Rules.Where(r => r.ShouldRun(pageState))) + { + if (!ValidationScriptExecutors.TryGetValue(rule.Language, out var executor)) + { + errors[$"rule:{rule.Name}"] = + $"No script executor registered for language {rule.Language}."; + continue; + } + + var executionErrors = await executor.ExecuteAsync(formElement, rule, values); + foreach (var error in executionErrors) + { + if (formElement.Fields.TryGetField(error.Key, out var field)) + { + var fieldName = field.LabelOrName; + + if (enableErrorLink) + fieldName = GetFieldLinkHtml(field.Name, field.LabelOrName); + + errors[error.Key] = fieldName + " - " + error.Value; + } + else + { + errors[error.Key] = error.Value; + } + } } return errors; } - public string ValidateField(FormElementField field, string fieldId, object value, bool enableErrorLink = true) + public string? ValidateField(FormElementField field, string fieldId, object? value, bool enableErrorLink = true) { if (field == null) throw new ArgumentNullException(nameof(field)); - string fieldName = enableErrorLink ? GetFieldLinkHtml(fieldId, field.LabelOrName) : field.Label; + var fieldName = field.LabelOrName; - string error = null; + if (enableErrorLink) + fieldName = GetFieldLinkHtml(fieldId, field.LabelOrName); + + string? error = null; if (string.IsNullOrEmpty(value?.ToString())) { @@ -75,15 +144,15 @@ public string ValidateField(FormElementField field, string fieldId, object value { error = ValidateDataType(field, value, fieldName); - error ??= ValidateComponent(field, value, fieldName); + error ??= ValidateComponent(field, value!, fieldName); } return error; } - private string ValidateComponent(FormElementField field, object value, string fieldName) + private string? ValidateComponent(FormElementField field, object value, string fieldName) { - var valueString = value.ToString(); + var valueString = value.ToString()!; switch (field.Component) { case FormComponent.Email: @@ -143,32 +212,23 @@ private string ValidateComponent(FormElementField field, object value, string fi case FormComponent.Slider: if (field.Attributes.TryGetValue(FormElementField.MinValueAttribute, out var minValue)) { - if (double.Parse(value?.ToString()) < (double?)minValue) + if (double.Parse(value?.ToString()!) < (double?)minValue) return localizer["{0} field needs to be greater than {1}", fieldName, minValue]; } if (field.Attributes.TryGetValue(FormElementField.MaxValueAttribute, out var maxValue)) { - if (double.Parse(value?.ToString()) > (double?)maxValue) + if (double.Parse(value?.ToString()!) > (double?)maxValue) return localizer["{0} field needs to be less or equal than {1}", fieldName, maxValue]; } - break; - case FormComponent.Text: - case FormComponent.TextArea: - if (field.ValidateRequest && - value.ToString()?.IndexOf("= 0) - { - return localizer["{0} field contains invalid or not allowed character", fieldName]; - } - break; } return null; } - private string ValidateDataType(FormElementField field, object value, string fieldName) + private string? ValidateDataType(FormElementField field, object? value, string fieldName) { var dataType = field.DataType; switch (dataType) @@ -247,14 +307,14 @@ value is not TimeSpan && return null; } - private static string GetFieldLinkHtml(string fieldName, string label) + private static string GetFieldLinkHtml(string fieldName, string? label) { var link = new HtmlBuilder(HtmlTag.A); - link.WithAttribute("href", "#void"); + link.WithAttribute("href", "javascript:void(0)"); link.WithOnClick($"javascript:$('#{fieldName}').focus();"); link.WithCssClass("alert-link"); link.AppendText(label ?? fieldName); return link.ToString(); } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/DataManager/Services/FormService.cs b/src/MasterData.Core/DataManager/Services/FormService.cs index 951e0cacf..31bb2100a 100644 --- a/src/MasterData.Core/DataManager/Services/FormService.cs +++ b/src/MasterData.Core/DataManager/Services/FormService.cs @@ -68,7 +68,12 @@ public async Task UpdateAsync(FormElement formElement, Dictionary InsertAsync(FormElement formElement, Dictionary errors; if (validateFields) - errors = fieldValidationService.ValidateFields(formElement, values, PageState.Insert, isForm); + errors = await fieldValidationService.ValidateFieldsAsync( + formElement, + values, + PageState.Insert, + isForm); else errors = new Dictionary(); @@ -176,7 +185,7 @@ public async Task> InsertOrReplaceAsync(FormElement { ApplyTextCaseTransform(formElement, values); var isForm = dataContext.Source is DataContextSource.Form; - var errors = fieldValidationService.ValidateFields(formElement, values, PageState.Import, isForm); + var errors = await fieldValidationService.ValidateFieldsAsync(formElement, values, PageState.Import, isForm); var letter = new FormLetter(errors); if (OnBeforeImportAsync != null) @@ -247,7 +256,12 @@ public async Task> InsertOrReplaceAsync(FormElement public async Task DeleteAsync(FormElement formElement, Dictionary primaryKeys, DataContext dataContext) { - var errors = new Dictionary(); + var errors = await fieldValidationService.ValidateRulesAsync( + formElement, + primaryKeys, + false, + PageState.Delete); + var result = new FormLetter(errors); if (OnBeforeDeleteAsync != null) diff --git a/src/MasterData.Core/DataManager/Services/FormValuesService.cs b/src/MasterData.Core/DataManager/Services/FormValuesService.cs index a23609049..4e36db085 100644 --- a/src/MasterData.Core/DataManager/Services/FormValuesService.cs +++ b/src/MasterData.Core/DataManager/Services/FormValuesService.cs @@ -13,7 +13,7 @@ using JJMasterData.Core.DataManager.Exceptions; using JJMasterData.Core.DataManager.Models; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; namespace JJMasterData.Core.DataManager.Services; @@ -23,7 +23,7 @@ public class FormValuesService( FieldValuesService fieldValuesService, IEncryptionService encryptionService, ILogger logger, - IHttpRequest httpRequest) + IHttpContextAccessor httpContextAccessor) { private Dictionary GetFormValues(FormElement formElement, string? fieldPrefix = null) @@ -36,13 +36,7 @@ public class FormValuesService( { var fieldName = (fieldPrefix ?? string.Empty) + field.Name; -#if NET48 - var value = field.ValidateRequest - ? httpRequest.Form[fieldName] - : httpRequest.Form.GetUnvalidated(fieldName); -#else - var value = httpRequest.Form[fieldName]; -#endif + var value = httpContextAccessor.HttpContext!.Request.GetFormValue(fieldName); HandleFieldValue(field, values, value); } @@ -112,12 +106,6 @@ internal static void HandleFieldValue(FormElementField field, Dictionary> GetDbValues(Element element) { - var encryptedPkValues = httpRequest.Form[ - $"data-panel-pk-values-{element.Name}"]; + var encryptedPkValues = httpContextAccessor.HttpContext!.Request.GetFormValue( + $"data-panel-pk-values-{element.Name}"); if (string.IsNullOrEmpty(encryptedPkValues)) { - var encryptedFkValues = httpRequest.Form[ - $"form-view-relation-values-{element.Name}"]; + var encryptedFkValues = httpContextAccessor.HttpContext!.Request.GetFormValue( + $"form-view-relation-values-{element.Name}"); if (!string.IsNullOrEmpty(encryptedFkValues)) { @@ -234,7 +222,7 @@ internal static void HandleFieldValue(FormElementField field, Dictionary(); var pkValues = encryptionService.DecryptStringWithUrlUnescape(encryptedPkValues)!; @@ -252,4 +240,4 @@ internal static void HandleFieldValue(FormElementField field, Dictionary RuleLanguage.JavaScript; + + public async Task> ExecuteAsync( + FormElement formElement, + FormElementRule rule, + Dictionary values) + { + var errors = new Dictionary(); + var index = 0; + IDictionary valuesObject = new ExpandoObject(); + foreach (var value in values) + { + valuesObject[value.Key] = value.Value; + } + + using var engine = new Engine(); + engine.SetValue("values", valuesObject); + engine.SetValue("formElement", formElement); + engine.SetValue("addError", new Action((first, second) => + { + var hasSecondArgument = !second?.IsUndefined() ?? false; + var key = hasSecondArgument ? first.ToString() : (++index).ToString(); + var message = hasSecondArgument ? second?.ToString() : first.ToString(); + + if (string.IsNullOrWhiteSpace(message)) + return; + + if (string.IsNullOrWhiteSpace(key)) + key = (++index).ToString(); + + if (!errors.ContainsKey(key)) + errors[key] = message ?? string.Empty; + })); + + await engine.ExecuteAsync(rule.Script); + + return errors; + } +} diff --git a/src/MasterData.Core/DataManager/Services/LookupService.cs b/src/MasterData.Core/DataManager/Services/LookupService.cs index 16ff2f101..0f012da06 100644 --- a/src/MasterData.Core/DataManager/Services/LookupService.cs +++ b/src/MasterData.Core/DataManager/Services/LookupService.cs @@ -6,13 +6,13 @@ using JJMasterData.Core.DataManager.Expressions; using JJMasterData.Core.DataManager.Models; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Components; namespace JJMasterData.Core.DataManager.Services; public class LookupService( - IFormValues formValues, + IHttpContextAccessor httpContextAccessor, ExpressionsService expressionsService, IEncryptionService encryptionService, ElementMapService elementMapService, @@ -73,6 +73,6 @@ public string GetFormViewUrl(DataElementMap elementMap, FormStateData? formState public string? GetSelectedValue(string componentName) { - return formValues[componentName]; + return httpContextAccessor.HttpContext?.Request.GetFormValue(componentName); } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/DataManager/Services/SqlRuleExecutor.cs b/src/MasterData.Core/DataManager/Services/SqlRuleExecutor.cs new file mode 100644 index 000000000..b5e919d8c --- /dev/null +++ b/src/MasterData.Core/DataManager/Services/SqlRuleExecutor.cs @@ -0,0 +1,82 @@ +#nullable enable + +using System; +using System.Collections.Generic; +using System.Data; +using System.Threading.Tasks; +using JJMasterData.Commons.Data.Entity.Repository.Abstractions; +using JJMasterData.Core.DataDictionary.Models; +using JJMasterData.Core.DataManager.Expressions; +using JJMasterData.Core.DataManager.Models; +using JJMasterData.Core.DataManager.Services.Abstractions; + +namespace JJMasterData.Core.DataManager.Services; + +public class SqlRuleExecutor(IEntityRepository entityRepository) : IRuleExecutor +{ + public RuleLanguage Language => RuleLanguage.Sql; + + public async Task> ExecuteAsync( + FormElement formElement, + FormElementRule rule, + Dictionary values) + { + var command = ExpressionDataAccessCommandFactory.Create( + rule.Script, + values); + + var dataSet = await entityRepository.GetDataSetAsync(command, formElement.ConnectionId); + + var errors = new Dictionary(); + + if (dataSet.Tables.Count == 0) + return errors; + + foreach (DataTable dataTable in dataSet.Tables) + { + if (dataTable.Rows.Count == 0) + continue; + + var index = 0; + + foreach (DataRow row in dataTable.Rows) + { + index++; + + var (key, message) = GetError(row, index); + + if (!string.IsNullOrWhiteSpace(key) && + !string.IsNullOrWhiteSpace(message) && + !errors.ContainsKey(key)) + { + errors[key] = message; + } + } + } + + return errors; + } + + private static (string Key, string Message) GetError( + DataRow row, + int index) + { + var columns = row.Table.Columns; + + // Just one column? + if (columns.Count == 1) + { + var message = row[0]?.ToString() ?? string.Empty; + return (index.ToString(), message); + } + + var first = row[0]?.ToString(); + var second = row[1]?.ToString() ?? string.Empty; + + var key = string.IsNullOrWhiteSpace(first) + ? index.ToString() + : first!; + + return (key, second); + } +} diff --git a/src/MasterData.Core/DataManager/Services/UploadAreaService.cs b/src/MasterData.Core/DataManager/Services/UploadAreaService.cs index 3c27c15a0..1b1cbac89 100644 --- a/src/MasterData.Core/DataManager/Services/UploadAreaService.cs +++ b/src/MasterData.Core/DataManager/Services/UploadAreaService.cs @@ -8,14 +8,14 @@ using JJMasterData.Commons.Tasks; using JJMasterData.Commons.Util; using JJMasterData.Core.DataManager.IO; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Components; using JJMasterData.Core.UI.Events.Args; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.DataManager.Services; -public class UploadAreaService(IHttpContext currentContext, IStringLocalizer stringLocalizer) +public class UploadAreaService(IHttpContextAccessor currentContext, IStringLocalizer stringLocalizer) { public event EventHandler? OnFileUploaded; public event AsyncEventHandler? OnFileUploadedAsync; @@ -71,7 +71,7 @@ public async Task UploadFileAsync(FormFileContent formFile, /// private FormFileContent? GetFile(string fileName) { - var fileData = currentContext.Request.Form.GetFile(fileName); + var fileData = currentContext.HttpContext!.Request.Form.Files[fileName]; if (fileData is null) return null; @@ -79,11 +79,7 @@ public async Task UploadFileAsync(FormFileContent formFile, using var stream = new MemoryStream(); string filename = fileData.FileName; -#if NETFRAMEWORK - fileData.InputStream.CopyTo(stream); -#else fileData.CopyTo(stream); -#endif var content = new FormFileContent { @@ -165,4 +161,4 @@ private void ValidateAllowedExtensions(string filename, string? allowedTypes) if (list.Contains(ext)) throw new JJMasterDataException(stringLocalizer["You cannot upload system files"]); } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/DataManager/Services/UrlRedirectService.cs b/src/MasterData.Core/DataManager/Services/UrlRedirectService.cs index 59836e52f..421ad8e59 100644 --- a/src/MasterData.Core/DataManager/Services/UrlRedirectService.cs +++ b/src/MasterData.Core/DataManager/Services/UrlRedirectService.cs @@ -6,14 +6,15 @@ using JJMasterData.Core.DataDictionary.Models.Actions; using JJMasterData.Core.DataManager.Expressions; using JJMasterData.Core.DataManager.Models; -using JJMasterData.Core.Http.Abstractions; +using JJMasterData.Core.Extensions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Components; namespace JJMasterData.Core.DataManager.Services; public class UrlRedirectService( - IHttpRequest httpRequest, + IHttpContextAccessor httpRequest, IEntityRepository entityRepository, FormValuesService formValuesService, ExpressionsService expressionsService) @@ -78,10 +79,10 @@ public string GetParsedUrl(UrlRedirectAction action, FormStateData formStateData { var formStateDataCopy = formStateData.DeepCopy(); - formStateDataCopy.Values.Add("AppPath", httpRequest.ApplicationPath); + formStateDataCopy.Values.Add("AppPath", httpRequest.HttpContext?.Request.GetApplicationPath()); var decodedUrl = HttpUtility.UrlDecode(action.UrlRedirect); return expressionsService.ReplaceExpressionWithParsedValues(decodedUrl, formStateDataCopy, action.EncryptParameters); } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/Extensions/HttpContextExtensions.cs b/src/MasterData.Core/Extensions/HttpContextExtensions.cs index ee350da02..5bdf4873f 100644 --- a/src/MasterData.Core/Extensions/HttpContextExtensions.cs +++ b/src/MasterData.Core/Extensions/HttpContextExtensions.cs @@ -1,17 +1,53 @@ -using JJMasterData.Core.Http.Abstractions; +#nullable enable +using System; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.Http.Extensions; +using Microsoft.Extensions.Options; namespace JJMasterData.Core.Extensions; public static class HttpContextExtensions { - public static bool TryGetValue(this IFormValues formValues, string key, out string value) + extension(HttpRequest request) { - value = formValues[key]; - return !string.IsNullOrEmpty(value); - } - public static bool TryGetValue(this IQueryString queryString,string key, out string value) + public string GetApplicationPath() + { + return request.PathBase.ToString(); + } + + public string? GetValue(string key) + { + if (request.Query.ContainsKey(key)) + return request.Query[key]; + + if (request.HasFormContentType) + return request.Form[key]; + + return null; + } + + public string? GetFormValue(string key) + { + return request.HasFormContentType ? request.Form[key] : (string?)null; + } + + public string GetApplicationUri() + { + return new Uri($"{request.Scheme}://{request.Host}{request.PathBase}").ToString(); + } + + public string GetAbsoluteUri() + { + return request.GetDisplayUrl(); + } + } + + extension(IOptions options) { - value = queryString[key]; - return !string.IsNullOrWhiteSpace(value); - } -} \ No newline at end of file + public long GetMaxRequestBodySize() + { + return options.Value.MultipartBodyLengthLimit; + } + } +} diff --git a/src/MasterData.Core/Extensions/StringExtensions.cs b/src/MasterData.Core/Extensions/StringExtensions.cs deleted file mode 100644 index aa51b0285..000000000 --- a/src/MasterData.Core/Extensions/StringExtensions.cs +++ /dev/null @@ -1,13 +0,0 @@ -#if !NET -using System; - -namespace JJMasterData.Core.Extensions; - -public static class StringExtensions -{ - public static bool Contains(this string str, string substring, StringComparison comparisonType) - { - return str.IndexOf(substring, comparisonType) >= 0; - } -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Html/Templates/HtmlTemplateFunctions.cs b/src/MasterData.Core/Html/Templates/HtmlTemplateFunctions.cs index b6afb08d6..7f584147f 100644 --- a/src/MasterData.Core/Html/Templates/HtmlTemplateFunctions.cs +++ b/src/MasterData.Core/Html/Templates/HtmlTemplateFunctions.cs @@ -6,7 +6,7 @@ using System.Web; using Fluid.Values; using JJMasterData.Commons.Util; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJConsulting.Html; using JJConsulting.Html.Extensions; using Microsoft.Extensions.Localization; @@ -16,7 +16,7 @@ namespace JJMasterData.Core.Html.Templates; public class HtmlTemplateFunctions( IStringLocalizer stringLocalizer, RelativeDateFormatter dateFormatter, - IHttpContext httpContext) + IHttpContextAccessor httpContext) { public FunctionValue GetDateAsText() { @@ -52,14 +52,14 @@ public FunctionValue GetLocalizeFunction() public FunctionValue GetUrlPathFunction() { - var urlAction = new FunctionValue((_, _) => StringValue.Create(httpContext.Request.ApplicationPath)); + var urlAction = new FunctionValue((_, _) => StringValue.Create(httpContext.HttpContext?.Request.GetApplicationPath())); return urlAction; } public FunctionValue GetAppUrlFunction() { - var urlAction = new FunctionValue((_, _) => StringValue.Create(httpContext.Request.ApplicationUri)); + var urlAction = new FunctionValue((_, _) => StringValue.Create(httpContext.HttpContext?.Request.GetApplicationUri())); return urlAction; } @@ -196,4 +196,4 @@ public FunctionValue GetAppUrlFunction() return new StringValue(builder.ToString(), encode: false); }); -} \ No newline at end of file +} diff --git a/src/MasterData.Core/Http/Abstractions/IClaimsPrincipalAcessor.cs b/src/MasterData.Core/Http/Abstractions/IClaimsPrincipalAcessor.cs deleted file mode 100644 index 20b1aeb7b..000000000 --- a/src/MasterData.Core/Http/Abstractions/IClaimsPrincipalAcessor.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Security.Claims; - -namespace JJMasterData.Core.Http.Abstractions; - -public interface IClaimsPrincipalAccessor -{ - ClaimsPrincipal User { get; } -} \ No newline at end of file diff --git a/src/MasterData.Core/Http/Abstractions/IFormValues.cs b/src/MasterData.Core/Http/Abstractions/IFormValues.cs deleted file mode 100644 index 0b6d768d0..000000000 --- a/src/MasterData.Core/Http/Abstractions/IFormValues.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace JJMasterData.Core.Http.Abstractions; - -public interface IFormValues -{ - public bool ContainsFormValues(); - string this[string key] { get; } - -#if NETFRAMEWORK - System.Web.HttpPostedFile GetFile(string file); - string GetUnvalidated(string key); -#elif NET - Microsoft.AspNetCore.Http.IFormFile GetFile(string file); -#else - // .NET Standard workaround, this is never compiled. - dynamic GetFile(string file); -#endif -} \ No newline at end of file diff --git a/src/MasterData.Core/Http/Abstractions/IHttpContext.cs b/src/MasterData.Core/Http/Abstractions/IHttpContext.cs deleted file mode 100644 index 35c305208..000000000 --- a/src/MasterData.Core/Http/Abstractions/IHttpContext.cs +++ /dev/null @@ -1,11 +0,0 @@ -#nullable enable -using System.Security.Claims; - -namespace JJMasterData.Core.Http.Abstractions; - -public interface IHttpContext -{ - IHttpSession Session { get; } - IHttpRequest Request { get; } - ClaimsPrincipal? User { get; } -} \ No newline at end of file diff --git a/src/MasterData.Core/Http/Abstractions/IHttpRequest.cs b/src/MasterData.Core/Http/Abstractions/IHttpRequest.cs deleted file mode 100644 index c42435a93..000000000 --- a/src/MasterData.Core/Http/Abstractions/IHttpRequest.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace JJMasterData.Core.Http.Abstractions; - -public interface IHttpRequest -{ - string UserHostAddress { get; } - string HttpMethod { get; } - string UserAgent { get; } - string AbsoluteUri { get; } - string ApplicationPath { get; } - string ApplicationUri { get; } - string this[string key] { get; } - public IQueryString QueryString { get; } - IFormValues Form { get; } - string ContentType { get; } - string Path { get; } -} \ No newline at end of file diff --git a/src/MasterData.Core/Http/Abstractions/IHttpSession.cs b/src/MasterData.Core/Http/Abstractions/IHttpSession.cs deleted file mode 100644 index 365c0217a..000000000 --- a/src/MasterData.Core/Http/Abstractions/IHttpSession.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace JJMasterData.Core.Http.Abstractions; - -public interface IHttpSession -{ - string this[string key] { get; set; } - void SetSessionValue(string key, object value); - T GetSessionValue(string key); - bool HasKey(string key); - bool HasSession(); -} \ No newline at end of file diff --git a/src/MasterData.Core/Http/Abstractions/IQueryString.cs b/src/MasterData.Core/Http/Abstractions/IQueryString.cs deleted file mode 100644 index 654b81bdd..000000000 --- a/src/MasterData.Core/Http/Abstractions/IQueryString.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace JJMasterData.Core.Http.Abstractions; - -public interface IQueryString -{ - string this[string key] { get; } - public string Value { get; } -} \ No newline at end of file diff --git a/src/MasterData.Core/Http/Abstractions/IRequestLengthService.cs b/src/MasterData.Core/Http/Abstractions/IRequestLengthService.cs deleted file mode 100644 index 36105d152..000000000 --- a/src/MasterData.Core/Http/Abstractions/IRequestLengthService.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace JJMasterData.Core.Http.Abstractions; - -public interface IRequestLengthService -{ - public long GetMaxRequestBodySize(); -} diff --git a/src/MasterData.Core/Http/Abstractions/IUrlHelper.cs b/src/MasterData.Core/Http/Abstractions/IUrlHelper.cs deleted file mode 100644 index d49a67fe7..000000000 --- a/src/MasterData.Core/Http/Abstractions/IUrlHelper.cs +++ /dev/null @@ -1,11 +0,0 @@ -#if !NET - -namespace JJMasterData.Core.Http.Abstractions; - -public interface IUrlHelper -{ - string Action(string action = null, - string controller = null, - object values = null); -} -#endif diff --git a/src/MasterData.Core/Http/AspNetCore/ClaimsPrincipalWrapper.cs b/src/MasterData.Core/Http/AspNetCore/ClaimsPrincipalWrapper.cs deleted file mode 100644 index cc10dbd38..000000000 --- a/src/MasterData.Core/Http/AspNetCore/ClaimsPrincipalWrapper.cs +++ /dev/null @@ -1,13 +0,0 @@ -#nullable enable -#if NET -using System.Security.Claims; -using JJMasterData.Core.Http.Abstractions; -using Microsoft.AspNetCore.Http; - -namespace JJMasterData.Core.Http.AspNetCore; - -public class ClaimsPrincipalWrapper(IHttpContextAccessor httpContextAccessor) : IClaimsPrincipalAccessor -{ - public ClaimsPrincipal? User { get; } = httpContextAccessor.HttpContext?.User; -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/AspNetCore/FormValuesWrapper.cs b/src/MasterData.Core/Http/AspNetCore/FormValuesWrapper.cs deleted file mode 100644 index b85659b29..000000000 --- a/src/MasterData.Core/Http/AspNetCore/FormValuesWrapper.cs +++ /dev/null @@ -1,33 +0,0 @@ -#if NET - -#nullable enable - -using JJMasterData.Core.Http.Abstractions; -using Microsoft.AspNetCore.Http; - -namespace JJMasterData.Core.Http.AspNetCore; - -internal sealed class FormValuesWrapper(IHttpContextAccessor httpContextAccessor) : IFormValues -{ - private readonly HttpContext _httpContext = httpContextAccessor.HttpContext!; - - private IFormCollection? _formCollection; - - private IFormCollection? FormCollection - { - get - { - if (_formCollection == null && _httpContext.Request.HasFormContentType) - _formCollection = _httpContext.Request.Form; - - return _formCollection; - } - } - - public bool ContainsFormValues() => FormCollection is not null; - - public string? this[string key] => FormCollection?[key]; - - public IFormFile? GetFile(string file) => FormCollection?.Files[file]; -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/AspNetCore/HttpRequestWrapper.cs b/src/MasterData.Core/Http/AspNetCore/HttpRequestWrapper.cs deleted file mode 100644 index 85535bbab..000000000 --- a/src/MasterData.Core/Http/AspNetCore/HttpRequestWrapper.cs +++ /dev/null @@ -1,50 +0,0 @@ -#if NET -using System; -using JJMasterData.Core.Http.Abstractions; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Http.Extensions; - -namespace JJMasterData.Core.Http.AspNetCore; - -internal sealed class HttpRequestWrapper( - IHttpContextAccessor httpContextAccessor, - IFormValues formValues, - IQueryString queryString) - : IHttpRequest -{ - public IQueryString QueryString { get; } = queryString; - public IFormValues Form { get; } = formValues; - - private HttpRequest Request => httpContextAccessor.HttpContext?.Request; - - private HttpContext HttpContext => httpContextAccessor.HttpContext; - - public string ApplicationUri => new Uri($"{Request.Scheme}://{Request.Host}{Request.PathBase}").ToString(); - public string this[string key] => GetValue(key); - - public string UserHostAddress => HttpContext?.Connection.RemoteIpAddress?.ToString(); - - public string HttpMethod => Request?.Method; - - public string UserAgent => Request?.Headers.UserAgent; - - public string AbsoluteUri => Request?.GetDisplayUrl(); - - public string ApplicationPath => Request?.PathBase; - - public string ContentType => Request?.ContentType; - public string Path => Request?.Path; - - private string GetValue(string key) - { - if (Request?.Query.ContainsKey(key) == true) - return Request.Query[key]; - - if (Request?.HasFormContentType == true) - return Request.Form[key]; - - return null; - } -} - -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/AspNetCore/HttpSessionWrapper.cs b/src/MasterData.Core/Http/AspNetCore/HttpSessionWrapper.cs deleted file mode 100644 index 59481e867..000000000 --- a/src/MasterData.Core/Http/AspNetCore/HttpSessionWrapper.cs +++ /dev/null @@ -1,36 +0,0 @@ -#if NET -using System; -using System.Linq; -using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; -using Microsoft.AspNetCore.Http; - -namespace JJMasterData.Core.Http.AspNetCore; - -internal sealed class HttpSessionWrapper(IHttpContextAccessor contextAccessor) : IHttpSession -{ - private readonly ISession _session = contextAccessor.HttpContext?.Session; - - public string this[string key] - { - get => _session.GetString(key); - set - { - if(value == null) - _session.Remove(key); - else - _session.SetString(key, value); - } - } - - public void SetSessionValue(string key, object value) => _session.SetObject(key, value); - - public T GetSessionValue(string key) => _session.GetObject(key); - public bool HasKey(string key) - { - return _session.Keys.Any(k=>k == key); - } - - public bool HasSession() => _session != null; -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/AspNetCore/QueryStringWrapper.cs b/src/MasterData.Core/Http/AspNetCore/QueryStringWrapper.cs deleted file mode 100644 index 0e93fc36d..000000000 --- a/src/MasterData.Core/Http/AspNetCore/QueryStringWrapper.cs +++ /dev/null @@ -1,16 +0,0 @@ -#if NET -using JJMasterData.Core.Http.Abstractions; -using Microsoft.AspNetCore.Http; - -namespace JJMasterData.Core.Http.AspNetCore; - -internal sealed class QueryStringWrapper(IHttpContextAccessor httpContextAccessor) : IQueryString -{ - private IQueryCollection QueryCollection { get; } = httpContextAccessor.HttpContext?.Request.Query; - private QueryString QueryString { get; } = httpContextAccessor.HttpContext?.Request.QueryString ?? new(); - - public string this[string key] => QueryCollection[key]; - - public string Value => QueryString.Value; -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/AspNetCore/RequestLengthService.cs b/src/MasterData.Core/Http/AspNetCore/RequestLengthService.cs deleted file mode 100644 index caa142f21..000000000 --- a/src/MasterData.Core/Http/AspNetCore/RequestLengthService.cs +++ /dev/null @@ -1,17 +0,0 @@ -#if NET -using JJMasterData.Core.Http.Abstractions; -using Microsoft.AspNetCore.Http.Features; -using Microsoft.Extensions.Options; - -namespace JJMasterData.Core.Http.AspNetCore; - -internal sealed class RequestLengthService(IOptions options) : IRequestLengthService -{ - private readonly long? _maxRequestBodySize = options.Value.MultipartBodyLengthLimit; - - public long GetMaxRequestBodySize() - { - return _maxRequestBodySize ?? 30720000; - } -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/HttpContextWrapper.cs b/src/MasterData.Core/Http/HttpContextWrapper.cs deleted file mode 100644 index 2faeedb24..000000000 --- a/src/MasterData.Core/Http/HttpContextWrapper.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Security.Claims; -using JJMasterData.Core.Http.Abstractions; - -namespace JJMasterData.Core.Http; - -internal sealed class HttpContextWrapper(IHttpSession session, IHttpRequest request, - IClaimsPrincipalAccessor claimsPrincipalAccessor) - : IHttpContext -{ - public IHttpSession Session { get; } = session; - public IHttpRequest Request { get; } = request; - public ClaimsPrincipal User { get; } = claimsPrincipalAccessor.User; -} diff --git a/src/MasterData.Core/Http/SystemWeb/SystemWebClaimsPrincipalWrapper.cs b/src/MasterData.Core/Http/SystemWeb/SystemWebClaimsPrincipalWrapper.cs deleted file mode 100644 index b48f11107..000000000 --- a/src/MasterData.Core/Http/SystemWeb/SystemWebClaimsPrincipalWrapper.cs +++ /dev/null @@ -1,22 +0,0 @@ -#if NETFRAMEWORK -using System.Security.Claims; -using System.Web; -using JJMasterData.Core.Http.Abstractions; - -namespace JJMasterData.Core.Http.SystemWeb; - -public class SystemWebClaimsPrincipalWrapper : IClaimsPrincipalAccessor -{ - public ClaimsPrincipal User { get; } - - public SystemWebClaimsPrincipalWrapper() - { - if (HttpContext.Current == null) - return; - if (HttpContext.Current.User == null) - return; - - User = HttpContext.Current.User as ClaimsPrincipal; - } -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/SystemWeb/SystemWebFormValuesWrapper.cs b/src/MasterData.Core/Http/SystemWeb/SystemWebFormValuesWrapper.cs deleted file mode 100644 index d0a099df1..000000000 --- a/src/MasterData.Core/Http/SystemWeb/SystemWebFormValuesWrapper.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Specialized; -using System.Web; -using JJMasterData.Core.Http.Abstractions; - -#if NET48 - -namespace JJMasterData.Core.Http.SystemWeb; - -internal sealed class SystemWebFormValuesWrapper : IFormValues -{ - private static UnvalidatedRequestValues UnvalidatedFormCollection => HttpContext.Request.Unvalidated; - private static NameValueCollection FormCollection => HttpContext.Request.Form; - private static HttpContext HttpContext => HttpContext.Current; - - public bool ContainsFormValues() => FormCollection is { Count: > 0 }; - public string this[string key] => FormCollection?[key]; - public HttpPostedFile GetFile(string file) - { - return HttpContext?.Request.Files[file]; - } - public string GetUnvalidated(string key) - { - return UnvalidatedFormCollection[key]; - } -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/SystemWeb/SystemWebHelper.cs b/src/MasterData.Core/Http/SystemWeb/SystemWebHelper.cs deleted file mode 100644 index 4902ec8f6..000000000 --- a/src/MasterData.Core/Http/SystemWeb/SystemWebHelper.cs +++ /dev/null @@ -1,54 +0,0 @@ -#if NET48 - -using System.IO; -using System.Web; -using JJMasterData.Commons.Util; -using JJMasterData.Core.UI.Components; - -namespace JJMasterData.Core.Http.SystemWeb; - -public static class SystemWebHelper -{ - public static bool CanSendResult(ComponentResult result) - { - return result is not EmptyComponentResult && result is not RenderedComponentResult; - } - - public static void SendResult(ComponentResult result) - { - var currentContext = System.Web.HttpContext.Current; - - if (result is RedirectComponentResult redirectComponentResult) - currentContext.Response.Redirect(redirectComponentResult.Content); - else if (result is FileComponentResult fileComponentResult) - { - var filePath = fileComponentResult.Content; - var fileName = Path.GetFileName(filePath); - - var file = new MemoryStream(File.ReadAllBytes(filePath)); - currentContext.Response.ClearHeaders(); - currentContext.Response.ClearContent(); - currentContext.Response.ContentType = MimeTypeUtil.GetMimeType(fileName); - currentContext.Response.AddHeader("Content-Transfer-Encoding", "binary"); - currentContext.Response.AddHeader("Content-Description", "File Transfer"); - currentContext.Response.AddHeader("Content-Disposition", - $"attachment; filename={HttpUtility.UrlEncode(fileName)}"); - currentContext.Response.AddHeader("Content-Length", file.Length.ToString()); - currentContext.Response.BinaryWrite(file.ToArray()); - currentContext.Response.End(); - } - else - { - if (result is JsonComponentResult) - { - currentContext.Response.ContentType = "application/json"; - } - - currentContext.Response.Clear(); - currentContext.Response.StatusCode = result.StatusCode; - currentContext.Response.Write(result.Content!); - currentContext.Response.End(); - } - } -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/SystemWeb/SystemWebHttpRequestWrapper.cs b/src/MasterData.Core/Http/SystemWeb/SystemWebHttpRequestWrapper.cs deleted file mode 100644 index e555304a5..000000000 --- a/src/MasterData.Core/Http/SystemWeb/SystemWebHttpRequestWrapper.cs +++ /dev/null @@ -1,40 +0,0 @@ -#if NETFRAMEWORK - -using System; -using System.Web; -using System.Web.Mvc; -using JJMasterData.Core.Http.Abstractions; - -namespace JJMasterData.Core.Http.SystemWeb; - -internal sealed class SystemWebHttpRequestWrapper(IQueryString queryString, IFormValues form) : IHttpRequest -{ - private static HttpRequest Request => HttpContext.Current.Request; - public string UserHostAddress => Request.UserHostAddress; - public string HttpMethod=> Request.HttpMethod; - public string UserAgent => Request.UserAgent; - public string AbsoluteUri => Request.Url.AbsoluteUri; - public string ApplicationPath=> Request.ApplicationPath; - - public string ApplicationUri - { - get - { - var request = HttpContext.Current.Request; - var uri = new Uri($"{request.Url.Scheme}://{request.Url.Authority}{new UrlHelper(request.RequestContext).Content("~")}"); - - if(!request.IsLocal) - return uri.GetComponents(UriComponents.AbsoluteUri & ~UriComponents.Port, - UriFormat.UriEscaped); - - return uri.ToString(); - } - } - public IFormValues Form => form; - public IQueryString QueryString { get; } = queryString; - public string ContentType => Request.ContentType; - public string Path => Request.Path; - - public string this[string key] => Request[key]; -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/SystemWeb/SystemWebHttpSessionWrapper.cs b/src/MasterData.Core/Http/SystemWeb/SystemWebHttpSessionWrapper.cs deleted file mode 100644 index 8283d0d0e..000000000 --- a/src/MasterData.Core/Http/SystemWeb/SystemWebHttpSessionWrapper.cs +++ /dev/null @@ -1,47 +0,0 @@ -#if NETFRAMEWORK -using System; -using System.Web; -using System.Web.SessionState; -using JJMasterData.Core.Http.Abstractions; - -namespace JJMasterData.Core.Http.SystemWeb; - -internal sealed class SystemWebHttpSessionWrapper : IHttpSession -{ - private static HttpSessionState Session => HttpContext.Current.Session; - public string this[string key] - { - get => Session[key]?.ToString(); - set => Session[key] = value; - } - - public void SetSessionValue(string key, object value) => Session[key] = value; - - public T GetSessionValue(string key) => (T)Session[key]; - public bool HasKey(string key) - { - foreach (var existingKey in Session.Keys) - { - if(string.IsNullOrEmpty(existingKey?.ToString())) - continue; - - if(string.Equals(existingKey.ToString(), key)) - return true; - } - - return false; - } - - public bool HasSession() - { - try - { - return Session != null; - } - catch - { - return false; - } - } -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/SystemWeb/SystemWebQueryStringWrapper.cs b/src/MasterData.Core/Http/SystemWeb/SystemWebQueryStringWrapper.cs deleted file mode 100644 index b03f4a37e..000000000 --- a/src/MasterData.Core/Http/SystemWeb/SystemWebQueryStringWrapper.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Specialized; -using System.Web; -using JJMasterData.Core.Http.Abstractions; - -#if NETFRAMEWORK -namespace JJMasterData.Core.Http.SystemWeb; - -internal sealed class SystemWebQueryStringWrapper : IQueryString -{ - private static NameValueCollection QueryString => HttpContext.Current.Request.QueryString; - public string this[string key] => QueryString[key]; - public string Value => QueryString.ToString(); -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/SystemWeb/SystemWebRequestLengthService.cs b/src/MasterData.Core/Http/SystemWeb/SystemWebRequestLengthService.cs deleted file mode 100644 index f245eb4aa..000000000 --- a/src/MasterData.Core/Http/SystemWeb/SystemWebRequestLengthService.cs +++ /dev/null @@ -1,30 +0,0 @@ -#if NETFRAMEWORK -using JJMasterData.Core.Http.Abstractions; - -namespace JJMasterData.Core.Http.SystemWeb; - -internal sealed class SystemWebRequestLengthService : IRequestLengthService -{ - private readonly long? _maxRequestBodySize; - - public SystemWebRequestLengthService() - { - var maxRequestLengthInKb = GetMaxRequestLengthFromWebConfig(); - _maxRequestBodySize = maxRequestLengthInKb * 1024L; - } - - public long GetMaxRequestBodySize() - { - return _maxRequestBodySize ?? 4194304; - } - - private static int? GetMaxRequestLengthFromWebConfig() - { - var maxRequestLength = 4194304; //4mb - if (System.Configuration.ConfigurationManager.GetSection("system.web/httpRuntime") is System.Web.Configuration.HttpRuntimeSection section) - maxRequestLength = section.MaxRequestLength * 1024; - - return maxRequestLength; - } -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/Http/SystemWeb/SystemWebUrlHelperWrapper.cs b/src/MasterData.Core/Http/SystemWeb/SystemWebUrlHelperWrapper.cs deleted file mode 100644 index e47cddb59..000000000 --- a/src/MasterData.Core/Http/SystemWeb/SystemWebUrlHelperWrapper.cs +++ /dev/null @@ -1,95 +0,0 @@ -#nullable enable -#if !NET -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using JetBrains.Annotations; -using JJMasterData.Core.Configuration.Options; -using JJMasterData.Core.Http.Abstractions; -using Microsoft.Extensions.Options; - -namespace JJMasterData.Core.Http.SystemWeb; - -public class SystemWebUrlHelperWrapper(IHttpRequest httpRequest, IOptionsSnapshot options) - : IUrlHelper -{ - private IHttpRequest HttpRequest { get; } = httpRequest; - private string? MasterDataUrl { get; } = options.Value.MasterDataUrl; - private bool EnableCultureProvider { get; } = options.Value.EnableCultureProviderAtUrl; - - public string Action([AspMvcAction]string? action = null, [AspMvcController] string? controller = - null, object? values = null) - { - - string baseUrl; - - if (MasterDataUrl is null || string.IsNullOrEmpty(MasterDataUrl)) - { - var appPath = HttpRequest.ApplicationPath; - - baseUrl = string.IsNullOrEmpty(appPath) ? "/" : appPath; - } - else - { - baseUrl = MasterDataUrl; - } - - if (!baseUrl.EndsWith("/")) - { - baseUrl += "/"; - } - - var valuesDictionary = new Dictionary(); - - if (values != null) - { - valuesDictionary = values.GetType().GetProperties() - .ToDictionary(prop => prop.Name, prop => prop.GetValue(values)?.ToString()); - } - - if(valuesDictionary.TryGetValue("elementName", out var elementName)) - { - valuesDictionary.Remove("elementName"); - } - - if(valuesDictionary.TryGetValue("Area", out var areaValue)) - { - valuesDictionary.Remove("Area"); - } - - var url = baseUrl; - - if(EnableCultureProvider) - url += $"{CultureInfo.CurrentUICulture}/"; - - if (!string.IsNullOrEmpty(areaValue)) - { - url += $"{areaValue}/"; - } - - if (!string.IsNullOrEmpty(controller)) - { - url += $"{controller}/"; - } - - if (!string.IsNullOrEmpty(action)) - { - url += $"{action}/"; - } - - if (!string.IsNullOrEmpty(elementName)) - { - url += $"{elementName}"; - } - - if (valuesDictionary.Count > 0) - { - url += $"?{string.Join("&", valuesDictionary.Select(kv => $"{kv.Key}={kv.Value}"))}"; - } - - - return url; - } - -} -#endif \ No newline at end of file diff --git a/src/MasterData.Core/MasterData.Core.csproj b/src/MasterData.Core/MasterData.Core.csproj index 61c7429ca..76e0ba4ea 100644 --- a/src/MasterData.Core/MasterData.Core.csproj +++ b/src/MasterData.Core/MasterData.Core.csproj @@ -1,7 +1,7 @@ - net4.8;net10.0 + net10.0 latest 10.0 disable @@ -12,22 +12,20 @@ JJMasterData.Core JJMasterData.Core true + $(NoWarn);CS9107 - - - - - - - + + + + diff --git a/src/MasterData.Core/UI/Components/Actions/ActionScripts.cs b/src/MasterData.Core/UI/Components/Actions/ActionScripts.cs index e1f07c034..5ecd0872e 100644 --- a/src/MasterData.Core/UI/Components/Actions/ActionScripts.cs +++ b/src/MasterData.Core/UI/Components/Actions/ActionScripts.cs @@ -10,7 +10,7 @@ using JJMasterData.Core.DataManager.Models; using JJMasterData.Core.DataManager.Services; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Routing; using Microsoft.Extensions.Localization; diff --git a/src/MasterData.Core/UI/Components/AuditLog/AuditLogViewFactory.cs b/src/MasterData.Core/UI/Components/AuditLog/AuditLogViewFactory.cs index 37e24d473..65f7124db 100644 --- a/src/MasterData.Core/UI/Components/AuditLog/AuditLogViewFactory.cs +++ b/src/MasterData.Core/UI/Components/AuditLog/AuditLogViewFactory.cs @@ -5,13 +5,13 @@ using JJMasterData.Core.DataDictionary.Repository.Abstractions; using JJMasterData.Core.DataManager; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components; internal sealed class AuditLogViewFactory( - IHttpContext httpContext, + IHttpContextAccessor httpContext, IMasterDataUser masterDataUser, IEntityRepository entityRepository, AuditLogService auditLogService, diff --git a/src/MasterData.Core/UI/Components/AuditLog/JJAuditLogView.cs b/src/MasterData.Core/UI/Components/AuditLog/JJAuditLogView.cs index ce83a0209..25976cdb3 100644 --- a/src/MasterData.Core/UI/Components/AuditLog/JJAuditLogView.cs +++ b/src/MasterData.Core/UI/Components/AuditLog/JJAuditLogView.cs @@ -19,7 +19,7 @@ using JJMasterData.Core.DataManager.Models; using JJMasterData.Core.DataManager.Services; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.Tasks; using JJMasterData.Core.UI.Routing; @@ -42,7 +42,7 @@ private RouteContext RouteContext if (field != null) return field; - var factory = new RouteContextFactory(CurrentContext.Request.QueryString, EncryptionService); + var factory = new RouteContextFactory(CurrentContext, EncryptionService); field = factory.Create(); return field; @@ -60,7 +60,7 @@ private RouteContext RouteContext /// internal string UserId => _masterDataUser.Id; - private IHttpContext CurrentContext { get; } + private IHttpContextAccessor CurrentContext { get; } private AuditLogService AuditLogService { get; } private IEncryptionService EncryptionService { get; } @@ -88,7 +88,7 @@ private JJDataPanel DataPanel public JJAuditLogView( FormElement formElement, - IHttpContext currentContext, + IHttpContextAccessor currentContext, IMasterDataUser masterDataUser, IEntityRepository entityRepository, AuditLogService auditLogService, @@ -109,7 +109,7 @@ public JJAuditLogView( protected override async Task BuildResultAsync() { - var logId = CurrentContext.Request.Form[$"audit-log-id-{FormElement.Name}"]; + var logId = CurrentContext.HttpContext!.Request.GetFormValue($"audit-log-id-{FormElement.Name}"); var html = new HtmlBuilder(HtmlTag.Div); if (string.IsNullOrEmpty(logId)) @@ -446,4 +446,4 @@ private async Task GetLogListGroupHtml(string recordsKey, string vi return html; } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/CollapsePanel/JJMasterDataCollapsePanel.cs b/src/MasterData.Core/UI/Components/CollapsePanel/JJMasterDataCollapsePanel.cs index 93ce115bf..2873ff286 100644 --- a/src/MasterData.Core/UI/Components/CollapsePanel/JJMasterDataCollapsePanel.cs +++ b/src/MasterData.Core/UI/Components/CollapsePanel/JJMasterDataCollapsePanel.cs @@ -1,24 +1,27 @@ using JJConsulting.Html.Bootstrap.Components; -using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; internal sealed class JJMasterDataCollapsePanel : JJCollapsePanel { - public JJMasterDataCollapsePanel(IFormValues formValues) + public JJMasterDataCollapsePanel(IHttpContextAccessor httpContextAccessor) { - if (formValues.TryGetValue($"{Name}-is-open", out var value)) + var request = httpContextAccessor.HttpContext?.Request; + if (request?.HasFormContentType == true && + request.Form.TryGetValue($"{Name}-is-open", out var value)) { - IsOpen = "1".Equals(value) ? true : null; + IsOpen = "1".Equals(value.ToString()) ? true : null; } } - public JJMasterDataCollapsePanel(IFormValues formValues, string name) + public JJMasterDataCollapsePanel(IHttpContextAccessor httpContextAccessor, string name) { Name = name; - if (formValues.TryGetValue($"{Name}-is-open", out var value)) + var request = httpContextAccessor.HttpContext?.Request; + if (request?.HasFormContentType == true && + request.Form.TryGetValue($"{Name}-is-open", out var value)) { - IsOpen = "1".Equals(value) ; + IsOpen = "1".Equals(value.ToString()) ; } } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/Controls/CheckBox/CheckboxFactory.cs b/src/MasterData.Core/UI/Components/Controls/CheckBox/CheckboxFactory.cs index e2d5bad3a..3c3cab3ed 100644 --- a/src/MasterData.Core/UI/Components/Controls/CheckBox/CheckboxFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/CheckBox/CheckboxFactory.cs @@ -1,11 +1,11 @@ using JJMasterData.Commons.Util; using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components; -internal sealed class CheckboxFactory(IFormValues formValues, IStringLocalizer stringLocalizer) +internal sealed class CheckboxFactory(IHttpContextAccessor formValues, IStringLocalizer stringLocalizer) : IControlFactory { public JJCheckBox Create() => new(formValues,stringLocalizer); diff --git a/src/MasterData.Core/UI/Components/Controls/CheckBox/JJCheckBox.cs b/src/MasterData.Core/UI/Components/Controls/CheckBox/JJCheckBox.cs index 29547f152..3bd78f680 100644 --- a/src/MasterData.Core/UI/Components/Controls/CheckBox/JJCheckBox.cs +++ b/src/MasterData.Core/UI/Components/Controls/CheckBox/JJCheckBox.cs @@ -4,7 +4,7 @@ using JJConsulting.Html.Extensions; using JJMasterData.Core.Extensions; using JJMasterData.Core.Html; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; @@ -31,7 +31,7 @@ public bool IsChecked { get { - if (_isChecked == null && FormValues.ContainsFormValues()) + if (_isChecked == null && HasFormValues) _isChecked = Value.Equals(FormValues[Name]); return _isChecked ?? false; @@ -39,7 +39,7 @@ public bool IsChecked set => _isChecked = value; } - public JJCheckBox(IFormValues formValues, IStringLocalizer stringLocalizer) : base(formValues) + public JJCheckBox(IHttpContextAccessor formValues, IStringLocalizer stringLocalizer) : base(formValues) { _stringLocalizer = stringLocalizer; Visible = true; @@ -133,4 +133,4 @@ private HtmlBuilder GetInputHtml() return div; } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/Controls/CodeEditor/CodeEditorFactory.cs b/src/MasterData.Core/UI/Components/Controls/CodeEditor/CodeEditorFactory.cs index cf49e3564..79171a259 100644 --- a/src/MasterData.Core/UI/Components/Controls/CodeEditor/CodeEditorFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/CodeEditor/CodeEditorFactory.cs @@ -1,9 +1,9 @@ using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; -public class CodeEditorFactory(IFormValues formValues) : IControlFactory +public class CodeEditorFactory(IHttpContextAccessor formValues) : IControlFactory { public JJCodeEditor Create() { diff --git a/src/MasterData.Core/UI/Components/Controls/CodeEditor/JJCodeEditor.cs b/src/MasterData.Core/UI/Components/Controls/CodeEditor/JJCodeEditor.cs index 7cf5973e3..637a0f565 100644 --- a/src/MasterData.Core/UI/Components/Controls/CodeEditor/JJCodeEditor.cs +++ b/src/MasterData.Core/UI/Components/Controls/CodeEditor/JJCodeEditor.cs @@ -5,12 +5,12 @@ using JJConsulting.Html; using JJConsulting.Html.Extensions; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; -public class JJCodeEditor(IFormValues formValues) : ControlBase(formValues) +public class JJCodeEditor(IHttpContextAccessor formValues) : ControlBase(formValues) { public string Language { get; set; } = "html"; public int Height { get; set; } = 300; diff --git a/src/MasterData.Core/UI/Components/Controls/ColorPicker/ColorPickerFactory.cs b/src/MasterData.Core/UI/Components/Controls/ColorPicker/ColorPickerFactory.cs index 60e22761c..116b9fcf5 100644 --- a/src/MasterData.Core/UI/Components/Controls/ColorPicker/ColorPickerFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/ColorPicker/ColorPickerFactory.cs @@ -1,9 +1,9 @@ using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components.ColorPicker; -internal sealed class ColorPickerFactory(IFormValues formValues) : IControlFactory +internal sealed class ColorPickerFactory(IHttpContextAccessor formValues) : IControlFactory { public JJColorPicker Create() { diff --git a/src/MasterData.Core/UI/Components/Controls/ColorPicker/JJColorPicker.cs b/src/MasterData.Core/UI/Components/Controls/ColorPicker/JJColorPicker.cs index 71c6b1216..bb6a090b7 100644 --- a/src/MasterData.Core/UI/Components/Controls/ColorPicker/JJColorPicker.cs +++ b/src/MasterData.Core/UI/Components/Controls/ColorPicker/JJColorPicker.cs @@ -2,12 +2,12 @@ using JJConsulting.Html; using JJConsulting.Html.Extensions; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components.ColorPicker; -public class JJColorPicker(IFormValues formValues) : ControlBase(formValues) +public class JJColorPicker(IHttpContextAccessor formValues) : ControlBase(formValues) { public string Title { get; set; } diff --git a/src/MasterData.Core/UI/Components/Controls/ComboBox/ComboBoxFactory.cs b/src/MasterData.Core/UI/Components/Controls/ComboBox/ComboBoxFactory.cs index af507755b..fbdf9fa2e 100644 --- a/src/MasterData.Core/UI/Components/Controls/ComboBox/ComboBoxFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/ComboBox/ComboBoxFactory.cs @@ -1,14 +1,14 @@ using System; using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; namespace JJMasterData.Core.UI.Components; internal sealed class ComboBoxFactory( - IFormValues formValues, + IHttpContextAccessor formValues, DataItemService dataItemService, IStringLocalizer stringLocalizer) : IControlFactory diff --git a/src/MasterData.Core/UI/Components/Controls/ComboBox/JJComboBox.cs b/src/MasterData.Core/UI/Components/Controls/ComboBox/JJComboBox.cs index c1f863807..f5ff38835 100644 --- a/src/MasterData.Core/UI/Components/Controls/ComboBox/JJComboBox.cs +++ b/src/MasterData.Core/UI/Components/Controls/ComboBox/JJComboBox.cs @@ -11,13 +11,13 @@ using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager.Models; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components; public class JJComboBox( - IFormValues formValues, + IHttpContextAccessor formValues, DataItemService dataItemService, IStringLocalizer stringLocalizer) : ControlBase(formValues), IDataItemControl, IFloatingLabelControl @@ -39,7 +39,7 @@ public string? SelectedValue { get { - if (field == null && FormValues.ContainsFormValues()) + if (field == null && HasFormValues) { field = FormValues[Name]; } diff --git a/src/MasterData.Core/UI/Components/Controls/ControlBase.cs b/src/MasterData.Core/UI/Components/Controls/ControlBase.cs index 7aaf980b7..fba21539c 100644 --- a/src/MasterData.Core/UI/Components/Controls/ControlBase.cs +++ b/src/MasterData.Core/UI/Components/Controls/ControlBase.cs @@ -2,13 +2,19 @@ using System.Threading.Tasks; using JJConsulting.Html; using JJConsulting.Html.Bootstrap.Abstractions; -using JJMasterData.Core.Http.Abstractions; +using JJMasterData.Core.Extensions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; -public abstract class ControlBase(IFormValues formValues) : ComponentBase +public abstract class ControlBase : ComponentBase { + protected ControlBase(IHttpContextAccessor httpContextAccessor) + { + HttpContextAccessor = httpContextAccessor; + } + /// /// Property to check if the control is enabled. /// (Default = true) @@ -34,7 +40,13 @@ public abstract class ControlBase(IFormValues formValues) : ComponentBase public int MaxLength { get; set; } - internal IFormValues FormValues { get; } = formValues; + internal IHttpContextAccessor HttpContextAccessor { get; } + + internal bool HasFormValues => HttpContextAccessor.HttpContext?.Request.HasFormContentType == true; + + internal IFormCollection FormValues => HasFormValues + ? HttpContextAccessor.HttpContext!.Request.Form + : FormCollection.Empty; /// /// Value of the component. @@ -43,7 +55,7 @@ public string Text { get { - if (field == null && FormValues.ContainsFormValues()) + if (field == null && HasFormValues) { field = FormValues[Name]; } diff --git a/src/MasterData.Core/UI/Components/Controls/IconPicker/IconPickerFactory.cs b/src/MasterData.Core/UI/Components/Controls/IconPicker/IconPickerFactory.cs index 65b82fe98..459b0c701 100644 --- a/src/MasterData.Core/UI/Components/Controls/IconPicker/IconPickerFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/IconPicker/IconPickerFactory.cs @@ -1,11 +1,11 @@ using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components; -public class IconPickerFactory(IStringLocalizer stringLocalizer, IUrlHelper urlHelper, IControlFactory comboBoxFactory, IFormValues formValues) : IControlFactory +public class IconPickerFactory(IStringLocalizer stringLocalizer, IUrlHelper urlHelper, IControlFactory comboBoxFactory, IHttpContextAccessor formValues) : IControlFactory { public JJIconPicker Create() => new(stringLocalizer,urlHelper,comboBoxFactory,formValues); diff --git a/src/MasterData.Core/UI/Components/Controls/IconPicker/JJIconPicker.cs b/src/MasterData.Core/UI/Components/Controls/IconPicker/JJIconPicker.cs index 7dcd89202..0a5a0ef13 100644 --- a/src/MasterData.Core/UI/Components/Controls/IconPicker/JJIconPicker.cs +++ b/src/MasterData.Core/UI/Components/Controls/IconPicker/JJIconPicker.cs @@ -10,7 +10,7 @@ using JJConsulting.Html.Bootstrap.Models; using JJConsulting.Html.Extensions; using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components; @@ -19,7 +19,7 @@ public class JJIconPicker( IStringLocalizer stringLocalizer, IUrlHelper urlHelper, IControlFactory comboBoxFactory, - IFormValues formValues) : ControlBase(formValues) + IHttpContextAccessor formValues) : ControlBase(formValues) { public FontAwesomeIcon? SelectedIcon { get; set; } public string? Id { get; set; } diff --git a/src/MasterData.Core/UI/Components/Controls/Lookup/JJLookup.cs b/src/MasterData.Core/UI/Components/Controls/Lookup/JJLookup.cs index b406ba014..0e4e9c12d 100644 --- a/src/MasterData.Core/UI/Components/Controls/Lookup/JJLookup.cs +++ b/src/MasterData.Core/UI/Components/Controls/Lookup/JJLookup.cs @@ -15,7 +15,7 @@ using JJMasterData.Core.DataManager.Services; using JJMasterData.Core.Extensions; using JJMasterData.Core.Html; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Routing; using Microsoft.Extensions.Localization; @@ -25,7 +25,7 @@ namespace JJMasterData.Core.UI.Components; /// Represents a field with a value from another FormElement accessed via modal. public class JJLookup : ControlBase { - private IHttpRequest HttpRequest { get; } + private IHttpContextAccessor HttpRequest { get; } private RouteContextFactory RouteContextFactory { get; } private FormValuesService FormValuesService { get; } private IEncryptionService EncryptionService { get; } @@ -66,7 +66,7 @@ public string ModalTitle { get { - if (AutoReloadFormFields && _text is not null && FormValues.ContainsFormValues()) + if (AutoReloadFormFields && _text is not null && HasFormValues) { _text = FormValues[Name]; } @@ -109,13 +109,13 @@ internal JJLookup( FormElement formElement, FormElementField field, ControlContext controlContext, - IHttpRequest httpRequest, + IHttpContextAccessor httpRequest, RouteContextFactory routeContextFactory, FormValuesService formValuesService, IEncryptionService encryptionService, LookupService lookupService, IStringLocalizer stringLocalizer, - IComponentFactory componentFactory) : base(httpRequest.Form) + IComponentFactory componentFactory) : base(httpRequest) { RouteContext = routeContextFactory.Create(); ElementMap = field.DataItem?.ElementMap ?? new DataElementMap @@ -160,7 +160,7 @@ internal JJLookup( protected override async ValueTask BuildResultAsync() { - if (ComponentContext is ComponentContext.LookupDescription && HttpRequest.QueryString["fieldName"] == FieldName) + if (ComponentContext is ComponentContext.LookupDescription && HttpRequest.HttpContext?.Request.Query["fieldName"].ToString() == FieldName) { return await GetLookupDescription(); } @@ -293,4 +293,4 @@ false when string.IsNullOrEmpty(description) || hasDescription => " jj-icon-warn _ => (6, 6) }; } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/Controls/Lookup/LookupFactory.cs b/src/MasterData.Core/UI/Components/Controls/Lookup/LookupFactory.cs index 8c5754d51..c9f4f13a9 100644 --- a/src/MasterData.Core/UI/Components/Controls/Lookup/LookupFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/Lookup/LookupFactory.cs @@ -1,14 +1,14 @@ using JJMasterData.Commons.Security.Cryptography.Abstractions; using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Routing; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components; internal sealed class LookupFactory( - IHttpRequest httpRequest, + IHttpContextAccessor httpRequest, FormValuesService formValuesService, LookupService lookupService, IComponentFactory componentFactory, diff --git a/src/MasterData.Core/UI/Components/Controls/Phone/JJPhoneGroup.cs b/src/MasterData.Core/UI/Components/Controls/Phone/JJPhoneGroup.cs index 32b988d89..b3daab861 100644 --- a/src/MasterData.Core/UI/Components/Controls/Phone/JJPhoneGroup.cs +++ b/src/MasterData.Core/UI/Components/Controls/Phone/JJPhoneGroup.cs @@ -4,11 +4,11 @@ using JJConsulting.Html.Extensions; using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataDictionary.Services; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components.Phone; -public sealed class JJPhoneGroup(IFormValues formValues) : JJTextBox(formValues) +public sealed class JJPhoneGroup(IHttpContextAccessor formValues) : JJTextBox(formValues) { public string GroupCssClass { get; set; } diff --git a/src/MasterData.Core/UI/Components/Controls/Phone/PhoneGroupFactory.cs b/src/MasterData.Core/UI/Components/Controls/Phone/PhoneGroupFactory.cs index bb90e3246..0bec73725 100644 --- a/src/MasterData.Core/UI/Components/Controls/Phone/PhoneGroupFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/Phone/PhoneGroupFactory.cs @@ -1,10 +1,10 @@ using System; using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components.Phone; -internal sealed class PhoneGroupFactory(IFormValues formValues) +internal sealed class PhoneGroupFactory(IHttpContextAccessor formValues) : IControlFactory { public JJPhoneGroup Create() diff --git a/src/MasterData.Core/UI/Components/Controls/RadioButton/JJRadioButton.cs b/src/MasterData.Core/UI/Components/Controls/RadioButton/JJRadioButton.cs index a3d805038..07fda3ff1 100644 --- a/src/MasterData.Core/UI/Components/Controls/RadioButton/JJRadioButton.cs +++ b/src/MasterData.Core/UI/Components/Controls/RadioButton/JJRadioButton.cs @@ -3,12 +3,12 @@ using JJConsulting.Html.Extensions; using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; -internal sealed class JJRadioButton(IFormValues formValues) : ControlBase(formValues) +internal sealed class JJRadioButton(IHttpContextAccessor formValues) : ControlBase(formValues) { public string Id { get; set; } public HtmlBuilder LabelHtml { get; } = new(); diff --git a/src/MasterData.Core/UI/Components/Controls/RadioButton/JJRadioButtonGroup.cs b/src/MasterData.Core/UI/Components/Controls/RadioButton/JJRadioButtonGroup.cs index 65bacf225..6d0f50165 100644 --- a/src/MasterData.Core/UI/Components/Controls/RadioButton/JJRadioButtonGroup.cs +++ b/src/MasterData.Core/UI/Components/Controls/RadioButton/JJRadioButtonGroup.cs @@ -8,20 +8,20 @@ using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager.Models; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; public class JJRadioButtonGroup( DataItemService dataItemService, - IFormValues formValues) : ControlBase(formValues), IDataItemControl + IHttpContextAccessor formValues) : ControlBase(formValues), IDataItemControl { public string? SelectedValue { get { - if (field == null && FormValues.ContainsFormValues()) + if (field == null && HasFormValues) { field = FormValues[Name]; } @@ -57,7 +57,7 @@ public Task> GetValuesAsync() private void AppendRadioButton(HtmlBuilder html, DataItemValue item) { - var radio = new JJRadioButton(FormValues) + var radio = new JJRadioButton(HttpContextAccessor) { Id = item.Id, Name = Name, @@ -77,4 +77,4 @@ private void AppendRadioButton(HtmlBuilder html, DataItemValue item) html.Append(radio.GetHtmlBuilder()); } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/Controls/RadioButton/RadioButtonGroupFactory.cs b/src/MasterData.Core/UI/Components/Controls/RadioButton/RadioButtonGroupFactory.cs index 3a264430f..a4527bbc9 100644 --- a/src/MasterData.Core/UI/Components/Controls/RadioButton/RadioButtonGroupFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/RadioButton/RadioButtonGroupFactory.cs @@ -1,10 +1,10 @@ using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; -internal sealed class RadioButtonGroupFactory(DataItemService dataItemService, IFormValues formValues) : IControlFactory +internal sealed class RadioButtonGroupFactory(DataItemService dataItemService, IHttpContextAccessor formValues) : IControlFactory { public JJRadioButtonGroup Create() { diff --git a/src/MasterData.Core/UI/Components/Controls/SearchBox/JJSearchBox.cs b/src/MasterData.Core/UI/Components/Controls/SearchBox/JJSearchBox.cs index a83d136bd..89bd13689 100644 --- a/src/MasterData.Core/UI/Components/Controls/SearchBox/JJSearchBox.cs +++ b/src/MasterData.Core/UI/Components/Controls/SearchBox/JJSearchBox.cs @@ -15,7 +15,7 @@ using JJMasterData.Core.DataManager.Services; using JJMasterData.Core.Events.Args; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Routing; using Microsoft.Extensions.Localization; @@ -84,9 +84,9 @@ public string HtmlId { get { - if (AutoReloadFormFields && _text == null && Request.Form.ContainsFormValues()) + if (AutoReloadFormFields && _text == null && Request.HttpContext!.Request.HasFormContentType) { - _text = Request.Form[$"{Name}_text"]; + _text = Request.HttpContext.Request.GetFormValue($"{Name}_text"); } return _text; @@ -161,9 +161,9 @@ public bool ScrollBar return _selectedValue; } - if (AutoReloadFormFields && Request.Form.ContainsFormValues()) + if (AutoReloadFormFields && Request.HttpContext!.Request.HasFormContentType) { - _selectedValue = Request.Form[Name]; + _selectedValue = Request.HttpContext.Request.GetFormValue(Name); } if (!string.IsNullOrEmpty(Text)) @@ -185,7 +185,7 @@ public bool ScrollBar /// public bool AutoReloadFormFields { get; set; } - private IHttpRequest Request { get; } + private IHttpContextAccessor Request { get; } private IEncryptionService EncryptionService { get; } private DataItemService DataItemService { get; } private IStringLocalizer StringLocalizer { get; } @@ -196,11 +196,6 @@ public bool ScrollBar public string SelectedValue { -#if NETFRAMEWORK - [Obsolete("Please use GetSelectedValueAsync()")] - get => JJMasterData.Core.Tasks.AsyncHelper.RunSync(GetSelectedValueAsync) ?? string.Empty; -#endif - set => _selectedValue = value; } @@ -213,7 +208,7 @@ protected RouteContext RouteContext if (_routeContext != null) return _routeContext; - var factory = new RouteContextFactory(Request.QueryString, EncryptionService); + var factory = new RouteContextFactory(Request, EncryptionService); _routeContext = factory.Create(); return _routeContext; @@ -227,10 +222,10 @@ protected RouteContext RouteContext #region "Constructors" public JJSearchBox( - IHttpRequest request, + IHttpContextAccessor request, IEncryptionService encryptionService, DataItemService dataItemService, - IStringLocalizer stringLocalizer) : base(request.Form) + IStringLocalizer stringLocalizer) : base(request) { HtmlId = Name; Request = request; @@ -251,7 +246,7 @@ public JJSearchBox( protected override async ValueTask BuildResultAsync() { - var fieldName = Request.QueryString["fieldName"]; + var fieldName = Request.HttpContext?.Request.Query["fieldName"].ToString(); if (ComponentContext is ComponentContext.SearchBox or ComponentContext.SearchBoxFilter && FieldName == fieldName) { @@ -417,7 +412,11 @@ private async Task> GetValuesAsync(string? searchId, string? private async Task> GetSearchBoxItemsAsync() { - var searchText = Request.QueryString["q"] ?? Request.Form[Name + "_text"]; + var searchText = Request.HttpContext?.Request.Query["q"].ToString(); + if (string.IsNullOrEmpty(searchText) && Request.HttpContext!.Request.HasFormContentType) + { + searchText = Request.HttpContext.Request.GetFormValue(Name + "_text"); + } var values = await GetValuesAsync(searchId: null, searchText); return values.ConvertAll(v=>new DataItemResult { diff --git a/src/MasterData.Core/UI/Components/Controls/SearchBox/SearchBoxFactory.cs b/src/MasterData.Core/UI/Components/Controls/SearchBox/SearchBoxFactory.cs index 524a2c352..1a33a4462 100644 --- a/src/MasterData.Core/UI/Components/Controls/SearchBox/SearchBoxFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/SearchBox/SearchBoxFactory.cs @@ -4,14 +4,14 @@ using JJMasterData.Commons.Resources; using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components; internal sealed class SearchBoxFactory( DataItemService dataItemService, - IHttpRequest httpRequest, + IHttpContextAccessor httpRequest, IEncryptionService encryptionService, IStringLocalizer stringLocalizer) : IControlFactory diff --git a/src/MasterData.Core/UI/Components/Controls/Slider/JJSlider.cs b/src/MasterData.Core/UI/Components/Controls/Slider/JJSlider.cs index 4dacd2838..5d38364fb 100644 --- a/src/MasterData.Core/UI/Components/Controls/Slider/JJSlider.cs +++ b/src/MasterData.Core/UI/Components/Controls/Slider/JJSlider.cs @@ -4,12 +4,12 @@ using JJConsulting.Html.Extensions; using JJMasterData.Core.Extensions; using JJMasterData.Core.Html; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; -public class JJSlider(IFormValues formValues, IControlFactory textBoxFactory) +public class JJSlider(IHttpContextAccessor formValues, IControlFactory textBoxFactory) : ControlBase(formValues) { private IControlFactory TextBoxFactory { get; } = textBoxFactory; diff --git a/src/MasterData.Core/UI/Components/Controls/Slider/SliderFactory.cs b/src/MasterData.Core/UI/Components/Controls/Slider/SliderFactory.cs index 3ba818610..896068d84 100644 --- a/src/MasterData.Core/UI/Components/Controls/Slider/SliderFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/Slider/SliderFactory.cs @@ -1,10 +1,10 @@ using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; internal sealed class SliderFactory( - IFormValues formValues, + IHttpContextAccessor formValues, IControlFactory textBoxFactory) : IControlFactory { diff --git a/src/MasterData.Core/UI/Components/Controls/TextArea/JJTextArea.cs b/src/MasterData.Core/UI/Components/Controls/TextArea/JJTextArea.cs index 448f32c15..047d2e4d3 100644 --- a/src/MasterData.Core/UI/Components/Controls/TextArea/JJTextArea.cs +++ b/src/MasterData.Core/UI/Components/Controls/TextArea/JJTextArea.cs @@ -4,7 +4,7 @@ using JJConsulting.Html.Extensions; using JJMasterData.Core.Extensions; using JJMasterData.Core.Html; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; @@ -19,7 +19,7 @@ public class JJTextArea : ControlBase, IFloatingLabelControl private IStringLocalizer StringLocalizer { get; } public int Rows { get; set; } - public JJTextArea(IFormValues formValues,IStringLocalizer stringLocalizer) : base(formValues) + public JJTextArea(IHttpContextAccessor formValues,IStringLocalizer stringLocalizer) : base(formValues) { StringLocalizer = stringLocalizer; Attributes.Add("class", "form-control"); diff --git a/src/MasterData.Core/UI/Components/Controls/TextArea/TextAreaFactory.cs b/src/MasterData.Core/UI/Components/Controls/TextArea/TextAreaFactory.cs index 920f9ce6e..a9431e9a7 100644 --- a/src/MasterData.Core/UI/Components/Controls/TextArea/TextAreaFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/TextArea/TextAreaFactory.cs @@ -1,12 +1,12 @@ using System; using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components; internal sealed class TextAreaFactory( - IFormValues formValues, + IHttpContextAccessor formValues, IStringLocalizer stringLocalizer) : IControlFactory { diff --git a/src/MasterData.Core/UI/Components/Controls/TextBox/JJTextBox.cs b/src/MasterData.Core/UI/Components/Controls/TextBox/JJTextBox.cs index 576004454..2bb9e6f5a 100644 --- a/src/MasterData.Core/UI/Components/Controls/TextBox/JJTextBox.cs +++ b/src/MasterData.Core/UI/Components/Controls/TextBox/JJTextBox.cs @@ -5,7 +5,7 @@ using JJConsulting.Html.Extensions; using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; @@ -41,7 +41,7 @@ public double? MaxValue set => SetAttribute(FormElementField.MaxValueAttribute, value.ToString()); } - public JJTextBox(IFormValues formValues) : base(formValues) + public JJTextBox(IHttpContextAccessor formValues) : base(formValues) { InputType = InputType.Text; Visible = true; diff --git a/src/MasterData.Core/UI/Components/Controls/TextBox/JJTextGroup.cs b/src/MasterData.Core/UI/Components/Controls/TextBox/JJTextGroup.cs index 50a7d94ac..481f23ddf 100644 --- a/src/MasterData.Core/UI/Components/Controls/TextBox/JJTextGroup.cs +++ b/src/MasterData.Core/UI/Components/Controls/TextBox/JJTextGroup.cs @@ -6,12 +6,12 @@ using JJConsulting.Html.Extensions; using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; -public sealed class JJTextGroup(IFormValues formValues) +public sealed class JJTextGroup(IHttpContextAccessor formValues) : JJTextBox(formValues), IFloatingLabelControl { public string FloatingLabel { get; set; } diff --git a/src/MasterData.Core/UI/Components/Controls/TextBox/TextBoxFactory.cs b/src/MasterData.Core/UI/Components/Controls/TextBox/TextBoxFactory.cs index d5a7fe9c8..fc1c8d0e2 100644 --- a/src/MasterData.Core/UI/Components/Controls/TextBox/TextBoxFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/TextBox/TextBoxFactory.cs @@ -1,9 +1,9 @@ using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; -internal sealed class TextBoxFactory(IFormValues formValues) +internal sealed class TextBoxFactory(IHttpContextAccessor formValues) : IControlFactory { public JJTextBox Create() diff --git a/src/MasterData.Core/UI/Components/Controls/TextBox/TextGroupFactory.cs b/src/MasterData.Core/UI/Components/Controls/TextBox/TextGroupFactory.cs index 6d8413ff3..2b39605aa 100644 --- a/src/MasterData.Core/UI/Components/Controls/TextBox/TextGroupFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/TextBox/TextGroupFactory.cs @@ -5,14 +5,14 @@ using JJConsulting.Html.Bootstrap.Components; using JJMasterData.Commons.Data.Entity.Models; using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; using static JJMasterData.Core.UI.DateFormatMapper; namespace JJMasterData.Core.UI.Components; public sealed class TextGroupFactory( - IFormValues formValues, + IHttpContextAccessor formValues, IStringLocalizer stringLocalizer, ActionButtonFactory actionButtonFactory) : IControlFactory diff --git a/src/MasterData.Core/UI/Components/Controls/TextFile/JJTextFile.cs b/src/MasterData.Core/UI/Components/Controls/TextFile/JJTextFile.cs index d5090cdcd..e8d47972a 100644 --- a/src/MasterData.Core/UI/Components/Controls/TextFile/JJTextFile.cs +++ b/src/MasterData.Core/UI/Components/Controls/TextFile/JJTextFile.cs @@ -9,18 +9,18 @@ using JJMasterData.Commons.Security.Cryptography.Abstractions; using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager.IO; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Routing; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components; -public sealed class JJTextFile(IHttpRequest request, +public sealed class JJTextFile(IHttpContextAccessor request, IComponentFactory componentFactory, IStringLocalizer stringLocalizer, IEncryptionService encryptionService) - : ControlBase(request.Form) + : ControlBase(request) { internal IEncryptionService EncryptionService { get; } = encryptionService; internal IStringLocalizer StringLocalizer { get; } = stringLocalizer; @@ -58,7 +58,7 @@ private RouteContext RouteContext if (field != null) return field; - var factory = new RouteContextFactory(request.QueryString, EncryptionService); + var factory = new RouteContextFactory(request, EncryptionService); field = factory.Create(); return field; @@ -287,4 +287,4 @@ private string GetDownloadLink(string fileName) fileDownloader.FilePath = filePath; return fileDownloader.GetDownloadUrl(); } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/Controls/TextFile/TextFileFactory.cs b/src/MasterData.Core/UI/Components/Controls/TextFile/TextFileFactory.cs index 310b5236a..28b774ede 100644 --- a/src/MasterData.Core/UI/Components/Controls/TextFile/TextFileFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/TextFile/TextFileFactory.cs @@ -1,13 +1,13 @@ using System; using JJMasterData.Commons.Security.Cryptography.Abstractions; using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components; internal sealed class TextFileFactory( - IHttpRequest request, + IHttpContextAccessor request, IComponentFactory componentFactory, IEncryptionService encryptionService, IStringLocalizer stringLocalizer) diff --git a/src/MasterData.Core/UI/Components/Controls/TextRange/JJTextRange.cs b/src/MasterData.Core/UI/Components/Controls/TextRange/JJTextRange.cs index 6eccd5811..d23e3de16 100644 --- a/src/MasterData.Core/UI/Components/Controls/TextRange/JJTextRange.cs +++ b/src/MasterData.Core/UI/Components/Controls/TextRange/JJTextRange.cs @@ -5,13 +5,13 @@ using JJConsulting.Html.Extensions; using JJMasterData.Commons.Data.Entity.Models; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components.TextRange; -public class JJTextRange(IFormValues formValues, +public class JJTextRange(IHttpContextAccessor formValues, IStringLocalizer stringLocalizer) : ControlBase(formValues) { diff --git a/src/MasterData.Core/UI/Components/Controls/TextRange/TextRangeFactory.cs b/src/MasterData.Core/UI/Components/Controls/TextRange/TextRangeFactory.cs index 2ce2592eb..eb57e6ab8 100644 --- a/src/MasterData.Core/UI/Components/Controls/TextRange/TextRangeFactory.cs +++ b/src/MasterData.Core/UI/Components/Controls/TextRange/TextRangeFactory.cs @@ -1,12 +1,12 @@ using JJMasterData.Commons.Util; using JJMasterData.Core.DataDictionary.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components.TextRange; internal sealed class TextRangeFactory( - IHttpContext httpContext, + IHttpContextAccessor httpContext, IStringLocalizer stringLocalizer, TextGroupFactory textGroupFactory ) @@ -14,7 +14,7 @@ TextGroupFactory textGroupFactory { public JJTextRange Create() { - return new JJTextRange(httpContext.Request.Form,stringLocalizer); + return new JJTextRange(httpContext, stringLocalizer); } public JJTextRange Create(FormElement formElement, FormElementField field, ControlContext context) @@ -40,4 +40,4 @@ public JJTextRange Create(FormElement formElement, FormElementField field, Contr return range; } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/DataPanel/DataPanelExpressionScripts.cs b/src/MasterData.Core/UI/Components/DataPanel/DataPanelExpressionScripts.cs index 1e8b7ec1c..79db7741d 100644 --- a/src/MasterData.Core/UI/Components/DataPanel/DataPanelExpressionScripts.cs +++ b/src/MasterData.Core/UI/Components/DataPanel/DataPanelExpressionScripts.cs @@ -90,9 +90,9 @@ private string ExecuteExpression(string exp, List list) { val = $"'{value}'"; } - else if (dataPanel.CurrentContext.Session.HasKey(fieldName)) + else if (dataPanel.CurrentContext.HttpContext!.Session.Keys.Contains(fieldName)) { - val = $"'{dataPanel.CurrentContext.Session[fieldName]}'"; + val = $"'{dataPanel.CurrentContext.HttpContext!.Session.GetString(fieldName)}'"; } //Hidden fields else if (dataPanel.Values.TryGetValue(fieldName, out var panelValue)) diff --git a/src/MasterData.Core/UI/Components/DataPanel/DataPanelFactory.cs b/src/MasterData.Core/UI/Components/DataPanel/DataPanelFactory.cs index 06251943e..74c23c0b4 100644 --- a/src/MasterData.Core/UI/Components/DataPanel/DataPanelFactory.cs +++ b/src/MasterData.Core/UI/Components/DataPanel/DataPanelFactory.cs @@ -5,14 +5,14 @@ using JJMasterData.Core.DataDictionary.Repository.Abstractions; using JJMasterData.Core.DataManager.Expressions; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; namespace JJMasterData.Core.UI.Components; internal sealed class DataPanelFactory(IEntityRepository entityRepository, IDataDictionaryRepository dataDictionaryRepository, - IHttpContext httpContext, + IHttpContextAccessor httpContext, IEncryptionService encryptionService, FieldFormattingService fieldFormattingService, FieldValidationService fieldValidationService, diff --git a/src/MasterData.Core/UI/Components/DataPanel/DataPanelLayout.cs b/src/MasterData.Core/UI/Components/DataPanel/DataPanelLayout.cs index a9abe4e79..75947a56b 100644 --- a/src/MasterData.Core/UI/Components/DataPanel/DataPanelLayout.cs +++ b/src/MasterData.Core/UI/Components/DataPanel/DataPanelLayout.cs @@ -9,7 +9,7 @@ using JJMasterData.Commons.Security.Hashing; using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager.Expressions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; @@ -22,7 +22,7 @@ internal sealed class DataPanelLayout(JJDataPanel dataPanel) private readonly bool _renderPanelGroup = dataPanel.RenderPanelGroup; private readonly FormElement _formElement = dataPanel.FormElement; private readonly DataPanelForm _dataPanelForm = new(dataPanel); - private readonly IFormValues _formValues = dataPanel.CurrentContext.Request.Form; + private readonly IHttpContextAccessor _formValues = dataPanel.CurrentContext; private readonly PageState _pageState = dataPanel.PageState; private readonly ExpressionsService _expressionsService= dataPanel.ExpressionsService; diff --git a/src/MasterData.Core/UI/Components/DataPanel/JJDataPanel.cs b/src/MasterData.Core/UI/Components/DataPanel/JJDataPanel.cs index b6be0f7c2..f6b3bd164 100644 --- a/src/MasterData.Core/UI/Components/DataPanel/JJDataPanel.cs +++ b/src/MasterData.Core/UI/Components/DataPanel/JJDataPanel.cs @@ -15,17 +15,10 @@ using JJMasterData.Core.DataManager.Expressions; using JJMasterData.Core.DataManager.Models; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Extensions; -using JJMasterData.Core.Html; -using JJMasterData.Core.Http.Abstractions; using JJMasterData.Core.Tasks; using JJMasterData.Core.UI.Routing; using Microsoft.Extensions.Localization; -#if NET48 -using JJMasterData.Commons.Configuration; -#endif - namespace JJMasterData.Core.UI.Components; /// @@ -33,7 +26,7 @@ namespace JJMasterData.Core.UI.Components; /// public class JJDataPanel( IEntityRepository entityRepository, - IHttpContext currentContext, + IHttpContextAccessor currentContext, IEncryptionService encryptionService, FieldFormattingService fieldFormattingService, FieldValidationService fieldValidationService, @@ -75,7 +68,7 @@ public PageState PageState get { if (_pageState is null && ContainsPanelState()) - _pageState = (PageState)int.Parse(CurrentContext.Request.Form[$"data-panel-state-{Name}"]); + _pageState = (PageState)int.Parse(CurrentContext.HttpContext!.Request.GetFormValue($"data-panel-state-{Name}")); return _pageState ?? PageState.View; } @@ -86,7 +79,7 @@ public PageState PageState } } - internal bool ContainsPanelState() => CurrentContext.Request.Form[$"data-panel-state-{Name}"] != null; + internal bool ContainsPanelState() => !string.IsNullOrEmpty(CurrentContext.HttpContext!.Request.GetFormValue($"data-panel-state-{Name}")); internal bool HasCustomPanelState { get; private set; } @@ -112,8 +105,11 @@ public Dictionary SecretValues get { if (field == null && - CurrentContext.Request.Form.TryGetValue($"data-panel-secret-values-{Name}", out var secretValues)) + CurrentContext.HttpContext!.Request.HasFormContentType && CurrentContext.HttpContext!.Request.Form.TryGetValue($"data-panel-secret-values-{Name}", out var secretValues)) + { field = EncryptionService.DecryptDictionary(secretValues); + } + return field; } set; @@ -144,7 +140,7 @@ private RouteContext RouteContext if (field != null) return field; - var factory = new RouteContextFactory(CurrentContext.Request.QueryString, EncryptionService); + var factory = new RouteContextFactory(CurrentContext, EncryptionService); field = factory.Create(); return field; @@ -157,15 +153,15 @@ public bool IsAtModal { get { - if (CurrentContext.Request.Form[$"data-panel-is-at-modal-{Name}"] != null) - field = StringManager.ParseBool(CurrentContext.Request.Form[$"data-panel-is-at-modal-{Name}"]); + if (!string.IsNullOrEmpty(CurrentContext.HttpContext!.Request.GetFormValue($"data-panel-is-at-modal-{Name}"))) + field = StringManager.ParseBool(CurrentContext.HttpContext!.Request.GetFormValue($"data-panel-is-at-modal-{Name}")); return field; } set; } - internal IHttpContext CurrentContext { get; } = currentContext; + internal IHttpContextAccessor CurrentContext { get; } = currentContext; internal IEncryptionService EncryptionService { get; } = encryptionService; internal FieldFormattingService FieldFormattingService { get; } = fieldFormattingService; internal ExpressionsService ExpressionsService { get; } = expressionsService; @@ -179,7 +175,7 @@ public bool IsAtModal public JJDataPanel( FormElement formElement, IEntityRepository entityRepository, - IHttpContext currentContext, + IHttpContextAccessor currentContext, IEncryptionService encryptionService, FieldFormattingService fieldFormattingService, FieldValidationService fieldValidationService, @@ -233,7 +229,7 @@ protected override async Task BuildResultAsync() } case ComponentContext.UrlRedirect: { - string encryptedActionMap = CurrentContext.Request.Form[$"current-action-map-{Name}"]; + string encryptedActionMap = CurrentContext.HttpContext!.Request.GetFormValue($"current-action-map-{Name}"); if (string.IsNullOrEmpty(encryptedActionMap)) return null; @@ -249,7 +245,7 @@ protected override async Task BuildResultAsync() private async ValueTask GetFieldResultAsync() where TControl : ControlBase { - var fieldName = CurrentContext.Request.QueryString["fieldName"]; + var fieldName = CurrentContext.HttpContext!.Request.Query["fieldName"]; var formStateData = new FormStateData(await GetFormValuesAsync(), UserValues, PageState); var controlContext = new ControlContext(formStateData, Name); @@ -348,13 +344,6 @@ public async Task> GetFormValuesAsync() return Values; } -#if NETFRAMEWORK - [Obsolete("Please use LoadValuesFromPkAsync")] - public void LoadValuesFromPK(Dictionary pks) - { - Values = AsyncHelper.RunSync(()=>entityRepository.GetFieldsAsync(FormElement, pks)); - } -#endif public async Task LoadValuesFromPkAsync(Dictionary pks) { Values = await entityRepository.GetFieldsAsync(FormElement, pks); @@ -378,14 +367,18 @@ public Task LoadValuesFromPkAsync(params object[] pks) return LoadValuesFromPkAsync(filter); } - - - /// + + public Dictionary ValidateFields(Dictionary values) { return ValidateFields(values, PageState); } + public ValueTask> ValidateFieldsAsync(Dictionary values, bool enableErrorLink = true) + { + return fieldValidationService.ValidateFieldsAsync(FormElement, values, PageState.Delete, enableErrorLink); + } + /// /// Validate form fields and return a list with errors /// @@ -397,7 +390,7 @@ public Dictionary ValidateFields(Dictionary valu { return fieldValidationService.ValidateFields(FormElement, values, pageState, enableErrorLink); } - + internal Task GetUrlRedirectResult(ActionMap actionMap) { return urlRedirectService.GetUrlRedirectResult(this, actionMap); diff --git a/src/MasterData.Core/UI/Components/Exportation/DataExportationFactory.cs b/src/MasterData.Core/UI/Components/Exportation/DataExportationFactory.cs index e38c8f702..db40d87aa 100644 --- a/src/MasterData.Core/UI/Components/Exportation/DataExportationFactory.cs +++ b/src/MasterData.Core/UI/Components/Exportation/DataExportationFactory.cs @@ -7,7 +7,7 @@ using JJMasterData.Core.DataManager; using JJMasterData.Core.DataManager.Exportation; using JJMasterData.Core.DataManager.Expressions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -20,7 +20,7 @@ internal class DataExportationFactory( ExpressionsService expressionsService, IOptionsSnapshot options, IBackgroundTaskManager backgroundTaskManager, - IHttpContext httpContext, + IHttpContextAccessor httpContext, IStringLocalizer stringLocalizer, ILoggerFactory loggerFactory, IComponentFactory componentFactory, diff --git a/src/MasterData.Core/UI/Components/Exportation/JJDataExportation.cs b/src/MasterData.Core/UI/Components/Exportation/JJDataExportation.cs index 093851af8..70c997d65 100644 --- a/src/MasterData.Core/UI/Components/Exportation/JJDataExportation.cs +++ b/src/MasterData.Core/UI/Components/Exportation/JJDataExportation.cs @@ -23,7 +23,7 @@ using JJMasterData.Core.DataManager.Exportation.Configuration; using JJMasterData.Core.DataManager.Expressions; using JJMasterData.Core.Html; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Events.Args; using Microsoft.Extensions.Localization; @@ -76,7 +76,7 @@ internal JJDataExportation( IStringLocalizer stringLocalizer, IComponentFactory componentFactory, ILoggerFactory loggerFactory, - IHttpContext currentContext, + IHttpContextAccessor currentContext, IEncryptionService encryptionService, DataExportationWriterFactory dataExportationWriterFactory) : base(currentContext, masterDataUser, expressionsService, backgroundTaskManager, loggerFactory.CreateLogger(),encryptionService,stringLocalizer) @@ -223,10 +223,6 @@ private DataExportationWriterBase CreateWriter() public async Task ExecuteExportationAsync(DictionaryListResult result) { var exporter = CreateWriter(); - -#if NETFRAMEWORK - exporter.HttpContext = System.Web.HttpContext.Current; -#endif exporter.DataSource = result.Data; exporter.TotalOfRecords = result.TotalOfRecords; @@ -244,9 +240,6 @@ internal void ExportFileInBackground(Dictionary filter, OrderByD exporter.CurrentFilter = filter; exporter.CurrentOrder = orderByData; -#if NETFRAMEWORK - exporter.HttpContext = System.Web.HttpContext.Current; -#endif BackgroundTaskManager.Run(ProcessKey, exporter); } @@ -274,4 +267,4 @@ internal DataExportationProgressDto GetCurrentProgress() return dto; } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/FormView/FormViewFactory.cs b/src/MasterData.Core/UI/Components/FormView/FormViewFactory.cs index cb7ffe007..086858d04 100644 --- a/src/MasterData.Core/UI/Components/FormView/FormViewFactory.cs +++ b/src/MasterData.Core/UI/Components/FormView/FormViewFactory.cs @@ -11,7 +11,7 @@ using JJMasterData.Core.DataManager.Services; using JJMasterData.Core.Events.Abstractions; using JJMasterData.Core.Events.Args; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.Tasks; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; @@ -20,7 +20,7 @@ namespace JJMasterData.Core.UI.Components; internal sealed class FormViewFactory( - IHttpContext currentContext, + IHttpContextAccessor currentContext, IMasterDataUser masterDataUser, IEntityRepository entityRepository, IDataDictionaryRepository dataDictionaryRepository, diff --git a/src/MasterData.Core/UI/Components/FormView/FormViewRelationshipLayout.cs b/src/MasterData.Core/UI/Components/FormView/FormViewRelationshipLayout.cs index 49bf29e43..d6332324a 100644 --- a/src/MasterData.Core/UI/Components/FormView/FormViewRelationshipLayout.cs +++ b/src/MasterData.Core/UI/Components/FormView/FormViewRelationshipLayout.cs @@ -57,7 +57,7 @@ public async Task GetRelationshipsResult() private async Task GetTabRelationshipsResult() { - var tabNav = new JJMasterDataTabNav(parentFormView.FormValues) + var tabNav = new JJMasterDataTabNav(parentFormView.CurrentContext) { Name = $"relationships-tab-nav-{parentFormView.DataPanel.Name}" }; @@ -101,7 +101,7 @@ private string GetExpressionValue(string? expression) switch (relationship.Panel.Layout) { case PanelLayout.Collapse: - var collapse = new JJMasterDataCollapsePanel(parentFormView.CurrentContext.Request.Form) + var collapse = new JJMasterDataCollapsePanel(parentFormView.CurrentContext) { Name = $"{relationship.ElementRelationship?.ChildElement ?? parentFormView.Name}-collapse-panel", Title = GetExpressionValue(relationship.Panel.Title), @@ -260,4 +260,4 @@ private async Task ConfigureOneToOneFormView(JJFormView childFormView, } private bool IsRelationshipDisabled(FormElementRelationship relationship) => !parentFormView.ExpressionsService.GetBoolValue(relationship.Panel.EnableExpression, GetFormStateData()); -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/FormView/JJFormView.cs b/src/MasterData.Core/UI/Components/FormView/JJFormView.cs index d55d72f44..91b07402d 100644 --- a/src/MasterData.Core/UI/Components/FormView/JJFormView.cs +++ b/src/MasterData.Core/UI/Components/FormView/JJFormView.cs @@ -30,8 +30,6 @@ using JJMasterData.Core.DataManager.Services; using JJMasterData.Core.Events.Abstractions; using JJMasterData.Core.Events.Args; -using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; using JJMasterData.Core.Logging; using JJMasterData.Core.Tasks; using JJMasterData.Core.UI.Events.Args; @@ -40,10 +38,6 @@ using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; -#if NET48 -using JJMasterData.Commons.Configuration; -#endif - namespace JJMasterData.Core.UI.Components; /// @@ -312,12 +306,14 @@ public PageState PageState { get { - if (_pageState is null && - CurrentContext.Request.Form.TryGetValue($"form-view-page-state-{Name}", out var formPageState)) - _pageState = (PageState)int.Parse(formPageState); + if (_pageState is null && CurrentContext.HttpContext!.Request.HasFormContentType && + CurrentContext.HttpContext!.Request.Form.TryGetValue($"form-view-page-state-{Name}", out var formPageState)) + { + _pageState = (PageState)int.Parse(formPageState.ToString()); + } if (_pageState is null && - CurrentContext.Request.QueryString.TryGetValue($"{FormElement.Name}_PageState", + CurrentContext.HttpContext!.Request.Query.TryGetValue($"{FormElement.Name}_PageState", out var queryStringPageState)) { if (Enum.TryParse(queryStringPageState, ignoreCase: true, out PageState pageState)) @@ -335,8 +331,8 @@ internal ActionMap? CurrentActionMap { if (_currentActionMap != null || _isCustomCurrentAction) return _currentActionMap; - - var encryptedActionMap = CurrentContext.Request.Form[$"current-action-map-{Name}"]; + + var encryptedActionMap = CurrentContext.HttpContext!.Request.GetFormValue($"current-action-map-{Name}"); if (string.IsNullOrEmpty(encryptedActionMap)) return null; @@ -373,7 +369,7 @@ public RouteContext RouteContext if (field != null) return field; - var factory = new RouteContextFactory(CurrentContext.Request.QueryString, EncryptionService); + var factory = new RouteContextFactory(CurrentContext, EncryptionService); field = factory.Create(); return field; @@ -397,9 +393,10 @@ internal RelationshipType RelationshipType get { if (_relationshipType is null && - CurrentContext.Request.Form.TryGetValue($"form-view-relationship-type-{Name}", + CurrentContext.HttpContext!.Request.HasFormContentType && + CurrentContext.HttpContext!.Request.Form.TryGetValue($"form-view-relationship-type-{Name}", out var relationshipType)) - _relationshipType = (RelationshipType)int.Parse(relationshipType); + _relationshipType = (RelationshipType)int.Parse(relationshipType.ToString()); return _relationshipType ?? RelationshipType.Parent; } @@ -409,8 +406,8 @@ internal RelationshipType RelationshipType internal bool IsInsertAtGridView => PageState is PageState.List && FormElement.Options.GridToolbarActions.InsertAction.ShowOpenedAtGrid; - internal IHttpContext CurrentContext { get; } - internal IFormValues FormValues => CurrentContext.Request.Form; + internal IHttpContextAccessor CurrentContext { get; } + internal IFormCollection FormValues => CurrentContext.HttpContext!.Request.Form; internal IEncryptionService EncryptionService { get; } internal IComponentFactory ComponentFactory { get; } internal IEntityRepository EntityRepository { get; } @@ -424,7 +421,7 @@ internal RelationshipType RelationshipType public JJFormView( FormElement formElement, - IHttpContext currentContext, + IHttpContextAccessor currentContext, IMasterDataUser masterDataUser, IEntityRepository entityRepository, IDataDictionaryRepository dataDictionaryRepository, @@ -555,9 +552,9 @@ internal async Task GetReloadPanelResultAsync() else values = await GetFormValuesAsync(); - var fieldName = CurrentContext.Request.QueryString["fieldName"]; + var fieldName = CurrentContext.HttpContext!.Request.Query["fieldName"]; - var field = FormElement.Fields[fieldName]; + var field = FormElement.Fields[fieldName!]; var scripts = new HtmlBuilder(); @@ -956,7 +953,7 @@ private void SetEditMode() private bool ContainsHiddenPkValues() { - return CurrentContext.Request.Form[$"data-panel-pk-values-{FormElement.Name}"] is not null; + return !string.IsNullOrEmpty(CurrentContext.HttpContext!.Request.GetFormValue($"data-panel-pk-values-{FormElement.Name}")); } private async Task GetUpdateResult() @@ -1022,7 +1019,7 @@ private async Task GetDefaultResult(Dictionary var containsGridAction = false; if (GridView.TableActions.Any(a => a is InsertSelectionAction)) { - containsGridAction = !string.IsNullOrEmpty(CurrentContext.Request.Form[$"grid-view-action-map-{Name}"]); + containsGridAction = !string.IsNullOrEmpty(CurrentContext.HttpContext!.Request.GetFormValue($"grid-view-action-map-{Name}")); } if (PageState is PageState.List || containsGridAction) @@ -1047,7 +1044,7 @@ private async Task GetDefaultResult(Dictionary private bool IsReloadFields() { - return CurrentContext.Request.Form.ContainsFormValues() && + return CurrentContext.HttpContext!.Request.HasFormContentType && DataPanel.PageState is not PageState.View && CurrentAction is not PluginAction; } @@ -1642,7 +1639,7 @@ public async Task> InsertFormValuesAsync( Dictionary values, bool validateFields = true) { - var dataContext = new DataContext(CurrentContext.Request, DataContextSource.Form, UserId); + var dataContext = new DataContext(CurrentContext.HttpContext!.Request, DataContextSource.Form, UserId); var result = await _formService.InsertAsync(FormElement, values, dataContext, validateFields); UrlRedirect = result.UrlRedirect; return result.Errors; @@ -1655,7 +1652,7 @@ public async Task> InsertFormValuesAsync( public async Task> UpdateFormValuesAsync(Dictionary values) { var result = await _formService.UpdateAsync(FormElement, values, - new DataContext(CurrentContext.Request, DataContextSource.Form, UserId)); + new DataContext(CurrentContext.HttpContext!.Request, DataContextSource.Form, UserId)); UrlRedirect = result.UrlRedirect; return result.Errors; } @@ -1666,7 +1663,7 @@ public async Task> DeleteFormValuesAsync(Dictionary ValidateFields(Dictionary values, PageState pageState) { DataPanel.Values = values; var errors = DataPanel.ValidateFields(values, pageState); return errors; } + + public async ValueTask> ValidateFieldsAsync(Dictionary values) + { + DataPanel.Values = values; + var errors = await DataPanel.ValidateFieldsAsync(values); + return errors; + } + private void ClearTempFiles() { @@ -1696,8 +1701,8 @@ private void ClearTempFiles() foreach (var field in uploadFields) { string sessionName = $"{field.Name}-upload-view_jjfiles"; - if (CurrentContext.Session.HasKey(sessionName)) - CurrentContext.Session[sessionName] = null; + if (CurrentContext.HttpContext!.Session.Keys.Contains(sessionName)) + CurrentContext.HttpContext!.Session.Remove(sessionName); } } @@ -1745,7 +1750,7 @@ await _formValuesService.GetFormValuesWithMergedValuesAsync(FormElement, initial public Dictionary GetRelationValuesFromForm() { - var encryptedRelationValues = CurrentContext.Request.Form[$"form-view-relation-values-{FormElement.Name}"]; + var encryptedRelationValues = CurrentContext.HttpContext!.Request.GetFormValue($"form-view-relation-values-{FormElement.Name}"); if (string.IsNullOrEmpty(encryptedRelationValues)) return new Dictionary(); @@ -1814,4 +1819,4 @@ public void SetUserValues(string key, string value) public static implicit operator JJGridView(JJFormView formView) => formView.GridView; public static implicit operator JJDataPanel(JJFormView formView) => formView.DataPanel; -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/GridView/GridFilter.cs b/src/MasterData.Core/UI/Components/GridView/GridFilter.cs index ef77cc54d..53b11a940 100644 --- a/src/MasterData.Core/UI/Components/GridView/GridFilter.cs +++ b/src/MasterData.Core/UI/Components/GridView/GridFilter.cs @@ -18,7 +18,7 @@ using JJMasterData.Core.DataManager.Models; using JJMasterData.Core.DataManager.Services; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Events.Args; using Microsoft.Extensions.Localization; @@ -33,7 +33,7 @@ internal sealed class GridFilter(JJGridView gridView) internal const string FilterFieldPrefix = "filter_"; - private readonly IHttpContext _currentContext = gridView.CurrentContext; + private readonly IHttpContextAccessor _currentContext = gridView.CurrentContext; private readonly IStringLocalizer _stringLocalizer = gridView.StringLocalizer; private Dictionary _currentFilter; @@ -72,7 +72,7 @@ public async ValueTask> GetCurrentFilterAsync() DataHelper.CopyIntoDictionary(_currentFilter, _userFilters); //Action is captured here, because the user can call GetCurrentFilterAsync before GetResultAsync() - var currentFilterAction = _currentContext.Request.Form[$"grid-view-filter-action-{gridView.Name}"]; + var currentFilterAction = _currentContext.HttpContext!.Request.GetFormValue($"grid-view-filter-action-{gridView.Name}"); switch (currentFilterAction) { case FilterActionName: @@ -86,7 +86,7 @@ public async ValueTask> GetCurrentFilterAsync() return _currentFilter; } - var sessionFilter = _currentContext.Session.GetSessionValue>( + var sessionFilter = _currentContext.HttpContext!.Session.GetObject>( $"jjcurrentfilter_{gridView.Name}"); if (sessionFilter != null && gridView.MaintainValuesOnLoad) @@ -95,7 +95,7 @@ public async ValueTask> GetCurrentFilterAsync() return _currentFilter; } - if (sessionFilter != null && (_currentContext.Request.Form.ContainsFormValues() || IsDynamicPost())) + if (sessionFilter != null && (_currentContext.HttpContext!.Request.HasFormContentType || IsDynamicPost())) { DataHelper.CopyIntoDictionary(_currentFilter, sessionFilter); return _currentFilter; @@ -114,7 +114,7 @@ public void SetCurrentFilter(string name, object value) private bool IsDynamicPost() { - return !string.IsNullOrEmpty(_currentContext.Request.QueryString["routeContext"]); + return !string.IsNullOrEmpty(_currentContext.HttpContext!.Request.Query["routeContext"]); } public async ValueTask ApplyCurrentFilter(Dictionary values) @@ -150,7 +150,7 @@ await gridView.FieldValuesService.MergeWithDefaultValuesAsync(gridView.FormEleme DataHelper.CopyIntoDictionary(values, defaultValues); DataHelper.CopyIntoDictionary(_currentFilter, values); - _currentContext.Session.SetSessionValue($"jjcurrentfilter_{gridView.Name}", _currentFilter); + _currentContext.HttpContext!.Session.SetObject($"jjcurrentfilter_{gridView.Name}", _currentFilter); } private async ValueTask GetDefaultFilter() @@ -233,7 +233,7 @@ private async ValueTask GetDefaultFilter() filterIcon.CssClass += " d-none"; } - var panel = new JJMasterDataCollapsePanel(_currentContext.Request.Form, $"filter-collapse-{gridView.Name}") + var panel = new JJMasterDataCollapsePanel(_currentContext, $"filter-collapse-{gridView.Name}") { Content = html, TitleIcon = filterIcon, @@ -276,7 +276,7 @@ private JJMasterDataCollapsePanel GetFilterScreenCollapse() body.WithCssClass("col-sm-12"); body.Append(GetHtmlToolBarSearch(isToolBar: false)); - var panel = new JJMasterDataCollapsePanel(_currentContext.Request.Form) + var panel = new JJMasterDataCollapsePanel(_currentContext) { Name = $"filter-collapse-{gridView.Name}", Content = body, @@ -291,7 +291,7 @@ public HtmlBuilder GetHtmlToolBarSearch(bool isToolBar = true) { var searchId = $"jjsearch_{gridView.Name}"; - var textBox = new JJTextBox(gridView.CurrentContext.Request.Form) + var textBox = new JJTextBox(gridView.CurrentContext) { Attributes = { @@ -301,7 +301,7 @@ public HtmlBuilder GetHtmlToolBarSearch(bool isToolBar = true) PlaceHolder = _stringLocalizer["Filter"], CssClass = "jj-icon-search", Name = searchId, - Text = _currentContext.Request.Form[searchId] + Text = _currentContext.HttpContext!.Request.GetFormValue(searchId) }; var html = new HtmlBuilder(); @@ -356,7 +356,7 @@ private async Task> GetFilterFormValues() //Relation Filters var values = new Dictionary(StringComparer.InvariantCultureIgnoreCase); - var filters = _currentContext.Request.Form[$"grid-view-filters-{gridView.Name}"]; + var filters = _currentContext.HttpContext!.Request.GetFormValue($"grid-view-filters-{gridView.Name}"); if (!string.IsNullOrEmpty(filters)) { var filterJson = gridView.EncryptionService.DecryptStringWithUrlUnescape(filters); @@ -371,14 +371,14 @@ private async Task> GetFilterFormValues() if (field.Filter.Type == FilterMode.Range) { - var fromStringValue = _currentContext.Request.Form[$"{name}_from"]; + var fromStringValue = _currentContext.HttpContext!.Request.GetFormValue($"{name}_from"); if (!string.IsNullOrEmpty(fromStringValue)) { var fromValue = ParseFilterValue(field, fromStringValue); values.Add($"{field.Name}_from", fromValue); } - var toStringValue = _currentContext.Request.Form[$"{name}_to"]; + var toStringValue = _currentContext.HttpContext!.Request.GetFormValue($"{name}_to"); if (string.IsNullOrEmpty(toStringValue)) continue; @@ -388,7 +388,7 @@ private async Task> GetFilterFormValues() } else { - object value = _currentContext.Request.Form[name]; + object value = _currentContext.HttpContext!.Request.GetFormValue(name); switch (field.Component) { @@ -441,8 +441,8 @@ private Dictionary GetFilterQueryString() if (filter.Filter.Type == FilterMode.Range) { - var fromString = _currentContext.Request.QueryString[$"{name}_from"]; - if (values == null && fromString != null) + var fromString = _currentContext.HttpContext!.Request.Query[$"{name}_from"]; + if (values == null && !string.IsNullOrEmpty(fromString.ToString())) values = new Dictionary(); if (!string.IsNullOrEmpty(fromString)) @@ -450,7 +450,7 @@ private Dictionary GetFilterQueryString() values.Add($"{filter.Name}_from", fromString); } - var toString = _currentContext.Request.QueryString[$"{name}_to"]; + var toString = _currentContext.HttpContext!.Request.Query[$"{name}_to"]; if (!string.IsNullOrEmpty(toString)) { values?.Add($"{filter.Name}_to", toString); @@ -458,7 +458,7 @@ private Dictionary GetFilterQueryString() } else { - var queryStringValue = _currentContext.Request.QueryString[name]; + var queryStringValue = _currentContext.HttpContext!.Request.Query[name]; if (string.IsNullOrEmpty(queryStringValue)) continue; @@ -487,4 +487,4 @@ public async ValueTask HasFilter() return false; } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/GridView/GridSettingsForm.cs b/src/MasterData.Core/UI/Components/GridView/GridSettingsForm.cs index 631ed3cb9..baf7a812d 100644 --- a/src/MasterData.Core/UI/Components/GridView/GridSettingsForm.cs +++ b/src/MasterData.Core/UI/Components/GridView/GridSettingsForm.cs @@ -1,7 +1,7 @@ using JJConsulting.Html; using JJConsulting.Html.Extensions; using JJMasterData.Commons.Util; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; @@ -12,7 +12,7 @@ namespace JJMasterData.Core.UI.Components; /// internal sealed class GridSettingsForm( string name, - IHttpContext currentContext, + IHttpContextAccessor currentContext, IStringLocalizer stringLocalizer) { private readonly string _tableTotalPerPage = $"{name}-table-regperpage"; @@ -26,13 +26,14 @@ internal sealed class GridSettingsForm( public GridSettings LoadFromForm() { var gridSettings = new GridSettings(); - var tableRegPerPage = currentContext.Request[_tableTotalPerPage]; - var tableTotalPageButtons = currentContext.Request[_tableTotalPaginationButtons]; - var tableBorder = currentContext.Request[_tableBorder]; - var tableRowsStriped = currentContext.Request[_tableRowsStriped]; - var tableRowHover = currentContext.Request[_tableRowHover]; - var tableIsHeaderFixed = currentContext.Request[_tableIsHeaderFixed]; - var tableIsCompact = currentContext.Request[_tableIsCompact]; + var form = currentContext.HttpContext!.Request.GetFormValue; + var tableRegPerPage = form(_tableTotalPerPage); + var tableTotalPageButtons = form(_tableTotalPaginationButtons); + var tableBorder = form(_tableBorder); + var tableRowsStriped = form(_tableRowsStriped); + var tableRowHover = form(_tableRowHover); + var tableIsHeaderFixed = form(_tableIsHeaderFixed); + var tableIsCompact = form(_tableIsCompact); if (int.TryParse(tableRegPerPage, out var totalPerPage)) gridSettings.RecordsPerPage = totalPerPage; @@ -49,7 +50,7 @@ public GridSettings LoadFromForm() } internal bool HasFormValues() => - currentContext.Request[_tableTotalPerPage] != null; + currentContext.HttpContext!.Request.HasFormContentType && currentContext.HttpContext!.Request.Form.TryGetValue(_tableTotalPerPage, out _); internal HtmlBuilder GetHtmlBuilder(bool isPaginationEnabled, GridSettings gridSettings) { @@ -178,7 +179,7 @@ private HtmlBuilder GetPaginationSelect(GridSettings gridSettings) private HtmlBuilder GetDataToggleElement(string name, string label, bool isChecked) { - var checkbox = new JJCheckBox(currentContext.Request.Form, stringLocalizer) + var checkbox = new JJCheckBox(currentContext, stringLocalizer) { Name = name, IsChecked = isChecked, @@ -188,4 +189,4 @@ private HtmlBuilder GetDataToggleElement(string name, string label, bool isCheck return checkbox.GetHtmlBuilder(); } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/GridView/GridTableBody.cs b/src/MasterData.Core/UI/Components/GridView/GridTableBody.cs index fdbc5c70f..9fa883887 100644 --- a/src/MasterData.Core/UI/Components/GridView/GridTableBody.cs +++ b/src/MasterData.Core/UI/Components/GridView/GridTableBody.cs @@ -505,7 +505,7 @@ private async ValueTask GetMultiSelectCheckbox(Dictionary GetOnClickScript(FormStateData formStateData, Ba return gridView.FormValuesService.GetFormValuesWithMergedValuesAsync(gridView.FormElement, new FormStateData(row, gridView.UserValues, PageState.List), autoReloadFormFields, prefixName); } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/GridView/GridViewFactory.cs b/src/MasterData.Core/UI/Components/GridView/GridViewFactory.cs index 90d76dc9b..5af3221d4 100644 --- a/src/MasterData.Core/UI/Components/GridView/GridViewFactory.cs +++ b/src/MasterData.Core/UI/Components/GridView/GridViewFactory.cs @@ -8,14 +8,14 @@ using JJMasterData.Core.DataDictionary.Repository.Abstractions; using JJMasterData.Core.DataManager.Expressions; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Events.Abstractions; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; namespace JJMasterData.Core.UI.Components; -internal sealed class GridViewFactory(IHttpContext currentContext, +internal sealed class GridViewFactory(IHttpContextAccessor currentContext, IEntityRepository entityRepository, IDataDictionaryRepository dataDictionaryRepository, IEncryptionService encryptionService, @@ -114,7 +114,7 @@ internal void SetGridUiOptions(JJGridView grid, GridUI gridOptions) { GridSettings settings = null; if (grid.MaintainValuesOnLoad) - settings = currentContext.Session.GetSessionValue($"jjcurrentui_{grid.FormElement.Name}"); + settings = currentContext.HttpContext!.Session.GetObject($"jjcurrentui_{grid.FormElement.Name}"); if (settings == null) { @@ -134,4 +134,4 @@ internal void SetGridUiOptions(JJGridView grid, GridUI gridOptions) grid.ShowHeaderWhenEmpty = gridOptions.ShowHeaderWhenEmpty; grid.EmptyDataText = gridOptions.EmptyDataText; } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/GridView/JJGridView.cs b/src/MasterData.Core/UI/Components/GridView/JJGridView.cs index c45c14aab..b9db0123c 100644 --- a/src/MasterData.Core/UI/Components/GridView/JJGridView.cs +++ b/src/MasterData.Core/UI/Components/GridView/JJGridView.cs @@ -21,7 +21,6 @@ using JJMasterData.Commons.Security.Cryptography.Abstractions; using JJMasterData.Commons.Tasks; using JJMasterData.Commons.Util; -using JJMasterData.Core.DataDictionary; using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataDictionary.Models.Actions; using JJMasterData.Core.DataManager; @@ -29,9 +28,6 @@ using JJMasterData.Core.DataManager.Expressions; using JJMasterData.Core.DataManager.Models; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Extensions; -using JJMasterData.Core.Html; -using JJMasterData.Core.Http.Abstractions; using JJMasterData.Core.Logging; using JJMasterData.Core.UI.Events; using JJMasterData.Core.UI.Events.Args; @@ -239,11 +235,11 @@ public OrderByData CurrentOrder if (_currentOrder != null) return _currentOrder; - if (!CurrentContext.Request.Form.ContainsFormValues()) + if (!CurrentContext.HttpContext!.Request.HasFormContentType) { if (MaintainValuesOnLoad) { - var tableOrder = CurrentContext.Session[$"jj-grid-view-order-{Name}"]; + var tableOrder = CurrentContext.HttpContext!.Session.GetString($"jj-grid-view-order-{Name}"); if (tableOrder != null) { _currentOrder = OrderByData.FromString(tableOrder); @@ -252,10 +248,11 @@ public OrderByData CurrentOrder } else { - _currentOrder = OrderByData.FromString(CurrentContext.Request[$"grid-view-order-{Name}"]); + var order = CurrentContext.HttpContext!.Request.GetFormValue($"grid-view-order-{Name}"); + _currentOrder = OrderByData.FromString(order); if (_currentOrder == null) { - var tableOrder = CurrentContext.Session[$"jj-grid-view-order-{Name}"]; + var tableOrder = CurrentContext.HttpContext!.Session.GetString($"jj-grid-view-order-{Name}"); if (tableOrder != null) { _currentOrder = OrderByData.FromString(tableOrder); @@ -272,7 +269,7 @@ public OrderByData CurrentOrder } set { - CurrentContext.Session[$"jj-grid-view-order-{Name}"] = value.ToQueryParameter(); + CurrentContext.HttpContext!.Session.SetString($"jj-grid-view-order-{Name}", value.ToQueryParameter()); _currentOrder = value; } } @@ -286,11 +283,11 @@ public int CurrentPage return _currentPage; } - if (CurrentContext.Request.Form.ContainsFormValues()) + if (CurrentContext.HttpContext!.Request.HasFormContentType) { var currentPage = 1; var tablePageId = $"grid-view-page-{Name}"; - if (CurrentContext.Request.Form.TryGetValue(tablePageId, out var pageString)) + if (CurrentContext.HttpContext!.Request.Form.TryGetValue(tablePageId, out var pageString)) { if (int.TryParse(pageString, out var page)) currentPage = page; @@ -318,7 +315,7 @@ public int CurrentPage set { if (MaintainValuesOnLoad && PaginationType is GridPaginationType.Buttons) - CurrentContext.Session[$"jjcurrentpage_{Name}"] = value.ToString(); + CurrentContext.HttpContext!.Session.SetString($"jjcurrentpage_{Name}", value.ToString()); _currentPage = value; } @@ -326,7 +323,7 @@ public int CurrentPage private int GetPageFromPreferences() { - var tablePage = CurrentContext.Session[$"jjcurrentpage_{Name}"]; + var tablePage = CurrentContext.HttpContext!.Session.GetString($"jjcurrentpage_{Name}"); if (tablePage != null) { if (int.TryParse(tablePage, out var page)) @@ -369,7 +366,7 @@ public GridSettings CurrentSettings } if (MaintainValuesOnLoad) - CurrentSettings = CurrentContext.Session.GetSessionValue($"jjcurrentui_{FormElement.Name}"); + CurrentSettings = CurrentContext.HttpContext!.Session.GetObject($"jjcurrentui_{FormElement.Name}"); if (_currentSettings == null) CurrentSettings = GridSettingsForm.LoadFromForm(); @@ -379,7 +376,7 @@ public GridSettings CurrentSettings set { if (MaintainValuesOnLoad) - CurrentContext.Session.SetSessionValue($"jjcurrentui_{FormElement.Name}", value); + CurrentContext.HttpContext!.Session.SetObject($"jjcurrentui_{FormElement.Name}", value); _currentSettings = value; } @@ -425,9 +422,9 @@ public ExportOptions CurrentExportConfig return _currentExportConfig; _currentExportConfig = new ExportOptions(); - if (CurrentContext.Request.Form.ContainsFormValues()) + if (CurrentContext.HttpContext!.Request.HasFormContentType) { - _currentExportConfig = ExportOptions.LoadFromForm(CurrentContext.Request.Form, Name); + _currentExportConfig = ExportOptions.LoadFromForm(CurrentContext, Name); } return _currentExportConfig; @@ -535,7 +532,7 @@ private ActionMap? CurrentActionMap { if (_currentActionMap != null || _isCustomCurrentActionMap) return _currentActionMap; - var encryptedActionMap = CurrentContext.Request.Form[$"grid-view-action-map-{Name}"]; + var encryptedActionMap = CurrentContext.HttpContext!.Request.GetFormValue($"grid-view-action-map-{Name}"); if (string.IsNullOrEmpty(encryptedActionMap)) return null; @@ -551,7 +548,7 @@ private ActionMap? CurrentActionMap private string? SelectedRowsId { - get => _selectedRowsId ??= CurrentContext.Request.Form[$"grid-view-selected-rows-{Name}"]; + get => _selectedRowsId ??= CurrentContext.HttpContext!.Request.GetFormValue($"grid-view-selected-rows-{Name}"); set => _selectedRowsId = value ?? ""; } @@ -562,7 +559,7 @@ protected RouteContext RouteContext if (_routeContext != null) return _routeContext; - var factory = new RouteContextFactory(CurrentContext.Request.QueryString, EncryptionService); + var factory = new RouteContextFactory(CurrentContext, EncryptionService); _routeContext = factory.Create(); return _routeContext; @@ -586,7 +583,7 @@ protected RouteContext RouteContext internal GridScripts Scripts => _gridScripts ??= new GridScripts(this); - internal IHttpContext CurrentContext { get; } + internal IHttpContextAccessor CurrentContext { get; } internal DataItemService DataItemService { get; } internal IEncryptionService EncryptionService { get; } @@ -613,7 +610,7 @@ private GridToolbar Toolbar internal JJGridView( FormElement formElement, - IHttpContext currentContext, + IHttpContextAccessor currentContext, IEntityRepository entityRepository, IEncryptionService encryptionService, DataItemService dataItemService, @@ -675,7 +672,7 @@ protected override async Task BuildResultAsync() if (ComponentContext is ComponentContext.GridViewRow) { - var rowIndex = int.Parse(CurrentContext.Request.QueryString["gridViewRowIndex"]); + var rowIndex = int.Parse(CurrentContext.HttpContext!.Request.Query["gridViewRowIndex"].ToString()); await SetDataSource(); @@ -712,8 +709,8 @@ protected override async Task BuildResultAsync() if (ComponentContext is ComponentContext.SearchBoxFilter) { - var fieldName = CurrentContext.Request.QueryString["fieldName"]; - var field = FormElement.Fields[fieldName]; + var fieldName = CurrentContext.HttpContext!.Request.Query["fieldName"]; + var field = FormElement.Fields[fieldName!]; var formStateData = new FormStateData(await GetCurrentFilterAsync(), UserValues, PageState.Filter); var jjSearchBox = ComponentFactory.Controls.Create(FormElement,field, formStateData, Name) as JJSearchBox; jjSearchBox!.Name = GridFilter.FilterFieldPrefix + jjSearchBox.Name; @@ -1107,12 +1104,12 @@ internal string GetFieldName(string fieldName, Dictionary row) public Dictionary GetSelectedRowId() { var values = new Dictionary(); - string currentRow = CurrentContext.Request[$"grid-view-row-{Name}"]; + var currentRowValue = CurrentContext.HttpContext!.Request.GetFormValue($"grid-view-row-{Name}"); - if (string.IsNullOrEmpty(currentRow)) + if (string.IsNullOrEmpty(currentRowValue)) return values; - var decriptId = EncryptionService.DecryptStringWithUrlUnescape(currentRow); + var decriptId = EncryptionService.DecryptStringWithUrlUnescape(currentRowValue); var @params = HttpUtility.ParseQueryString(decriptId); foreach (string key in @params) @@ -1125,7 +1122,7 @@ public Dictionary GetSelectedRowId() private async Task GetExportationResult() { - string expressionType = CurrentContext.Request.QueryString["dataExportationOperation"]; + string expressionType = CurrentContext.HttpContext!.Request.Query["dataExportationOperation"].ToString(); switch (expressionType) { case "showOptions": @@ -1537,7 +1534,10 @@ private static void ValidateAction(BasicAction action) public bool IsExportPost() { - return "startProcess".Equals(CurrentContext.Request["dataExportationOperation"]) && Name.Equals(CurrentContext.Request["gridViewName"]); + var request = CurrentContext.HttpContext!.Request.GetValue; + var operation = request("dataExportationOperation"); + var gridViewName = request("gridViewName"); + return "startProcess".Equals(operation) && Name.Equals(gridViewName); } public void SetUserValues(string key, string value) @@ -1558,4 +1558,4 @@ public ActionContext GetActionContext(BasicAction basicAction, FormStateData for ParentComponentName = Name }; } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/IO/FileDownloader/FileDownloaderFactory.cs b/src/MasterData.Core/UI/Components/IO/FileDownloader/FileDownloaderFactory.cs index 369165ecf..5150259f9 100644 --- a/src/MasterData.Core/UI/Components/IO/FileDownloader/FileDownloaderFactory.cs +++ b/src/MasterData.Core/UI/Components/IO/FileDownloader/FileDownloaderFactory.cs @@ -1,11 +1,11 @@ using JJMasterData.Commons.Security.Cryptography.Abstractions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; namespace JJMasterData.Core.UI.Components; -public sealed class FileDownloaderFactory(IHttpContext httpContext, +public sealed class FileDownloaderFactory(IHttpContextAccessor httpContext, IEncryptionService encryptionService, IStringLocalizer stringLocalizer, ILoggerFactory loggerFactory) diff --git a/src/MasterData.Core/UI/Components/IO/FileDownloader/JJFileDownloader.cs b/src/MasterData.Core/UI/Components/IO/FileDownloader/JJFileDownloader.cs index ef7347a29..54de4751d 100644 --- a/src/MasterData.Core/UI/Components/IO/FileDownloader/JJFileDownloader.cs +++ b/src/MasterData.Core/UI/Components/IO/FileDownloader/JJFileDownloader.cs @@ -11,7 +11,7 @@ using JJMasterData.Commons.Security.Cryptography.Abstractions; using JJMasterData.Commons.Util; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Routing; using Microsoft.Extensions.Localization; @@ -20,7 +20,7 @@ namespace JJMasterData.Core.UI.Components; public class JJFileDownloader( - IHttpContext currentContext, + IHttpContextAccessor currentContext, IEncryptionService encryptionService, IStringLocalizer stringLocalizer, ILogger logger) @@ -32,7 +32,7 @@ public class JJFileDownloader( public string FilePath { get; set; } public bool IsExternalLink { get; set; } - internal IHttpContext CurrentContext { get; } = currentContext; + internal IHttpContextAccessor CurrentContext { get; } = currentContext; internal IStringLocalizer StringLocalizer { get; } = stringLocalizer; internal ILogger Logger { get; } = logger; internal IEncryptionService EncryptionService { get; } = encryptionService; @@ -57,7 +57,7 @@ private HtmlBuilder GetDownloadHtmlElement() string fileName = file.Name; string size = Format.FormatFileSize(file.Length); string lastWriteTime = file.LastWriteTime.ToDateTimeString(); - string url = CurrentContext.Request.AbsoluteUri.Replace(DirectDownloadParameter, DownloadParameter); + string url = CurrentContext.HttpContext!.Request.GetAbsoluteUri().Replace(DirectDownloadParameter, DownloadParameter); var htmlTitle = new JJTitle { @@ -125,10 +125,10 @@ internal FileComponentResult GetDirectDownloadResult() public FileComponentResult GetDownloadResult() { bool isExternalLink = false; - string criptFilePath = CurrentContext.Request.QueryString[DownloadParameter]; + string criptFilePath = CurrentContext.HttpContext!.Request.Query[DownloadParameter]; if (criptFilePath == null) { - criptFilePath = CurrentContext.Request.QueryString[DirectDownloadParameter]; + criptFilePath = CurrentContext.HttpContext!.Request.Query[DirectDownloadParameter]; isExternalLink = true; } @@ -145,7 +145,7 @@ public FileComponentResult GetDownloadResult() public string GetDownloadUrl() { - var url = CurrentContext.Request.AbsoluteUri; + var url = CurrentContext.HttpContext!.Request.GetAbsoluteUri(); var encryptedFilePath = EncryptionService.EncryptStringWithUrlEscape(FilePath); var uriBuilder = new UriBuilder(url); diff --git a/src/MasterData.Core/UI/Components/IO/UploadArea/JJUploadArea.cs b/src/MasterData.Core/UI/Components/IO/UploadArea/JJUploadArea.cs index 525c9b98f..b51dcb522 100644 --- a/src/MasterData.Core/UI/Components/IO/UploadArea/JJUploadArea.cs +++ b/src/MasterData.Core/UI/Components/IO/UploadArea/JJUploadArea.cs @@ -13,18 +13,20 @@ using JJMasterData.Core.DataManager.Services; using JJMasterData.Core.Extensions; using JJMasterData.Core.Html; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Features; using JJMasterData.Core.UI.Events.Args; using JJMasterData.Core.UI.Routing; using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Options; namespace JJMasterData.Core.UI.Components; public class JJUploadArea : AsyncComponent { - private readonly IRequestLengthService _requestLengthService; - private readonly IHttpContext _httpContext ; + private readonly IOptions _requestLengthService; + private readonly IHttpContextAccessor _httpContext ; private readonly UploadAreaService _uploadAreaService ; private readonly IStringLocalizer _stringLocalizer ; private readonly IEncryptionService _encryptionService; @@ -116,7 +118,7 @@ internal RouteContext RouteContext if (_routeContext != null) return _routeContext; - var factory = new RouteContextFactory(_httpContext.Request.QueryString, _encryptionService); + var factory = new RouteContextFactory(_httpContext, _encryptionService); _routeContext = factory.Create(); return _routeContext; @@ -124,10 +126,10 @@ internal RouteContext RouteContext } public JJUploadArea( - IHttpContext httpContext, + IHttpContextAccessor httpContext, UploadAreaService uploadAreaService, IEncryptionService encryptionService, - IRequestLengthService requestLengthService, + IOptions requestLengthService, IStringLocalizer stringLocalizer) { _requestLengthService = requestLengthService; diff --git a/src/MasterData.Core/UI/Components/IO/UploadArea/UploadAreaFactory.cs b/src/MasterData.Core/UI/Components/IO/UploadArea/UploadAreaFactory.cs index c729373d8..e81911655 100644 --- a/src/MasterData.Core/UI/Components/IO/UploadArea/UploadAreaFactory.cs +++ b/src/MasterData.Core/UI/Components/IO/UploadArea/UploadAreaFactory.cs @@ -1,14 +1,16 @@ using JJMasterData.Commons.Security.Cryptography.Abstractions; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Http.Features; using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Options; namespace JJMasterData.Core.UI.Components; -public sealed class UploadAreaFactory(IHttpContext httpContext, +public sealed class UploadAreaFactory(IHttpContextAccessor httpContext, UploadAreaService uploadAreaService, IEncryptionService encryptionService, - IRequestLengthService requestLengthService, + IOptions requestLengthService, IStringLocalizer stringLocalizer) { @@ -16,4 +18,4 @@ public JJUploadArea Create() { return new JJUploadArea(httpContext,uploadAreaService,encryptionService,requestLengthService, stringLocalizer); } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/IO/UploadView/JJUploadView.cs b/src/MasterData.Core/UI/Components/IO/UploadView/JJUploadView.cs index 12f717752..f9b63834c 100644 --- a/src/MasterData.Core/UI/Components/IO/UploadView/JJUploadView.cs +++ b/src/MasterData.Core/UI/Components/IO/UploadView/JJUploadView.cs @@ -20,7 +20,7 @@ using JJMasterData.Core.DataDictionary.Models.Actions; using JJMasterData.Core.DataManager.IO; using JJMasterData.Core.DataManager.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.Tasks; using JJMasterData.Core.UI.Events.Args; @@ -259,7 +259,7 @@ private FormFileManager FormFileManager private UploadViewScripts Scripts => _scripts ??= new UploadViewScripts(this); - private IHttpContext CurrentContext { get; } + private IHttpContextAccessor CurrentContext { get; } private IComponentFactory ComponentFactory { get; } private IEncryptionService EncryptionService { get; } @@ -270,7 +270,7 @@ protected RouteContext RouteContext if (_routeContext != null) return _routeContext; - var factory = new RouteContextFactory(CurrentContext.Request.QueryString, EncryptionService); + var factory = new RouteContextFactory(CurrentContext, EncryptionService); _routeContext = factory.Create(); return _routeContext; @@ -281,7 +281,7 @@ protected RouteContext RouteContext private ILoggerFactory LoggerFactory { get; } private ILogger Logger { get; } public JJUploadView( - IHttpContext currentContext, + IHttpContextAccessor currentContext, IComponentFactory componentFactory, IEncryptionService encryptionService, IStringLocalizer stringLocalizer, @@ -321,7 +321,7 @@ public async Task GetUploadViewResult() { var html = HtmlBuilder.Div(); - var uploadAction = CurrentContext.Request.Form[$"upload-view-action-{Name}"]; + var uploadAction = CurrentContext.HttpContext!.Request.GetFormValue($"upload-view-action-{Name}"); if (!string.IsNullOrEmpty(uploadAction)) { var result = GetUploadActionResult(uploadAction); @@ -377,7 +377,7 @@ public async Task GetUploadViewResult() private ComponentResult GetUploadActionResult(string uploadViewAction) { - var fileName = CurrentContext.Request.Form[$"upload-view-file-name-{Name}"]; + var fileName = CurrentContext.HttpContext!.Request.GetFormValue($"upload-view-file-name-{Name}"); try { switch (uploadViewAction) @@ -415,7 +415,7 @@ private HtmlBuilder GetUploadAreaHtml() if (!ShowAddFiles) return html; - html.AppendComponent(new JJMasterDataCollapsePanel(CurrentContext.Request.Form) + html.AppendComponent(new JJMasterDataCollapsePanel(CurrentContext) { Title = StringLocalizer["New File"], ExpandedByDefault = IsCollapseExpandedByDefault, diff --git a/src/MasterData.Core/UI/Components/IO/UploadView/UploadViewFactory.cs b/src/MasterData.Core/UI/Components/IO/UploadView/UploadViewFactory.cs index 751f9c523..4ef66e9e3 100644 --- a/src/MasterData.Core/UI/Components/IO/UploadView/UploadViewFactory.cs +++ b/src/MasterData.Core/UI/Components/IO/UploadView/UploadViewFactory.cs @@ -1,11 +1,11 @@ using JJMasterData.Commons.Security.Cryptography.Abstractions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; namespace JJMasterData.Core.UI.Components; -public sealed class UploadViewFactory(IHttpContext currentContext, +public sealed class UploadViewFactory(IHttpContextAccessor currentContext, IComponentFactory componentFactory, IEncryptionService encryptionService, IStringLocalizer stringLocalizer, diff --git a/src/MasterData.Core/UI/Components/Importation/DataImportationFactory.cs b/src/MasterData.Core/UI/Components/Importation/DataImportationFactory.cs index bcbb248d5..6b7018afa 100644 --- a/src/MasterData.Core/UI/Components/Importation/DataImportationFactory.cs +++ b/src/MasterData.Core/UI/Components/Importation/DataImportationFactory.cs @@ -11,7 +11,7 @@ using JJMasterData.Core.DataManager.Services; using JJMasterData.Core.Events.Abstractions; using JJMasterData.Core.Events.Args; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; @@ -24,7 +24,7 @@ internal sealed class DataImportationFactory( FieldValuesService fieldValuesService, FormService formService, IBackgroundTaskManager backgroundTaskManager, - IHttpContext httpContext, + IHttpContextAccessor httpContext, IMasterDataUser masterDataUser, IComponentFactory componentFactory, DataItemService dataItemService, @@ -59,7 +59,7 @@ public async ValueTask CreateAsync(string elementName) var formElement = await dataDictionaryRepository.GetFormElementAsync(elementName); - var dataContext = new DataContext(httpContext.Request, DataContextSource.Upload, masterDataUser.Id); + var dataContext = new DataContext(httpContext.HttpContext?.Request, DataContextSource.Upload, masterDataUser.Id); var formEvent = formEventHandlerResolver.GetFormEventHandler(elementName); diff --git a/src/MasterData.Core/UI/Components/Importation/DataImportationLog.cs b/src/MasterData.Core/UI/Components/Importation/DataImportationLog.cs index f9a193b5e..ed9177d5e 100644 --- a/src/MasterData.Core/UI/Components/Importation/DataImportationLog.cs +++ b/src/MasterData.Core/UI/Components/Importation/DataImportationLog.cs @@ -11,7 +11,7 @@ using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager.Importation; using JJMasterData.Core.Html; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; @@ -21,7 +21,7 @@ internal sealed class DataImportationLog { private readonly DataImportationReporter _reporter; private readonly IStringLocalizer _stringLocalizer; - private readonly IHttpContext _currentContext; + private readonly IHttpContextAccessor _currentContext; internal DataImportationLog(JJDataImportation dataImportation) { _stringLocalizer = dataImportation.StringLocalizer; diff --git a/src/MasterData.Core/UI/Components/Importation/JJDataImportation.cs b/src/MasterData.Core/UI/Components/Importation/JJDataImportation.cs index 191040dcf..681b01b9c 100644 --- a/src/MasterData.Core/UI/Components/Importation/JJDataImportation.cs +++ b/src/MasterData.Core/UI/Components/Importation/JJDataImportation.cs @@ -24,7 +24,7 @@ using JJMasterData.Core.Events.Args; using JJMasterData.Core.Extensions; using JJMasterData.Core.Html; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Events.Args; using JJMasterData.Core.UI.Routing; @@ -91,7 +91,7 @@ private RouteContext RouteContext if (_routeContext != null) return _routeContext; - var factory = new RouteContextFactory(CurrentContext.Request.QueryString, EncryptionService); + var factory = new RouteContextFactory(CurrentContext, EncryptionService); _routeContext = factory.Create(); return _routeContext; @@ -116,7 +116,7 @@ public JJDataImportation( FormService formService, FieldValuesService fieldValuesService, IBackgroundTaskManager backgroundTaskManager, - IHttpContext currentContext, + IHttpContextAccessor currentContext, IComponentFactory componentFactory, DataItemService dataItemService, DataImportationWorkerFactory dataImportationWorkerFactory, @@ -152,7 +152,7 @@ protected override async Task BuildResultAsync() return await UploadArea.GetResultAsync(); } - string action = CurrentContext.Request.QueryString["dataImportationOperation"]; + string action = CurrentContext.HttpContext!.Request.Query["dataImportationOperation"]; switch (action) { @@ -175,7 +175,7 @@ protected override async Task BuildResultAsync() { if (!IsRunning()) { - var pasteValue = CurrentContext.Request.Form["pasteValue"]; + var pasteValue = CurrentContext.HttpContext!.Request.GetFormValue("pasteValue"); ImportInBackground(pasteValue); } @@ -300,7 +300,7 @@ private HtmlBuilder GetUploadAreaCollapse(string keyprocess) area.WithStyle( "display:none"); }); - var collapsePanel = new JJMasterDataCollapsePanel(CurrentContext.Request.Form) + var collapsePanel = new JJMasterDataCollapsePanel(CurrentContext) { TitleIcon = new JJIcon(FontAwesomeIcon.Upload), Title = StringLocalizer["Upload File"], @@ -356,7 +356,7 @@ private void FileUploaded(object sender, FormUploadFileEventArgs e) private DataImportationWorker CreateImportationTextWorker(string postedText, char separator) { - var dataContext = new DataContext(CurrentContext.Request, DataContextSource.Upload, UserId); + var dataContext = new DataContext(CurrentContext.HttpContext!.Request, DataContextSource.Upload, UserId); var dataImportationContext = new DataImportationContext(FormElement, dataContext, RelationValues, postedText, separator); var worker = DataImportationWorkerFactory.Create(dataImportationContext); worker.UserId = UserId; @@ -474,4 +474,4 @@ private JJUploadArea GetUploadArea() return area; } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Components/ProcessComponent.cs b/src/MasterData.Core/UI/Components/ProcessComponent.cs index d53c7899d..e917cfd7f 100644 --- a/src/MasterData.Core/UI/Components/ProcessComponent.cs +++ b/src/MasterData.Core/UI/Components/ProcessComponent.cs @@ -6,14 +6,14 @@ using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataManager; using JJMasterData.Core.DataManager.Expressions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; namespace JJMasterData.Core.UI.Components; public abstract class ProcessComponent( - IHttpContext currentContext, + IHttpContextAccessor currentContext, IMasterDataUser masterDataUser, ExpressionsService expressionsService, IBackgroundTaskManager backgroundTaskManager, @@ -50,7 +50,7 @@ internal string ProcessKey /// internal string UserId => _userId ??= masterDataUser.Id; - public IHttpContext CurrentContext { get; init; } = currentContext; + public IHttpContextAccessor CurrentContext { get; init; } = currentContext; public ProcessOptions ProcessOptions { diff --git a/src/MasterData.Core/UI/Components/TabNav/JJMasterDataTabNav.cs b/src/MasterData.Core/UI/Components/TabNav/JJMasterDataTabNav.cs index f7a1bd8d2..0e1a68057 100644 --- a/src/MasterData.Core/UI/Components/TabNav/JJMasterDataTabNav.cs +++ b/src/MasterData.Core/UI/Components/TabNav/JJMasterDataTabNav.cs @@ -1,20 +1,21 @@ using JJConsulting.Html.Bootstrap.Components; -using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; namespace JJMasterData.Core.UI.Components; internal sealed class JJMasterDataTabNav : JJTabNav { - public JJMasterDataTabNav(IFormValues formValues) + public JJMasterDataTabNav(IHttpContextAccessor formValues) { - if (formValues.TryGetValue("selected_tab_" + Name, out var value)) + var request = formValues.HttpContext?.Request; + if (request?.HasFormContentType == true && + request.Form.TryGetValue("selected_tab_" + Name, out var value)) { - SelectedTabIndex = int.TryParse(value, out var intIndex) ? intIndex : 0; + SelectedTabIndex = int.TryParse(value.ToString(), out var intIndex) ? intIndex : 0; } else { SelectedTabIndex = 0; } } -} \ No newline at end of file +} diff --git a/src/MasterData.Core/UI/Routing/RouteContextFactory.cs b/src/MasterData.Core/UI/Routing/RouteContextFactory.cs index 864c94493..113ee269f 100644 --- a/src/MasterData.Core/UI/Routing/RouteContextFactory.cs +++ b/src/MasterData.Core/UI/Routing/RouteContextFactory.cs @@ -1,18 +1,17 @@ using JJMasterData.Commons.Security.Cryptography.Abstractions; -using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; namespace JJMasterData.Core.UI.Routing; -public class RouteContextFactory(IQueryString queryString, IEncryptionService encryptionService) +public class RouteContextFactory(IHttpContextAccessor httpContextAccessor, IEncryptionService encryptionService) { public RouteContext Create() { - if (queryString.TryGetValue("routeContext", out var encryptedQueryString)) + var queryString = httpContextAccessor.HttpContext?.Request.Query; + if (queryString?.TryGetValue("routeContext", out var encryptedQueryString) == true) { return encryptionService.DecryptRouteContext(encryptedQueryString); } return new RouteContext(); } -} \ No newline at end of file +} diff --git a/src/MasterData.Web/Areas/DataDictionary/Controllers/RulesController.cs b/src/MasterData.Web/Areas/DataDictionary/Controllers/RulesController.cs new file mode 100644 index 000000000..0c51ee5c9 --- /dev/null +++ b/src/MasterData.Web/Areas/DataDictionary/Controllers/RulesController.cs @@ -0,0 +1,138 @@ +using JJMasterData.Core.DataDictionary.Models; +using JJMasterData.Core.DataDictionary.Services; +using JJMasterData.Web.Extensions; +using JJMasterData.Web.Filters; +using JJMasterData.Web.Models; +using Microsoft.AspNetCore.Mvc; +using System.Linq; + +namespace JJMasterData.Web.Areas.DataDictionary.Controllers; + +public class RulesController(FormElementRulesService formElementRulesService) : DataDictionaryController +{ + [ImportModelState] + public async Task Index(string elementName, int? ruleId = null) + { + var formElement = await formElementRulesService.GetFormElementAsync(elementName); + FormElementRule rule; + + if (ruleId == null) + { + if (TempData.ContainsKey("rule")) + rule = TempData.Get("rule")!; + else if (formElement.Rules.Count > 0) + rule = formElement.Rules[0]; + else + rule = new FormElementRule(); + } + else + { + rule = formElement.GetRuleById(ruleId.Value); + } + + PopulateViewData(formElement, rule); + return View(rule); + } + + public async Task Detail(string elementName, int ruleId) + { + var formElement = await formElementRulesService.GetFormElementAsync(elementName); + var rule = formElement.GetRuleById(ruleId); + PopulateViewData(formElement, rule); + return PartialView("_Detail", rule); + } + + public async Task Add(string elementName) + { + var formElement = await formElementRulesService.GetFormElementAsync(elementName); + var rule = new FormElementRule(); + PopulateViewData(formElement, rule); + return PartialView("_Detail", rule); + } + + [HttpPost] + public async Task ChangeLanguage(string elementName, FormElementRule rule) + { + var formElement = await formElementRulesService.GetFormElementAsync(elementName); + PopulateViewData(formElement, rule); + return PartialView("_Detail", rule); + } + + [HttpPost] + [ExportModelState] + public async Task Save(string elementName, FormElementRule rule, string selectedTab = "#div-general") + { + await formElementRulesService.SaveAsync(elementName, rule); + if (ModelState.IsValid) + return RedirectToAction("Index", new { elementName, ruleId = rule.Id, selectedTab }); + + return RedirectToIndex(elementName, rule, selectedTab); + } + + public async Task Delete(string elementName, int ruleId) + { + await formElementRulesService.DeleteAsync(elementName, ruleId); + return RedirectToAction("Index", new { elementName }); + } + + [HttpPost] + public async Task Index(string elementName, FormElementRule rule) + { + var formElement = await formElementRulesService.GetFormElementAsync(elementName); + PopulateViewData(formElement, rule); + return View(rule); + } + + private RedirectToActionResult RedirectToIndex(string elementName, FormElementRule rule, string selectedTab) + { + TempData.Put("rule", rule); + + return RedirectToAction("Index", new { elementName, selectedTab }); + } + + private void PopulateViewData(FormElement formElement, FormElementRule rule) + { + var selectedTab = Request.HasFormContentType + ? Request.Form["selectedTab"].ToString() + : Request.Query["selectedTab"].ToString(); + + ViewBag.Tab = string.IsNullOrWhiteSpace(selectedTab) ? "#div-general" : selectedTab; + ViewData["MenuId"] = "Rules"; + ViewData["ElementName"] = formElement.Name; + ViewData["CodeEditorHints"] = formElement.Fields.Select(f => new CodeEditorHint + { + Language = "sql", + InsertText = f.Name, + Label = f.Name, + Details = "Form Element Field", + }) + .Concat( + formElement.Fields.Select(f => new CodeEditorHint + { + Language = "javascript", + InsertText = $"values.{f.Name}", + Label = $"values.{f.Name}", + Details = "Form Element Field", + })) + .Concat( + [ + new CodeEditorHint + { + Language = "javascript", + InsertText = "addError('Mensagem de erro');", + Label = "addError(message)", + Details = "Adds a general error message", + }, + new CodeEditorHint + { + Language = "javascript", + InsertText = "addError('FieldName', 'Mensagem de erro');", + Label = "addError(name, message)", + Details = "Adds a field error", + }, + ]) + .ToList(); + ViewBag.RuleId = rule.Id; + ViewBag.Rules = formElement.Rules; + } +} diff --git a/src/MasterData.Web/Areas/DataDictionary/Views/Field/_General.cshtml b/src/MasterData.Web/Areas/DataDictionary/Views/Field/_General.cshtml index df12f1aeb..ea4490054 100644 --- a/src/MasterData.Web/Areas/DataDictionary/Views/Field/_General.cshtml +++ b/src/MasterData.Web/Areas/DataDictionary/Views/Field/_General.cshtml @@ -7,7 +7,6 @@ @using Microsoft.AspNetCore.Mvc.TagHelpers @model JJMasterData.Core.DataDictionary.Models.FormElementField @inject IStringLocalizer StringLocalizer -@inject IOptionsSnapshot Options @{ var isForm = ViewData["IsForm"] is true; @@ -145,13 +144,4 @@ for="EncodeHtml" layout="Switch"/> } - - @if (Options.Value.SupportNetFramework) - { -
- -
- } diff --git a/src/MasterData.Web/Areas/DataDictionary/Views/Rules/Index.cshtml b/src/MasterData.Web/Areas/DataDictionary/Views/Rules/Index.cshtml new file mode 100644 index 000000000..9e6f739e8 --- /dev/null +++ b/src/MasterData.Web/Areas/DataDictionary/Views/Rules/Index.cshtml @@ -0,0 +1,121 @@ +@using JJMasterData.Core.DataDictionary.Models +@model JJMasterData.Core.DataDictionary.Models.FormElementRule +@inject IStringLocalizer StringLocalizer + +@{ + ViewData["Title"] = $"{ViewBag.ElementName} - {StringLocalizer["Rules"]}"; + Layout = "_FormElementMenuLayout"; +} + + + +@using (Html.BeginMasterDataForm()) +{ + +
+
+
+ +
+ +
+
+
+
+
+
+ @if (ViewBag.Rules.Count == 0) + { +
@StringLocalizer["No record found"]
+ } + @foreach (FormElementRule rule in ViewBag.Rules) + { + +
+ @rule.Name +
+ @rule.Language.ToString() +
+
+ } +
+
+
+
+
+
+ +
+
+
+} diff --git a/src/MasterData.Web/Areas/DataDictionary/Views/Rules/_Detail.cshtml b/src/MasterData.Web/Areas/DataDictionary/Views/Rules/_Detail.cshtml new file mode 100644 index 000000000..63d047014 --- /dev/null +++ b/src/MasterData.Web/Areas/DataDictionary/Views/Rules/_Detail.cshtml @@ -0,0 +1,120 @@ +@using JJMasterData.Web.TagHelpers +@using JJMasterData.Core.DataDictionary.Models +@model JJMasterData.Core.DataDictionary.Models.FormElementRule +@inject IStringLocalizer StringLocalizer + +@{ + string currentTab = ViewBag.Tab ?? "#div-general"; + + string Active(string tab) + { + return currentTab == tab ? "active show" : string.Empty; + } +} + + + + +
+ + + @Html.HiddenFor(model => model.Id) + +
+
+
+
+
+ + +
+
+
+
+ + +
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+
+ + +
+
+
+
+ +
+
+
+
+
+ +
+
+ + @if (Model.Id > 0) + { + + } +
+
+
diff --git a/src/MasterData.Web/Areas/DataDictionary/Views/Rules/_ViewStart.cshtml b/src/MasterData.Web/Areas/DataDictionary/Views/Rules/_ViewStart.cshtml new file mode 100644 index 000000000..44f2499cc --- /dev/null +++ b/src/MasterData.Web/Areas/DataDictionary/Views/Rules/_ViewStart.cshtml @@ -0,0 +1,3 @@ +@{ + Layout = "_FormElementMenuLayout"; +} diff --git a/src/MasterData.Web/Areas/DataDictionary/Views/Shared/_FormElementMenuLayout.cshtml b/src/MasterData.Web/Areas/DataDictionary/Views/Shared/_FormElementMenuLayout.cshtml index 0c47edafb..7f9623150 100644 --- a/src/MasterData.Web/Areas/DataDictionary/Views/Shared/_FormElementMenuLayout.cshtml +++ b/src/MasterData.Web/Areas/DataDictionary/Views/Shared/_FormElementMenuLayout.cshtml @@ -61,6 +61,7 @@ NavItem("Indexes", "fa fa-indent", Url.Action("Index", "Indexes", new { elementName })); NavItem("Options", "fa fa-gears", Url.Action("Index", "UIOptions", new { elementName })); NavItem("Actions", "fa-solid fa-bolt", Url.Action("Index", "Actions", new { elementName })); + NavItem("Rules", "fa-solid fa-shield-halved", Url.Action("Index", "Rules", new { elementName })); NavItem("WebApi", "fa-solid fa-globe", Url.Action("Index", "Api", new { elementName })); } diff --git a/src/MasterData.Web/Areas/MasterData/Controllers/InternalRedirectController.cs b/src/MasterData.Web/Areas/MasterData/Controllers/InternalRedirectController.cs index 61d51d63d..2a64f61be 100644 --- a/src/MasterData.Web/Areas/MasterData/Controllers/InternalRedirectController.cs +++ b/src/MasterData.Web/Areas/MasterData/Controllers/InternalRedirectController.cs @@ -7,7 +7,7 @@ using JJMasterData.Core.DataManager.Models; using JJMasterData.Core.DataManager.Services; using JJMasterData.Core.Extensions; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Components; using JJMasterData.Web.Areas.MasterData.Models; using JJMasterData.Web.Extensions; @@ -19,7 +19,7 @@ public class InternalRedirectController( ExpressionsService expressionsService, IComponentFactory componentFactory, FormService formService, - IHttpRequest request, + IHttpContextAccessor request, IMasterDataUser masterDataUser, IEncryptionService encryptionService) : MasterDataController { diff --git a/src/MasterData.Web/Configuration/Options/MasterDataWebOptions.cs b/src/MasterData.Web/Configuration/Options/MasterDataWebOptions.cs index 71c8d2f6d..b3c794304 100644 --- a/src/MasterData.Web/Configuration/Options/MasterDataWebOptions.cs +++ b/src/MasterData.Web/Configuration/Options/MasterDataWebOptions.cs @@ -31,8 +31,6 @@ public sealed class MasterDataWebOptions [Display(Name = "Custom Bootstrap Path")] public string? CustomBootstrapPath { get; set; } - public bool SupportNetFramework { get; set; } - /// /// Custom scripts to be added at _MasterDataScripts. The paths are relative. /// @@ -45,4 +43,4 @@ public sealed class MasterDataWebOptions ///
[BindNever] public List CustomStylesheetsPaths { get; } = []; -} \ No newline at end of file +} diff --git a/src/MasterData.Web/Scripts/CodeEditor.ts b/src/MasterData.Web/Scripts/CodeEditor.ts index 8528595da..25d9c744b 100644 --- a/src/MasterData.Web/Scripts/CodeEditor.ts +++ b/src/MasterData.Web/Scripts/CodeEditor.ts @@ -58,6 +58,10 @@ class CodeEditor { return; } + if (!hints || typeof hints !== "object") { + return; + } + Object.keys(hints).forEach(lang => { //@ts-ignore monaco.languages.registerCompletionItemProvider(lang, { diff --git a/src/MasterData.Web/Views/Shared/_MasterDataCodeEditorScripts.cshtml b/src/MasterData.Web/Views/Shared/_MasterDataCodeEditorScripts.cshtml index c0fe30d64..6874e2269 100644 --- a/src/MasterData.Web/Views/Shared/_MasterDataCodeEditorScripts.cshtml +++ b/src/MasterData.Web/Views/Shared/_MasterDataCodeEditorScripts.cshtml @@ -1,12 +1,12 @@ @{ Dictionary>? codeEditorHints = null; - if (ViewData.TryGetValue("CodeEditorHints", out var hintsObj) && hintsObj is List hintsList) + if (ViewData.TryGetValue("CodeEditorHints", out var hintsObj) && hintsObj is IEnumerable hintsEnumerable) { - codeEditorHints = hintsList + codeEditorHints = hintsEnumerable .GroupBy(h => h.Language) .ToDictionary(g => g.Key, g => g.ToList()); } } \ No newline at end of file + diff --git a/src/MasterData.Web/wwwroot/js/jjmasterdata/jjmasterdata.js b/src/MasterData.Web/wwwroot/js/jjmasterdata/jjmasterdata.js index 4c3862c14..480bc4146 100644 --- a/src/MasterData.Web/wwwroot/js/jjmasterdata/jjmasterdata.js +++ b/src/MasterData.Web/wwwroot/js/jjmasterdata/jjmasterdata.js @@ -402,6 +402,9 @@ class CodeEditor { catch (_a) { return; } + if (!hints || typeof hints !== "object") { + return; + } Object.keys(hints).forEach(lang => { monaco.languages.registerCompletionItemProvider(lang, { provideCompletionItems: function (model, position) { @@ -2501,6 +2504,11 @@ class PhoneInputListener { $(input).on('input', function () { syncHiddenInput(this, select); }); + input.addEventListener('paste', () => { + setTimeout(() => { + syncHiddenInput(input, select); + }, 0); + }); }); } } diff --git a/src/MasterData.Web/wwwroot/js/jjmasterdata/jjmasterdata.js.map b/src/MasterData.Web/wwwroot/js/jjmasterdata/jjmasterdata.js.map index f7c734467..fcdbf9c50 100644 --- a/src/MasterData.Web/wwwroot/js/jjmasterdata/jjmasterdata.js.map +++ b/src/MasterData.Web/wwwroot/js/jjmasterdata/jjmasterdata.js.map @@ -1 +1 @@ -{"version":3,"file":"jjmasterdata.js","sourceRoot":"/Scripts/","sources":["ActionHelper.ts","AuditLogViewHelper.ts","CalendarListener.ts","CheckboxHelper.ts","CodeEditor.ts","CollapsePanelListener.ts","DataDictionaryUtils.ts","DataExportationHelper.ts","DataImportationHelper.ts","DataImportationModal.ts","DataPanelHelper.ts","DecimalPlaces.ts","FeedbackIcon.ts","FormViewHelper.ts","GlobalVariables.ts","GridViewFilterHelper.ts","GridViewHelper.ts","GridViewSelectionHelper.ts","HTMLHelper.ts","Index.ts","JQueryPlugins.ts","LegacySearchBoxListener.ts","ListenAllEvents.ts","Localization.ts","LookupHelper.ts","LookupListener.ts","MasterDataForm.ts","MessageBox.ts","MessageToast.ts","Modal.ts","OffcanvasHelper.ts","PageState.ts","PhoneInputListener.ts","PopoverHelper.ts","PostFormValues.ts","SearchBoxListener.ts","SliderListener.ts","SortableListener.ts","SpinnerOverlay.ts","TabNavListener.ts","TextAreaListener.ts","TextFileHelper.ts","TooltipHelper.ts","UploadAreaListener.ts","UploadAreaOptions.ts","UploadViewHelper.ts","UrlBuilder.ts","UrlRedirectModel.ts","Utils.ts","WindowPlugins.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"jjmasterdata.js","sourceRoot":"/Scripts/","sources":["ActionHelper.ts","AuditLogViewHelper.ts","CalendarListener.ts","CheckboxHelper.ts","CodeEditor.ts","CollapsePanelListener.ts","DataDictionaryUtils.ts","DataExportationHelper.ts","DataImportationHelper.ts","DataImportationModal.ts","DataPanelHelper.ts","DecimalPlaces.ts","FeedbackIcon.ts","FormViewHelper.ts","GlobalVariables.ts","GridViewFilterHelper.ts","GridViewHelper.ts","GridViewSelectionHelper.ts","HTMLHelper.ts","Index.ts","JQueryPlugins.ts","LegacySearchBoxListener.ts","ListenAllEvents.ts","Localization.ts","LookupHelper.ts","LookupListener.ts","MasterDataForm.ts","MessageBox.ts","MessageToast.ts","Modal.ts","OffcanvasHelper.ts","PageState.ts","PhoneInputListener.ts","PopoverHelper.ts","PostFormValues.ts","SearchBoxListener.ts","SliderListener.ts","SortableListener.ts","SpinnerOverlay.ts","TabNavListener.ts","TextAreaListener.ts","TextFileHelper.ts","TooltipHelper.ts","UploadAreaListener.ts","UploadAreaOptions.ts","UploadViewHelper.ts","UrlBuilder.ts","UrlRedirectModel.ts","Utils.ts","WindowPlugins.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/MasterData.WebApi/Services/DictionariesService.cs b/src/MasterData.WebApi/Services/DictionariesService.cs index d8452d822..7aa17f802 100644 --- a/src/MasterData.WebApi/Services/DictionariesService.cs +++ b/src/MasterData.WebApi/Services/DictionariesService.cs @@ -8,7 +8,7 @@ using JJMasterData.Core.DataDictionary.Models; using JJMasterData.Core.DataDictionary.Repository.Abstractions; using JJMasterData.Core.DataManager; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.WebApi.Models; using Microsoft.Extensions.Localization; diff --git a/src/MasterData.WebApi/Services/MasterApiService.cs b/src/MasterData.WebApi/Services/MasterApiService.cs index afa42aff3..30f92f233 100644 --- a/src/MasterData.WebApi/Services/MasterApiService.cs +++ b/src/MasterData.WebApi/Services/MasterApiService.cs @@ -10,7 +10,7 @@ using JJMasterData.Core.DataManager.Expressions; using JJMasterData.Core.DataManager.Models; using JJMasterData.Core.DataManager.Services; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.WebApi.Models; using Microsoft.Extensions.Localization; @@ -18,7 +18,6 @@ namespace JJMasterData.WebApi.Services; public class MasterApiService(ExpressionsService expressionsService, IHttpContextAccessor httpContextAccessor, - IHttpContext httpContext, IMasterDataUser masterDataUser, DataItemService dataItemService, FieldValuesService fieldValuesService, @@ -442,7 +441,7 @@ private Dictionary GetDefaultFilter(FormElement formElement, boo private DataContext GetDataContext() { var userId = masterDataUser.Id; - return new DataContext(httpContext.Request, DataContextSource.Api, userId); + return new DataContext(httpContextAccessor.HttpContext!.Request, DataContextSource.Api, userId); } private ValueTask GetDataDictionary(string elementName) @@ -516,4 +515,4 @@ private ResponseLetter CreateErrorResponseLetter(Dictionary? err return letter; } -} \ No newline at end of file +} diff --git a/src/Plugins/Directory.Build.props b/src/Plugins/Directory.Build.props index 81fdde1a9..146e99003 100644 --- a/src/Plugins/Directory.Build.props +++ b/src/Plugins/Directory.Build.props @@ -1,4 +1,6 @@ + + True @@ -10,4 +12,3 @@ - diff --git a/src/Plugins/MasterData.Brasil/MasterData.Brasil.csproj b/src/Plugins/MasterData.Brasil/MasterData.Brasil.csproj index 6411c1861..f972a7088 100644 --- a/src/Plugins/MasterData.Brasil/MasterData.Brasil.csproj +++ b/src/Plugins/MasterData.Brasil/MasterData.Brasil.csproj @@ -1,23 +1,13 @@  - net4.8;net10.0 + net10.0 12 enable JJMasterData.Brasil JJMasterData.Brasil - 1.0.0 - $(Version) - $(Version) - $(Version) - - - all - runtime; build; native; contentfiles; analyzers; buildtransitive - - diff --git a/src/Plugins/MasterData.Hangfire/MasterData.Hangfire.csproj b/src/Plugins/MasterData.Hangfire/MasterData.Hangfire.csproj index b3e5891e0..96b5f6123 100644 --- a/src/Plugins/MasterData.Hangfire/MasterData.Hangfire.csproj +++ b/src/Plugins/MasterData.Hangfire/MasterData.Hangfire.csproj @@ -1,13 +1,9 @@ - net4.8;net10.0 + net10.0 JJMasterData Hangfire support to background tasks, like exportation and importation. https://www.github.com/jjconsulting/jjmasterdata - 2.0.6 - 2.0.6 - 2.0.6 - 2.0.6 hangfire,jjmasterdata JJMasterData.Hangfire JJMasterData.Hangfire diff --git a/src/Plugins/MasterData.MongoDB/MasterData.MongoDB.csproj b/src/Plugins/MasterData.MongoDB/MasterData.MongoDB.csproj index 31eb56a58..0291a3699 100644 --- a/src/Plugins/MasterData.MongoDB/MasterData.MongoDB.csproj +++ b/src/Plugins/MasterData.MongoDB/MasterData.MongoDB.csproj @@ -12,10 +12,6 @@ JJMasterData.MongoDB JJMasterData.png JJMasterData.MongoDB - 2.0.2 - 2.0.2 - 2.0.2 - 2.0.2 diff --git a/src/Plugins/MasterData.Pdf/MasterData.Pdf.csproj b/src/Plugins/MasterData.Pdf/MasterData.Pdf.csproj index 5d0fcbd53..6d53b0d0f 100644 --- a/src/Plugins/MasterData.Pdf/MasterData.Pdf.csproj +++ b/src/Plugins/MasterData.Pdf/MasterData.Pdf.csproj @@ -1,16 +1,12 @@ - net4.8;net10.0 + net10.0 12 JJMasterData Pdf generation support. https://www.github.com/jjconsulting/jjmasterdata JJMasterData.png pdf,jjmasterdata - 2.0.6 - 2.0.6 - 2.0.6 - 2.0.6 © 2023 JJConsulting. All rights reserved. JJMasterData.Pdf JJMasterData.Pdf diff --git a/src/Plugins/MasterData.Python/MasterData.Python.csproj b/src/Plugins/MasterData.Python/MasterData.Python.csproj index f5e907296..01823c7a4 100644 --- a/src/Plugins/MasterData.Python/MasterData.Python.csproj +++ b/src/Plugins/MasterData.Python/MasterData.Python.csproj @@ -1,7 +1,7 @@  - net4.8;net10.0 + net10.0 JJMasterData IronPython support for Actions and FormEvents. https://www.github.com/jjconsulting/jjmasterdata https://www.github.com/jjconsulting/jjmasterdata diff --git a/test/MasterData.Core.Test/Configuration/ServiceCollectionExtensionsTests.cs b/test/MasterData.Core.Test/Configuration/ServiceCollectionExtensionsTests.cs new file mode 100644 index 000000000..3e12a4259 --- /dev/null +++ b/test/MasterData.Core.Test/Configuration/ServiceCollectionExtensionsTests.cs @@ -0,0 +1,29 @@ +using System.Linq; +using JJMasterData.Core.Configuration; +using JJMasterData.Core.DataManager.Services; +using JJMasterData.Core.DataManager.Services.Abstractions; +using Microsoft.Extensions.DependencyInjection; +using Xunit; + +namespace JJMasterData.Core.Test.Configuration; + +public class ServiceCollectionExtensionsTests +{ + [Fact] + public void AddJJMasterDataCore_WhenCalledMoreThanOnce_DoesNotDuplicateRuleExecutors() + { + var services = new ServiceCollection(); + + services.AddJJMasterDataCore(); + services.AddJJMasterDataCore(); + + var ruleExecutors = services + .Where(service => service.ServiceType == typeof(IRuleExecutor)) + .Select(service => service.ImplementationType) + .ToArray(); + + Assert.Equal(2, ruleExecutors.Length); + Assert.Contains(typeof(SqlRuleExecutor), ruleExecutors); + Assert.Contains(typeof(JavaScriptRuleScriptExecutor), ruleExecutors); + } +} diff --git a/test/MasterData.Core.Test/DataDictionary/FormElementTest.cs b/test/MasterData.Core.Test/DataDictionary/FormElementTest.cs index 2bd98e8e9..f48992d7d 100644 --- a/test/MasterData.Core.Test/DataDictionary/FormElementTest.cs +++ b/test/MasterData.Core.Test/DataDictionary/FormElementTest.cs @@ -49,7 +49,6 @@ public void DeepCopyTest() AutoPostBack = true, DataBehavior = FieldBehavior.Real, IsPk = true, - ValidateRequest = true, DataItem = new FormElementDataItem { Command = new DataAccessCommand @@ -191,6 +190,17 @@ public void DeepCopyTest() IsVerticalLayout = true } }, + Rules = + [ + new FormElementRule + { + Id = 1, + Name = "BeforeInsert", + RunOnBeforeImport = true, + Language = RuleLanguage.Sql, + Script = "return 'error'" + } + ], Indexes = [ new() @@ -245,4 +255,16 @@ public void DeepCopyTest() Assert.Equal(oldJson, newJson); } -} \ No newline at end of file + + [Fact] + public void ShouldRun_ReturnsTrueForImport_WhenRuleRunsOnBeforeImport() + { + var rule = new FormElementRule + { + RunOnBeforeImport = true + }; + + Assert.True(rule.ShouldRun(PageState.Import)); + Assert.False(rule.ShouldRun(PageState.Insert)); + } +} diff --git a/test/MasterData.Core.Test/DataManager/Expressions/ExpressionParserTests.cs b/test/MasterData.Core.Test/DataManager/Expressions/ExpressionParserTests.cs index c05e681cc..b56698020 100644 --- a/test/MasterData.Core.Test/DataManager/Expressions/ExpressionParserTests.cs +++ b/test/MasterData.Core.Test/DataManager/Expressions/ExpressionParserTests.cs @@ -2,7 +2,7 @@ using JJMasterData.Core.DataManager; using JJMasterData.Core.DataManager.Expressions; using JJMasterData.Core.DataManager.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Moq; @@ -58,9 +58,9 @@ public void ParseExpression_WithUnknownField_ShouldReturnEmptyValue() // Add more test cases to cover other scenarios // ... - private static IHttpContext MockHttpContext() + private static IHttpContextAccessor MockHttpContext() { - var mockHttpContext = new Mock(); + var mockHttpContext = new Mock(); return mockHttpContext.Object; } diff --git a/test/MasterData.Core.Test/DataManager/Expressions/ExpressionsServiceTests.cs b/test/MasterData.Core.Test/DataManager/Expressions/ExpressionsServiceTests.cs index 2625e06c0..95286b8a6 100644 --- a/test/MasterData.Core.Test/DataManager/Expressions/ExpressionsServiceTests.cs +++ b/test/MasterData.Core.Test/DataManager/Expressions/ExpressionsServiceTests.cs @@ -4,7 +4,7 @@ using JJMasterData.Core.DataManager.Expressions; using JJMasterData.Core.DataManager.Expressions.Abstractions; using JJMasterData.Core.DataManager.Models; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; using Moq; @@ -18,9 +18,9 @@ public class ExpressionsServiceTests private readonly Mock _expressionBooleanProviderMock = new(); private readonly Mock _encryptionServiceMock = new(); - private static IHttpContext MockHttpContext() + private static IHttpContextAccessor MockHttpContext() { - var mockHttpContext = new Mock(); + var mockHttpContext = new Mock(); return mockHttpContext.Object; } diff --git a/test/MasterData.Core.Test/DataManager/Services/FieldValidationServiceTests.cs b/test/MasterData.Core.Test/DataManager/Services/FieldValidationServiceTests.cs index 3d6ce5c0e..24d83f22f 100644 --- a/test/MasterData.Core.Test/DataManager/Services/FieldValidationServiceTests.cs +++ b/test/MasterData.Core.Test/DataManager/Services/FieldValidationServiceTests.cs @@ -3,10 +3,14 @@ using JJMasterData.Core.DataManager.Expressions; using JJMasterData.Core.DataManager.Models; using JJMasterData.Core.DataManager.Services; +using JJMasterData.Core.DataManager.Services.Abstractions; namespace JJMasterData.Core.Test.DataManager.Services; +using System; using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; using Microsoft.Extensions.Localization; using Moq; using Xunit; @@ -14,19 +18,19 @@ namespace JJMasterData.Core.Test.DataManager.Services; public class FieldValidationServiceTests { [Fact] - public void ValidateFields_NullFormValues_ThrowsArgumentNullException() + public async Task ValidateFields_NullFormValues_ThrowsArgumentNullException() { // Arrange var expressionsServiceMock = new Mock(); var localizerMock = new Mock>(); - var service = new FieldValidationService(expressionsServiceMock.Object, localizerMock.Object); + var service = new FieldValidationService(expressionsServiceMock.Object, Enumerable.Empty(), localizerMock.Object); // Act and Assert - Assert.Throws(() => service.ValidateFields(null, new Dictionary(), new PageState(), true)); + await Assert.ThrowsAsync(() => service.ValidateFieldsAsync(null!, new Dictionary(), new PageState(), true).AsTask()); } [Fact] - public void ValidateFields_InvalidField_ReturnsError() + public async Task ValidateFields_InvalidField_ReturnsError() { // Arrange var expressionsServiceMock = new Mock(); @@ -34,18 +38,18 @@ public void ValidateFields_InvalidField_ReturnsError() .Returns(false); var localizerMock = new Mock>(); - var service = new FieldValidationService(expressionsServiceMock.Object, localizerMock.Object); + var service = new FieldValidationService(expressionsServiceMock.Object, Enumerable.Empty(), localizerMock.Object); var formElement = new FormElement { Name = "name", TableName = "tableName" }; - var formValues = new Dictionary(); + var formValues = new Dictionary(); const PageState pageState = new(); // Act - var result = service.ValidateFields(formElement, formValues, pageState, true); + var result = await service.ValidateFieldsAsync(formElement, formValues, pageState, true); // Assert Assert.Empty(result); @@ -60,7 +64,7 @@ public void ValidateField_RequiredFieldEmpty_ReturnsError() var localizerMock = new Mock>(); localizerMock.Setup(l => l["{0} field is required", It.IsAny()]).Returns(new LocalizedString("Field is required","Field is required")); - var service = new FieldValidationService(expressionsServiceMock.Object, localizerMock.Object); + var service = new FieldValidationService(expressionsServiceMock.Object, Enumerable.Empty(), localizerMock.Object); var field = new FormElementField { IsRequired = true, Label = "Field" }; const string fieldId = "fieldId"; @@ -72,4 +76,50 @@ public void ValidateField_RequiredFieldEmpty_ReturnsError() // Assert Assert.Equal("Field is required", result); } + + [Fact] + public async Task ValidateFieldsAsync_ImportPageState_ExecutesRulesConfiguredForBeforeImport() + { + var expressionsServiceMock = new Mock(); + var localizerMock = new Mock>(); + var executor = new ImportRuleExecutor(); + var service = new FieldValidationService(expressionsServiceMock.Object, [executor], localizerMock.Object); + + var formElement = new FormElement + { + Name = "name", + TableName = "tableName", + Rules = + [ + new FormElementRule + { + Name = "ImportRule", + Language = RuleLanguage.Sql, + RunOnBeforeImport = true, + Script = "select 'error'" + } + ] + }; + + var result = await service.ValidateFieldsAsync(formElement, new Dictionary(), PageState.Import, false); + + Assert.Single(result); + Assert.Equal("Import validation error", result["rule:import"]); + } + + private sealed class ImportRuleExecutor : IRuleExecutor + { + public RuleLanguage Language => RuleLanguage.Sql; + + public Task> ExecuteAsync( + FormElement formElement, + FormElementRule rule, + Dictionary values) + { + return Task.FromResult(new Dictionary + { + ["rule:import"] = "Import validation error" + }); + } + } } diff --git a/test/MasterData.Core.Test/DataManager/Services/FormServiceTests.cs b/test/MasterData.Core.Test/DataManager/Services/FormServiceTests.cs index cf9725621..052ed525d 100644 --- a/test/MasterData.Core.Test/DataManager/Services/FormServiceTests.cs +++ b/test/MasterData.Core.Test/DataManager/Services/FormServiceTests.cs @@ -6,52 +6,44 @@ using JJMasterData.Core.DataManager.Services; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; +using Moq; namespace JJMasterData.Core.Test.DataManager.Services; -using System.Collections.Generic; -using System.Threading.Tasks; -using Moq; -using Xunit; - public class FormServiceTests { [Fact] public async Task UpdateAsync_WithValidData_ReturnsFormLetterWithNoErrors() { - // Arrange var formElement = new FormElement { Name = "name", TableName = "name" }; var values = new Dictionary(); - var formService = GetFormService(formElement,values); - - - var dataContext = new DataContext(); + var formService = GetFormService(formElement, values); - // Mock the FieldValidationService to return no errors + var result = await formService.UpdateAsync(formElement, values, new DataContext()); - - // Act - var result = await formService.UpdateAsync(formElement, values, dataContext); - - // Assert Assert.NotNull(result); Assert.Empty(result.Errors); } - private static FormService GetFormService(FormElement formElement, Dictionary values) + private static FormService GetFormService(FormElement formElement, Dictionary values) { var entityRepositoryMock = new Mock(); var formFileServiceMock = new Mock(); - var fieldValidationServiceMock = new Mock(); + var fieldValidationServiceMock = new Mock( + Mock.Of(), + Enumerable.Empty(), + Mock.Of>()); var stringLocalizerMock = new Mock>(); var auditLogServiceMock = new Mock(); var loggerMock = new Mock>(); - fieldValidationServiceMock.Setup(fvs => fvs.ValidateFields(formElement, values, PageState.Update, false)) - .Returns(new Dictionary()); + + fieldValidationServiceMock + .Setup(fvs => fvs.ValidateFieldsAsync(formElement, values!, It.IsAny(), false)) + .ReturnsAsync(new Dictionary()); return new FormService( entityRepositoryMock.Object, @@ -65,20 +57,16 @@ private static FormService GetFormService(FormElement formElement, Dictionary(); - var formService = GetFormService(formElement,values); - var dataContext = new DataContext(); - - // Act - var result = await formService.UpdateAsync(formElement, values, dataContext); + var formService = GetFormService(formElement, values); + + var result = await formService.UpdateAsync(formElement, values, new DataContext()); - // Assert Assert.NotNull(result); Assert.NotEmpty(result.Errors); } @@ -86,20 +74,16 @@ public async Task UpdateAsync_WithValidationErrors_ReturnsFormLetterWithErrors() [Fact] public async Task InsertAsync_WithValidData_ReturnsFormLetterWithNoErrors() { - // Arrange var formElement = new FormElement { Name = "name", TableName = "tableName" }; var values = new Dictionary(); - var formService = GetFormService(formElement,values); - var dataContext = new DataContext(); + var formService = GetFormService(formElement, values); - // Act - var result = await formService.InsertAsync(formElement, values, dataContext); + var result = await formService.InsertAsync(formElement, values, new DataContext()); - // Assert Assert.NotNull(result); Assert.Empty(result.Errors); } @@ -107,20 +91,16 @@ public async Task InsertAsync_WithValidData_ReturnsFormLetterWithNoErrors() [Fact] public async Task InsertAsync_WithValidationErrors_ReturnsFormLetterWithErrors() { - // Arrange var formElement = new FormElement { Name = "name", TableName = "tableName" }; var values = new Dictionary(); - var formService = GetFormService(formElement,values); - var dataContext = new DataContext(); - - // Act - var result = await formService.InsertAsync(formElement, values, dataContext); + var formService = GetFormService(formElement, values); + + var result = await formService.InsertAsync(formElement, values, new DataContext()); - // Assert Assert.NotNull(result); Assert.NotEmpty(result.Errors); } @@ -128,20 +108,16 @@ public async Task InsertAsync_WithValidationErrors_ReturnsFormLetterWithErrors() [Fact] public async Task InsertOrReplaceAsync_WithValidData_ReturnsFormLetterWithNoErrors() { - // Arrange var formElement = new FormElement { Name = "name", TableName = "tableName" }; var values = new Dictionary(); - var formService = GetFormService(formElement,values); - var dataContext = new DataContext(); + var formService = GetFormService(formElement, values); - // Act - var result = await formService.InsertOrReplaceAsync(formElement, values, dataContext); + var result = await formService.InsertOrReplaceAsync(formElement, values, new DataContext()); - // Assert Assert.NotNull(result); Assert.Empty(result.Errors); } @@ -149,20 +125,16 @@ public async Task InsertOrReplaceAsync_WithValidData_ReturnsFormLetterWithNoErro [Fact] public async Task InsertOrReplaceAsync_WithValidationErrors_ReturnsFormLetterWithErrors() { - // Arrange var formElement = new FormElement { Name = "name", TableName = "tableName" }; var values = new Dictionary(); - var formService = GetFormService(formElement,values); - var dataContext = new DataContext(); + var formService = GetFormService(formElement, values); - // Act - var result = await formService.InsertOrReplaceAsync(formElement, values, dataContext); + var result = await formService.InsertOrReplaceAsync(formElement, values, new DataContext()); - // Assert Assert.NotNull(result); Assert.NotEmpty(result.Errors); } @@ -170,10 +142,12 @@ public async Task InsertOrReplaceAsync_WithValidationErrors_ReturnsFormLetterWit [Fact] public async Task DeleteAsync_WithValidData_ReturnsFormLetterWithNoErrors() { - // Arrange var entityRepositoryMock = new Mock(); var formFileServiceMock = new Mock(); - var fieldValidationServiceMock = new Mock(); + var fieldValidationServiceMock = new Mock( + Mock.Of(), + Enumerable.Empty(), + Mock.Of>()); var auditLogServiceMock = new Mock(); var stringLocalizerMock = new Mock>(); var loggerMock = new Mock>(); @@ -191,19 +165,15 @@ public async Task DeleteAsync_WithValidData_ReturnsFormLetterWithNoErrors() TableName = "tableName" }; var primaryKeys = new Dictionary(); - var dataContext = new DataContext(); - // Mock the FieldValidationService to return no errors - fieldValidationServiceMock.Setup(fvs => fvs.ValidateFields(formElement, primaryKeys, PageState.Delete, false)) - .Returns(new Dictionary()); + fieldValidationServiceMock + .Setup(fvs => fvs.ValidateFieldsAsync(formElement, primaryKeys!, PageState.Delete, false)) + .ReturnsAsync(new Dictionary()); - // Mock EntityRepository to return a positive number of rows affected entityRepositoryMock.Setup(er => er.DeleteAsync(formElement, primaryKeys)).ReturnsAsync(1); - // Act - var result = await formService.DeleteAsync(formElement, primaryKeys, dataContext); + var result = await formService.DeleteAsync(formElement, primaryKeys, new DataContext()); - // Assert Assert.NotNull(result); Assert.Empty(result.Errors); Assert.Equal(1, result.NumberOfRowsAffected); @@ -212,11 +182,13 @@ public async Task DeleteAsync_WithValidData_ReturnsFormLetterWithNoErrors() [Fact] public async Task DeleteAsync_WithValidationErrors_ReturnsFormLetterWithErrors() { - // Arrange var entityRepositoryMock = new Mock(); var stringLocalizerMock = new Mock>(); var formFileServiceMock = new Mock(); - var fieldValidationServiceMock = new Mock(); + var fieldValidationServiceMock = new Mock( + Mock.Of(), + Enumerable.Empty(), + Mock.Of>()); var auditLogServiceMock = new Mock(); var loggerMock = new Mock>(); var formService = new FormService( @@ -232,19 +204,54 @@ public async Task DeleteAsync_WithValidationErrors_ReturnsFormLetterWithErrors() Name = "name", TableName = "name" }; - var primaryKeys = new Dictionary(); - var dataContext = new DataContext(); + var primaryKeys = new Dictionary(); - // Mock the FieldValidationService to return validation errors - fieldValidationServiceMock.Setup(fvs => fvs.ValidateFields(formElement, primaryKeys, PageState.Delete, false)) - .Returns(new Dictionary { { "Field1", "Validation Error" } }); + fieldValidationServiceMock + .Setup(fvs => fvs.ValidateFieldsAsync(formElement, primaryKeys, PageState.Delete, false)) + .ReturnsAsync(new Dictionary { { "Field1", "Validation Error" } }); - // Act - var result = await formService.DeleteAsync(formElement, primaryKeys, dataContext); + var result = await formService.DeleteAsync(formElement, primaryKeys, new DataContext()); - // Assert Assert.NotNull(result); Assert.NotEmpty(result.Errors); Assert.Equal(0, result.NumberOfRowsAffected); } -} \ No newline at end of file + + [Fact] + public async Task InsertAsync_WithScriptValidationErrors_ReturnsFormLetterWithErrors() + { + var formElement = new FormElement + { + Name = "name", + TableName = "tableName" + }; + var values = new Dictionary(); + + var entityRepositoryMock = new Mock(); + var formFileServiceMock = new Mock(); + var fieldValidationServiceMock = new Mock( + Mock.Of(), + Enumerable.Empty(), + Mock.Of>()); + var auditLogServiceMock = new Mock(); + var stringLocalizerMock = new Mock>(); + var loggerMock = new Mock>(); + + fieldValidationServiceMock + .Setup(fvs => fvs.ValidateFieldsAsync(formElement, values, PageState.Insert, false)) + .ReturnsAsync(new Dictionary { { "validation:test", "Script error" } }); + + var formService = new FormService( + entityRepositoryMock.Object, + formFileServiceMock.Object, + fieldValidationServiceMock.Object, + auditLogServiceMock.Object, + stringLocalizerMock.Object, + loggerMock.Object); + + var result = await formService.InsertAsync(formElement, values, new DataContext()); + + Assert.Single(result.Errors); + entityRepositoryMock.Verify(r => r.InsertAsync(It.IsAny(), It.IsAny>()), Times.Never); + } +} diff --git a/test/MasterData.Core.Test/UI/Components/JJTextBoxTests.cs b/test/MasterData.Core.Test/UI/Components/JJTextBoxTests.cs index 014a5c906..02f484b7c 100644 --- a/test/MasterData.Core.Test/UI/Components/JJTextBoxTests.cs +++ b/test/MasterData.Core.Test/UI/Components/JJTextBoxTests.cs @@ -1,5 +1,5 @@ using System.Text; -using JJMasterData.Core.Http.Abstractions; +using Microsoft.AspNetCore.Http; using JJMasterData.Core.UI.Components; using Moq; @@ -49,7 +49,7 @@ public void RenderTestAttrs() private static JJTextBox GetTextBox() { - return new JJTextBox(new Mock().Object) + return new JJTextBox(new Mock().Object) { Name = "id1", Tooltip = "teste",