Browse Source

Merge pull request #11705 from abpframework/issue/11690

Cms-Kit: Allow to write global css/js
pull/11811/head
Gizem Mutu Kurt 5 years ago
committed by GitHub
parent
commit
03e1796212
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1122
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20211110134400_Initial.cs
  2. 67
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220225084616_Initial.Designer.cs
  3. 1184
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220225084616_Initial.cs
  4. 65
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs
  5. 8
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/GlobalResources/GlobalResourcesDto.cs
  6. 8
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/GlobalResources/GlobalResourcesUpdateDto.cs
  7. 11
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/GlobalResources/IGlobalResourceAdminAppService.cs
  8. 3
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs
  9. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs
  10. 35
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminAppService.cs
  11. 30
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/GlobalResourceAdminClientProxy.Generated.cs
  12. 7
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/GlobalResourceAdminClientProxy.cs
  13. 64
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json
  14. 36
      modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminController.cs
  15. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs
  16. 8
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs
  17. 5
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenus.cs
  18. 42
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/Index.cshtml
  19. 30
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/Index.cshtml.cs
  20. 16
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js
  21. 24
      modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js
  22. 1
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.csproj
  23. 4
      modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/CmsKitCommonApplicationContractsModule.cs
  24. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs
  25. 16
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalResourcesFeature.cs
  26. 12
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalResources/GlobalResourceConsts.cs
  27. 9
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json
  28. 6
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json
  29. 40
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResource.cs
  30. 69
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResourceManager.cs
  31. 12
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/IGlobalResourceRepository.cs
  32. 2
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs
  33. 19
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs
  34. 2
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs
  35. 2
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs
  36. 24
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/GlobalResources/EfCoreGlobalResourceRepository.cs
  37. 3
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs
  38. 6
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs
  39. 3
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs
  40. 25
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/GlobalResources/MongoGlobalResourceRepository.cs
  41. 3
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs
  42. 8
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/GlobalResources/GlobalResourceDto.cs
  43. 11
      modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/GlobalResources/IGlobalResourcePublicAppService.cs
  44. 32
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicAppService.cs
  45. 33
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/Handlers/GlobalResourceEventHandler.cs
  46. 4
      modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs
  47. 35
      modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicController.cs
  48. 19
      modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs
  49. 62
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicGlobalResourcesController.cs
  50. 1
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/GlobalResources/Script/Default.cshtml
  51. 13
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/GlobalResources/Script/GlobalScriptViewComponent.cs
  52. 1
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/GlobalResources/Style/Default.cshtml
  53. 13
      modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/GlobalResources/Style/GlobalStyleViewComponent.cs

1122
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20211110134400_Initial.cs

File diff suppressed because it is too large

67
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20211110134400_Initial.Designer.cs → modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220225084616_Initial.Designer.cs

@ -13,7 +13,7 @@ using Volo.CmsKit.EntityFrameworkCore;
namespace Volo.CmsKit.Migrations
{
[DbContext(typeof(UnifiedDbContext))]
[Migration("20211110134400_Initial")]
[Migration("20220225084616_Initial")]
partial class Initial
{
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -100,16 +100,28 @@ namespace Volo.CmsKit.Migrations
.HasColumnType("uniqueidentifier")
.HasColumnName("ImpersonatorTenantId");
b.Property<string>("ImpersonatorTenantName")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)")
.HasColumnName("ImpersonatorTenantName");
b.Property<Guid?>("ImpersonatorUserId")
.HasColumnType("uniqueidentifier")
.HasColumnName("ImpersonatorUserId");
b.Property<string>("ImpersonatorUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)")
.HasColumnName("ImpersonatorUserName");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.Property<string>("TenantName")
.HasColumnType("nvarchar(max)");
.HasMaxLength(64)
.HasColumnType("nvarchar(64)")
.HasColumnName("TenantName");
b.Property<string>("Url")
.HasMaxLength(256)
@ -1404,6 +1416,57 @@ namespace Volo.CmsKit.Migrations
b.ToTable("CmsComments", (string)null);
});
modelBuilder.Entity("Volo.CmsKit.GlobalResources.GlobalResource", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.Property<string>("Value")
.IsRequired()
.HasMaxLength(2147483647)
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("CmsGlobalResources", (string)null);
});
modelBuilder.Entity("Volo.CmsKit.MediaDescriptors.MediaDescriptor", b =>
{
b.Property<Guid>("Id")

1184
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/20220225084616_Initial.cs

File diff suppressed because it is too large

65
modules/cms-kit/host/Volo.CmsKit.Web.Unified/Migrations/UnifiedDbContextModelSnapshot.cs

@ -98,16 +98,28 @@ namespace Volo.CmsKit.Migrations
.HasColumnType("uniqueidentifier")
.HasColumnName("ImpersonatorTenantId");
b.Property<string>("ImpersonatorTenantName")
.HasMaxLength(64)
.HasColumnType("nvarchar(64)")
.HasColumnName("ImpersonatorTenantName");
b.Property<Guid?>("ImpersonatorUserId")
.HasColumnType("uniqueidentifier")
.HasColumnName("ImpersonatorUserId");
b.Property<string>("ImpersonatorUserName")
.HasMaxLength(256)
.HasColumnType("nvarchar(256)")
.HasColumnName("ImpersonatorUserName");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.Property<string>("TenantName")
.HasColumnType("nvarchar(max)");
.HasMaxLength(64)
.HasColumnType("nvarchar(64)")
.HasColumnName("TenantName");
b.Property<string>("Url")
.HasMaxLength(256)
@ -1402,6 +1414,57 @@ namespace Volo.CmsKit.Migrations
b.ToTable("CmsComments", (string)null);
});
modelBuilder.Entity("Volo.CmsKit.GlobalResources.GlobalResource", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uniqueidentifier");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("nvarchar(40)")
.HasColumnName("ConcurrencyStamp");
b.Property<DateTime>("CreationTime")
.HasColumnType("datetime2")
.HasColumnName("CreationTime");
b.Property<Guid?>("CreatorId")
.HasColumnType("uniqueidentifier")
.HasColumnName("CreatorId");
b.Property<string>("ExtraProperties")
.HasColumnType("nvarchar(max)")
.HasColumnName("ExtraProperties");
b.Property<DateTime?>("LastModificationTime")
.HasColumnType("datetime2")
.HasColumnName("LastModificationTime");
b.Property<Guid?>("LastModifierId")
.HasColumnType("uniqueidentifier")
.HasColumnName("LastModifierId");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(128)
.HasColumnType("nvarchar(128)");
b.Property<Guid?>("TenantId")
.HasColumnType("uniqueidentifier")
.HasColumnName("TenantId");
b.Property<string>("Value")
.IsRequired()
.HasMaxLength(2147483647)
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("CmsGlobalResources", (string)null);
});
modelBuilder.Entity("Volo.CmsKit.MediaDescriptors.MediaDescriptor", b =>
{
b.Property<Guid>("Id")

8
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/GlobalResources/GlobalResourcesDto.cs

@ -0,0 +1,8 @@
namespace Volo.CmsKit.Admin.GlobalResources;
public class GlobalResourcesDto
{
public string StyleContent { get; set; }
public string ScriptContent { get; set; }
}

8
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/GlobalResources/GlobalResourcesUpdateDto.cs

@ -0,0 +1,8 @@
namespace Volo.CmsKit.Admin.GlobalResources;
public class GlobalResourcesUpdateDto
{
public string Style { get; set; }
public string Script { get; set; }
}

11
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/GlobalResources/IGlobalResourceAdminAppService.cs

@ -0,0 +1,11 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace Volo.CmsKit.Admin.GlobalResources;
public interface IGlobalResourceAdminAppService : IApplicationService
{
Task<GlobalResourcesDto> GetAsync();
Task SetGlobalResourcesAsync(GlobalResourcesUpdateDto input);
}

3
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissionDefinitionProvider.cs

@ -65,6 +65,9 @@ public class CmsKitAdminPermissionDefinitionProvider : PermissionDefinitionProvi
.RequireGlobalFeatures(typeof(MenuFeature));
menuManagement.AddChild(CmsKitAdminPermissions.Menus.Delete, L("Permission:MenuManagement.Delete"))
.RequireGlobalFeatures(typeof(MenuFeature));
cmsGroup.AddPermission(CmsKitAdminPermissions.GlobalResources.Default, L("Permission:GlobalResources"))
.RequireGlobalFeatures(typeof(GlobalResourcesFeature));
}
private static LocalizableString L(string name)

5
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs

@ -60,4 +60,9 @@ public class CmsKitAdminPermissions
public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete";
}
public static class GlobalResources
{
public const string Default = GroupName + ".GlobalResources";
}
}

35
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminAppService.cs

@ -0,0 +1,35 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Services;
using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.Permissions;
namespace Volo.CmsKit.Admin.GlobalResources;
[RequiresGlobalFeature(typeof(GlobalResourcesFeature))]
[Authorize(CmsKitAdminPermissions.GlobalResources.Default)]
public class GlobalResourceAdminAppService : ApplicationService, IGlobalResourceAdminAppService
{
public GlobalResourceManager GlobalResourceManager { get; }
public GlobalResourceAdminAppService(GlobalResourceManager globalResourceManager)
{
GlobalResourceManager = globalResourceManager;
}
public async Task<GlobalResourcesDto> GetAsync()
{
return new GlobalResourcesDto {
StyleContent = (await GlobalResourceManager.GetGlobalStyleAsync()).Value,
ScriptContent = (await GlobalResourceManager.GetGlobalScriptAsync()).Value
};
}
public async Task SetGlobalResourcesAsync(GlobalResourcesUpdateDto input)
{
await GlobalResourceManager.SetGlobalStyleAsync(input.Style);
await GlobalResourceManager.SetGlobalScriptAsync(input.Script);
}
}

30
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/GlobalResourceAdminClientProxy.Generated.cs

@ -0,0 +1,30 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Modeling;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.CmsKit.Admin.GlobalResources;
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Admin.GlobalResources.ClientProxies;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IGlobalResourceAdminAppService), typeof(GlobalResourceAdminClientProxy))]
public partial class GlobalResourceAdminClientProxy : ClientProxyBase<IGlobalResourceAdminAppService>, IGlobalResourceAdminAppService
{
public virtual async Task<GlobalResourcesDto> GetAsync()
{
return await RequestAsync<GlobalResourcesDto>(nameof(GetAsync));
}
public virtual async Task SetGlobalResourcesAsync(GlobalResourcesUpdateDto input)
{
await RequestAsync(nameof(SetGlobalResourcesAsync), new ClientProxyRequestTypeValue
{
{ typeof(GlobalResourcesUpdateDto), input }
});
}
}

7
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/GlobalResourceAdminClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of GlobalResourceAdminClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.CmsKit.Admin.GlobalResources.ClientProxies;
public partial class GlobalResourceAdminClientProxy
{
}

64
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json

@ -1115,6 +1115,70 @@
}
}
},
"Volo.CmsKit.Admin.GlobalResources.GlobalResourceAdminController": {
"controllerName": "GlobalResourceAdmin",
"controllerGroupName": "GlobalResourceAdmin",
"type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourceAdminController",
"interfaces": [
{
"type": "Volo.CmsKit.Admin.GlobalResources.IGlobalResourceAdminAppService"
}
],
"actions": {
"GetAsync": {
"uniqueName": "GetAsync",
"name": "GetAsync",
"httpMethod": "GET",
"url": "api/cms-kit-admin/global-resources",
"supportedVersions": [],
"parametersOnMethod": [],
"parameters": [],
"returnValue": {
"type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesDto",
"typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesDto"
},
"allowAnonymous": false,
"implementFrom": "Volo.CmsKit.Admin.GlobalResources.IGlobalResourceAdminAppService"
},
"SetGlobalResourcesAsyncByInput": {
"uniqueName": "SetGlobalResourcesAsyncByInput",
"name": "SetGlobalResourcesAsync",
"httpMethod": "POST",
"url": "api/cms-kit-admin/global-resources",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto, Volo.CmsKit.Admin.Application.Contracts",
"type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto",
"typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "input",
"name": "input",
"jsonName": null,
"type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto",
"typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "Body",
"descriptorName": ""
}
],
"returnValue": {
"type": "System.Void",
"typeSimple": "System.Void"
},
"allowAnonymous": false,
"implementFrom": "Volo.CmsKit.Admin.GlobalResources.IGlobalResourceAdminAppService"
}
}
},
"Volo.CmsKit.Admin.Comments.CommentAdminController": {
"controllerName": "CommentAdmin",
"controllerGroupName": "CommentAdmin",

36
modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminController.cs

@ -0,0 +1,36 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.Permissions;
namespace Volo.CmsKit.Admin.GlobalResources;
[RequiresGlobalFeature(typeof(GlobalResourcesFeature))]
[RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)]
[Area(CmsKitAdminRemoteServiceConsts.ModuleName)]
[Authorize(CmsKitAdminPermissions.Menus.Default)]
[Route("api/cms-kit-admin/global-resources")]
public class GlobalResourceAdminController: CmsKitAdminController, IGlobalResourceAdminAppService
{
private readonly IGlobalResourceAdminAppService _globalResourceAdminAppService;
public GlobalResourceAdminController(IGlobalResourceAdminAppService globalResourceAdminAppService)
{
_globalResourceAdminAppService = globalResourceAdminAppService;
}
[HttpGet]
public Task<GlobalResourcesDto> GetAsync()
{
return _globalResourceAdminAppService.GetAsync();
}
[HttpPost]
public Task SetGlobalResourcesAsync(GlobalResourcesUpdateDto input)
{
return _globalResourceAdminAppService.SetGlobalResourcesAsync(input);
}
}

2
modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebModule.cs

@ -76,6 +76,7 @@ public class CmsKitAdminWebModule : AbpModule
options.Conventions.AuthorizePage("/CmsKit/Menus/MenuItems/CreateModal", CmsKitAdminPermissions.Menus.Create);
options.Conventions.AuthorizePage("/CmsKit/Menus/MenuItems/UpdateModal", CmsKitAdminPermissions.Menus.Update);
options.Conventions.AuthorizeFolder("/CmsKit/Menus/MenuItems", CmsKitAdminPermissions.Menus.Update);
options.Conventions.AuthorizeFolder("/CmsKit/GlobalResources", CmsKitAdminPermissions.GlobalResources.Default);
});
Configure<RazorPagesOptions>(options =>
@ -91,6 +92,7 @@ public class CmsKitAdminWebModule : AbpModule
options.Conventions.AddPageRoute("/CmsKit/Comments/Index", "/Cms/Comments");
options.Conventions.AddPageRoute("/CmsKit/Comments/Details", "/Cms/Comments/{Id}");
options.Conventions.AddPageRoute("/CmsKit/Menus/MenuItems/Index", "/Cms/Menus/Items");
options.Conventions.AddPageRoute("/CmsKit/GlobalResources/Index", "/Cms/GlobalResources");
});
Configure<AbpPageToolbarOptions>(options =>

8
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs

@ -79,6 +79,14 @@ public class CmsKitAdminMenuContributor : IMenuContributor
.RequireGlobalFeatures(typeof(MenuFeature))
.RequirePermissions(CmsKitAdminPermissions.Menus.Default));
cmsMenus.Add(new ApplicationMenuItem(
CmsKitAdminMenus.GlobalResources.GlobalResourcesMenu,
l["GlobalResources"],
"/Cms/GlobalResources",
"fa fa-newspaper")
.RequireGlobalFeatures(typeof(GlobalResourcesFeature))
.RequirePermissions(CmsKitAdminPermissions.GlobalResources.Default));
if (cmsMenus.Any())
{
var cmsMenu = context.Menu.FindMenuItem(CmsKitAdminMenus.GroupName);

5
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenus.cs

@ -33,4 +33,9 @@ public class CmsKitAdminMenus
{
public const string MenusMenu = GroupName + ".Menus";
}
public static class GlobalResources
{
public const string GlobalResourcesMenu = GroupName + ".GlobalResources";
}
}

42
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/Index.cshtml

@ -0,0 +1,42 @@
@page
@using Microsoft.AspNetCore.Mvc.Localization
@using Volo.Abp.AspNetCore.Mvc.UI.Layout
@using Volo.CmsKit.Admin.Web.Pages.CmsKit.GlobalResources
@using Volo.CmsKit.Admin.Web.Menus
@using Volo.CmsKit.Localization
@inject IPageLayout PageLayout
@inject IHtmlLocalizer<CmsKitResource> L
@model IndexModel
@{
PageLayout.Content.Title = L["GlobalResources"].Value;
PageLayout.Content.BreadCrumb.Add(L["Menu:CMS"].Value);
PageLayout.Content.MenuItemName = CmsKitAdminMenus.GlobalResources.GlobalResourcesMenu;
}
@section scripts {
<abp-script-bundle>
<abp-script src="/client-proxies/cms-kit-common-proxy.js"/>
<abp-script src="/client-proxies/cms-kit-admin-proxy.js"/>
<abp-script src="/Pages/CmsKit/GlobalResources/index.js"/>
</abp-script-bundle>
}
<abp-card>
<abp-card-body>
<abp-tabs>
<abp-tab title="@L["Script"].Value">
<abp-input asp-for="ScriptContent" suppress-label="true"></abp-input>
</abp-tab>
<abp-tab title="@L["Style"].Value">
<abp-input asp-for="StyleContent" suppress-label="true"></abp-input>
</abp-tab>
</abp-tabs>
</abp-card-body>
<abp-card-footer>
<abp-button button-type="Primary" id="SaveResourcesButton" class="float-end">@L["SaveChanges"]</abp-button>
</abp-card-footer>
</abp-card>

30
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/Index.cshtml.cs

@ -0,0 +1,30 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form;
using Volo.CmsKit.Admin.GlobalResources;
namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.GlobalResources;
public class IndexModel : CmsKitAdminPageModel
{
private readonly IGlobalResourceAdminAppService _globalResourceAdminAppService;
[TextArea(Rows = 30)]
public string ScriptContent { get; set; }
[TextArea(Rows = 30)]
public string StyleContent { get; set; }
public IndexModel(IGlobalResourceAdminAppService globalResourceAdminAppService)
{
_globalResourceAdminAppService = globalResourceAdminAppService;
}
public async Task OnGetAsync()
{
var resources = await _globalResourceAdminAppService.GetAsync();
ScriptContent = resources.ScriptContent;
StyleContent = resources.StyleContent;
}
}

16
modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/GlobalResources/index.js

@ -0,0 +1,16 @@
$(function (){
var l = abp.localization.getResource("CmsKit");
var service = volo.cmsKit.admin.globalResources.globalResourceAdmin;
$('#SaveResourcesButton').on('click','',function(){
service.setGlobalResources(
{
style: $('#StyleContent').val(),
script: $('#ScriptContent').val()
}
).then(function () {
abp.message.success(l("SavedSuccessfully"));
});
});
});

24
modules/cms-kit/src/Volo.CmsKit.Admin.Web/wwwroot/client-proxies/cms-kit-admin-proxy.js

@ -223,6 +223,30 @@
})();
// controller volo.cmsKit.admin.globalResources.globalResourceAdmin
(function(){
abp.utils.createNamespace(window, 'volo.cmsKit.admin.globalResources.globalResourceAdmin');
volo.cmsKit.admin.globalResources.globalResourceAdmin.get = function(ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/cms-kit-admin/global-resources',
type: 'GET'
}, ajaxParams));
};
volo.cmsKit.admin.globalResources.globalResourceAdmin.setGlobalResources = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/cms-kit-admin/global-resources',
type: 'POST',
dataType: null,
data: JSON.stringify(input)
}, ajaxParams));
};
})();
// controller volo.cmsKit.admin.comments.commentAdmin
(function(){

1
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo.CmsKit.Common.Application.Contracts.csproj

@ -12,6 +12,7 @@
<ProjectReference Include="..\Volo.CmsKit.Domain.Shared\Volo.CmsKit.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\Volo.Abp.Authorization.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Caching\Volo.Abp.Caching.csproj" />
</ItemGroup>
</Project>

4
modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/CmsKitCommonApplicationContractsModule.cs

@ -1,5 +1,6 @@
using Volo.Abp.Application;
using Volo.Abp.Authorization;
using Volo.Abp.Caching;
using Volo.Abp.Modularity;
namespace Volo.CmsKit;
@ -7,7 +8,8 @@ namespace Volo.CmsKit;
[DependsOn(
typeof(CmsKitDomainSharedModule),
typeof(AbpDddApplicationContractsModule),
typeof(AbpAuthorizationModule)
typeof(AbpAuthorizationModule),
typeof(AbpCachingModule)
)]
public class CmsKitCommonApplicationContractsModule : AbpModule
{

3
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs

@ -25,6 +25,8 @@ public class GlobalCmsKitFeatures : GlobalModuleFeatures
public MenuFeature Menu => GetFeature<MenuFeature>();
public GlobalResourcesFeature GlobalResources => GetFeature<GlobalResourcesFeature>();
public GlobalCmsKitFeatures([NotNull] GlobalFeatureManager featureManager)
: base(featureManager)
{
@ -37,5 +39,6 @@ public class GlobalCmsKitFeatures : GlobalModuleFeatures
AddFeature(new BlogsFeature(this));
AddFeature(new CmsUserFeature(this));
AddFeature(new MenuFeature(this));
AddFeature(new GlobalResourcesFeature(this));
}
}

16
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalResourcesFeature.cs

@ -0,0 +1,16 @@
using JetBrains.Annotations;
using Volo.Abp.GlobalFeatures;
namespace Volo.CmsKit.GlobalFeatures;
[GlobalFeatureName(Name)]
public class GlobalResourcesFeature : GlobalFeature
{
public const string Name = "CmsKit.GlobalResources";
internal GlobalResourcesFeature(
[NotNull] GlobalCmsKitFeatures cmsKit
) : base(cmsKit)
{
}
}

12
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalResources/GlobalResourceConsts.cs

@ -0,0 +1,12 @@
namespace Volo.CmsKit.GlobalResources;
public class GlobalResourceConsts
{
public const string GlobalStyleName = "GlobalStyle";
public const string GlobalScriptName = "GlobalScript";
public static int MaxNameLength { get; set; } = 128;
public static int MaxValueLength { get; set; } = int.MaxValue;
}

9
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json

@ -47,7 +47,7 @@
"ExportCSV": "Export CSV",
"Features": "Features",
"GenericDeletionConfirmationMessage": "Are you sure to delete '{0}'?",
"IsActive" : "Active",
"IsActive": "Active",
"LastModification": "Last Modification",
"LastModificationTime": "Last Modification Time",
"LoginToAddComment": "Login to add comment",
@ -115,6 +115,7 @@
"Permission:TagManagement.Create": "Create",
"Permission:TagManagement.Delete": "Delete",
"Permission:TagManagement.Update": "Update",
"Permission:GlobalResources": "Global Resources",
"PickYourReaction": "Pick your reaction",
"Rating": "Rating",
"RatingUndoMessage": "Your rating will be undo.",
@ -159,6 +160,10 @@
"YourFullName": "Your full name",
"YourMessage": "Your Message",
"YourReply": "Your reply",
"MarkdownSupported": "<a href=\"https://www.markdownguide.org/basic-syntax/\">Markdown</a> supported."
"MarkdownSupported": "<a href=\"https://www.markdownguide.org/basic-syntax/\">Markdown</a> supported.",
"GlobalResources": "Global Resources",
"Script": "Script",
"Style": "Style",
"SavedSuccessfully": "Saved successfully"
}
}

6
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json

@ -159,6 +159,10 @@
"YourFullName": "Tam adınız",
"YourMessage": "Mesajınız",
"YourReply": "Cevabınız",
"MarkdownSupported": "<a href=\"https://www.markdownguide.org/basic-syntax/\">Markdown</a> destekler."
"MarkdownSupported": "<a href=\"https://www.markdownguide.org/basic-syntax/\">Markdown</a> destekler.",
"GlobalResources": "Global Kaynaklar",
"Script": "Script",
"Style": "Style",
"SavedSuccessfully": "Başarıyla kaydedildi"
}
}

40
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResource.cs

@ -0,0 +1,40 @@
using System;
using JetBrains.Annotations;
using Volo.Abp;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.MultiTenancy;
namespace Volo.CmsKit.GlobalResources;
public class GlobalResource : AuditedAggregateRoot<Guid>, IMultiTenant
{
public virtual string Name { get; }
public virtual string Value { get; private set; }
public virtual Guid? TenantId { get; protected set; }
protected GlobalResource()
{
}
internal GlobalResource(
Guid id,
[NotNull] string name,
[CanBeNull] string value,
Guid? tenantId = null) : base(id)
{
Name = Check.NotNullOrEmpty(name, nameof(name), GlobalResourceConsts.MaxNameLength);
Value = Check.Length(value, nameof(value), GlobalResourceConsts.MaxValueLength);
TenantId = tenantId;
}
public virtual void SetValue(string value)
{
Check.Length(value, nameof(value), GlobalResourceConsts.MaxValueLength);
Value = value;
}
}

69
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResourceManager.cs

@ -0,0 +1,69 @@
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
namespace Volo.CmsKit.GlobalResources;
public class GlobalResourceManager : DomainService
{
private readonly IGlobalResourceRepository _globalResourceRepository;
public GlobalResourceManager(IGlobalResourceRepository globalResourceRepository)
{
_globalResourceRepository = globalResourceRepository;
}
public virtual async Task<GlobalResource> SetGlobalStyleAsync(string value)
{
return await SetGlobalResourceAsync(GlobalResourceConsts.GlobalStyleName, value);
}
public virtual async Task<GlobalResource> SetGlobalScriptAsync(string value)
{
return await SetGlobalResourceAsync(GlobalResourceConsts.GlobalScriptName, value);
}
public virtual async Task<GlobalResource> GetGlobalStyleAsync()
{
return await GetOrCreateResourceAsync(GlobalResourceConsts.GlobalStyleName);
}
public virtual async Task<GlobalResource> GetGlobalScriptAsync()
{
return await GetOrCreateResourceAsync(GlobalResourceConsts.GlobalScriptName);
}
protected virtual async Task<GlobalResource> SetGlobalResourceAsync(string name, string value)
{
var resource = await _globalResourceRepository.FindByNameAsync(name);
if (resource == null)
{
return await CreateResourceAsync(name, value);
}
resource.SetValue(value);
await _globalResourceRepository.UpdateAsync(resource);
return resource;
}
protected virtual async Task<GlobalResource> GetOrCreateResourceAsync(string name)
{
var resource = await _globalResourceRepository.FindByNameAsync(name);
if (resource == null)
{
return await CreateResourceAsync(name, string.Empty);
}
return resource;
}
protected virtual async Task<GlobalResource> CreateResourceAsync(string name, string value)
{
return await _globalResourceRepository.InsertAsync(
new GlobalResource(GuidGenerator.Create(), name, value, CurrentTenant.Id)
);
}
}

12
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/IGlobalResourceRepository.cs

@ -0,0 +1,12 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Volo.Abp.Domain.Repositories;
namespace Volo.CmsKit.GlobalResources;
public interface IGlobalResourceRepository: IBasicRepository<GlobalResource, Guid>
{
Task<GlobalResource> FindByNameAsync([NotNull] string name, CancellationToken cancellationToken = default);
}

2
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs

@ -3,6 +3,7 @@ using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
@ -28,6 +29,7 @@ public class CmsKitDbContext : AbpDbContext<CmsKitDbContext>, ICmsKitDbContext
public DbSet<BlogFeature> BlogFeatures { get; set; }
public DbSet<MediaDescriptor> MediaDescriptors { get; set; }
public DbSet<MenuItem> MenuItems { get; set; }
public DbSet<GlobalResource> GlobalResources { get; set; }
public CmsKitDbContext(DbContextOptions<CmsKitDbContext> options)
: base(options)

19
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs

@ -6,6 +6,7 @@ using Volo.Abp.Users.EntityFrameworkCore;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
@ -264,6 +265,24 @@ public static class CmsKitDbContextModelCreatingExtensions
builder.Ignore<MenuItem>();
}
if (GlobalFeatureManager.Instance.IsEnabled<GlobalResourcesFeature>())
{
builder.Entity<GlobalResource>(b =>
{
b.ToTable(CmsKitDbProperties.DbTablePrefix + "GlobalResources", CmsKitDbProperties.DbSchema);
b.ConfigureByConvention();
b.Property(x => x.Name).IsRequired().HasMaxLength(GlobalResourceConsts.MaxNameLength);
b.Property(x => x.Value).IsRequired().HasMaxLength(GlobalResourceConsts.MaxValueLength);
});
}
else
{
builder.Ignore<GlobalResource>();
}
builder.TryConfigureObjectExtensions<CmsKitDbContext>();
}
}

2
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs

@ -4,6 +4,7 @@ using Volo.Abp.Modularity;
using Volo.Abp.Users.EntityFrameworkCore;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Pages;
using Volo.CmsKit.Ratings;
@ -35,6 +36,7 @@ public class CmsKitEntityFrameworkCoreModule : AbpModule
options.AddRepository<BlogPost, EfCoreBlogPostRepository>();
options.AddRepository<BlogFeature, EfCoreBlogFeatureRepository>();
options.AddRepository<MediaDescriptor, EfCoreMediaDescriptorRepository>();
options.AddRepository<GlobalResource, EfCoreGlobalResourceRepository>();
});
}
}

2
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs

@ -3,6 +3,7 @@ using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
@ -27,4 +28,5 @@ public interface ICmsKitDbContext : IEfCoreDbContext
DbSet<BlogPost> BlogPosts { get; }
DbSet<MediaDescriptor> MediaDescriptors { get; }
DbSet<MenuItem> MenuItems { get; }
DbSet<GlobalResource> GlobalResources { get; }
}

24
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/GlobalResources/EfCoreGlobalResourceRepository.cs

@ -0,0 +1,24 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.EntityFrameworkCore;
namespace Volo.CmsKit.GlobalResources;
public class EfCoreGlobalResourceRepository: EfCoreRepository<ICmsKitDbContext, GlobalResource, Guid>, IGlobalResourceRepository
{
public EfCoreGlobalResourceRepository(IDbContextProvider<ICmsKitDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public Task<GlobalResource> FindByNameAsync(string name,
CancellationToken cancellationToken = default)
{
Check.NotNullOrEmpty(name, nameof(name));
return FindAsync(x => x.Name == name, cancellationToken: GetCancellationToken(cancellationToken));
}
}

3
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs

@ -3,6 +3,7 @@ using Volo.Abp.Data;
using Volo.Abp.MongoDB;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
@ -41,6 +42,8 @@ public class CmsKitMongoDbContext : AbpMongoDbContext, ICmsKitMongoDbContext
public IMongoCollection<MenuItem> MenuItems => Collection<MenuItem>();
public IMongoCollection<GlobalResource> GlobalResources => Collection<GlobalResource>();
protected override void CreateModel(IMongoModelBuilder modelBuilder)
{
base.CreateModel(modelBuilder);

6
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs

@ -2,6 +2,7 @@
using Volo.Abp.MongoDB;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
@ -78,5 +79,10 @@ public static class CmsKitMongoDbContextExtensions
{
x.CollectionName = CmsKitDbProperties.DbTablePrefix + "MenuItems";
});
builder.Entity<GlobalResource>(x =>
{
x.CollectionName = CmsKitDbProperties.DbTablePrefix + "GlobalResources";
});
}
}

3
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs

@ -4,10 +4,12 @@ using Volo.Abp.MongoDB;
using Volo.Abp.Users.MongoDB;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.MongoDB.Blogs;
using Volo.CmsKit.MongoDB.Comments;
using Volo.CmsKit.MongoDB.GlobalResources;
using Volo.CmsKit.MongoDB.MediaDescriptors;
using Volo.CmsKit.MongoDB.Menus;
using Volo.CmsKit.MongoDB.Pages;
@ -45,6 +47,7 @@ public class CmsKitMongoDbModule : AbpModule
options.AddRepository<BlogPost, MongoBlogPostRepository>();
options.AddRepository<MediaDescriptor, MongoMediaDescriptorRepository>();
options.AddRepository<MenuItem, MongoMenuItemRepository>();
options.AddRepository<GlobalResource, MongoGlobalResourceRepository>();
});
}
}

25
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/GlobalResources/MongoGlobalResourceRepository.cs

@ -0,0 +1,25 @@
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Driver;
using Volo.Abp;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
using Volo.CmsKit.GlobalResources;
namespace Volo.CmsKit.MongoDB.GlobalResources;
public class MongoGlobalResourceRepository: MongoDbRepository<ICmsKitMongoDbContext, GlobalResource, Guid>, IGlobalResourceRepository
{
public MongoGlobalResourceRepository(IMongoDbContextProvider<ICmsKitMongoDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public Task<GlobalResource> FindByNameAsync(string name,
CancellationToken cancellationToken = default)
{
Check.NotNullOrEmpty(name, nameof(name));
return FindAsync(x => x.Name == name, cancellationToken: GetCancellationToken(cancellationToken));
}
}

3
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs

@ -3,6 +3,7 @@ using Volo.Abp.Data;
using Volo.Abp.MongoDB;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
@ -40,4 +41,6 @@ public interface ICmsKitMongoDbContext : IAbpMongoDbContext
IMongoCollection<MediaDescriptor> MediaDescriptors { get; }
IMongoCollection<MenuItem> MenuItems { get; }
IMongoCollection<GlobalResource> GlobalResources { get; }
}

8
modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/GlobalResources/GlobalResourceDto.cs

@ -0,0 +1,8 @@
namespace Volo.CmsKit.Public.GlobalResources;
public class GlobalResourceDto
{
public string Name { get; set; }
public string Value { get; set; }
}

11
modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/GlobalResources/IGlobalResourcePublicAppService.cs

@ -0,0 +1,11 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
namespace Volo.CmsKit.Public.GlobalResources;
public interface IGlobalResourcePublicAppService : IApplicationService
{
Task<GlobalResourceDto> GetGlobalScriptAsync();
Task<GlobalResourceDto> GetGlobalStyleAsync();
}

32
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicAppService.cs

@ -0,0 +1,32 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.GlobalResources;
namespace Volo.CmsKit.Public.GlobalResources;
[RequiresGlobalFeature(typeof(GlobalResourcesFeature))]
public class GlobalResourcePublicAppService : ApplicationService, IGlobalResourcePublicAppService
{
public GlobalResourceManager GlobalResourceManager { get; }
public GlobalResourcePublicAppService(GlobalResourceManager globalResourceManager)
{
GlobalResourceManager = globalResourceManager;
}
public async Task<GlobalResourceDto> GetGlobalScriptAsync()
{
var globalScript = await GlobalResourceManager.GetGlobalScriptAsync();
return ObjectMapper.Map<GlobalResource, GlobalResourceDto>(globalScript);
}
public async Task<GlobalResourceDto> GetGlobalStyleAsync()
{
var globalStyle = await GlobalResourceManager.GetGlobalStyleAsync();
return ObjectMapper.Map<GlobalResource, GlobalResourceDto>(globalStyle);
}
}

33
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/Handlers/GlobalResourceEventHandler.cs

@ -0,0 +1,33 @@
using System.Threading.Tasks;
using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Entities.Events;
using Volo.Abp.EventBus;
using Volo.Abp.ObjectMapping;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.Public.GlobalResources;
namespace Volo.CmsKit.Public.GlobalResources.Handlers;
public class GlobalResourceEventHandler:
ILocalEventHandler<EntityUpdatedEventData<GlobalResource>>,
ITransientDependency
{
public IObjectMapper ObjectMapper { get; }
private readonly IDistributedCache<GlobalResourceDto> _resourceCache;
public GlobalResourceEventHandler(
IDistributedCache<GlobalResourceDto> resourceCache,
IObjectMapper objectMapper)
{
ObjectMapper = objectMapper;
_resourceCache = resourceCache;
}
public async Task HandleEventAsync(EntityUpdatedEventData<GlobalResource> eventData)
{
await _resourceCache.SetAsync(
eventData.Entity.Name,
ObjectMapper.Map<GlobalResource, GlobalResourceDto>(eventData.Entity));
}
}

4
modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs

@ -2,10 +2,12 @@
using Volo.Abp.AutoMapper;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
using Volo.CmsKit.Public.Blogs;
using Volo.CmsKit.Public.Comments;
using Volo.CmsKit.Public.GlobalResources;
using Volo.CmsKit.Public.Pages;
using Volo.CmsKit.Public.Ratings;
using Volo.CmsKit.Ratings;
@ -33,5 +35,7 @@ public class PublicApplicationAutoMapperProfile : Profile
CreateMap<BlogPost, BlogPostPublicDto>(MemberList.None);
CreateMap<MenuItem, MenuItemDto>();
CreateMap<GlobalResource, GlobalResourceDto>();
}
}

35
modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicController.cs

@ -0,0 +1,35 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.GlobalFeatures;
using Volo.CmsKit.GlobalFeatures;
namespace Volo.CmsKit.Public.GlobalResources;
[RequiresGlobalFeature(typeof(GlobalResourcesFeature))]
[RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)]
[Area(CmsKitPublicRemoteServiceConsts.ModuleName)]
[Route("api/cms-kit-public/global-resources")]
public class GlobalResourcePublicController: CmsKitPublicControllerBase, IGlobalResourcePublicAppService
{
private readonly IGlobalResourcePublicAppService _globalResourcePublicAppService;
public GlobalResourcePublicController(IGlobalResourcePublicAppService globalResourcePublicAppService)
{
_globalResourcePublicAppService = globalResourcePublicAppService;
}
[HttpGet]
[Route("script")]
public Task<GlobalResourceDto> GetGlobalScriptAsync()
{
return _globalResourcePublicAppService.GetGlobalScriptAsync();
}
[HttpGet]
[Route("style")]
public Task<GlobalResourceDto> GetGlobalStyleAsync()
{
return _globalResourcePublicAppService.GetGlobalStyleAsync();
}
}

19
modules/cms-kit/src/Volo.CmsKit.Public.Web/CmsKitPublicWebModule.cs

@ -2,6 +2,7 @@
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.Mvc.Localization;
using Volo.Abp.AspNetCore.Mvc.UI.Components.LayoutHook;
using Volo.Abp.AutoMapper;
using Volo.Abp.GlobalFeatures;
using Volo.Abp.Http.ProxyScripting.Generators.JQuery;
@ -12,6 +13,8 @@ using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.Localization;
using Volo.CmsKit.Pages;
using Volo.CmsKit.Public.Web.Menus;
using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.GlobalResources.Script;
using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.GlobalResources.Style;
using Volo.CmsKit.Web;
namespace Volo.CmsKit.Public.Web;
@ -85,5 +88,21 @@ public class CmsKitPublicWebModule : AbpModule
options.Conventions.AddPageRoute("/Public/CmsKit/Blogs/BlogPost", @"/blogs/{blogSlug}/{blogPostSlug:minlength(1)}");
});
}
if (GlobalFeatureManager.Instance.IsEnabled<GlobalResourcesFeature>())
{
Configure<AbpLayoutHookOptions>(options =>
{
options.Add(
LayoutHooks.Head.Last,
typeof(GlobalStyleViewComponent)
);
options.Add(
LayoutHooks.Body.Last,
typeof(GlobalScriptViewComponent)
);
});
}
}
}

62
modules/cms-kit/src/Volo.CmsKit.Public.Web/Controllers/CmsKitPublicGlobalResourcesController.cs

@ -0,0 +1,62 @@
using System;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Caching.Distributed;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Caching;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.Public.GlobalResources;
namespace Volo.CmsKit.Public.Web.Controllers;
[Route("cms-kit/global-resources")]
public class CmsKitPublicGlobalResourcesController: AbpController
{
private readonly IGlobalResourcePublicAppService _globalResourcePublicAppService;
private readonly IDistributedCache<GlobalResourceDto> _resourceCache;
public CmsKitPublicGlobalResourcesController(
IGlobalResourcePublicAppService globalResourcePublicAppService,
IDistributedCache<GlobalResourceDto> resourceCache)
{
_globalResourcePublicAppService = globalResourcePublicAppService;
_resourceCache = resourceCache;
}
[HttpGet]
[Route("style")]
public async Task<IActionResult> GetGlobalStyleAsync()
{
var style = await _resourceCache.GetOrAddAsync(
GlobalResourceConsts.GlobalStyleName, //Cache key
async () => await _globalResourcePublicAppService.GetGlobalStyleAsync(),
() => new DistributedCacheEntryOptions
{
AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(2)
}
);
return new FileContentResult(
Encoding.ASCII.GetBytes(style.Value),
"text/css");
}
[HttpGet]
[Route("script")]
public async Task<IActionResult> GetGlobalScriptAsync()
{
var script = await _resourceCache.GetOrAddAsync(
GlobalResourceConsts.GlobalScriptName, //Cache key
async () => await _globalResourcePublicAppService.GetGlobalScriptAsync(),
() => new DistributedCacheEntryOptions
{
AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(2)
}
);
return new FileContentResult(
Encoding.ASCII.GetBytes(script.Value),
"application/javascript");
}
}

1
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/GlobalResources/Script/Default.cshtml

@ -0,0 +1 @@
<script src="/cms-kit/global-resources/script"></script>

13
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/GlobalResources/Script/GlobalScriptViewComponent.cs

@ -0,0 +1,13 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.GlobalResources.Script;
public class GlobalScriptViewComponent : AbpViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
return View("~/Pages/CmsKit/Shared/Components/GlobalResources/Script/Default.cshtml");
}
}

1
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/GlobalResources/Style/Default.cshtml

@ -0,0 +1 @@
<link rel="stylesheet" href="/cms-kit/global-resources/style"/>

13
modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/GlobalResources/Style/GlobalStyleViewComponent.cs

@ -0,0 +1,13 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.GlobalResources.Style;
public class GlobalStyleViewComponent : AbpViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
return View("~/Pages/CmsKit/Shared/Components/GlobalResources/Style/Default.cshtml");
}
}
Loading…
Cancel
Save