Browse Source

Merge branch 'feat/10298' into bs5-with-dev

pull/10290/head
bnymncoskuner 5 years ago
parent
commit
fd7c6a54fe
  1. 16
      .github/workflows/auto-pr.yml
  2. 4
      Directory.Build.props
  3. 41
      abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json
  4. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json
  5. 2
      abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json
  6. 2
      common.props
  7. 2
      configureawait.props
  8. 2
      docs/cs/Entity-Framework-Core-PostgreSQL.md
  9. 2
      docs/cs/Getting-Started-AspNetCore-Application.md
  10. 2
      docs/cs/Getting-Started-Console-Application.md
  11. 2
      docs/cs/Index.md
  12. 2
      docs/en/API/Application-Configuration.md
  13. 2
      docs/en/API/Swagger-Integration.md
  14. 2
      docs/en/Audit-Logging.md
  15. 2
      docs/en/Best-Practices/Application-Services.md
  16. 2
      docs/en/Best-Practices/Data-Transfer-Objects.md
  17. 2
      docs/en/Best-Practices/Domain-Services.md
  18. 2
      docs/en/Best-Practices/Entity-Framework-Core-Integration.md
  19. 2
      docs/en/Best-Practices/Index.md
  20. 2
      docs/en/Best-Practices/Module-Architecture.md
  21. 2
      docs/en/Best-Practices/MongoDB-Integration.md
  22. 2
      docs/en/CLI.md
  23. BIN
      docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/1.png
  24. BIN
      docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/2.png
  25. 88
      docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/POST.md
  26. 2
      docs/en/Configuration.md
  27. 2
      docs/en/Dependency-Injection.md
  28. 2
      docs/en/Domain-Services.md
  29. 2
      docs/en/Emailing.md
  30. 2
      docs/en/Entity-Framework-Core-Migrations.md
  31. 2
      docs/en/Entity-Framework-Core-MySQL.md
  32. 2
      docs/en/Entity-Framework-Core-Oracle-Devart.md
  33. 2
      docs/en/Entity-Framework-Core-Oracle-Official.md
  34. 2
      docs/en/Entity-Framework-Core-Oracle.md
  35. 2
      docs/en/Entity-Framework-Core-Other-DBMS.md
  36. 2
      docs/en/Entity-Framework-Core-PostgreSQL.md
  37. 2
      docs/en/Entity-Framework-Core-SQLite.md
  38. 2
      docs/en/Getting-Started-AspNetCore-Application.md
  39. 2
      docs/en/Getting-Started-React-Native.md
  40. 2
      docs/en/Getting-Started-With-Startup-Templates.md
  41. 2
      docs/en/Index.md
  42. 2
      docs/en/Integration-Tests.md
  43. 2
      docs/en/Json-Serialization.md
  44. 2
      docs/en/MailKit.md
  45. 101
      docs/en/Migration-Guides/Abp-5_0-Angular.md
  46. 51
      docs/en/Migration-Guides/Abp-5_0.md
  47. 10
      docs/en/Migration-Guides/Index.md
  48. 2
      docs/en/Module-Development-Basics.md
  49. 5
      docs/en/Modules/Cms-Kit/Index.md
  50. 2
      docs/en/Modules/Setting-Management.md
  51. 2
      docs/en/Object-Extensions.md
  52. 2
      docs/en/Options.md
  53. 2
      docs/en/RabbitMq.md
  54. 2
      docs/en/Road-Map.md
  55. 2
      docs/en/SMS-Sending.md
  56. 2
      docs/en/Settings.md
  57. 54
      docs/en/SignalR-Integration.md
  58. 2
      docs/en/Specifications.md
  59. 2
      docs/en/Startup-Templates/Application.md
  60. 2
      docs/en/Startup-Templates/Index.md
  61. 2
      docs/en/Startup-Templates/Module.md
  62. 2
      docs/en/Testing.md
  63. 2
      docs/en/Timing.md
  64. 249
      docs/en/UI/Angular/Chart-Component.md
  65. 12
      docs/en/UI/Angular/Content-Strategy.md
  66. 46
      docs/en/UI/Angular/Permission-Management.md
  67. BIN
      docs/en/UI/Angular/images/bar-chart.png
  68. BIN
      docs/en/UI/Angular/images/doughnut-chart.png
  69. BIN
      docs/en/UI/Angular/images/pie-chart.png
  70. BIN
      docs/en/UI/Angular/images/radar-chart.gif
  71. 4
      docs/en/docs-nav.json
  72. 2
      docs/es/Index.md
  73. 2
      docs/pt-BR/Audit-Logging.md
  74. 2
      docs/pt-BR/Domain-Services.md
  75. 2
      docs/pt-BR/Emailing.md
  76. 2
      docs/pt-BR/Integration-Tests.md
  77. 2
      docs/pt-BR/SMS-Sending.md
  78. 2
      docs/pt-BR/Settings.md
  79. 2
      docs/pt-BR/Specifications.md
  80. 2
      docs/pt-BR/Testing.md
  81. 2
      docs/zh-Hans/Best-Practices/Application-Services.md
  82. 2
      docs/zh-Hans/Best-Practices/Data-Transfer-Objects.md
  83. 2
      docs/zh-Hans/Best-Practices/Domain-Services.md
  84. 2
      docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md
  85. 2
      docs/zh-Hans/Best-Practices/Index.md
  86. 2
      docs/zh-Hans/Best-Practices/Module-Architecture.md
  87. 2
      docs/zh-Hans/Domain-Services.md
  88. 2
      docs/zh-Hans/Entity-Framework-Core-Migrations.md
  89. 2
      docs/zh-Hans/Getting-Started-AspNetCore-Application.md
  90. 2
      docs/zh-Hans/Index.md
  91. 2
      docs/zh-Hans/Module-Development-Basics.md
  92. 4
      docs/zh-Hans/Modules/Setting-Management.md
  93. 2
      docs/zh-Hans/Startup-Templates/Application.md
  94. 2
      docs/zh-Hans/Startup-Templates/Index.md
  95. 2
      docs/zh-Hans/Startup-Templates/Module.md
  96. 20
      framework/Volo.Abp.sln
  97. 2
      framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml
  98. 2
      framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd
  99. 2
      framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml
  100. 2
      framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd

16
.github/workflows/auto-pr.yml

@ -1,10 +1,10 @@
name: Merge branch dev with rel-4.4
name: Merge branch dev with rel-5.0
on:
push:
branches:
- rel-4.4
- rel-5.0
jobs:
merge-dev-with-rel-4-4:
merge-dev-with-rel-5-0:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
@ -12,13 +12,13 @@ jobs:
ref: dev
- name: Reset promotion branch
run: |
git fetch origin rel-4.4:rel-4.4
git reset --hard rel-4.4
git fetch origin rel-5.0:rel-5.0
git reset --hard rel-5.0
- name: Create Pull Request
uses: peter-evans/create-pull-request@v3
with:
branch: auto-merge/rel-4-4/${{github.run_number}}
title: Merge branch dev with rel-4.4
body: This PR generated automatically to merge dev with rel-4.4. Please review the changed files before merging to prevent any errors that may occur.
branch: auto-merge/rel-5-0/${{github.run_number}}
title: Merge branch dev with rel-5.0
body: This PR generated automatically to merge dev with rel-5.0. Please review the changed files before merging to prevent any errors that may occur.
reviewers: ${{github.actor}}
token: ${{ github.token }}

4
Directory.Build.props

@ -5,7 +5,7 @@
<MicrosoftPackageVersion>6.0.0-rc.*</MicrosoftPackageVersion>
<!-- Microsoft.NET.Test.Sdk https://www.nuget.org/packages/Microsoft.NET.Test.Sdk -->
<MicrosoftNETTestSdkPackageVersion>16.9.1</MicrosoftNETTestSdkPackageVersion>
<MicrosoftNETTestSdkPackageVersion>16.11.0</MicrosoftNETTestSdkPackageVersion>
<!-- NSubstitute https://www.nuget.org/packages/NSubstitute -->
<NSubstitutePackageVersion>4.2.2</NSubstitutePackageVersion>
@ -23,7 +23,7 @@
<xUnitRunnerVisualstudioPackageVersion>2.4.3</xUnitRunnerVisualstudioPackageVersion>
<!-- Mongo2Go https://www.nuget.org/packages/Mongo2Go -->
<Mongo2GoPackageVersion>3.1.1</Mongo2GoPackageVersion>
<Mongo2GoPackageVersion>3.1.3</Mongo2GoPackageVersion>
</PropertyGroup>
</Project>

41
abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json

@ -310,6 +310,45 @@
"DeleteInvoice" : "Delete Invoice",
"SuccessfullyDeleted": "Successfully deleted!",
"PaymentStateSetTo" : "Payment state set to {0}",
"ChangeState": "Change State"
"ChangeState": "Change State",
"Permission:TrialLicense" : "Trial License",
"Menu:TrialLicenses": "Trial Licenses",
"TrialLicenses": "Trial Licenses",
"UserNameFilter": "Username",
"TrialLicenseStatusFilter": "Status",
"TrialLicenseStartDateFilter": "Start date",
"TrialLicenseEndDateFilter": "End date",
"FirsName": "First name",
"LastName": "Last name",
"Status": "Status",
"StartDate": "Start date",
"EndDate": "End date",
"CompanyName": "Company name",
"PurchasedDate": "Purchased date",
"OrganizationDetail": "Organization Detail",
"SendActivationMail": "Send Activation Mail",
"ActivationMailSentSuccessfully": "Activation mail sent successfully!",
"TrialLicenseStatus": "Trial license status",
"TrialLicenseDetail": "Trial License Detail",
"AcceptsMarketingCommunications": "Marketing Communications",
"PurposeOfUsage": "Purpose of usage",
"CountryName": "Country name",
"CompanySize": "Company size",
"DetailTrialLicense": "Details",
"Requested": "Requested",
"Activated": "Activated",
"PurchasedToNormalLicense": "Purchased",
"Expired": "Expired",
"TrialLicenseDeletionWarningMessage": "Are you sure you want to delete the trial license? Trial license, organization, support accounts will be deleted!",
"LicenseCategoryFilter": "License category",
"Volo.AbpIo.Commercial:030000": "You already used your trial period.",
"Volo.AbpIo.Commercial:030001": "This organization name already exists.",
"Volo.AbpIo.Commercial:030002": "Once activated, trial license cannot be set to requested!",
"Volo.AbpIo.Commercial:030003": "There is no such status!",
"Volo.AbpIo.Commercial:030004": "Status could not be changed due to an unexpected error!",
"Volo.AbpIo.Commercial:030005": "Start date and end date cannot be given when the trial license is in the requested state!",
"Volo.AbpIo.Commercial:030006": "End date must always be greater than start date!",
"Volo.AbpIo.Commercial:030007": "This trial license has already been activated once!",
"Volo.AbpIo.Commercial:030008": "Purchase date can be set only when status is Purchased!",
}
}

2
abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json

@ -1,4 +1,4 @@
{
{
"culture": "en",
"texts": {
"Permission:CommunityArticle": "Community Article",

2
abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/ro-RO.json

@ -1,4 +1,4 @@
{
{
"culture": "ro-RO",
"texts": {
"Permission:CommunityArticle": "Articol comunitar",

2
common.props

@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>5.0.0</Version>
<Version>5.0.0-beta.1</Version>
<NoWarn>$(NoWarn);CS1591;CS0436</NoWarn>
<PackageIconUrl>https://abp.io/assets/abp_nupkg.png</PackageIconUrl>
<PackageProjectUrl>https://abp.io/</PackageProjectUrl>

2
configureawait.props

@ -1,7 +1,7 @@
<Project>
<ItemGroup>
<PackageReference Include="ConfigureAwait.Fody" Version="3.3.1" PrivateAssets="All" />
<PackageReference Include="Fody" Version="6.5.0">
<PackageReference Include="Fody" Version="6.5.3">
<PrivateAssets>All</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
</PackageReference>

2
docs/cs/Entity-Framework-Core-PostgreSQL.md

@ -1,4 +1,4 @@
# Přepnutí na EF Core PostgreSQL providera
# Přepnutí na EF Core PostgreSQL providera
Tento dokument vysvětluje, jak přepnout na poskytovatele databáze **PostgreSQL** pro **[spouštěcí šablonu aplikace](Startup-Templates/Application.md)**, která je dodávána s předem nakonfigurovaným SQL poskytovatelem.

2
docs/cs/Getting-Started-AspNetCore-Application.md

@ -1,4 +1,4 @@
# Začínáme s ASP.NET Core MVC aplikací
# Začínáme s ASP.NET Core MVC aplikací
Tento tutoriál vysvětluje jak začít s ABP z ničeho s minimem závislostí. Obvykle chcete začít se **[startovací šablonou](https://abp.io/Templates)**.

2
docs/cs/Getting-Started-Console-Application.md

@ -1,4 +1,4 @@
# Začínáme s konzolovou aplikací
# Začínáme s konzolovou aplikací
Tento tutoriál vysvětluje jak začít s ABP z ničeho s minimem závislostí. Obvykle chcete začít se **[startovací šablonou](https://abp.io/Templates)**.

2
docs/cs/Index.md

@ -1,4 +1,4 @@
# ABP dokumentace
# ABP dokumentace
ABP je **open source aplikační framework** se zaměřením na vývoj webových aplikací založených na ASP.NET Core, zároveň ho však lze využít i k vývoji jiných typů aplikací.

2
docs/en/API/Application-Configuration.md

@ -1,4 +1,4 @@
# Application Configuration Endpoint
# Application Configuration Endpoint
ABP Framework provides a pre-built and standard endpoint that contains some useful information about the application/service. Here, the list of some fundamental information at this endpoint:

2
docs/en/API/Swagger-Integration.md

@ -1,4 +1,4 @@
# Swagger Integration
# Swagger Integration
[Swagger (OpenAPI)](https://swagger.io/) is a language-agnostic specification for describing REST APIs. It allows both computers and humans to understand the capabilities of a REST API without direct access to the source code. Its main goals are to:

2
docs/en/Audit-Logging.md

@ -1,4 +1,4 @@
# Audit Logging
# Audit Logging
[Wikipedia](https://en.wikipedia.org/wiki/Audit_trail): "*An audit trail (also called **audit log**) is a security-relevant chronological record, set of records, and/or destination and source of records that provide documentary evidence of the sequence of activities that have affected at any time a specific operation, procedure, or event*".

2
docs/en/Best-Practices/Application-Services.md

@ -1,4 +1,4 @@
## Application Services Best Practices & Conventions
## Application Services Best Practices & Conventions
* **Do** create an application service for each **aggregate root**.

2
docs/en/Best-Practices/Data-Transfer-Objects.md

@ -1,4 +1,4 @@
## Data Transfer Objects Best Practices & Conventions
## Data Transfer Objects Best Practices & Conventions
* **Do** define DTOs in the **application contracts** package.
* **Do** inherit from the pre-built **base DTO classes** where possible and necessary (like `EntityDto<TKey>`, `CreationAuditedEntityDto<TKey>`, `AuditedEntityDto<TKey>`, `FullAuditedEntityDto<TKey>` and so on).

2
docs/en/Best-Practices/Domain-Services.md

@ -1,4 +1,4 @@
## Domain Services Best Practices & Conventions
## Domain Services Best Practices & Conventions
> **This document is not ready yet. Please see the [Domain Services](../Domain-Services.md) document.**

2
docs/en/Best-Practices/Entity-Framework-Core-Integration.md

@ -1,4 +1,4 @@
## Entity Framework Core Integration Best Practices
## Entity Framework Core Integration Best Practices
> See [Entity Framework Core Integration document](../Entity-Framework-Core.md) for the basics of the EF Core integration.

2
docs/en/Best-Practices/Index.md

@ -1,4 +1,4 @@
## Module Development Best Practices & Conventions
## Module Development Best Practices & Conventions
### Introduction

2
docs/en/Best-Practices/Module-Architecture.md

@ -1,4 +1,4 @@
## Module Architecture Best Practices & Conventions
## Module Architecture Best Practices & Conventions
### Solution Structure

2
docs/en/Best-Practices/MongoDB-Integration.md

@ -1,4 +1,4 @@
## MongoDB Integration
## MongoDB Integration
* Do define a separated `MongoDbContext` interface and class for each module.

2
docs/en/CLI.md

@ -1,4 +1,4 @@
# ABP CLI
# ABP CLI
ABP CLI (Command Line Interface) is a command line tool to perform some common operations for ABP based solutions.

BIN
docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

88
docs/en/Community-Articles/2021-09-25-How-to-Override-Localization-Strings-Of-Depending-Modules/POST.md

@ -0,0 +1,88 @@
# How to override localization strings of depending modules
## Source Code
You can find the source of the example solution used in this article [here](https://github.com/abpframework/abp-samples/tree/master/DocumentationSamples/ExtendLocalizationResource).
## Getting Started
This example is based on the following document
https://docs.abp.io/en/abp/latest/Localization#extending-existing-resource
We will change the default `DisplayName:Abp.Timing.Timezone` and `Description:Abp.Timing.Timezone` of [`AbpTimingResource`](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/AbpTimingResource.cs) and add localized text in [Russian language(`ru`)](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Timing/Volo/Abp/Timing/Localization/en.json).
I created the `AbpTiming` folder in the `Localization` directory of the `ExtendLocalizationResource.Domain.Shared` project.
Create `en.json` and `ru.json` in its directory.
`en.json`
```json
{
"culture": "en",
"texts": {
"DisplayName:Abp.Timing.Timezone": "My Time zone",
"Description:Abp.Timing.Timezone": "My Application time zone"
}
}
```
`ru.json`
```json
{
"culture": "ru",
"texts": {
"DisplayName:Abp.Timing.Timezone": "Часовой пояс",
"Description:Abp.Timing.Timezone": "Часовой пояс приложения"
}
}
```
![](1.png)
We have below content in `ExtendLocalizationResource.Domain.Shared.csproj` file, See [Virtual-File-System](https://docs.abp.io/en/abp/latest/Virtual-File-System#working-with-the-embedded-files) understand how it works.
```xml
<ItemGroup>
<EmbeddedResource Include="Localization\ExtendLocalizationResource\*.json" />
<Content Remove="Localization\ExtendLocalizationResource\*.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.*" />
</ItemGroup>
```
Change the code of the `ConfigureServices` method in `ExtendLocalizationResourceDomainSharedModule`.
```cs
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<ExtendLocalizationResourceResource>("en")
.AddBaseTypes(typeof(AbpValidationResource))
.AddVirtualJson("/Localization/ExtendLocalizationResource");
//add following code
options.Resources
.Get<AbpTimingResource>()
.AddVirtualJson("/Localization/AbpTiming");
options.DefaultResourceType = typeof(ExtendLocalizationResourceResource);
});
```
Execute `ExtendLocalizationResource.DbMigrator` to migrate the database and run `ExtendLocalizationResource.Web`.
We have changed the English localization text and added Russian localization.
### Index page
```cs
<p>@AbpTimingResource["DisplayName:Abp.Timing.Timezone"]</p>
@using(CultureHelper.Use("ru"))
{
<p>@AbpTimingResource["DisplayName:Abp.Timing.Timezone"]</p>
}
```
![](2.png)

2
docs/en/Configuration.md

@ -1,3 +1,3 @@
# Configuration
# Configuration
ASP.NET Core has an flexible and extensible key-value based configuration system. In fact, the configuration system is a part of Microsoft.Extensions libraries and it is independent from ASP.NET Core. That means it can be used in any type of application. See [Microsoft's documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/) to learn the configuration infrastructure. ABP framework is 100% compatible with the configuration system.

2
docs/en/Dependency-Injection.md

@ -1,4 +1,4 @@
# Dependency Injection
# Dependency Injection
ABP's Dependency Injection system is developed based on Microsoft's [dependency injection extension](https://medium.com/volosoft/asp-net-core-dependency-injection-best-practices-tips-tricks-c6e9c67f9d96) library (Microsoft.Extensions.DependencyInjection nuget package). So, it's documentation is valid in ABP too.

2
docs/en/Domain-Services.md

@ -1,4 +1,4 @@
# Domain Services
# Domain Services
## Introduction

2
docs/en/Emailing.md

@ -1,4 +1,4 @@
# Email Sending
# Email Sending
ABP Framework provides various services, settings and integrations for sending emails;

2
docs/en/Entity-Framework-Core-Migrations.md

@ -1,4 +1,4 @@
# EF Core Database Migrations
# EF Core Database Migrations
This document begins by **introducing the default structure** provided by [the application startup template](Startup-Templates/Application.md) and **discusses various scenarios** you may want to implement for your own application.

2
docs/en/Entity-Framework-Core-MySQL.md

@ -1,4 +1,4 @@
# Switch to EF Core MySQL Provider
# Switch to EF Core MySQL Provider
This document explains how to switch to the **MySQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.

2
docs/en/Entity-Framework-Core-Oracle-Devart.md

@ -1,4 +1,4 @@
# Switch to EF Core Oracle Devart Provider
# Switch to EF Core Oracle Devart Provider
This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.

2
docs/en/Entity-Framework-Core-Oracle-Official.md

@ -1,4 +1,4 @@
# Switch to EF Core Oracle Provider
# Switch to EF Core Oracle Provider
This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.

2
docs/en/Entity-Framework-Core-Oracle.md

@ -1,4 +1,4 @@
# Switch to EF Core Oracle Provider
# Switch to EF Core Oracle Provider
This document explains how to switch to the **Oracle** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.

2
docs/en/Entity-Framework-Core-Other-DBMS.md

@ -1,4 +1,4 @@
# Switch to Another DBMS for Entity Framework Core
# Switch to Another DBMS for Entity Framework Core
**[The application startup template](Startup-Templates/Application.md)** comes with **SQL Server provider pre-configured** for the Entity Framework Core. However, EF Core supports [many other DBMSs](https://docs.microsoft.com/en-us/ef/core/providers/) and you can use any of them within your ABP based applications.

2
docs/en/Entity-Framework-Core-PostgreSQL.md

@ -1,4 +1,4 @@
# Switch to EF Core PostgreSQL Provider
# Switch to EF Core PostgreSQL Provider
This document explains how to switch to the **PostgreSQL** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.

2
docs/en/Entity-Framework-Core-SQLite.md

@ -1,4 +1,4 @@
# Switch to EF Core SQLite Provider
# Switch to EF Core SQLite Provider
This document explains how to switch to the **SQLite** database provider for **[the application startup template](Startup-Templates/Application.md)** which comes with SQL Server provider pre-configured.

2
docs/en/Getting-Started-AspNetCore-Application.md

@ -1,4 +1,4 @@
# Getting Started ABP With AspNet Core MVC Web Application
# Getting Started ABP With AspNet Core MVC Web Application
This tutorial explains how to start ABP from scratch with minimal dependencies. You generally want to start with the **[startup template](Getting-Started-AspNetCore-MVC-Template.md)**.

2
docs/en/Getting-Started-React-Native.md

@ -1,4 +1,4 @@
# Getting Started with the React Native
# Getting Started with the React Native
````json
//[doc-params]

2
docs/en/Getting-Started-With-Startup-Templates.md

@ -1,4 +1,4 @@
# Getting Started with the Startup Templates
# Getting Started with the Startup Templates
See the following tutorials to learn how to get started with the ABP Framework using the pre-built application startup templates:

2
docs/en/Index.md

@ -1,4 +1,4 @@
# ABP Documentation
# ABP Documentation
ABP Framework is a complete **infrastructure** based on the **ASP.NET Core** to create **modern web applications** and **APIs** by following the software development **best practices** and the **latest technologies**.

2
docs/en/Integration-Tests.md

@ -1 +1 @@
This document has been [moved to here](Testing.md).
This document has been [moved to here](Testing.md).

2
docs/en/Json-Serialization.md

@ -1,3 +1,3 @@
# JSON
# JSON
TODO

2
docs/en/MailKit.md

@ -1,4 +1,4 @@
# MailKit Integration
# MailKit Integration
[MailKit](http://www.mimekit.net/) is a cross-platform, popular open source mail client library for .net. ABP Framework provides an integration package to use the MailKit as the [email sender](Emailing.md).

101
docs/en/Migration-Guides/Abp-5_0-Angular.md

@ -0,0 +1,101 @@
# Angular UI v4.x to v5.0 Migration Guide
## Breaking Changes
### Overall
See the overall list of breaking changes:
- Bootstrap 5 implementation [#10067](https://github.com/abpframework/abp/issues/10067)
- Remove NGXS dependency & states [#9952](https://github.com/abpframework/abp/issues/9952)
- Install @angular/localize package to startup templates [#10099](https://github.com/abpframework/abp/issues/10099)
- Create new secondary entrypoints and move the related proxies to there [#10060](https://github.com/abpframework/abp/issues/10060)
- Move SettingTabsService to @abp/ng.setting-management/config package from @abp/ng.core [#10061](https://github.com/abpframework/abp/issues/10061)
- Make the @abp/ng.account dependent on @abp/ng.identity [#10059](https://github.com/abpframework/abp/issues/10059)
- Set default abp-modal size medium [#10118](https://github.com/abpframework/abp/issues/10118)
- Update all dependency versions to the latest [#9806](https://github.com/abpframework/abp/issues/9806)
- Chart.js big include with CommonJS warning [#7472](https://github.com/abpframework/abp/issues/7472)
### Angular v12
The new ABP Angular UI is based on Angular v12. We started to compile Angular UI packages with the Ivy compilation. Therefore, **new packages only work with Angular v12**. If you are still on the older version of Angular v12, you have to update to Angular v12. The update is usually very easy. See [Angular Update Guide](https://update.angular.io/?l=2&v=11.0-12.0) for further information.
### Bootstrap 5
TODO
### NGXS has been removed
We aim to make the ABP Framework free of any state-management solutions. ABP developers should be able to use the ABP Framework with any library/framework of their choice. So, we decided to remove NGXS from ABP packages.
If you'd like to use NGXS after upgrading to v5.0, you have to install the NGXS to your project. The package can be installed with the following command:
```bash
npm install @ngxs/store
# or
yarn add @ngxs/store
```
NGXS states and actions, some namespaces have been removed. See [this issue](https://github.com/abpframework/abp/issues/9952) for the details.
If you don't want to use the NGXS, you should remove all NGXS related imports, injections, etc., from your project.
### @angular/localize package
[`@angular/localize`](https://angular.io/api/localize) dependency has been removed from `@abp/ng.core` package. The package must be installed in your app. Run the following command to install:
```bash
npm install @angular/localize
# or
yarn add @angular/localize
```
> ABP Angular UI packages are not dependent on the `@angular/localize` package. However, some packages (like `@ng-bootstrap/ng-bootstrap`) depend on the package. Thus, this package needs to be installed in your project.
### Proxy endpoints
New endpoints named proxy have been created, related proxies have moved.
For example; before v5.0, `IdentityUserService` could be imported from `@abp/ng.identity`. As of v5.0, the service can be imported from `@abp/ng.identity/proxy`. See an example:
```ts
import { IdentityUserService } from '@abp/ng.identity/proxy';
@Component({})
export class YourComponent {
constructor(private identityUserService: IdentityUserService) {}
}
```
Following proxies have been affected:
- `@abp/ng.account` to `@abp/ng.account.core/proxy`
- `@abp/ng.feature-management` to `@abp/ng.feature-management/proxy`
- `@abp/ng.identity` to `@abp/ng.identity/proxy`
- `@abp/ng.permission-management` to `@abp/ng.permission-management/proxy`
- `@abp/ng.tenant-management` to `@abp/ng.tenant-management/proxy`
- **ProfileService** is deleted from `@abp/ng.core`. Instead, you can import it from `@abp/ng.identity/proxy`
### SettingTabsService
**SettingTabsService** has moved from `@abp/ng.core` to `@abp/ng.setting-management/config`.
### ChartComponent
[`ChartComponent`](../UI/Angular/Chart-Component.md) has moved from `@abp/ng.theme.shared` to `@abp/ng.components/chart.js`. To use the component, you need to import the `ChartModule` to your module as follows:
```ts
import { ChartModule } from '@abp/ng.components/chart.js';
@NgModule({
imports: [
ChartModule,
// ...
],
// ...
})
export class YourFeatureModule {}
```

51
docs/en/Migration-Guides/Abp-5_0.md

@ -0,0 +1,51 @@
# ABP Framework v4.x to v5.0 Migration Guide
## IdentityUser
`IsActive <bool>` property is added to the `IdentityUser`. This flag will be checked during the authentication of the users. See the related [PR](https://github.com/abpframework/abp/pull/10185).
**After the migration, set this property to `true` for the existing users: `UPDATE AbpUsers SET IsActive=1`**
For EFCore you can set `defaultValue` to `true` in the migration class:
(This will add the column with `true` value for the existing records.)
```cs
public partial class AddIsActiveToIdentityUser : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsActive",
table: "AbpUsers",
type: "bit",
nullable: false,
defaultValue: true); // Default is false.
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IsActive",
table: "AbpUsers");
}
}
```
For document base databases like MongoDB, you need to manually update the `IsActive` field for the existing user records.
## MongoDB
ABP Framework will serialize the datetime based on [AbpClockOptions](https://docs.abp.io/en/abp/latest/Timing#clock-options) starting from ABP v5.0. It was saving `DateTime` values as UTC in MongoDB. Check out [MongoDB Datetime Serialization Options](https://mongodb.github.io/mongo-csharp-driver/2.13/reference/bson/mapping/#datetime-serialization-options).
To revert back this feature, set `UseAbpClockHandleDateTime = false` in `AbpMongoDbOptions`:
```cs
services.Configure<AbpMongoDbOptions>(x => x.UseAbpClockHandleDateTime = false);
```
## IApiScopeRepository
`GetByNameAsync` method renamed as `FindByNameAsync`.
## Angular UI
See the [Angular UI 5.0 Migration Guide](Abp-5_0-Angular.md).

10
docs/en/Migration-Guides/Index.md

@ -1,7 +1,7 @@
# ABP Framework Migration Guides
* [4.2 to 4.3](Abp-4_3.md)
* [4.x to 4.2](Abp-4_2.md)
* [3.3.x to 4.0](Abp-4_0.md)
* [2.9.x to 3.0](../UI/Angular/Migration-Guide-v3.md)
- [4.x to 5.0](Abp-5_0.md)
- [4.2 to 4.3](Abp-4_3.md)
- [4.x to 4.2](Abp-4_2.md)
- [3.3.x to 4.0](Abp-4_0.md)
- [2.9.x to 3.0](../UI/Angular/Migration-Guide-v3.md)

2
docs/en/Module-Development-Basics.md

@ -1,4 +1,4 @@
# Modularity
# Modularity
## Introduction

5
docs/en/Modules/Cms-Kit/Index.md

@ -20,11 +20,16 @@ All features are individually usable. If you disable a feature, it completely di
## How to Install
> This module is depends on [BlobStoring](../../Blob-Storing.md) module, please install `BlobStoring` module first and add a provider. For more information, check the [documentation](../../Blob-Storing.md).
[ABP CLI](../../CLI.md) allows installing a module to a solution using the `add-module` command. You can install the CMS Kit module in a command-line terminal with the following command:
```bash
abp add-module Volo.CmsKit
```
> By default, Cms-Kit is disabled by `GlobalFeature`. Because of that the initial migration will be empty. So you can skip the migration by adding `--skip-db-migrations` to command when installing if you are using Entity Framework Core. After enabling Cms-Kit global feture, please add new migration.
After the installation process, open the `GlobalFeatureConfigurator` class in the `Domain.Shared` project of your solution and place the following code into the `Configure` method to enable all the features in the CMS Kit module.
```csharp

2
docs/en/Modules/Setting-Management.md

@ -278,7 +278,7 @@ Open the `app.component.ts` and modify the file as shown below:
```js
import { Component } from '@angular/core';
import { SettingTabsService } from '@abp/ng.core'; // imported SettingTabsService
import { SettingTabsService } from '@abp/ng.setting-management/config'; // imported SettingTabsService
import { MySettingsComponent } from './my-settings/my-settings.component'; // imported MySettingsComponent
@Component(/* component metadata */)

2
docs/en/Object-Extensions.md

@ -1,4 +1,4 @@
# Object Extensions
# Object Extensions
ABP Framework provides an **object extension system** to allow you to **add extra properties** to an existing object **without modifying** the related class. This allows to extend functionalities implemented by a depended [application module](Modules/Index.md), especially when you want to [extend entities](Customizing-Application-Modules-Extending-Entities.md) and [DTOs](Customizing-Application-Modules-Overriding-Services.md) defined by the module.

2
docs/en/Options.md

@ -1,4 +1,4 @@
# Options
# Options
Microsoft has introduced [the options pattern](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options) that is used to configure a group of settings used by the framework services. This pattern is implemented by the [Microsoft.Extensions.Options](https://www.nuget.org/packages/Microsoft.Extensions.Options) NuGet package, so it is usable by any type of applications in addition to ASP.NET Core based applications.

2
docs/en/RabbitMq.md

@ -1,3 +1,3 @@
# RabbitMQ
# RabbitMQ
TODO!

2
docs/en/Road-Map.md

@ -1,4 +1,4 @@
# ABP Framework Road Map
# ABP Framework Road Map
This document provides a road map, release schedule and planned features for the ABP Framework.

2
docs/en/SMS-Sending.md

@ -1,4 +1,4 @@
# SMS Sending
# SMS Sending
The ABP Framework provides an abstraction to sending SMS. Having such an abstraction has some benefits;

2
docs/en/Settings.md

@ -1,4 +1,4 @@
# Settings
# Settings
[Configuration system](Configuration.md) is a good way to configure the application on startup. In addition to the configurations, ABP provides another way to set and get some application settings.

54
docs/en/SignalR-Integration.md

@ -52,15 +52,15 @@ Client side installation depends on your UI framework / client type.
Run the following command in the root folder of your web project:
````bash
```bash
yarn add @abp/signalr
````
```
> This requires to [install yarn](https://yarnpkg.com/) if you haven't install before.
This will add the `@abp/signalr` to the dependencies in the `package.json` of your project:
````json
```json
{
...
"dependencies": {
@ -68,25 +68,25 @@ This will add the `@abp/signalr` to the dependencies in the `package.json` of yo
"@abp/signalr": "~2.7.0"
}
}
````
```
Run the following [ABP CLI](CLI.md) command in the root folder of your web project:
````bash
```bash
abp install-libs
````
```
This will copy the SignalR JavaScript files into your project:
![signal-js-file](images/signal-js-file.png)
Finally, add the following code to your page/view to include the `signalr.js` file
Finally, add the following code to your page/view to include the `signalr.js` file
````xml
```xml
@section scripts {
<abp-script type="typeof(SignalRBrowserScriptContributor)" />
}
````
```
It requires to add `@using Volo.Abp.AspNetCore.Mvc.UI.Packages.SignalR` to your page/view.
@ -108,27 +108,27 @@ ABP automatically registers all the hubs to the [dependency injection](Dependenc
Example:
````csharp
```csharp
public class MessagingHub : Hub
{
//...
}
````
```
The hub route will be `/signalr-hubs/messaging` for the `MessagingHub`:
* Adding a standard `/signalr-hubs/` prefix
* Continue with the **camel case** hub name, without the `Hub` suffix.
- Adding a standard `/signalr-hubs/` prefix
- Continue with the **kebab-case** hub name, without the `Hub` suffix.
If you want to specify the route, you can use the `HubRoute` attribute:
````csharp
```csharp
[HubRoute("/my-messaging-hub")]
public class MessagingHub : Hub
{
//...
}
````
```
### AbpHub Base Classes
@ -136,7 +136,7 @@ Instead of the standard `Hub` and `Hub<T>` classes, you can inherit from the `Ab
Example:
````csharp
```csharp
public class MessagingHub : AbpHub
{
public async Task SendMessage(string targetUserName, string message)
@ -145,7 +145,7 @@ public class MessagingHub : AbpHub
var txt = L["MyText"]; //Localization
}
}
````
```
> While you could inject the same properties into your hub constructor, this way simplifies your hub class.
@ -153,9 +153,9 @@ public class MessagingHub : AbpHub
ABP automatically registers all the hubs to the [dependency injection](Dependency-Injection.md) as a **transient service**. If you want to **disable auto dependency injection** registration for your hub class, just add a `DisableConventionalRegistration` attribute. You can still register your hub class to dependency injection in the `ConfigureServices` method of your module if you like:
````csharp
```csharp
context.Services.AddTransient<MessagingHub>();
````
```
When **you or ABP** register the class to the dependency injection, it is automatically mapped to the endpoint route configuration just as described in the previous sections. You can use `DisableAutoHubMap` attribute if you want to manually map your hub class.
@ -163,7 +163,7 @@ For manual mapping, you have two options:
1. Use the `AbpSignalROptions` to add your map configuration (in the `ConfigureServices` method of your [module](Module-Development-Basics.md)), so ABP still performs the endpoint mapping for your hub:
````csharp
```csharp
Configure<AbpSignalROptions>(options =>
{
options.Hubs.Add(
@ -178,13 +178,13 @@ Configure<AbpSignalROptions>(options =>
)
);
});
````
```
This is a good way to provide additional SignalR options.
If you don't want to disable auto hub map, but still want to perform additional SignalR configuration, use the `options.Hubs.AddOrUpdate(...)` method:
````csharp
```csharp
Configure<AbpSignalROptions>(options =>
{
options.Hubs.AddOrUpdate(
@ -200,13 +200,13 @@ Configure<AbpSignalROptions>(options =>
}
);
});
````
```
This is the way you can modify the options of a hub class defined in a depended module (where you don't have the source code access).
2. Change `app.UseConfiguredEndpoints` in the `OnApplicationInitialization` method of your [module](Module-Development-Basics.md) as shown below (added a lambda method as the parameter).
````csharp
```csharp
app.UseConfiguredEndpoints(endpoints =>
{
endpoints.MapHub<MessagingHub>("/my-messaging-hub", options =>
@ -214,7 +214,7 @@ app.UseConfiguredEndpoints(endpoints =>
options.LongPolling.PollTimeout = TimeSpan.FromSeconds(30);
});
});
````
```
### UserIdProvider
@ -234,5 +234,5 @@ Refer to the Microsoft's documentation to [host and scale](https://docs.microsof
## See Also
* [Microsoft SignalR documentation](https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction)
* [Real-Time Messaging In A Distributed Architecture Using ABP, SingalR & RabbitMQ](https://volosoft.com/blog/RealTime-Messaging-Distributed-Architecture-Abp-SingalR-RabbitMQ)
- [Microsoft SignalR documentation](https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction)
- [Real-Time Messaging In A Distributed Architecture Using ABP, SingalR & RabbitMQ](https://volosoft.com/blog/RealTime-Messaging-Distributed-Architecture-Abp-SingalR-RabbitMQ)

2
docs/en/Specifications.md

@ -1,4 +1,4 @@
# Specifications
# Specifications
Specification Pattern is used to define **named, reusable, combinable and testable filters** for entities and other business objects.

2
docs/en/Startup-Templates/Application.md

@ -1,4 +1,4 @@
# Application Startup Template
# Application Startup Template
## Introduction

2
docs/en/Startup-Templates/Index.md

@ -1,4 +1,4 @@
# Startup Templates
# Startup Templates
While you can start with an empty project and add needed packages manually, startup templates make easy and comfortable to start a new solution with the ABP framework. Click the name from the list below to see the documentation of the related startup template:

2
docs/en/Startup-Templates/Module.md

@ -1,4 +1,4 @@
# Module Startup Template
# Module Startup Template
This template can be used to create a **reusable [application module](../Modules/Index.md)** based on the [module development best practices & conventions](../Best-Practices/Index.md). It is also suitable for creating **microservices** (with or without UI).

2
docs/en/Testing.md

@ -1,4 +1,4 @@
# Automated Testing
# Automated Testing
## Introduction

2
docs/en/Timing.md

@ -1,4 +1,4 @@
# Timing
# Timing
Working with times & [time zones](https://en.wikipedia.org/wiki/Time_zone) is always tricky, especially if you need to build a **global system** that is used by users in **different time zones**.

249
docs/en/UI/Angular/Chart-Component.md

@ -0,0 +1,249 @@
# Chart Component
ABP Chart component exposed by `@abp/ng.components/chart.js` is based on [`charts.js`](https://www.chartjs.org/) v3+. You don't need to install the `chart.js` package. Since the `@abp/ng.components` is dependent on the `chart.js`, the package is already installed in your project.
> Chart component loads `chart.js` script lazy. So it does not increase the bundle size.
## How to Use
First of all, need to import the `ChartModule` to your feature module as follows:
```ts
// your-feature.module.ts
import { ChartModule } from '@abp/ng.components/chart.js';
import { ChartDemoComponent } from './chart-demo.component';
@NgModule({
imports: [
ChartModule,
// ...
],
declarations: [ChartDemoComponent],
// ...
})
export class YourFeatureModule {}
```
Then, `abp-chart` component can be used. See an example:
```ts
// chart-demo.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-chart-demo',
template: ` <abp-chart type="pie" [data]="data"></abp-chart> `,
})
export class ChartDemoComponent {
data = {
labels: ['Data 1', 'Data 2', 'Data 3'],
datasets: [
{
label: 'Dataset 1',
data: [40, 15, 45],
backgroundColor: ['#ff7675', '#fdcb6e', '#0984e3'],
},
],
};
}
```
> **Important Note**: Changing the chart data without creating a new data instance does not trigger change detection. In order to chart to redraw itself, a new data object needs to be created.
See the result:
![pie-chart](./images/pie-chart.png)
## Examples
### Doughnut
```ts
import { Component } from '@angular/core';
@Component({
selector: 'app-chart-demo',
template: `
<abp-chart
type="doughnut"
[data]="data"
[options]="options"
width="400px"
height="400px"
></abp-chart>
`,
})
export class ChartDemoComponent {
data = {
labels: ['Data 1', 'Data 2', 'Data 3'],
datasets: [
{
label: 'Dataset 1',
data: [40, 15, 45],
backgroundColor: ['#a0e6c3', '#f0ea4c', '#5b9dc3'],
},
],
};
options = {
plugins: {
title: {
display: true,
text: 'Doughnut Chart',
fontSize: 16,
},
legend: {
position: 'bottom',
},
},
};
}
```
Result:
![Doughnut Chart](./images/doughnut-chart.png)
### Bar
```ts
import { Component } from '@angular/core';
@Component({
selector: 'app-chart-demo',
template: `
<abp-chart
type="bar"
[data]="data"
width="400px"
height="400px"
></abp-chart>
`,
})
export class ChartDemoComponent {
data = {
labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
datasets: [
{
label: 'First dataset',
backgroundColor: '#42A5F5',
data: [65, 59, 80, 81, 56, 55, 40],
},
{
label: 'Second dataset',
backgroundColor: '#FFA726',
data: [28, 48, 40, 19, 86, 27, 90],
},
],
};
}
```
Result:
![Bar Chart](./images/bar-chart.png)
### Radar
```ts
import { Component } from '@angular/core';
@Component({
selector: 'app-chart-demo',
template: `
<abp-chart
type="radar"
[data]="data"
width="400px"
height="400px"
></abp-chart>
<button class="btn btn-primary-outline mt-4" (click)="addDataset()">
Add dataset
</button>
`,
})
export class ChartDemoComponent {
data = {
labels: [
'January',
'February',
'March',
'April',
'May',
'June',
'July',
'August',
'September',
'October',
'November',
'December',
],
datasets: [
{
label: 'Dataset 1',
backgroundColor: 'rgba(179,181,198,0.2)',
borderColor: 'rgba(179,181,198,1)',
data: [65, 59, 90, 81, 56, 55, 40, 35, 82, 51, 62, 95],
},
{
label: 'Dataset 2',
backgroundColor: 'rgba(255,99,132,0.2)',
borderColor: 'rgba(255,99,132,1)',
data: [28, 48, 40, 58, 96, 27, 100, 44, 85, 77, 71, 39],
},
],
};
addDataset() {
this.data = {
...this.data,
datasets: [
...this.data.datasets,
{
label: 'Dataset 3',
backgroundColor: 'rgba(54,162,235,0.2)',
borderColor: 'rgba(54, 162, 235, 1)',
data: [90, 95, 98, 91, 99, 96, 89, 95, 98, 93, 92, 90],
},
],
};
}
}
```
Result:
![Bar Chart](./images/radar-chart.gif)
See the [`chart.js` samples](https://www.chartjs.org/docs/latest/samples) for more examples.
## API
### `abp-chart`
#### Properties
| Name | Description | Type | Default |
| --------------- | ---------------------------------------------------------------- | ----------------------- | ------- |
| `[type]` | Type of the chart. | `string` | null |
| `[data]` | Chart data to display | `any` | null |
| `[options]` | Chart options to customize | `any` | null |
| `[plugins]` | Chart plugins to customize behaviour | `any` | null |
| `[width]` | Witdh of the chart | `string` | null |
| `[height]` | Height of the chart | `string` | null |
| `[responsive]` | Whether the chart is responsive | `boolean` | true |
| `(dataSelect)` | A callback that executes when an element on the chart is clicked | `EventEmitter<any>` | - |
| `(initialized)` | A callback that executes when the chart is initialized | `EventEmitter<boolean>` | - |
#### Methods
| Name | Description | Parameters |
| ---------------- | ------------------------------------------------------------------- | ---------- |
| `refresh` | Redraws the chart | - |
| `reinit` | Destroys the chart then creates it again | - |
| `getBase64Image` | Returns a base 64 encoded string of the chart in it's current state | - |
| `generateLegend` | Returns an HTML string of a legend for the chart | - |
| `getCanvas` | Returns the canvas HTML element | - |

12
docs/en/UI/Angular/Content-Strategy.md

@ -11,13 +11,15 @@
constructor(
public content: string,
protected domStrategy?: DomStrategy,
protected contentSecurityStrategy?: ContentSecurityStrategy
protected contentSecurityStrategy?: ContentSecurityStrategy,
protected options?: ElementOptions = {},
)
```
- `content` is set to `<script>` and `<style>` elements as `textContent` property.
- `domStrategy` is the `DomStrategy` that will be used when inserting the created element. (_default: AppendToHead_)
- `contentSecurityStrategy` is the `ContentSecurityStrategy` that will be used on the created element before inserting it. (_default: None_)
- `options` can be used to pass any option to the element that will be created. e.g: `{ id: "some-id" }` (_default: empty object_)
Please refer to [DomStrategy](./Dom-Strategy.md) and [ContentSecurityStrategy](./Content-Security-Strategy.md) documentation for their usage.
@ -57,7 +59,7 @@ Predefined content strategies are accessible via `CONTENT_STRATEGY` constant.
### AppendScriptToBody
```js
CONTENT_STRATEGY.AppendScriptToBody(content: string)
CONTENT_STRATEGY.AppendScriptToBody(content: string, options?: ElementOptions<HTMLScriptElement>)
```
Creates a `<script>` element with the given content and places it at the **end** of `<body>` tag in the document.
@ -66,7 +68,7 @@ Creates a `<script>` element with the given content and places it at the **end**
### AppendScriptToHead
```js
CONTENT_STRATEGY.AppendScriptToHead(content: string)
CONTENT_STRATEGY.AppendScriptToHead(content: string, options?: ElementOptions<HTMLScriptElement>)
```
Creates a `<script>` element with the given content and places it at the **end** of `<head>` tag in the document.
@ -75,7 +77,7 @@ Creates a `<script>` element with the given content and places it at the **end**
### AppendStyleToHead
```js
CONTENT_STRATEGY.AppendStyleToHead(content: string)
CONTENT_STRATEGY.AppendStyleToHead(content: string, options?: ElementOptions<HTMLStyleElement>)
```
Creates a `<style>` element with the given content and places it at the **end** of `<head>` tag in the document.
@ -84,7 +86,7 @@ Creates a `<style>` element with the given content and places it at the **end**
### PrependStyleToHead
```js
CONTENT_STRATEGY.PrependStyleToHead(content: string)
CONTENT_STRATEGY.PrependStyleToHead(content: string, options?: ElementOptions<HTMLStyleElement>)
```
Creates a `<style>` element with the given content and places it at the **beginning** of `<head>` tag in the document.

46
docs/en/UI/Angular/Permission-Management.md

@ -4,8 +4,6 @@ A permission is a simple policy that is granted or prohibited for a particular u
You can get permission of authenticated user using `getGrantedPolicy` or `getGrantedPolicy$` method of `PermissionService`.
> ConfigState's getGrantedPolicy selector and ConfigStateService's getGrantedPolicy method deprecated. Use permission service's `getGrantedPolicy$` or `getGrantedPolicy`methods instead
You can get permission as boolean value:
```js
@ -77,4 +75,46 @@ const routes: Routes = [
];
```
Granted Policies are stored in the `auth` property of `ConfigState`.
## Customization
In some cases, a custom permission management may be needed. All you need to do is to replace the service with your own. Here is how to achieve this:
- First, create a service of your own. Let's call it `CustomPermissionService` and extend `PermissionService` from `@abp/ng.core` as follows:
```js
import { ConfigStateService, PermissionService } from '@abp/ng.core';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class CustomPermissionService extends PermissionService {
constructor(configStateService: ConfigStateService) {
super(configStateService);
}
// This is an example to show how to override the methods
getGrantedPolicy$(key: string) {
return super.getGrantedPolicy$(key);
}
}
```
- Then, in `app.module.ts`, provide this service as follows:
```js
@NgModule({
// ...
providers: [
// ...
{
provide: PermissionService,
useExisting: CustomPermissionService,
},
],
// ...
})
export class AppModule {}
```
That's it. Now, when a directive/guard asks for `PermissionService` from angular, it will inject your service.

BIN
docs/en/UI/Angular/images/bar-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
docs/en/UI/Angular/images/doughnut-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
docs/en/UI/Angular/images/pie-chart.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
docs/en/UI/Angular/images/radar-chart.gif

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 MiB

4
docs/en/docs-nav.json

@ -1079,6 +1079,10 @@
{
"text": "Page",
"path": "UI/Angular/Page-Component.md"
},
{
"text": "Chart",
"path": "UI/Angular/Chart-Component.md"
}
]
}

2
docs/es/Index.md

@ -1,4 +1,4 @@
# Documentación de ABP
# Documentación de ABP
ABP es un **marco de desarrollo de código abierto** enfocado en el desarrollo de aplicaciones web basadas en ASP.NET Core, pero tambien soporta el desarrollo de otro tipo de aplicaciones.

2
docs/pt-BR/Audit-Logging.md

@ -1,3 +1,3 @@
# Audit Logging
# Audit Logging
Façam

2
docs/pt-BR/Domain-Services.md

@ -1,3 +1,3 @@
# ABP Documentation
# ABP Documentation
Façam!

2
docs/pt-BR/Emailing.md

@ -1,3 +1,3 @@
# Emailing
# Emailing
Façam!

2
docs/pt-BR/Integration-Tests.md

@ -1,3 +1,3 @@
# Integration Tests
# Integration Tests
Façam!

2
docs/pt-BR/SMS-Sending.md

@ -1,3 +1,3 @@
# Emailing
# Emailing
Façam!

2
docs/pt-BR/Settings.md

@ -1,3 +1,3 @@
# Settings
# Settings
Façam!

2
docs/pt-BR/Specifications.md

@ -1,3 +1,3 @@
# Specifications
# Specifications
Façam!

2
docs/pt-BR/Testing.md

@ -1,3 +1,3 @@
# Testing
# Testing
Façam!

2
docs/zh-Hans/Best-Practices/Application-Services.md

@ -1,4 +1,4 @@
## 应用服务最佳实践 & 约定
## 应用服务最佳实践 & 约定
* **推荐** 为每个 **聚合根** 创建一个应用服务.

2
docs/zh-Hans/Best-Practices/Data-Transfer-Objects.md

@ -1,4 +1,4 @@
## 数据传输对象最佳实践 & 约定
## 数据传输对象最佳实践 & 约定
* **推荐** 在 **application.contracts** 层中定义DTO.
* **推荐** 在可能和必要的情况下从预构建的 **基础DTO类** 继承 (如 `EntityDto<TKey>`, `CreationAuditedEntityDto<TKey>`, `AuditedEntityDto<TKey>`, `FullAuditedEntityDto<TKey>` 等).

2
docs/zh-Hans/Best-Practices/Domain-Services.md

@ -1,3 +1,3 @@
## 领域服务最佳实践 & 约定
## 领域服务最佳实践 & 约定
TODO

2
docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md

@ -1,4 +1,4 @@
## Entity Framework Core 集成最佳实践
## Entity Framework Core 集成最佳实践
> 有关EF Core 集成的基础知识,请参阅[Entity Framework Core 集成文档](../Entity-Framework-Core.md).

2
docs/zh-Hans/Best-Practices/Index.md

@ -1,4 +1,4 @@
## 模块开发最佳实践 & 约定
## 模块开发最佳实践 & 约定
### 介绍

2
docs/zh-Hans/Best-Practices/Module-Architecture.md

@ -1,4 +1,4 @@
## 模块化架构最佳实践 & 约定
## 模块化架构最佳实践 & 约定
### 解决方案结构

2
docs/zh-Hans/Domain-Services.md

@ -1,3 +1,3 @@
# ABP Documentation
# ABP Documentation
待添加

2
docs/zh-Hans/Entity-Framework-Core-Migrations.md

@ -1,4 +1,4 @@

# EF Core数据库迁移
本文首先介绍[应用程序启动模板](Startup-Templates/Application.md)提供的**默认结构**,并讨论你可能希望为自己的应用程序实现的**各种场景**.

2
docs/zh-Hans/Getting-Started-AspNetCore-Application.md

@ -1,4 +1,4 @@
# 在AspNet Core MVC Web Application中使用ABP
# 在AspNet Core MVC Web Application中使用ABP
本教程将介绍如何开始以最少的依赖关系开始使用ABP开发.

2
docs/zh-Hans/Index.md

@ -1,4 +1,4 @@
# ABP 文档
# ABP 文档
> 中文文档翻译来自[cnAbp](https://github.com/cnabp)组织,Abp中文网会持续跟进翻译,目前Abp vNext的英文文档还未完成,大家对整体框架没有深入的理解,翻译难免存在一些问题.敬请见谅.😀

2
docs/zh-Hans/Module-Development-Basics.md

@ -1,4 +1,4 @@
## 模块化
## 模块化
### 介绍

4
docs/zh-Hans/Modules/Setting-Management.md

@ -249,7 +249,7 @@ yarn ng generate component my-settings
```js
import { Component } from '@angular/core';
import { SettingTabsService } from '@abp/ng.core'; // imported SettingTabsService
import { SettingTabsService } from '@abp/ng.setting-management/config'; // imported SettingTabsService
import { MySettingsComponent } from './my-settings/my-settings.component'; // imported MySettingsComponent
@Component(/* component metadata */)
@ -273,4 +273,4 @@ export class AppComponent {
导航到 `/setting-management` 路由你会看到以下变化:
![Custom Settings Tab](../images/custom-settings.png)
![Custom Settings Tab](../images/custom-settings.png)

2
docs/zh-Hans/Startup-Templates/Application.md

@ -1,4 +1,4 @@
# 应用程序启动模板
# 应用程序启动模板
## 介绍

2
docs/zh-Hans/Startup-Templates/Index.md

@ -1,4 +1,4 @@
# 启动模板
# 启动模板
虽然你可以从一个空项目开始并手动添加所需的包,但启动模板可以非常轻松,舒适地使用ABP框架启动新的解决方案.

2
docs/zh-Hans/Startup-Templates/Module.md

@ -1,4 +1,4 @@
# MVC模块启动模板
# MVC模块启动模板
可用此模板开发基于[模块开发最佳实践和约定](../Best-Practices/Index.md)的可**复用 [应用程序模块](../Modules/Index.md)** . 它同样适用于开发**微服务**.

20
framework/Volo.Abp.sln

@ -387,8 +387,13 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.IdentityModel.Test
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Threading.Tests", "test\Volo.Abp.Threading.Tests\Volo.Abp.Threading.Tests.csproj", "{7B2FCAD6-86E6-49C8-ADBE-A61B4F4B101B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.EventBus.Boxes", "src\Volo.Abp.EventBus.Boxes\Volo.Abp.EventBus.Boxes.csproj", "{6E289F31-7924-418B-9DAC-62A7CFADF916}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.DistributedLocking", "src\Volo.Abp.DistributedLocking\Volo.Abp.DistributedLocking.csproj", "{9A7EEA08-15BE-476D-8168-53039867038E}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Auditing.Contracts", "src\Volo.Abp.Auditing.Contracts\Volo.Abp.Auditing.Contracts.csproj", "{508B6355-AD28-4E60-8549-266D21DBF2CF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.Http.Client.Web", "src\Volo.Abp.Http.Client.Web\Volo.Abp.Http.Client.Web.csproj", "{F7407459-8AFA-45E4-83E9-9BB01412CC08}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -1155,10 +1160,22 @@ Global
{7B2FCAD6-86E6-49C8-ADBE-A61B4F4B101B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B2FCAD6-86E6-49C8-ADBE-A61B4F4B101B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7B2FCAD6-86E6-49C8-ADBE-A61B4F4B101B}.Release|Any CPU.Build.0 = Release|Any CPU
{6E289F31-7924-418B-9DAC-62A7CFADF916}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6E289F31-7924-418B-9DAC-62A7CFADF916}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6E289F31-7924-418B-9DAC-62A7CFADF916}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6E289F31-7924-418B-9DAC-62A7CFADF916}.Release|Any CPU.Build.0 = Release|Any CPU
{9A7EEA08-15BE-476D-8168-53039867038E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9A7EEA08-15BE-476D-8168-53039867038E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9A7EEA08-15BE-476D-8168-53039867038E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9A7EEA08-15BE-476D-8168-53039867038E}.Release|Any CPU.Build.0 = Release|Any CPU
{508B6355-AD28-4E60-8549-266D21DBF2CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{508B6355-AD28-4E60-8549-266D21DBF2CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{508B6355-AD28-4E60-8549-266D21DBF2CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{508B6355-AD28-4E60-8549-266D21DBF2CF}.Release|Any CPU.Build.0 = Release|Any CPU
{F7407459-8AFA-45E4-83E9-9BB01412CC08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F7407459-8AFA-45E4-83E9-9BB01412CC08}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F7407459-8AFA-45E4-83E9-9BB01412CC08}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F7407459-8AFA-45E4-83E9-9BB01412CC08}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -1354,7 +1371,10 @@ Global
{90B1866A-EF99-40B9-970E-B898E5AA523F} = {447C8A77-E5F0-4538-8687-7383196D04EA}
{40C6740E-BFCA-4D37-8344-3D84E2044BB2} = {447C8A77-E5F0-4538-8687-7383196D04EA}
{7B2FCAD6-86E6-49C8-ADBE-A61B4F4B101B} = {447C8A77-E5F0-4538-8687-7383196D04EA}
{6E289F31-7924-418B-9DAC-62A7CFADF916} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{9A7EEA08-15BE-476D-8168-53039867038E} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{508B6355-AD28-4E60-8549-266D21DBF2CF} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
{F7407459-8AFA-45E4-83E9-9BB01412CC08} = {5DF0E140-0513-4D0D-BE2E-3D4D85CD70E6}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {BB97ECF4-9A84-433F-A80B-2A3285BDD1D5}

2
framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xml

@ -1,3 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>

2
framework/src/Volo.Abp.ApiVersioning.Abstractions/FodyWeavers.xsd

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">

2
framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xml

@ -1,3 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>

2
framework/src/Volo.Abp.AspNetCore.Authentication.JwtBearer/FodyWeavers.xsd

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save