Browse Source

Merge pull request #22430 from abpframework/docs-pdf

Export ABP documentation as PDF
pull/22892/head
oykuermann 1 year ago
committed by GitHub
parent
commit
e29b8096e2
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 5
      Directory.Packages.props
  2. 64
      docs/en/docs-nav.json
  3. 31
      modules/docs/Volo.Docs.sln
  4. 92
      modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20250411070040_initial.Designer.cs
  5. 61
      modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20250411070040_initial.cs
  6. 1376
      modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20250425082043_add_pdf_file.Designer.cs
  7. 44
      modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20250425082043_add_pdf_file.cs
  8. 129
      modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/VoloDocsDbContextModelSnapshot.cs
  9. 1
      modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj
  10. 2
      modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocsDbContext.cs
  11. 4
      modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocsEntityFrameworkCoreModule.cs
  12. 2
      modules/docs/app/VoloDocs.Migrator/appsettings.json
  13. 2
      modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs
  14. 22
      modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs
  15. 3
      modules/docs/app/VoloDocs.Web/appsettings.json
  16. 1
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.csproj
  17. 4
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/DocsAdminApplicationContractsModule.cs
  18. 1
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/DocsAdminPermissionDefinitionProvider.cs
  19. 1
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/DocsAdminPermissions.cs
  20. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ar.json
  21. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json
  22. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json
  23. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json
  24. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/el.json
  25. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en-GB.json
  26. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json
  27. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/es.json
  28. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fi.json
  29. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fr.json
  30. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hi.json
  31. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hr.json
  32. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hu.json
  33. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/is.json
  34. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json
  35. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json
  36. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pl-PL.json
  37. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pt-BR.json
  38. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json
  39. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ru.json
  40. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sk.json
  41. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json
  42. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sv.json
  43. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json
  44. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/vi.json
  45. 11
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json
  46. 13
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json
  47. 12
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/DeletePdfFileInput.cs
  48. 9
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/GetPdfFilesInput.cs
  49. 4
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/IProjectAdminAppService.cs
  50. 14
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/ProjectPdfFileDto.cs
  51. 1
      modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj
  52. 1
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/DocsAdminApplicationAutoMapperProfile.cs
  53. 2
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/DocsAdminApplicationModule.cs
  54. 27
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs
  55. 16
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/ProjectsAdminClientProxy.Generated.cs
  56. 1199
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/docs-admin-generate-proxy.json
  57. 1
      modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.csproj
  58. 4
      modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocsAdminHttpApiModule.cs
  59. 14
      modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/ProjectsAdminController.cs
  60. 47
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/GeneratePdf.cshtml
  61. 62
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/GeneratePdf.cshtml.cs
  62. 3
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Index.cshtml
  63. 41
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/ManagePdfFiles.cshtml
  64. 14
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/ManagePdfFiles.cshtml.cs
  65. 81
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/generatePdf.js
  66. 16
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js
  67. 94
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/managePdfFiles.js
  68. 15
      modules/docs/src/Volo.Docs.Admin.Web/wwwroot/client-proxies/docs-admin-proxy.js
  69. 68
      modules/docs/src/Volo.Docs.Admin.Web/wwwroot/client-proxies/docs-common-proxy.js
  70. 1
      modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.csproj
  71. 2
      modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/DocsApplicationContractsModule.cs
  72. 1
      modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentWithDetailsDto.cs
  73. 1
      modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj
  74. 3
      modules/docs/src/Volo.Docs.Application/Volo/Docs/DocsApplicationAutoMapperProfile.cs
  75. 2
      modules/docs/src/Volo.Docs.Application/Volo/Docs/DocsApplicationModule.cs
  76. 15
      modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs
  77. 33
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo.Docs.Common.Application.Contracts.csproj
  78. 31
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/DocsCommonApplicationContractsModule.cs
  79. 21
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/DocsCommonPermissionDefinitionProvider.cs
  80. 19
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/DocsCommonPermissions.cs
  81. 9
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/DocsCommonRemoteServiceConsts.cs
  82. 12
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Documents/DocumentPdfGeneratorInput.cs
  83. 10
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Documents/IDocumentPdfGeneratorAppService.cs
  84. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/ar.json
  85. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/cs.json
  86. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/de-DE.json
  87. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/de.json
  88. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/el.json
  89. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/en-GB.json
  90. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/en.json
  91. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/es.json
  92. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/fi.json
  93. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/fr.json
  94. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/hi.json
  95. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/hr.json
  96. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/hu.json
  97. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/is.json
  98. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/it.json
  99. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/nl.json
  100. 7
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/pl-PL.json

5
Directory.Packages.props

@ -34,6 +34,9 @@
<PackageVersion Include="DistributedLock.Core" Version="1.0.8" />
<PackageVersion Include="DistributedLock.Redis" Version="1.0.3" />
<PackageVersion Include="DeepL.net" Version="1.15.0" />
<PackageVersion Include="itext.bouncy-castle-adapter" Version="9.1.0" />
<PackageVersion Include="itext7" Version="9.1.0" />
<PackageVersion Include="itext7.pdfhtml" Version="6.1.0" />
<PackageVersion Include="MongoSandbox.Core" Version="2.0.0" />
<PackageVersion Include="MongoSandbox8.runtime.linux-x64" Version="2.0.0" />
<PackageVersion Include="MongoSandbox8.runtime.osx-arm64" Version="2.0.0" />
@ -182,4 +185,4 @@
<PackageVersion Include="ConfigureAwait.Fody" Version="3.3.2" />
<PackageVersion Include="Fody" Version="6.9.2" />
</ItemGroup>
</Project>
</Project>

64
docs/en/docs-nav.json

@ -83,47 +83,59 @@
{
"text": "Overview",
"path": "tutorials/book-store",
"isIndex": true
"isIndex": true,
"isInSeries": true
},
{
"text": "1: Creating the Server Side",
"path": "tutorials/book-store/part-01.md"
"path": "tutorials/book-store/part-01.md",
"isInSeries": true
},
{
"text": "2: The Book List Page",
"path": "tutorials/book-store/part-02.md"
"path": "tutorials/book-store/part-02.md",
"isInSeries": true
},
{
"text": "3: Creating, Updating and Deleting Books",
"path": "tutorials/book-store/part-03.md"
"path": "tutorials/book-store/part-03.md",
"isInSeries": true
},
{
"text": "4: Integration Tests",
"path": "tutorials/book-store/part-04.md"
"path": "tutorials/book-store/part-04.md",
"isInSeries": true
},
{
"text": "5: Authorization",
"path": "tutorials/book-store/part-05.md"
"path": "tutorials/book-store/part-05.md",
"isInSeries": true
},
{
"text": "6: Authors: Domain Layer",
"path": "tutorials/book-store/part-06.md"
"path": "tutorials/book-store/part-06.md",
"isInSeries": true
},
{
"text": "7: Authors: Database Integration",
"path": "tutorials/book-store/part-07.md"
"path": "tutorials/book-store/part-07.md",
"isInSeries": true
},
{
"text": "8: Authors: Application Layer",
"path": "tutorials/book-store/part-08.md"
"path": "tutorials/book-store/part-08.md",
"isInSeries": true
},
{
"text": "9: Authors: User Interface",
"path": "tutorials/book-store/part-09.md"
"path": "tutorials/book-store/part-09.md",
"isInSeries": true
},
{
"text": "10: Book to Author Relation",
"path": "tutorials/book-store/part-10.md"
"path": "tutorials/book-store/part-10.md",
"isInSeries": true
}
]
},
@ -135,27 +147,33 @@
{
"text": "Overview",
"path": "tutorials/book-store-with-abp-suite",
"isIndex": true
"isIndex": true,
"isInSeries": true
},
{
"text": "1: Creating the Solution",
"path": "tutorials/book-store-with-abp-suite/part-01.md"
"path": "tutorials/book-store-with-abp-suite/part-01.md",
"isInSeries": true
},
{
"text": "2: Creating the Books",
"path": "tutorials/book-store-with-abp-suite/part-02.md"
"path": "tutorials/book-store-with-abp-suite/part-02.md",
"isInSeries": true
},
{
"text": "3: Creating the Authors",
"path": "tutorials/book-store-with-abp-suite/part-03.md"
"path": "tutorials/book-store-with-abp-suite/part-03.md",
"isInSeries": true
},
{
"text": "4: Book to Author Relation",
"path": "tutorials/book-store-with-abp-suite/part-04.md"
"path": "tutorials/book-store-with-abp-suite/part-04.md",
"isInSeries": true
},
{
"text": "5: Customizing the Generated Code",
"path": "tutorials/book-store-with-abp-suite/part-05.md"
"path": "tutorials/book-store-with-abp-suite/part-05.md",
"isInSeries": true
}
]
},
@ -2070,19 +2088,23 @@
"items": [
{
"text": "Deploy to Azure Web App Service",
"path": "solution-templates/layered-web-application/deployment/azure-deployment/azure-deployment.md"
"path": "solution-templates/layered-web-application/deployment/azure-deployment/azure-deployment.md",
"isInSeries": true
},
{
"text": "Creating an Azure Web App Service Environment",
"path": "solution-templates/layered-web-application/deployment/azure-deployment/step1-create-azure-resources.md"
"path": "solution-templates/layered-web-application/deployment/azure-deployment/step1-create-azure-resources.md",
"isInSeries": true
},
{
"text": "Customizing the Configuration of Your ABP Application",
"path": "solution-templates/layered-web-application/deployment/azure-deployment/step2-configuration-application.md"
"path": "solution-templates/layered-web-application/deployment/azure-deployment/step2-configuration-application.md",
"isInSeries": true
},
{
"text": "Deploying Application With GitHub Actions",
"path": "solution-templates/layered-web-application/deployment/azure-deployment/step3-deployment-github-action.md"
"path": "solution-templates/layered-web-application/deployment/azure-deployment/step3-deployment-github-action.md",
"isInSeries": true
}
]
},

31
modules/docs/Volo.Docs.sln

@ -63,6 +63,16 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Docs.MongoDB.Tests", "
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Docs.Installer", "src\Volo.Docs.Installer\Volo.Docs.Installer.csproj", "{50B9AC1D-C03E-47AA-9ED8-E7986BCFABA1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Docs.Common.Application", "src\Volo.Docs.Common.Application\Volo.Docs.Common.Application.csproj", "{914EDEC4-EFCE-46D5-B6E0-A928B1907307}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Docs.Common.Application.Contracts", "src\Volo.Docs.Common.Application.Contracts\Volo.Docs.Common.Application.Contracts.csproj", "{8CA19527-6870-4617-B6D1-EA8CAF224DF4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{F778B2C3-2E6D-4CF3-ACA7-10E21E6A7961}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Docs.Common.HttpApi", "src\Volo.Docs.Common.HttpApi\Volo.Docs.Common.HttpApi.csproj", "{052C076D-56FF-4DFA-838B-48BD30A1DB0A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Docs.Common.HttpApi.Client", "src\Volo.Docs.Common.HttpApi.Client\Volo.Docs.Common.HttpApi.Client.csproj", "{349C36A0-552D-44A3-AC74-03A4828D43AB}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@ -165,6 +175,22 @@ Global
{50B9AC1D-C03E-47AA-9ED8-E7986BCFABA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{50B9AC1D-C03E-47AA-9ED8-E7986BCFABA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{50B9AC1D-C03E-47AA-9ED8-E7986BCFABA1}.Release|Any CPU.Build.0 = Release|Any CPU
{914EDEC4-EFCE-46D5-B6E0-A928B1907307}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{914EDEC4-EFCE-46D5-B6E0-A928B1907307}.Debug|Any CPU.Build.0 = Debug|Any CPU
{914EDEC4-EFCE-46D5-B6E0-A928B1907307}.Release|Any CPU.ActiveCfg = Release|Any CPU
{914EDEC4-EFCE-46D5-B6E0-A928B1907307}.Release|Any CPU.Build.0 = Release|Any CPU
{8CA19527-6870-4617-B6D1-EA8CAF224DF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8CA19527-6870-4617-B6D1-EA8CAF224DF4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8CA19527-6870-4617-B6D1-EA8CAF224DF4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8CA19527-6870-4617-B6D1-EA8CAF224DF4}.Release|Any CPU.Build.0 = Release|Any CPU
{052C076D-56FF-4DFA-838B-48BD30A1DB0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{052C076D-56FF-4DFA-838B-48BD30A1DB0A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{052C076D-56FF-4DFA-838B-48BD30A1DB0A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{052C076D-56FF-4DFA-838B-48BD30A1DB0A}.Release|Any CPU.Build.0 = Release|Any CPU
{349C36A0-552D-44A3-AC74-03A4828D43AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{349C36A0-552D-44A3-AC74-03A4828D43AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{349C36A0-552D-44A3-AC74-03A4828D43AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{349C36A0-552D-44A3-AC74-03A4828D43AB}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -197,6 +223,11 @@ Global
{DBE846CD-1BED-4F2C-ABF2-94F6240BCB9B} = {A982A58E-1E92-4764-9F56-39E7AABB8556}
{C5E2A2A3-D54D-4C2E-97BA-EA50A49ED7AD} = {59D430A9-AC61-4457-8338-5DA0705ABB5D}
{50B9AC1D-C03E-47AA-9ED8-E7986BCFABA1} = {A982A58E-1E92-4764-9F56-39E7AABB8556}
{F778B2C3-2E6D-4CF3-ACA7-10E21E6A7961} = {42416152-5BAB-4706-93A6-57A19E71FE14}
{914EDEC4-EFCE-46D5-B6E0-A928B1907307} = {F778B2C3-2E6D-4CF3-ACA7-10E21E6A7961}
{8CA19527-6870-4617-B6D1-EA8CAF224DF4} = {F778B2C3-2E6D-4CF3-ACA7-10E21E6A7961}
{052C076D-56FF-4DFA-838B-48BD30A1DB0A} = {F778B2C3-2E6D-4CF3-ACA7-10E21E6A7961}
{349C36A0-552D-44A3-AC74-03A4828D43AB} = {F778B2C3-2E6D-4CF3-ACA7-10E21E6A7961}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {13691265-2547-4FFF-B757-E8FACB05679D}

92
modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20241231072012_Initial.Designer.cs → modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20250411070040_initial.Designer.cs

@ -13,8 +13,8 @@ using VoloDocs.EntityFrameworkCore;
namespace Migrations
{
[DbContext(typeof(VoloDocsDbContext))]
[Migration("20241231072012_Initial")]
partial class Initial
[Migration("20250411070040_initial")]
partial class initial
{
/// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -22,11 +22,88 @@ namespace Migrations
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
.HasAnnotation("ProductVersion", "9.0.0")
.HasAnnotation("ProductVersion", "9.0.2")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.IsRequired()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<Guid>("ContainerId")
.HasColumnType("uniqueidentifier");
b.Property<byte[]>("Content")
.HasMaxLength(2147483647)
.HasColumnType("varbinary(max)");
b.Property<string>("ExtraProperties")
.IsRequired()
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("Id");
b.HasIndex("ContainerId");
b.HasIndex("TenantId", "ContainerId", "Name");
b.ToTable("AbpBlobs", (string)null);
});
modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.IsRequired()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<string>("ExtraProperties")
.IsRequired()
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("Id");
b.HasIndex("TenantId", "Name");
b.ToTable("AbpBlobContainers", (string)null);
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b =>
{
b.Property<Guid>("Id")
@ -1119,6 +1196,15 @@ namespace Migrations
b.ToTable("DocsProjects", (string)null);
});
modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b =>
{
b.HasOne("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", null)
.WithMany()
.HasForeignKey("ContainerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b =>
{
b.HasOne("Volo.Abp.Identity.IdentityRole", null)

61
modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20241231072012_Initial.cs → modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20250411070040_initial.cs

@ -6,11 +6,26 @@ using Microsoft.EntityFrameworkCore.Migrations;
namespace Migrations
{
/// <inheritdoc />
public partial class Initial : Migration
public partial class initial : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "AbpBlobContainers",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
Name = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: false),
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AbpBlobContainers", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AbpClaimTypes",
columns: table => new
@ -336,6 +351,29 @@ namespace Migrations
table.PrimaryKey("PK_DocsProjects", x => x.Id);
});
migrationBuilder.CreateTable(
name: "AbpBlobs",
columns: table => new
{
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
ContainerId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true),
Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false),
Content = table.Column<byte[]>(type: "varbinary(max)", maxLength: 2147483647, nullable: true),
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: false),
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_AbpBlobs", x => x.Id);
table.ForeignKey(
name: "FK_AbpBlobs_AbpBlobContainers_ContainerId",
column: x => x.ContainerId,
principalTable: "AbpBlobContainers",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "AbpOrganizationUnitRoles",
columns: table => new
@ -520,6 +558,21 @@ namespace Migrations
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_AbpBlobContainers_TenantId_Name",
table: "AbpBlobContainers",
columns: new[] { "TenantId", "Name" });
migrationBuilder.CreateIndex(
name: "IX_AbpBlobs_ContainerId",
table: "AbpBlobs",
column: "ContainerId");
migrationBuilder.CreateIndex(
name: "IX_AbpBlobs_TenantId_ContainerId_Name",
table: "AbpBlobs",
columns: new[] { "TenantId", "ContainerId", "Name" });
migrationBuilder.CreateIndex(
name: "IX_AbpLinkUsers_SourceUserId_SourceTenantId_TargetUserId_TargetTenantId",
table: "AbpLinkUsers",
@ -668,6 +721,9 @@ namespace Migrations
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "AbpBlobs");
migrationBuilder.DropTable(
name: "AbpClaimTypes");
@ -725,6 +781,9 @@ namespace Migrations
migrationBuilder.DropTable(
name: "DocsProjects");
migrationBuilder.DropTable(
name: "AbpBlobContainers");
migrationBuilder.DropTable(
name: "AbpOrganizationUnits");

1376
modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20250425082043_add_pdf_file.Designer.cs

File diff suppressed because it is too large

44
modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/20250425082043_add_pdf_file.cs

@ -0,0 +1,44 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Migrations
{
/// <inheritdoc />
public partial class add_pdf_file : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "DocsProjectPdfFiles",
columns: table => new
{
ProjectId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
FileName = table.Column<string>(type: "nvarchar(450)", nullable: false),
Version = table.Column<string>(type: "nvarchar(max)", nullable: true),
LanguageCode = table.Column<string>(type: "nvarchar(max)", nullable: true),
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false),
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_DocsProjectPdfFiles", x => new { x.ProjectId, x.FileName });
table.ForeignKey(
name: "FK_DocsProjectPdfFiles_DocsProjects_ProjectId",
column: x => x.ProjectId,
principalTable: "DocsProjects",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
});
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "DocsProjectPdfFiles");
}
}
}

129
modules/docs/app/VoloDocs.EntityFrameworkCore/Migrations/VoloDocsDbContextModelSnapshot.cs

@ -19,11 +19,88 @@ namespace Migrations
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer)
.HasAnnotation("ProductVersion", "9.0.0")
.HasAnnotation("ProductVersion", "9.0.2")
.HasAnnotation("Relational:MaxIdentifierLength", 128);
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.IsRequired()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<Guid>("ContainerId")
.HasColumnType("uniqueidentifier");
b.Property<byte[]>("Content")
.HasMaxLength(2147483647)
.HasColumnType("varbinary(max)");
b.Property<string>("ExtraProperties")
.IsRequired()
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(256)
.HasColumnType("nvarchar(256)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("Id");
b.HasIndex("ContainerId");
b.HasIndex("TenantId", "ContainerId", "Name");
b.ToTable("AbpBlobs", (string)null);
});
modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.IsRequired()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<string>("ExtraProperties")
.IsRequired()
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.HasKey("Id");
b.HasIndex("TenantId", "Name");
b.ToTable("AbpBlobContainers", (string)null);
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b =>
{
b.Property<Guid>("Id")
@ -1116,6 +1193,42 @@ namespace Migrations
b.ToTable("DocsProjects", (string)null);
});
modelBuilder.Entity("Volo.Docs.Projects.ProjectPdfFile", b =>
{
b.Property<Guid>("ProjectId")
.HasColumnType("uniqueidentifier");
b.Property<string>("FileName")
.HasColumnType("nvarchar(450)");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<string>("LanguageCode")
.HasColumnType("nvarchar(max)");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
b.Property<string>("Version")
.HasColumnType("nvarchar(max)");
b.HasKey("ProjectId", "FileName");
b.ToTable("DocsProjectPdfFiles", (string)null);
});
modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b =>
{
b.HasOne("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", null)
.WithMany()
.HasForeignKey("ContainerId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b =>
{
b.HasOne("Volo.Abp.Identity.IdentityRole", null)
@ -1213,6 +1326,15 @@ namespace Migrations
.IsRequired();
});
modelBuilder.Entity("Volo.Docs.Projects.ProjectPdfFile", b =>
{
b.HasOne("Volo.Docs.Projects.Project", null)
.WithMany("PdfFiles")
.HasForeignKey("ProjectId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
});
modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b =>
{
b.Navigation("Claims");
@ -1240,6 +1362,11 @@ namespace Migrations
{
b.Navigation("Contributors");
});
modelBuilder.Entity("Volo.Docs.Projects.Project", b =>
{
b.Navigation("PdfFiles");
});
#pragma warning restore 612, 618
}
}

1
modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocs.EntityFrameworkCore.csproj

@ -13,6 +13,7 @@
<ProjectReference Include="..\..\..\..\modules\permission-management\src\Volo.Abp.PermissionManagement.EntityFrameworkCore\Volo.Abp.PermissionManagement.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\..\..\modules\setting-management\src\Volo.Abp.SettingManagement.EntityFrameworkCore\Volo.Abp.SettingManagement.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\..\..\modules\identity\src\Volo.Abp.Identity.EntityFrameworkCore\Volo.Abp.Identity.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\..\..\modules\blob-storing-database\src\Volo.Abp.BlobStoring.Database.EntityFrameworkCore\Volo.Abp.BlobStoring.Database.EntityFrameworkCore.csproj" />
</ItemGroup>
<ItemGroup>

2
modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocsDbContext.cs

@ -1,4 +1,5 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.BlobStoring.Database.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Identity.EntityFrameworkCore;
using Volo.Abp.PermissionManagement.EntityFrameworkCore;
@ -23,6 +24,7 @@ namespace VoloDocs.EntityFrameworkCore
modelBuilder.ConfigureSettingManagement();
modelBuilder.ConfigureIdentity();
modelBuilder.ConfigureDocs();
modelBuilder.ConfigureBlobStoring();
}
}
}

4
modules/docs/app/VoloDocs.EntityFrameworkCore/VoloDocsEntityFrameworkCoreModule.cs

@ -1,4 +1,5 @@
using Volo.Abp.EntityFrameworkCore.SqlServer;
using Volo.Abp.BlobStoring.Database.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.SqlServer;
using Volo.Abp.Identity.EntityFrameworkCore;
using Volo.Abp.Modularity;
using Volo.Abp.PermissionManagement.EntityFrameworkCore;
@ -12,6 +13,7 @@ namespace VoloDocs.EntityFrameworkCore
typeof(AbpIdentityEntityFrameworkCoreModule),
typeof(AbpPermissionManagementEntityFrameworkCoreModule),
typeof(AbpSettingManagementEntityFrameworkCoreModule),
typeof(BlobStoringDatabaseEntityFrameworkCoreModule),
typeof(AbpEntityFrameworkCoreSqlServerModule))]
public class VoloDocsEntityFrameworkCoreModule : AbpModule
{

2
modules/docs/app/VoloDocs.Migrator/appsettings.json

@ -1,3 +1,3 @@
{
"ConnectionString": "Server=localhost;Database=VoloDocs;Trusted_Connection=True;TrustServerCertificate=True"
"ConnectionString": "Server=localhost;Database=VoloDocs;Trusted_Connection=True;TrustServerCertificate=True",
}

2
modules/docs/app/VoloDocs.Web/Pages/Index.cshtml.cs

@ -5,7 +5,7 @@ using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Options;
using Volo.Docs;
using Volo.Docs.Projects;
using Volo.Docs.Common.Projects;
namespace VoloDocs.Web.Pages
{

22
modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs

@ -32,10 +32,14 @@ using Localization.Resources.AbpUi;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Hosting;
using Volo.Abp.Account;
using Volo.Abp.BlobStoring;
using Volo.Abp.BlobStoring.Database;
using Volo.Abp.PermissionManagement.HttpApi;
using Volo.Abp.Validation.Localization;
using Volo.Docs.Documents.FullSearch.Elastic;
using Volo.Abp.Caching.StackExchangeRedis;
using Volo.Docs.Common.Documents;
using Volo.Docs.Projects.Pdf;
namespace VoloDocs.Web
{
@ -82,7 +86,7 @@ namespace VoloDocs.Web
// options.SingleProjectMode.ProjectName = "abp";
// options.MultiLanguageMode = false;
// });
Configure<DocsElasticSearchOptions>(options =>
{
options.Enable = false;
@ -170,6 +174,22 @@ namespace VoloDocs.Web
options.EnableGoogleProgrammableSearchEngine = true;
options.GoogleSearchEngineId = "77c7266532da1427f";
});
Configure<DocsProjectPdfGeneratorOptions>(options =>
{
options.BaseUrl = configuration["App:selfUrl"];
options.IndexPagePath = "Index.md";
options.CalculatePdfFileTitle = project => project.ShortName == "abp" ? "ABP Documentation" : null;
options.DocumentContentNormalizer = content => content.Replace("<i class=\"fa fa-minus text-secondary\"></i>", "No").Replace("<i class=\"fa fa-check text-success\"></i>", "Yes");
});
Configure<AbpBlobStoringOptions>(options =>
{
options.Containers.ConfigureDefault(container =>
{
container.UseDatabase();
});
});
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)

3
modules/docs/app/VoloDocs.Web/appsettings.json

@ -1,4 +1,7 @@
{
"App": {
"selfUrl": "https://localhost:5001"
},
"Kestrel": {
"EndPoints": {
"Https": {

1
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo.Docs.Admin.Application.Contracts.csproj

@ -18,6 +18,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Docs.Domain.Shared\Volo.Docs.Domain.Shared.csproj" />
<ProjectReference Include="..\Volo.Docs.Common.Application.Contracts\Volo.Docs.Common.Application.Contracts.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Ddd.Application.Contracts\Volo.Abp.Ddd.Application.Contracts.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Authorization.Abstractions\Volo.Abp.Authorization.Abstractions.csproj" />
</ItemGroup>

4
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/DocsAdminApplicationContractsModule.cs

@ -4,6 +4,7 @@ using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
using Volo.Docs.Common;
using Volo.Docs.Localization;
namespace Volo.Docs.Admin
@ -11,7 +12,8 @@ namespace Volo.Docs.Admin
[DependsOn(
typeof(DocsDomainSharedModule),
typeof(AbpDddApplicationContractsModule),
typeof(AbpAuthorizationAbstractionsModule)
typeof(AbpAuthorizationAbstractionsModule),
typeof(DocsCommonApplicationContractsModule)
)]
public class DocsAdminApplicationContractsModule : AbpModule
{

1
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/DocsAdminPermissionDefinitionProvider.cs

@ -14,6 +14,7 @@ namespace Volo.Docs.Admin
projects.AddChild(DocsAdminPermissions.Projects.Update, L("Permission:Edit"));
projects.AddChild(DocsAdminPermissions.Projects.Delete, L("Permission:Delete"));
projects.AddChild(DocsAdminPermissions.Projects.Create, L("Permission:Create"));
projects.AddChild(DocsAdminPermissions.Projects.ManagePdfFiles, L("Permission:ManagePdfFiles"));
group.AddPermission(DocsAdminPermissions.Documents.Default, L("Permission:Documents"));
}

1
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/DocsAdminPermissions.cs

@ -12,6 +12,7 @@ namespace Volo.Docs.Admin
public const string Delete = Default + ".Delete";
public const string Update = Default + ".Update";
public const string Create = Default + ".Create";
public const string ManagePdfFiles = Default + ".ManagePdfFiles";
}
public static class Documents

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ar.json

@ -57,6 +57,15 @@
"LastCachedTime": "وقت ذاكرة التخزين",
"Project": "مشروع ",
"AdvancedFilters": "مرشحات متقدمة",
"RemoveCacheAndReIndexConfirmation": "ستتم إزالة المستند \"{0}\" من ذاكرة التخزين المؤقت وإعادة فهرسته. هل تؤكد؟"
"RemoveCacheAndReIndexConfirmation": "ستتم إزالة المستند \"{0}\" من ذاكرة التخزين المؤقت وإعادة فهرسته. هل تؤكد؟",
"GeneratePdf": "توليد PDF",
"Generating": "يتم توليد...",
"Language": "اللغة",
"ForceToGenerateNewPdf": "قوة لتوليد PDF جديد",
"PdfGeneratedSuccessfully": "تم توليد PDF بنجاح",
"GenerateAndDownloadPdf": "توليد وتحميل PDF",
"PdfFileDeletionWarningMessage": "هل أنت متأكد أنك تريد حذف ملف PDF \"{0}\"?",
"ManagePdfFiles": "إدارة ملفات PDF",
"Permission:ManagePdfFiles": "إدارة ملفات PDF"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json

@ -57,6 +57,15 @@
"LastCachedTime": "Čas uložení v mezipaměti",
"Project": "Projekt",
"AdvancedFilters": "Pokročilé filtry",
"RemoveCacheAndReIndexConfirmation": "Dokument \"{0}\" bude odstraněn z mezipaměti a znovu zaindexován. Potvrzujete to?"
"RemoveCacheAndReIndexConfirmation": "Dokument \"{0}\" bude odstraněn z mezipaměti a znovu zaindexován. Potvrzujete to?",
"GeneratePdf": "Generovat PDF",
"Generating": "Generování...",
"Language": "Jazyk",
"ForceToGenerateNewPdf": "Vynutit generování nového PDF",
"PdfGeneratedSuccessfully": "PDF generován úspěšně",
"GenerateAndDownloadPdf": "Generovat a stáhnout PDF",
"PdfFileDeletionWarningMessage": "Opravdu chcete odstranit soubor PDF \"{0}\"?",
"ManagePdfFiles": "Správa PDF souborů",
"Permission:ManagePdfFiles": "Správa PDF souborů"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json

@ -56,6 +56,15 @@
"FileName": "Dateiname",
"LastCachedTime": "Cache-Zeit",
"Project": "Projekt",
"RemoveCacheAndReIndexConfirmation": "Das Dokument \"{0}\" wird aus dem Cache entfernt und neu indiziert. Können Sie das bestätigen?"
"RemoveCacheAndReIndexConfirmation": "Das Dokument \"{0}\" wird aus dem Cache entfernt und neu indiziert. Können Sie das bestätigen?",
"GeneratePdf": "PDF generieren",
"Generating": "Generieren...",
"Language": "Sprache",
"ForceToGenerateNewPdf": "Neues PDF erzwingen",
"PdfGeneratedSuccessfully": "PDF erfolgreich generiert",
"GenerateAndDownloadPdf": "PDF generieren und herunterladen",
"PdfFileDeletionWarningMessage": "Sind Sie sicher, dass Sie das PDF-Datei \"{0}\" löschen wollen?",
"ManagePdfFiles": "PDF-Dateien verwalten",
"Permission:ManagePdfFiles": "PDF-Dateien verwalten"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json

@ -57,6 +57,15 @@
"LastCachedTime": "Zwischenspeicher",
"Project": "Projekt",
"AdvancedFilters": "Erweiterte Filter",
"RemoveCacheAndReIndexConfirmation": "Das Dokument „{0}“ wird aus dem Cache entfernt und neu indiziert. Bestätigen Sie?"
"RemoveCacheAndReIndexConfirmation": "Das Dokument „{0}“ wird aus dem Cache entfernt und neu indiziert. Bestätigen Sie?",
"GeneratePdf": "PDF generieren",
"Generating": "Generieren...",
"Language": "Sprache",
"ForceToGenerateNewPdf": "Neues PDF erzwingen",
"PdfGeneratedSuccessfully": "PDF erfolgreich generiert",
"GenerateAndDownloadPdf": "PDF generieren und herunterladen",
"PdfFileDeletionWarningMessage": "Sind Sie sicher, dass Sie das PDF-Datei \"{0}\" löschen wollen?",
"ManagePdfFiles": "PDF-Dateien verwalten",
"Permission:ManagePdfFiles": "PDF-Dateien verwalten"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/el.json

@ -56,6 +56,15 @@
"FileName": "Όνομα αρχείου",
"LastCachedTime": "Χρόνος προσωρινής αποθήκευσης",
"Project": "Εργο",
"RemoveCacheAndReIndexConfirmation": "Το έγγραφο \"{0}\" θα αφαιρεθεί από την προσωρινή μνήμη και θα αναπροσαρμοστεί εκ νέου. Επιβεβαιώνετε;"
"RemoveCacheAndReIndexConfirmation": "Το έγγραφο \"{0}\" θα αφαιρεθεί από την προσωρινή μνήμη και θα αναπροσαρμοστεί εκ νέου. Επιβεβαιώνετε;",
"GeneratePdf": "Δημιουργία PDF",
"Generating": "Δημιουργία...",
"Language": "Γλώσσα",
"ForceToGenerateNewPdf": "Βάλτε το νέο PDF",
"PdfGeneratedSuccessfully": "Το PDF αναπροσαρμοστεί εκ νέου",
"GenerateAndDownloadPdf": "Δημιουργία και λήψη PDF",
"PdfFileDeletionWarningMessage": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το PDF αρχείο \"{0}\";",
"ManagePdfFiles": "Διαχείρηση PDF αρχείων",
"Permission:ManagePdfFiles": "Διαχείρηση PDF αρχείων"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en-GB.json

@ -56,6 +56,15 @@
"FileName": "File name",
"LastCachedTime": "Cache time",
"Project": "Project",
"AdvancedFilters": "Advanced Filters"
"AdvancedFilters": "Advanced Filters",
"GeneratePdf": "Generate PDF",
"Generating": "Generating...",
"Language": "Language",
"ForceToGenerateNewPdf": "Force to generate new PDF",
"PdfGeneratedSuccessfully": "PDF generated successfully",
"GenerateAndDownloadPdf": "Generate and download PDF",
"PdfFileDeletionWarningMessage": "Are you sure you want to delete the PDF file \"{0}\"?",
"ManagePdfFiles": "Manage PDF files",
"Permission:ManagePdfFiles": "Manage PDF files"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json

@ -57,6 +57,15 @@
"LastCachedTime": "Cache time",
"Project": "Project",
"AdvancedFilters": "Advanced Filters",
"RemoveCacheAndReIndexConfirmation": "The document \"{0}\" will be removed from the cache and re-indexed. Do you confirm?"
"RemoveCacheAndReIndexConfirmation": "The document \"{0}\" will be removed from the cache and re-indexed. Do you confirm?",
"GeneratePdf": "Generate PDF",
"Generating": "Generating...",
"Language": "Language",
"ForceToGenerateNewPdf": "Force to generate new PDF",
"PdfGeneratedSuccessfully": "PDF generated successfully",
"GenerateAndDownloadPdf": "Generate and download PDF",
"PdfFileDeletionWarningMessage": "Are you sure you want to delete the PDF file \"{0}\"?",
"ManagePdfFiles": "Manage PDF files",
"Permission:ManagePdfFiles": "Manage PDF files"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/es.json

@ -57,6 +57,15 @@
"LastCachedTime": "Última actualización de caché",
"Project": "Proyecto",
"AdvancedFilters": "Filtros avanzados",
"RemoveCacheAndReIndexConfirmation": "El documento \"{0}\" será eliminado de la caché y reindexado. ¿Lo confirma?"
"RemoveCacheAndReIndexConfirmation": "El documento \"{0}\" será eliminado de la caché y reindexado. ¿Lo confirma?",
"GeneratePdf": "Generar PDF",
"Generating": "Generando...",
"Language": "Idioma",
"ForceToGenerateNewPdf": "Forzar a generar un nuevo PDF",
"PdfGeneratedSuccessfully": "PDF generado correctamente",
"GenerateAndDownloadPdf": "Generar y descargar PDF",
"PdfFileDeletionWarningMessage": "¿Está seguro de querer eliminar el archivo PDF \"{0}\"?",
"ManagePdfFiles": "Administrar archivos PDF",
"Permission:ManagePdfFiles": "Administrar archivos PDF"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fi.json

@ -57,6 +57,15 @@
"LastCachedTime": "Välimuistin aika",
"Project": "Projekti",
"AdvancedFilters": "Edistyneet suodattimet",
"RemoveCacheAndReIndexConfirmation": "Dokumentti \"{0}\" poistetaan välimuistista ja indeksoidaan uudelleen. Vahvistatko?"
"RemoveCacheAndReIndexConfirmation": "Dokumentti \"{0}\" poistetaan välimuistista ja indeksoidaan uudelleen. Vahvistatko?",
"GeneratePdf": "Generoi PDF",
"Generating": "Generoiminen...",
"Language": "Kieli",
"ForceToGenerateNewPdf": "Vahvista uusi PDF",
"PdfGeneratedSuccessfully": "PDF generoidaan onnistuneesti",
"GenerateAndDownloadPdf": "Generoi ja lataa PDF",
"PdfFileDeletionWarningMessage": "Oletko varma, että haluat poistaa PDF-tiedoston \"{0}\"?",
"ManagePdfFiles": "Hallitse PDF-tiedostoja",
"Permission:ManagePdfFiles": "Hallitse PDF-tiedostoja"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fr.json

@ -57,6 +57,15 @@
"LastCachedTime": "Temps de cache",
"Project": "Projet",
"AdvancedFilters": "Filtres avancés",
"RemoveCacheAndReIndexConfirmation": "Le document \"{0}\" sera supprimé du cache et réindexé. Confirmez-vous ?"
"RemoveCacheAndReIndexConfirmation": "Le document \"{0}\" sera supprimé du cache et réindexé. Confirmez-vous ?",
"GeneratePdf": "Générer PDF",
"Generating": "Génération...",
"Language": "Langue",
"ForceToGenerateNewPdf": "Forcer à générer un nouveau PDF",
"PdfGeneratedSuccessfully": "PDF généré avec succès",
"GenerateAndDownloadPdf": "Générer et télécharger PDF",
"PdfFileDeletionWarningMessage": "Êtes-vous sûr de vouloir supprimer le fichier PDF \"{0}\"?",
"ManagePdfFiles": "Gérer les fichiers PDF",
"Permission:ManagePdfFiles": "Gérer les fichiers PDF"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hi.json

@ -57,6 +57,15 @@
"LastCachedTime": "कैश समय",
"Project": "परियोजना",
"AdvancedFilters": "उन्नत फ़िल्टर",
"RemoveCacheAndReIndexConfirmation": "दस्u200Dतावेज़ \"{0}\" को संचय से हटा दिया जाएगा और पुन: अनुक्रमित किया जाएगा। क्या आप पुष्टि करते हैं?"
"RemoveCacheAndReIndexConfirmation": "दस्तावेज़ \"{0}\" को संचय से हटा दिया जाएगा और पुन: अनुक्रमित किया जाएगा। क्या आप पुष्टि करते हैं?",
"GeneratePdf": "PDF उत्पन्न करें",
"Generating": "उत्पन्न कर रहा है...",
"Language": "भाषा",
"ForceToGenerateNewPdf": "नया PDF उत्पन्न करें",
"PdfGeneratedSuccessfully": "PDF सफलतापूर्वक उत्पन्न हो गया",
"GenerateAndDownloadPdf": "PDF उत्पन्न और डाउनलोड करें",
"PdfFileDeletionWarningMessage": "क्या आप वाकई \"{0}\" के PDF फ़ाइल को हटाना चाहते हैं?",
"ManagePdfFiles": "PDF फ़ाइलें प्रबंधित करें",
"Permission:ManagePdfFiles": "PDF फ़ाइलें प्रबंधित करें"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hr.json

@ -57,6 +57,15 @@
"LastCachedTime": "Vrijeme predmemorije",
"Project": "Projekt",
"AdvancedFilters": "Napredni filtri",
"RemoveCacheAndReIndexConfirmation": "Dokument \"{0}\" bit će uklonjen iz predmemorije i ponovno indeksiran. Potvrđujete li?"
"RemoveCacheAndReIndexConfirmation": "Dokument \"{0}\" bit će uklonjen iz predmemorije i ponovno indeksiran. Potvrđujete li?",
"GeneratePdf": "Generiraj PDF",
"Generating": "Generiranje...",
"Language": "Jezik",
"ForceToGenerateNewPdf": "Prisili generiranje novog PDF-a",
"PdfGeneratedSuccessfully": "PDF generiran uspješno",
"GenerateAndDownloadPdf": "Generiraj i preuzmi PDF",
"PdfFileDeletionWarningMessage": "Jeste li sigurni da želite izbrisati PDF datoteku \"{0}\"?",
"ManagePdfFiles": "Upravljanje PDF datotekama",
"Permission:ManagePdfFiles": "Upravljanje PDF datotekama"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hu.json

@ -58,6 +58,15 @@
"LastCachedTime": "Cache idő",
"Project": "Projekt",
"AdvancedFilters": "Speciális szűrők",
"RemoveCacheAndReIndexConfirmation": "A \"{0}\" dokumentumot eltávolítjuk a gyorsítótárból és újraindexeljük. Megerősíti?"
"RemoveCacheAndReIndexConfirmation": "A \"{0}\" dokumentumot eltávolítjuk a gyorsítótárból és újraindexeljük. Megerősíti?",
"GeneratePdf": "PDF generálása",
"Generating": "Generálás...",
"Language": "Nyelv",
"ForceToGenerateNewPdf": "Új PDF generálása",
"PdfGeneratedSuccessfully": "PDF generálás sikeres",
"GenerateAndDownloadPdf": "Generálás és letöltés PDF-ben",
"PdfFileDeletionWarningMessage": "Biztosan törölni szeretné a \"{0}\" PDF fájlt?",
"ManagePdfFiles": "PDF fájlok kezelése",
"Permission:ManagePdfFiles": "PDF fájlok kezelése"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/is.json

@ -57,6 +57,15 @@
"LastCachedTime": "Tími geymt í skyndiminni",
"Project": "Verkefni",
"AdvancedFilters": "Ítarlegar síur",
"RemoveCacheAndReIndexConfirmation": "Skjalið \"{0}\" verður fjarlægt úr skyndiminni og endurtryggt. Staðfestir þú?"
"RemoveCacheAndReIndexConfirmation": "Skjalið \"{0}\" verður fjarlægt úr skyndiminni og endurtryggt. Staðfestir þú?",
"GeneratePdf": "Generate PDF",
"Generating": "Generating...",
"Language": "Language",
"ForceToGenerateNewPdf": "Force to generate new PDF",
"PdfGeneratedSuccessfully": "PDF generated successfully",
"GenerateAndDownloadPdf": "Generate and download PDF",
"PdfFileDeletionWarningMessage": "Are you sure you want to delete the PDF file \"{0}\"?",
"ManagePdfFiles": "Manage PDF files",
"Permission:ManagePdfFiles": "Manage PDF files"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json

@ -57,6 +57,15 @@
"LastCachedTime": "Tempo di cache",
"Project": "Progetto",
"AdvancedFilters": "Filtri avanzati",
"RemoveCacheAndReIndexConfirmation": "Il documento \"{0}\" verrà rimosso dalla cache e reindicizzato. Confermate?"
"RemoveCacheAndReIndexConfirmation": "Il documento \"{0}\" verrà rimosso dalla cache e reindicizzato. Confermate?",
"GeneratePdf": "Genera PDF",
"Generating": "Generazione...",
"Language": "Lingua",
"ForceToGenerateNewPdf": "Forza a generare un nuovo PDF",
"PdfGeneratedSuccessfully": "PDF generato con successo",
"GenerateAndDownloadPdf": "Genera e scarica PDF",
"PdfFileDeletionWarningMessage": "Sei sicuro di voler eliminare il file PDF \"{0}\"?",
"ManagePdfFiles": "Gestione file PDF",
"Permission:ManagePdfFiles": "Gestione file PDF"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json

@ -57,6 +57,15 @@
"LastCachedTime": "Cache tijd",
"Project": "Project",
"AdvancedFilters": "Geavanceerde filters",
"RemoveCacheAndReIndexConfirmation": "Het document \"{0}\" wordt uit de cache verwijderd en opnieuw geïndexeerd. Bevestigt u?"
"RemoveCacheAndReIndexConfirmation": "Het document \"{0}\" wordt uit de cache verwijderd en opnieuw geïndexeerd. Bevestigt u?",
"GeneratePdf": "PDF genereren",
"Generating": "Genereren...",
"Language": "Taal",
"ForceToGenerateNewPdf": "Forceer nieuwe PDF te genereren",
"PdfGeneratedSuccessfully": "PDF succesvol gegenereerd",
"GenerateAndDownloadPdf": "PDF genereren en downloaden",
"PdfFileDeletionWarningMessage": "Weet u zeker dat u het PDF-bestand \"{0}\" wilt verwijderen?",
"ManagePdfFiles": "PDF-bestanden beheren",
"Permission:ManagePdfFiles": "PDF-bestanden beheren"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pl-PL.json

@ -57,6 +57,15 @@
"LastCachedTime": "Czas w pamięci podręcznej",
"Project": "Projekt",
"AdvancedFilters": "Zaawansowane filtry",
"RemoveCacheAndReIndexConfirmation": "Dokument \"{0}\" zostanie usunięty z pamięci podręcznej i ponownie zaindeksowany. Czy potwierdzasz?"
"RemoveCacheAndReIndexConfirmation": "Dokument \"{0}\" zostanie usunięty z pamięci podręcznej i ponownie zaindeksowany. Czy potwierdzasz?",
"GeneratePdf": "Generuj PDF",
"Generating": "Generowanie...",
"Language": "Język",
"ForceToGenerateNewPdf": "Wymuś generowanie nowego PDF",
"PdfGeneratedSuccessfully": "PDF został pomyślnie wygenerowany",
"GenerateAndDownloadPdf": "Generuj i pobierz PDF",
"PdfFileDeletionWarningMessage": "Czy na pewno chcesz usunąć plik PDF \"{0}\"?",
"ManagePdfFiles": "Zarządzanie plikami PDF",
"Permission:ManagePdfFiles": "Zarządzanie plikami PDF"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pt-BR.json

@ -57,6 +57,15 @@
"LastCachedTime": "Tempo de cache",
"Project": "Projeto",
"AdvancedFilters": "Filtros Avançados",
"RemoveCacheAndReIndexConfirmation": "O documento \"{0}\" será removido do cache e indexado novamente. Você confirma?"
"RemoveCacheAndReIndexConfirmation": "O documento \"{0}\" será removido do cache e indexado novamente. Você confirma?",
"GeneratePdf": "Gerar PDF",
"Generating": "Gerando...",
"Language": "Idioma",
"ForceToGenerateNewPdf": "Forçar para gerar um novo PDF",
"PdfGeneratedSuccessfully": "PDF gerado com sucesso",
"GenerateAndDownloadPdf": "Gerar e baixar PDF",
"PdfFileDeletionWarningMessage": "Tem certeza de que deseja excluir o arquivo PDF \"{0}\"?",
"ManagePdfFiles": "Gerenciar arquivos PDF",
"Permission:ManagePdfFiles": "Gerenciar arquivos PDF"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json

@ -57,6 +57,15 @@
"LastCachedTime": "Durată cache",
"Project": "Proiect",
"AdvancedFilters": "Filtre avansate",
"RemoveCacheAndReIndexConfirmation": "Documentul \"{0}\" va fi eliminat din memoria cache și va fi reindexat. Confirmați?"
"RemoveCacheAndReIndexConfirmation": "Documentul \"{0}\" va fi eliminat din memoria cache și va fi reindexat. Confirmați?",
"GeneratePdf": "Generare PDF",
"Generating": "Generare...",
"Language": "Limba",
"ForceToGenerateNewPdf": "Forțați generarea unui nou PDF",
"PdfGeneratedSuccessfully": "PDF generat cu succes",
"GenerateAndDownloadPdf": "Generare și descărcare PDF",
"PdfFileDeletionWarningMessage": "Sunteți sigur(ă) că doriți să ștergeți fișierul PDF \"{0}\"?",
"ManagePdfFiles": "Gestionare fișiere PDF",
"Permission:ManagePdfFiles": "Gestionare fișiere PDF"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ru.json

@ -57,6 +57,15 @@
"LastCachedTime": "Время кеширования",
"Project": "Проект",
"AdvancedFilters": "Расширенные фильтры",
"RemoveCacheAndReIndexConfirmation": "Документ \"{0}\" будет удален из кэша и переиндексирован. Вы подтверждаете?"
"RemoveCacheAndReIndexConfirmation": "Документ \"{0}\" будет удален из кэша и переиндексирован. Вы подтверждаете?",
"GeneratePdf": "Генерировать PDF",
"Generating": "Генерация...",
"Language": "Язык",
"ForceToGenerateNewPdf": "Принудительное создание нового PDF",
"PdfGeneratedSuccessfully": "PDF успешно сгенерирован",
"GenerateAndDownloadPdf": "Сгенерировать и скачать PDF",
"PdfFileDeletionWarningMessage": "Вы уверены, что хотите удалить файл PDF \"{0}\"?",
"ManagePdfFiles": "Управление файлами PDF",
"Permission:ManagePdfFiles": "Управление файлами PDF"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sk.json

@ -57,6 +57,15 @@
"LastCachedTime": "Čas vyrovnávacej pamäte",
"Project": "Projekt",
"AdvancedFilters": "Pokročilé filtre",
"RemoveCacheAndReIndexConfirmation": "Dokument \"{0}\" sa odstráni z vyrovnávacej pamäte a znovu sa zaindexuje. Potvrdzujete?"
"RemoveCacheAndReIndexConfirmation": "Dokument \"{0}\" sa odstráni z vyrovnávacej pamäte a znovu sa zaindexuje. Potvrdzujete?",
"GeneratePdf": "Generovať PDF",
"Generating": "Generovanie...",
"Language": "Jazyk",
"ForceToGenerateNewPdf": "Vynútiť generovanie nového PDF",
"PdfGeneratedSuccessfully": "PDF generovaný úspešne",
"GenerateAndDownloadPdf": "Generovať a stiahnuť PDF",
"PdfFileDeletionWarningMessage": "Ste si istý, že chcete odstrániť súbor PDF \"{0}\"?",
"ManagePdfFiles": "Správa PDF súborov",
"Permission:ManagePdfFiles": "Správa PDF súborov"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json

@ -57,6 +57,15 @@
"LastCachedTime": "Čas pred pomnilnika",
"Project": "Projekt",
"AdvancedFilters": "Napredni filtri",
"RemoveCacheAndReIndexConfirmation": "Dokument »{0}« bo odstranjen iz predpomnilnika in ponovno indeksiran. Ali potrjuješ?"
"RemoveCacheAndReIndexConfirmation": "Dokument »{0}« bo odstranjen iz predpomnilnika in ponovno indeksiran. Ali potrjuješ?",
"GeneratePdf": "Generiraj PDF",
"Generating": "Generiranje...",
"Language": "Jezik",
"ForceToGenerateNewPdf": "Prisili generiranje novega PDF",
"PdfGeneratedSuccessfully": "PDF generiran uspešno",
"GenerateAndDownloadPdf": "Generiraj in prenesi PDF",
"PdfFileDeletionWarningMessage": "Ali ste prepričani, da želite izbrisati datoteko PDF »{0}«?",
"ManagePdfFiles": "Upravljanje datotek PDF",
"Permission:ManagePdfFiles": "Upravljanje datotek PDF"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sv.json

@ -57,6 +57,15 @@
"LastCachedTime": "Cache-tid",
"Project": "Projekt",
"AdvancedFilters": "Avancerade filter",
"RemoveCacheAndReIndexConfirmation": "Dokumentet \"{0}\" kommer att tas bort från cacheminnet och indexeras på nytt. Kan du bekräfta detta?"
"RemoveCacheAndReIndexConfirmation": "Dokumentet \"{0}\" kommer att tas bort från cacheminnet och indexeras på nytt. Kan du bekräfta detta?",
"GeneratePdf": "Generera PDF",
"Generating": "Genererar...",
"Language": "Språk",
"ForceToGenerateNewPdf": "Force to generate new PDF",
"PdfGeneratedSuccessfully": "PDF generated successfully",
"GenerateAndDownloadPdf": "Generate and download PDF",
"PdfFileDeletionWarningMessage": "Are you sure you want to delete the PDF file \"{0}\"?",
"ManagePdfFiles": "Manage PDF files",
"Permission:ManagePdfFiles": "Manage PDF files"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json

@ -57,6 +57,15 @@
"LastCachedTime": "Önbellek süresi",
"Project": "Proje",
"AdvancedFilters": "Gelişmiş Filtre",
"RemoveCacheAndReIndexConfirmation": "\"{0}\" belgesi önbellekten kaldırılacak ve yeniden indekslenecektir. Onaylıyor musunuz?"
"RemoveCacheAndReIndexConfirmation": "\"{0}\" belgesi önbellekten kaldırılacak ve yeniden indekslenecektir. Onaylıyor musunuz?",
"GeneratePdf": "PDF oluştur",
"Generating": "Oluşturuluyor...",
"Language": "Dil",
"ForceToGenerateNewPdf": "Yeni bir PDF oluştur",
"PdfGeneratedSuccessfully": "PDF başarıyla oluşturuldu",
"GenerateAndDownloadPdf": "PDF oluştur ve indir",
"PdfFileDeletionWarningMessage": "{0} PDF dosyasını silmek istediğinizden emin misiniz?",
"ManagePdfFiles": "PDF dosyalarını yönet",
"Permission:ManagePdfFiles": "PDF dosyalarını yönet"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/vi.json

@ -57,6 +57,15 @@
"LastCachedTime": "Thời gian lưu vào bộ nhớ đệm",
"Project": "Dự án",
"AdvancedFilters": "Bộ lọc nâng cao",
"RemoveCacheAndReIndexConfirmation": "Tài liệu &quot;{0}&quot; sẽ bị xóa khỏi bộ đệm và được lập chỉ mục lại. Bạn có xác nhận không?"
"RemoveCacheAndReIndexConfirmation": "Tài liệu &quot;{0}&quot; sẽ bị xóa khỏi bộ đệm và được lập chỉ mục lại. Bạn có xác nhận không?",
"GeneratePdf": "Tạo PDF",
"Generating": "Đang tạo...",
"Language": "Ngôn ngữ",
"ForceToGenerateNewPdf": "Tạo PDF mới",
"PdfGeneratedSuccessfully": "PDF đã được tạo thành công",
"GenerateAndDownloadPdf": "Tạo và tải xuống PDF",
"PdfFileDeletionWarningMessage": "Bạn có chắc chắn muốn xóa tệp PDF \"{0}\" không?",
"ManagePdfFiles": "Quản lý tệp PDF",
"Permission:ManagePdfFiles": "Quản lý tệp PDF"
}
}

11
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json

@ -57,6 +57,15 @@
"LastCachedTime": "缓存项",
"Project": "项目",
"AdvancedFilters": "高级过滤器",
"RemoveCacheAndReIndexConfirmation": "文档“{0}”将从缓存中删除并重新编制索引。 你确认吗?"
"RemoveCacheAndReIndexConfirmation": "文档“{0}”将从缓存中删除并重新编制索引。 你确认吗?",
"GeneratePdf": "生成PDF",
"Generating": "生成中...",
"Language": "语言",
"ForceToGenerateNewPdf": "强制生成新PDF",
"PdfGeneratedSuccessfully": "PDF生成成功",
"GenerateAndDownloadPdf": "生成并下载PDF",
"PdfFileDeletionWarningMessage": "你确定要删除PDF文件“{0}”吗?",
"ManagePdfFiles": "管理PDF文件",
"Permission:ManagePdfFiles": "管理PDF文件"
}
}

13
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json

@ -55,8 +55,17 @@
"LanguageCode": "語言代碼",
"FileName": "文檔名稱",
"LastCachedTime": "緩存時間",
"Project": "项目",
"Project": "專案",
"AdvancedFilters": "進階過濾器",
"RemoveCacheAndReIndexConfirmation": "文檔“{0}”將從緩存中刪除並重新編制索引。 你確認嗎?"
"RemoveCacheAndReIndexConfirmation": "文檔“{0}”將從緩存中刪除並重新編制索引。 你確認嗎?",
"GeneratePdf": "生成PDF",
"Generating": "生成中...",
"Language": "語言",
"ForceToGenerateNewPdf": "强制生成新PDF",
"PdfGeneratedSuccessfully": "PDF生成成功",
"GenerateAndDownloadPdf": "生成并下载PDF",
"PdfFileDeletionWarningMessage": "你確定要刪除PDF文件“{0}”嗎?",
"ManagePdfFiles": "管理PDF文件",
"Permission:ManagePdfFiles": "管理PDF文件"
}
}

12
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/DeletePdfFileInput.cs

@ -0,0 +1,12 @@
using System;
namespace Volo.Docs.Admin.Projects;
public class DeletePdfFileInput
{
public Guid ProjectId { get; set; }
public string Version { get; set; }
public string LanguageCode { get; set; }
}

9
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/GetPdfFilesInput.cs

@ -0,0 +1,9 @@
using System;
using Volo.Abp.Application.Dtos;
namespace Volo.Docs.Admin.Projects;
public class GetPdfFilesInput : PagedAndSortedResultRequestDto
{
public Guid ProjectId { get; set; }
}

4
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/IProjectAdminAppService.cs

@ -22,5 +22,9 @@ namespace Volo.Docs.Admin.Projects
Task ReindexAllAsync();
Task<List<ProjectWithoutDetailsDto>> GetListWithoutDetailsAsync();
Task<PagedResultDto<ProjectPdfFileDto>> GetPdfFilesAsync(GetPdfFilesInput input);
Task DeletePdfFileAsync(DeletePdfFileInput input);
}
}

14
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/ProjectPdfFileDto.cs

@ -0,0 +1,14 @@
using System;
namespace Volo.Docs.Admin.Projects;
[Serializable]
public class ProjectPdfFileDto
{
public virtual Guid ProjectId { get; set; }
public virtual string FileName { get; set; }
public virtual string Version { get; set; }
public virtual string LanguageCode { get; set; }
public virtual DateTime CreationTime { get; set; }
public virtual DateTime? LastModificationTime { get; set; }
}

1
modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Docs.Admin.Application.Contracts\Volo.Docs.Admin.Application.Contracts.csproj" />
<ProjectReference Include="..\Volo.Docs.Common.Application\Volo.Docs.Common.Application.csproj" />
<ProjectReference Include="..\Volo.Docs.Domain\Volo.Docs.Domain.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.AutoMapper\Volo.Abp.AutoMapper.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Caching\Volo.Abp.Caching.csproj" />

1
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/DocsAdminApplicationAutoMapperProfile.cs

@ -16,6 +16,7 @@ namespace Volo.Docs.Admin
CreateMap<DocumentWithoutContent, DocumentDto>();
CreateMap<ProjectWithoutDetails, ProjectWithoutDetailsDto>();
CreateMap<DocumentInfo, DocumentInfoDto>();
CreateMap<ProjectPdfFile, ProjectPdfFileDto>();
}
}
}

2
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/DocsAdminApplicationModule.cs

@ -3,12 +3,14 @@ using Volo.Abp.Application;
using Volo.Abp.AutoMapper;
using Volo.Abp.Caching;
using Volo.Abp.Modularity;
using Volo.Docs.Common;
namespace Volo.Docs.Admin
{
[DependsOn(
typeof(DocsDomainModule),
typeof(DocsAdminApplicationContractsModule),
typeof(DocsCommonApplicationModule),
typeof(AbpCachingModule),
typeof(AbpAutoMapperModule),
typeof(AbpDddApplicationModule)

27
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Data;
@ -11,6 +12,7 @@ using Volo.Docs.Documents;
using Volo.Docs.Documents.FullSearch.Elastic;
using Volo.Docs.Localization;
using Volo.Docs.Projects;
using Volo.Docs.Projects.Pdf;
namespace Volo.Docs.Admin.Projects
{
@ -21,12 +23,14 @@ namespace Volo.Docs.Admin.Projects
private readonly IDocumentRepository _documentRepository;
private readonly IDocumentFullSearch _elasticSearchService;
private readonly IGuidGenerator _guidGenerator;
private readonly IProjectPdfFileStore _projectPdfFileStore;
public ProjectAdminAppService(
IProjectRepository projectRepository,
IDocumentRepository documentRepository,
IDocumentFullSearch elasticSearchService,
IGuidGenerator guidGenerator)
IGuidGenerator guidGenerator,
IProjectPdfFileStore projectPdfFileStore)
{
ObjectMapperContext = typeof(DocsAdminApplicationModule);
LocalizationResource = typeof(DocsResource);
@ -35,6 +39,7 @@ namespace Volo.Docs.Admin.Projects
_documentRepository = documentRepository;
_elasticSearchService = elasticSearchService;
_guidGenerator = guidGenerator;
_projectPdfFileStore = projectPdfFileStore;
}
public virtual async Task<PagedResultDto<ProjectDto>> GetListAsync(PagedAndSortedResultRequestDto input)
@ -176,5 +181,25 @@ namespace Volo.Docs.Admin.Projects
var projects = await _projectRepository.GetListWithoutDetailsAsync();
return ObjectMapper.Map<List<ProjectWithoutDetails>, List<ProjectWithoutDetailsDto>>(projects);
}
[Authorize(DocsAdminPermissions.Projects.ManagePdfFiles)]
public virtual async Task<PagedResultDto<ProjectPdfFileDto>> GetPdfFilesAsync(GetPdfFilesInput input)
{
var project = await _projectRepository.GetAsync(input.ProjectId, includeDetails: true);
var pdfFiles = project.PdfFiles.Skip(input.SkipCount).Take(input.MaxResultCount).ToList();
return new PagedResultDto<ProjectPdfFileDto>(
project.PdfFiles.Count,
ObjectMapper.Map<List<ProjectPdfFile>, List<ProjectPdfFileDto>>(pdfFiles)
);
}
[Authorize(DocsAdminPermissions.Projects.ManagePdfFiles)]
public virtual async Task DeletePdfFileAsync(DeletePdfFileInput input)
{
var project = await _projectRepository.GetAsync(input.ProjectId, includeDetails: true);
await _projectPdfFileStore.DeleteAsync(project, input.Version, input.LanguageCode);
}
}
}

16
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/ProjectsAdminClientProxy.Generated.cs

@ -68,6 +68,22 @@ public partial class ProjectsAdminClientProxy : ClientProxyBase<IProjectAdminApp
return await RequestAsync<List<ProjectWithoutDetailsDto>>(nameof(GetListWithoutDetailsAsync));
}
public virtual async Task<PagedResultDto<ProjectPdfFileDto>> GetPdfFilesAsync(GetPdfFilesInput input)
{
return await RequestAsync<PagedResultDto<ProjectPdfFileDto>>(nameof(GetPdfFilesAsync), new ClientProxyRequestTypeValue
{
{ typeof(GetPdfFilesInput), input }
});
}
public virtual async Task DeletePdfFileAsync(DeletePdfFileInput input)
{
await RequestAsync(nameof(DeletePdfFileAsync), new ClientProxyRequestTypeValue
{
{ typeof(DeletePdfFileInput), input }
});
}
public virtual async Task ReindexAsync(ReindexInput input)
{
await RequestAsync(nameof(ReindexAsync), new ClientProxyRequestTypeValue

1199
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/docs-admin-generate-proxy.json

File diff suppressed because it is too large

1
modules/docs/src/Volo.Docs.Admin.HttpApi/Volo.Docs.Admin.HttpApi.csproj

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Docs.Admin.Application.Contracts\Volo.Docs.Admin.Application.Contracts.csproj" />
<ProjectReference Include="..\Volo.Docs.Common.HttpApi\Volo.Docs.Common.HttpApi.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.AspNetCore.Mvc\Volo.Abp.AspNetCore.Mvc.csproj" />
</ItemGroup>

4
modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocsAdminHttpApiModule.cs

@ -4,12 +4,14 @@ using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Docs.Localization;
using Microsoft.Extensions.DependencyInjection;
using Volo.Docs.Common;
namespace Volo.Docs.Admin
{
[DependsOn(
typeof(DocsAdminApplicationContractsModule),
typeof(AbpAspNetCoreMvcModule)
typeof(AbpAspNetCoreMvcModule),
typeof(DocsCommonHttpApiModule)
)]
public class DocsAdminHttpApiModule : AbpModule
{

14
modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/ProjectsAdminController.cs

@ -70,6 +70,20 @@ namespace Volo.Docs.Admin
return _projectAppService.GetListWithoutDetailsAsync();
}
[HttpGet]
[Route("PdfFiles")]
public Task<PagedResultDto<ProjectPdfFileDto>> GetPdfFilesAsync(GetPdfFilesInput input)
{
return _projectAppService.GetPdfFilesAsync(input);
}
[HttpDelete]
[Route("DeletePdfFile")]
public Task DeletePdfFileAsync(DeletePdfFileInput input)
{
return _projectAppService.DeletePdfFileAsync(input);
}
[HttpPost]
[Route("Reindex")]
public Task ReindexAsync(ReindexInput input)

47
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/GeneratePdf.cshtml

@ -0,0 +1,47 @@
@page
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
@using Volo.Docs.Admin.Pages.Docs.Admin.Projects;
@using Volo.Docs.Localization
@model GeneratePdfModal
@inject IHtmlLocalizer<DocsResource> L
@{
Layout = null;
}
<abp-modal>
<abp-modal-header title="@(L["GeneratePdf"].Value + " - " + Model.ViewModel.ShortName)"></abp-modal-header>
<abp-modal-body>
<input id="ProjectId" name="ProjectId" value="@Model.ViewModel.ProjectId" hidden/>
<input id="ShortName" name="ShortName" value="@Model.ViewModel.ShortName" hidden/>
<div class="mb-3">
<label class="form-label" for="Version">@L["Version"]</label>
<select name="Version" id="Version" class="form-select mt-2">
@foreach (var version in Model.ViewModel.Versions)
{
<option value="@version.Value">@version.Value</option>
}
</select>
</div>
<div class="mb-3">
<label class="form-label" for="Language">@L["Language"]</label>
<select name="Language" id="Language" class="form-select mt-2">
@foreach (var language in Model.ViewModel.Languages)
{
<option value="@language.Value">@language.Value</option>
}
</select>
</div>
<div class="form-check mb-3">
<label class="form-check-label" for="ForceToGenerate">
<input id="ForceToGenerate" type="checkbox" class="form-check-input" />
@L["ForceToGenerateNewPdf"]
</label>
</div>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.None)">
<button type="button" class="btn btn-sm btn-link" data-bs-dismiss="modal">@L["Close"]</button>
<button type="button" class="btn btn-sm btn-outline-primary" id="GenerateBtn" data-busy-text="@L["Generating"].Value"><span>@L["GeneratePdf"]</span></button>
<button type="button" class="btn btn-sm btn-primary" id="GenerateAndDownloadPdfBtn">@L["GenerateAndDownloadPdf"]</button>
</abp-modal-footer>
</abp-modal>

62
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/GeneratePdf.cshtml.cs

@ -0,0 +1,62 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Volo.Docs.Admin.Projects;
using Volo.Docs.Common.Documents;
using Volo.Docs.Common.Projects;
using Volo.Docs.Projects;
namespace Volo.Docs.Admin.Pages.Docs.Admin.Projects;
public class GeneratePdfModal : DocsAdminPageModel
{
protected IDocumentPdfGeneratorAppService DocumentPdfGeneratorAppService { get; }
protected IProjectAppService ProjectAppService { get; }
protected IProjectAdminAppService ProjectAdminAppService { get; }
public GeneratePdfViewModel ViewModel { get; set; }
public GeneratePdfModal(
IDocumentPdfGeneratorAppService documentPdfGeneratorAppService,
IProjectAppService projectAppService,
IProjectAdminAppService projectAdminAppService)
{
DocumentPdfGeneratorAppService = documentPdfGeneratorAppService;
ProjectAppService = projectAppService;
ProjectAdminAppService = projectAdminAppService;
}
public virtual async Task<IActionResult> OnGetAsync(Guid id)
{
var project = await ProjectAdminAppService.GetAsync(id);
var versions = await ProjectAppService.GetVersionsAsync(project.ShortName);
if(versions.Items.Count == 0)
{
versions.Items =
[
new VersionInfoDto { Name = ProjectConsts.Latest, DisplayName = ProjectConsts.Latest }
];
}
var languages = await ProjectAppService.GetLanguageListAsync(project.ShortName, versions.Items.FirstOrDefault()?.Name);
ViewModel = new GeneratePdfViewModel
{
ProjectId = id,
ShortName = project.ShortName,
Versions = versions.Items.Select(x => new SelectListItem(x.DisplayName, x.Name)).ToList(),
Languages = languages.Languages.Select(x => new SelectListItem(x.DisplayName, x.Code)).ToList()
};
return Page();
}
public class GeneratePdfViewModel
{
public Guid ProjectId { get; set; }
public string ShortName { get; set; }
public List<SelectListItem> Versions { get; set; }
public List<SelectListItem> Languages { get; set; }
}
}

3
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/Index.cshtml

@ -20,10 +20,13 @@
@section scripts {
<abp-script src="/client-proxies/docs-admin-proxy.js" />
<abp-script src="/client-proxies/docs-common-proxy.js" />
<abp-script src="/Pages/Docs/Admin/Projects/index.js" />
<abp-script src="/Pages/Docs/Admin/Projects/create.js" />
<abp-script src="/Pages/Docs/Admin/Projects/edit.js" />
<abp-script src="/Pages/Docs/Admin/Projects/pull.js" />
<abp-script src="/Pages/Docs/Admin/Projects/managePdfFiles.js" />
<abp-script src="/Pages/Docs/Admin/Projects/generatePdf.js" />
}
<abp-card>

41
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/ManagePdfFiles.cshtml

@ -0,0 +1,41 @@
@page
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal
@using Volo.Docs.Localization
@model Volo.Docs.Admin.Pages.Docs.Admin.Projects.ManagePdfFiles
@inject IHtmlLocalizer<DocsResource> L
@{
Layout = null;
}
<abp-modal size="@(AbpModalSize.Large)">
<abp-modal-header title="@L["ManagePdfFiles"].Value"></abp-modal-header>
<abp-modal-body>
<abp-card>
<abp-card-header>
<abp-row>
<abp-column size-md="_12" class="text-end">
<abp-button button-type="Primary" icon="plus" text="@L["GeneratePdf"].Value" id="GeneratePdfBtn" />
</abp-column>
</abp-row>
</abp-card-header>
<abp-card-body>
<abp-table id="ProjectPdfFilesTable" class="nowrap">
<thead>
<tr>
<th>@L["Actions"]</th>
<th>@L["FileName"]</th>
<th>@L["Version"]</th>
<th>@L["LanguageCode"]</th>
<th>@L["CreationTime"]</th>
<th>@L["LastUpdateTime"]</th>
</tr>
</thead>
</abp-table>
</abp-card-body>
</abp-card>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Close|AbpModalButtons.Save)">
</abp-modal-footer>
</abp-modal>

14
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/ManagePdfFiles.cshtml.cs

@ -0,0 +1,14 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Volo.Docs.Admin.Pages.Docs.Admin.Projects;
[Authorize(DocsAdminPermissions.Projects.Default)]
public class ManagePdfFiles : DocsAdminPageModel
{
public virtual Task<IActionResult> OnGet()
{
return Task.FromResult<IActionResult>(Page());
}
}

81
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/generatePdf.js

@ -0,0 +1,81 @@
var abp = abp || {};
$(function () {
abp.modals.projectGeneratePdf = function () {
var l = abp.localization.getResource('Docs');
var projectAppService = volo.docs.projects.docsProject;
var pdfGeneratorAppService = volo.docs.documents.docsDocumentPdfGenerator;
var projectAdminAppService = volo.docs.admin.projectsAdmin;
var initModal = function (publicApi, args) {
};
$("#Versions").change(function () {
var shortname = $("#ShortName").val();
var version = $("#Version").val();
projectAppService.getLanguageList(shortname, version).done(function (result) {
$("#Language").empty();
$.each(result.languages, function (index, item) {
$("#Language").append($(`<option value="${item.code}">${item.displayName}</option>`));
});
});
})
$("#GenerateBtn").click(function () {
var $btn = $(this);
$btn.buttonBusy(true);
$("#GenerateAndDownloadPdfBtn").buttonBusy(true);
var input = {
projectId: $("#ProjectId").val(),
version: $("#Version").val(),
languageCode: $("#Language").val(),
}
function generatePdf(input) {
pdfGeneratorAppService.generatePdf(input, {
abpHandleError : false,
error: function (jqXHR) {
if (jqXHR.status === 200) {
abp.message.success(l('PdfFileDeletedSuccessfully'));
$btn.buttonBusy(false);
$("#GenerateAndDownloadPdfBtn").buttonBusy(false);
} else {
abp.ajax.handleErrorStatusCode(jqXHR.status);
}
}
});
}
if(shouldForceToGenerate(input)){
projectAdminAppService.deletePdfFile(input).done(() =>{
generatePdf(input);
});
}else{
generatePdf(input);
}
})
$("#GenerateAndDownloadPdfBtn").click(function () {
var input = {
projectId: $("#ProjectId").val(),
version: $("#Version").val(),
languageCode: $("#Language").val(),
}
if(shouldForceToGenerate(input)){
projectAdminAppService.deletePdfFile(input).done(() =>{
window.open(abp.appPath + 'api/docs/documents/pdf' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'version', value: input.version }, { name: 'languageCode', value: input.languageCode }]), '_blank');
});
}else{
window.open(abp.appPath + 'api/docs/documents/pdf' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'version', value: input.version }, { name: 'languageCode', value: input.languageCode }]), '_blank');
}
})
function shouldForceToGenerate(input) {
return $("#ForceToGenerate").is(":checked");
}
return {
initModal: initModal,
};
};
});

16
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/index.js

@ -16,6 +16,11 @@ $(function () {
modalClass: 'projectPull',
});
var _managePdfFilesModal = new abp.ModalManager({
viewUrl: abp.appPath + 'Docs/Admin/Projects/ManagePdfFiles',
modalClass: 'projectManagePdfFiles',
});
var _dataTable = $('#ProjectsTable').DataTable(
abp.libs.datatables.normalizeConfiguration({
processing: true,
@ -117,6 +122,17 @@ $(function () {
});
},
},
{
text: l('ManagePdfFiles'),
visible: abp.auth.isGranted(
'Docs.Admin.Projects.ManagePdfFiles'
),
action: function (data) {
_managePdfFilesModal.open({
projectId: data.record.id,
});
}
}
],
},
},

94
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/managePdfFiles.js

@ -0,0 +1,94 @@
var abp = abp || {};
$(function () {
abp.modals.projectManagePdfFiles = function () {
var l = abp.localization.getResource('Docs');
var projectAdminAppService = volo.docs.admin.projectsAdmin;
var _generatePdfModal = new abp.ModalManager({
viewUrl: abp.appPath + 'Docs/Admin/Projects/GeneratePdf',
modalClass: 'projectGeneratePdf',
});
var initModal = function (publicApi, args) {
var _dataTable = $('#ProjectPdfFilesTable').DataTable(
abp.libs.datatables.normalizeConfiguration({
processing: true,
serverSide: true,
scrollX: true,
paging: true,
searching: false,
autoWidth: false,
scrollCollapse: true,
order: [[2, 'desc']],
ajax: abp.libs.datatables.createAjax(
volo.docs.admin.projectsAdmin.getPdfFiles,
{
projectId : args.projectId
}
),
columnDefs: [
{
rowAction: {
items: [
{
text: l('Delete'),
confirmMessage: function (data) {
return l('PdfFileDeletionWarningMessage', data.record.fileName);
},
action: function (data) {
projectAdminAppService.deletePdfFile({
projectId: data.record.projectId,
version: data.record.version,
languageCode: data.record.languageCode
}).then(() => {
_dataTable.ajax.reloadEx();
abp.notify.success(l('PdfGeneratedSuccessfully'));
})
},
}
],
},
},
{
target: 1,
data: 'fileName',
},
{
target: 2,
data: 'version',
},
{
target: 3,
data: 'languageCode',
},
{
target: 4,
data: `creationTime`,
dataFormat: "datetime"
},
{
target: 5,
data: `lastModificationTime`,
dataFormat: "datetime"
}
],
})
);
$('#GeneratePdfBtn').click(function () {
_generatePdfModal.open({
Id: args.projectId,
});
});
_generatePdfModal.onClose(function () {
_dataTable.ajax.reloadEx();
});
};
return {
initModal: initModal,
};
};
});

15
modules/docs/src/Volo.Docs.Admin.Web/wwwroot/client-proxies/docs-admin-proxy.js

@ -136,6 +136,21 @@
}, ajaxParams));
};
volo.docs.admin.projectsAdmin.getPdfFiles = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/admin/projects/PdfFiles' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '',
type: 'GET'
}, ajaxParams));
};
volo.docs.admin.projectsAdmin.deletePdfFile = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/admin/projects/DeletePdfFile' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'version', value: input.version }, { name: 'languageCode', value: input.languageCode }]) + '',
type: 'DELETE',
dataType: null
}, ajaxParams));
};
volo.docs.admin.projectsAdmin.reindex = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/admin/projects/Reindex',

68
modules/docs/src/Volo.Docs.Admin.Web/wwwroot/client-proxies/docs-common-proxy.js

@ -0,0 +1,68 @@
/* This file is automatically generated by ABP framework to use MVC Controllers from javascript. */
// module docs-common
(function(){
// controller volo.docs.documents.docsDocumentPdfGenerator
(function(){
abp.utils.createNamespace(window, 'volo.docs.documents.docsDocumentPdfGenerator');
volo.docs.documents.docsDocumentPdfGenerator.generatePdf = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/documents/pdf' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'version', value: input.version }, { name: 'languageCode', value: input.languageCode }]) + '',
type: 'GET'
}, ajaxParams));
};
})();
// controller volo.docs.projects.docsProject
(function(){
abp.utils.createNamespace(window, 'volo.docs.projects.docsProject');
volo.docs.projects.docsProject.getList = function(ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/projects',
type: 'GET'
}, ajaxParams));
};
volo.docs.projects.docsProject.get = function(shortName, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/projects/' + shortName + '',
type: 'GET'
}, ajaxParams));
};
volo.docs.projects.docsProject.getDefaultLanguageCode = function(shortName, version, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/projects/' + shortName + '/defaultLanguage' + abp.utils.buildQueryString([{ name: 'version', value: version }]) + '',
type: 'GET'
}, { dataType: 'text' }, ajaxParams));
};
volo.docs.projects.docsProject.getVersions = function(shortName, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/projects/' + shortName + '/versions',
type: 'GET'
}, ajaxParams));
};
volo.docs.projects.docsProject.getLanguageList = function(shortName, version, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/projects/' + shortName + '/' + version + '/languageList',
type: 'GET'
}, ajaxParams));
};
})();
})();

1
modules/docs/src/Volo.Docs.Application.Contracts/Volo.Docs.Application.Contracts.csproj

@ -11,6 +11,7 @@
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Volo.Docs.Common.Application.Contracts\Volo.Docs.Common.Application.Contracts.csproj" />
<ProjectReference Include="..\Volo.Docs.Domain.Shared\Volo.Docs.Domain.Shared.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Ddd.Application.Contracts\Volo.Abp.Ddd.Application.Contracts.csproj" />
</ItemGroup>

2
modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/DocsApplicationContractsModule.cs

@ -1,10 +1,12 @@
using Volo.Abp.Application;
using Volo.Abp.Modularity;
using Volo.Docs.Common;
namespace Volo.Docs
{
[DependsOn(
typeof(DocsDomainSharedModule),
typeof(DocsCommonApplicationContractsModule),
typeof(AbpDddApplicationContractsModule)
)]
public class DocsApplicationContractsModule : AbpModule

1
modules/docs/src/Volo.Docs.Application.Contracts/Volo/Docs/Documents/DocumentWithDetailsDto.cs

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using Volo.Docs.Common.Projects;
using Volo.Docs.Projects;
namespace Volo.Docs.Documents

1
modules/docs/src/Volo.Docs.Application/Volo.Docs.Application.csproj

@ -12,6 +12,7 @@
<ItemGroup>
<ProjectReference Include="..\Volo.Docs.Application.Contracts\Volo.Docs.Application.Contracts.csproj" />
<ProjectReference Include="..\Volo.Docs.Common.Application\Volo.Docs.Common.Application.csproj" />
<ProjectReference Include="..\Volo.Docs.Domain\Volo.Docs.Domain.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.AutoMapper\Volo.Abp.AutoMapper.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Caching\Volo.Abp.Caching.csproj" />

3
modules/docs/src/Volo.Docs.Application/Volo/Docs/DocsApplicationAutoMapperProfile.cs

@ -1,7 +1,8 @@
using AutoMapper;
using Volo.Docs.Documents;
using Volo.Docs.Projects;
using Volo.Abp.AutoMapper;
using Volo.Docs.Common.Projects;
using Volo.Docs.Projects;
namespace Volo.Docs
{

2
modules/docs/src/Volo.Docs.Application/Volo/Docs/DocsApplicationModule.cs

@ -4,6 +4,7 @@ using Volo.Abp.Application;
using Volo.Abp.AutoMapper;
using Volo.Abp.Caching;
using Volo.Abp.Modularity;
using Volo.Docs.Common;
using Volo.Docs.Documents;
namespace Volo.Docs
@ -13,6 +14,7 @@ namespace Volo.Docs
typeof(DocsApplicationContractsModule),
typeof(AbpCachingModule),
typeof(AbpAutoMapperModule),
typeof(DocsCommonApplicationModule),
typeof(AbpDddApplicationModule)
)]
public class DocsApplicationModule : AbpModule

15
modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs

@ -14,8 +14,10 @@ using Volo.Abp.Application.Dtos;
using Volo.Abp.Caching;
using Volo.Abp.Data;
using Volo.Docs.Caching;
using Volo.Docs.Common.Projects;
using Volo.Docs.Documents.FullSearch.Elastic;
using Volo.Docs.Projects;
using Volo.Docs.Utils;
using Volo.Extensions;
namespace Volo.Docs.Documents
@ -281,7 +283,7 @@ namespace Volo.Docs.Documents
private List<string> GetDocumentLinks(NavigationNode node, List<string> documentUrls, string prefix,
string shortName, DocumentWithoutDetails document)
{
if (!IsExternalLink(node.Path))
if (!UrlHelper.IsExternalLink(node.Path))
{
documentUrls.AddIfNotContains(
NormalizePath(prefix, node.Path, shortName, document)
@ -319,17 +321,6 @@ namespace Volo.Docs.Documents
: path;
}
private static bool IsExternalLink(string path)
{
if (path.IsNullOrEmpty())
{
return false;
}
return path.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ||
path.StartsWith("https://", StringComparison.OrdinalIgnoreCase);
}
public virtual async Task<DocumentParametersDto> GetParametersAsync(GetParametersDocumentInput input)
{
var project = await _projectRepository.GetAsync(input.ProjectId);

33
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo.Docs.Common.Application.Contracts.csproj

@ -0,0 +1,33 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0;net9.0</TargetFrameworks>
<AssemblyName>Volo.Docs.Common.Application.Contracts</AssemblyName>
<PackageId>Volo.Docs.Common.Application.Contracts</PackageId>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<EmbeddedResource Include="Volo\Docs\Common\Localization\Resources\Docs\ApplicationContracts\*.json" />
<Content Remove="Volo\Docs\Common\Localization\Resources\Docs\ApplicationContracts\*.json" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Volo.Docs.Domain.Shared\Volo.Docs.Domain.Shared.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Ddd.Application.Contracts\Volo.Abp.Ddd.Application.Contracts.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Authorization.Abstractions\Volo.Abp.Authorization.Abstractions.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" />
</ItemGroup>
<ItemGroup>
<Folder Include="Volo\Docs\Common\Localization\Resources\Docs\" />
</ItemGroup>
</Project>

31
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/DocsCommonApplicationContractsModule.cs

@ -0,0 +1,31 @@
using Volo.Abp.Application;
using Volo.Abp.Authorization;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
using Volo.Docs.Localization;
namespace Volo.Docs.Common;
[DependsOn(
typeof(DocsDomainSharedModule),
typeof(AbpDddApplicationContractsModule),
typeof(AbpAuthorizationAbstractionsModule)
)]
public class DocsCommonApplicationContractsModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<DocsCommonApplicationContractsModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Get<DocsResource>()
.AddVirtualJson("Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts");
});
}
}

21
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/DocsCommonPermissionDefinitionProvider.cs

@ -0,0 +1,21 @@
using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Localization;
using Volo.Docs.Localization;
namespace Volo.Docs.Common
{
public class DocsCommonPermissionDefinitionProvider : PermissionDefinitionProvider
{
public override void Define(IPermissionDefinitionContext context)
{
var group = context.AddGroup(DocsCommonPermissions.GroupName, L("Permission:DocumentManagement.Common"));
group.AddPermission(DocsCommonPermissions.Projects.PdfGeneration, L("Permission:PdfGeneration"));
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<DocsResource>(name);
}
}
}

19
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/DocsCommonPermissions.cs

@ -0,0 +1,19 @@
using Volo.Abp.Reflection;
namespace Volo.Docs.Common
{
public class DocsCommonPermissions
{
public const string GroupName = "Docs.Common";
public static class Projects
{
public const string PdfGeneration = GroupName + ".PdfGeneration";
}
public static string[] GetAll()
{
return ReflectionHelper.GetPublicConstantsRecursively(typeof(DocsCommonPermissions));
}
}
}

9
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/DocsCommonRemoteServiceConsts.cs

@ -0,0 +1,9 @@
namespace Volo.Docs.Common
{
public static class DocsCommonRemoteServiceConsts
{
public const string RemoteServiceName = "AbpDocsCommon";
public const string ModuleName = "docs-common";
}
}

12
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Documents/DocumentPdfGeneratorInput.cs

@ -0,0 +1,12 @@
using System;
namespace Volo.Docs.Common.Documents;
public class DocumentPdfGeneratorInput
{
public Guid ProjectId { get; set; }
public string Version { get; set; }
public string LanguageCode { get; set; }
}

10
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Documents/IDocumentPdfGeneratorAppService.cs

@ -0,0 +1,10 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Content;
namespace Volo.Docs.Common.Documents;
public interface IDocumentPdfGeneratorAppService : IApplicationService
{
Task<IRemoteStreamContent> GeneratePdfAsync(DocumentPdfGeneratorInput input);
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/ar.json

@ -0,0 +1,7 @@
{
"culture": "ar",
"texts": {
"Permission:DocumentManagement.Common": "إدارة المستندات العامة",
"Permission:PdfGeneration": "إنشاء ملفات PDF"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/cs.json

@ -0,0 +1,7 @@
{
"culture": "cs",
"texts": {
"Permission:DocumentManagement.Common": "Správa dokumentů",
"Permission:PdfGeneration": "Generování PDF"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/de-DE.json

@ -0,0 +1,7 @@
{
"culture": "de-DE",
"texts": {
"Permission:DocumentManagement.Common": "Dokumentenverwaltung",
"Permission:PdfGeneration": "PDF-Generierung"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/de.json

@ -0,0 +1,7 @@
{
"culture": "de",
"texts": {
"Permission:DocumentManagement.Common": "Dokumentenverwaltung",
"Permission:PdfGeneration": "PDF-Generierung"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/el.json

@ -0,0 +1,7 @@
{
"culture": "el",
"texts": {
"Permission:DocumentManagement.Common": "Διαχείριση Εγγράφων",
"Permission:PdfGeneration": "Δημιουργία PDF"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/en-GB.json

@ -0,0 +1,7 @@
{
"culture": "en-GB",
"texts": {
"Permission:DocumentManagement.Common": "Document Management Common",
"Permission:PdfGeneration": "PDF Generation"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/en.json

@ -0,0 +1,7 @@
{
"culture": "en",
"texts": {
"Permission:DocumentManagement.Common": "Document Management Common",
"Permission:PdfGeneration": "PDF Generation"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/es.json

@ -0,0 +1,7 @@
{
"culture": "es",
"texts": {
"Permission:DocumentManagement.Common": "Gestión de documentos comunes",
"Permission:PdfGeneration": "Generación de PDF"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/fi.json

@ -0,0 +1,7 @@
{
"culture": "fi",
"texts": {
"Permission:DocumentManagement.Common": "Tiedostonhallinta",
"Permission:PdfGeneration": "PDF-generointi"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/fr.json

@ -0,0 +1,7 @@
{
"culture": "fr",
"texts": {
"Permission:DocumentManagement.Common": "Gestion des documents communs",
"Permission:PdfGeneration": "Génération de PDF"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/hi.json

@ -0,0 +1,7 @@
{
"culture": "hi",
"texts": {
"Permission:DocumentManagement.Common": "सामान्य दस्तावेज़ प्रबंधन",
"Permission:PdfGeneration": "PDF उत्पन्न करना"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/hr.json

@ -0,0 +1,7 @@
{
"culture": "hr",
"texts": {
"Permission:DocumentManagement.Common": "Upravljanje zajedničkih dokumenata",
"Permission:PdfGeneration": "Generiranje PDF-a"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/hu.json

@ -0,0 +1,7 @@
{
"culture": "hu",
"texts": {
"Permission:DocumentManagement.Common": "Általános dokumentumkezelés",
"Permission:PdfGeneration": "PDF generálás"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/is.json

@ -0,0 +1,7 @@
{
"culture": "is",
"texts": {
"Permission:DocumentManagement.Common": "Almennir skjöl",
"Permission:PdfGeneration": "Breyta í PDF"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/it.json

@ -0,0 +1,7 @@
{
"culture": "it",
"texts": {
"Permission:DocumentManagement.Common": "Gestione documenti comuni",
"Permission:PdfGeneration": "Generazione PDF"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/nl.json

@ -0,0 +1,7 @@
{
"culture": "nl",
"texts": {
"Permission:DocumentManagement.Common": "Algemene documentbeheer",
"Permission:PdfGeneration": "PDF-generatie"
}
}

7
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/pl-PL.json

@ -0,0 +1,7 @@
{
"culture": "pl-PL",
"texts": {
"Permission:DocumentManagement.Common": "Zarządzanie dokumentami",
"Permission:PdfGeneration": "Generowanie PDF"
}
}

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

Loading…
Cancel
Save