From 4bae80156e8db5290bdb20c4c0c0788e20068fab Mon Sep 17 00:00:00 2001 From: EngincanV Date: Wed, 5 Nov 2025 14:54:30 +0300 Subject: [PATCH 1/6] cms: Add conditional widget adding to CmsKitContentWidgetOptions --- docs/en/modules/cms-kit/dynamic-widget.md | 21 ++++++++++------- .../Contents/CmsKitContentWidgetOptions.cs | 23 ++++++++++++++++++- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/docs/en/modules/cms-kit/dynamic-widget.md b/docs/en/modules/cms-kit/dynamic-widget.md index 8644f7cd63..f0646cc00f 100644 --- a/docs/en/modules/cms-kit/dynamic-widget.md +++ b/docs/en/modules/cms-kit/dynamic-widget.md @@ -124,21 +124,26 @@ In this image, after choosing your widget (on the other case, it changes automat You can edit this output manually if do any wrong coding for that (wrong value or typo) you won't see the widget, even so, your page will be viewed successfully. -## Options -To configure the widget, you should define the below code in YourModule.cs +## Options + +To add content widgets, you should configure the `CmsKitContentWidgetOptions` in your module's `ConfigureServices` method: ```csharp Configure(options => { options.AddWidget(widgetType: "Today", widgetName: "CmsToday", parameterWidgetName: "Format"); + + // Alternatively, you can add a widget conditionally based on a global feature being enabled + options.AddWidgetIfFeatureEnabled(typeof(PagesFeature), "Today", "CmsToday", "Format"); }); ``` -Let's look at these parameters in detail -* `widgetType` is used for end-user and more readable names. The following bold word represents widgetType. -[Widget Type="**Today**" Format="yyyy-dd-mm HH:mm:ss"]. +The `CmsKitContentWidgetOptions` provides two methods for registering widgets: -* `widgetName` is used for your widget name used in code for the name of the `ViewComponent`. +- **AddWidget:** Registers a widget that will be available in the content editor. It accepts the following parameters: + - `widgetType` (required): A user-friendly name for the widget that appears in the widget selection dropdown and is used in content markup. For example, in `[Widget Type="Today"]`, `"Today"` is the `widgetType`. + - `widgetName` (required): The name of the `ViewComponent` that will be rendered. This must match the `Name` attribute of your `ViewComponent` (e.g., `[ViewComponent(Name = "CmsToday")]`). + - `parameterWidgetName` (optional): The name of the parameter widget that will be displayed in the "Add Widget" modal to collect parameter values from users. This is only required when your widget needs parameters. -* `parameterWidgetName` is used the for editor component side to see on the `Add Widget` modal. -After choosing the widget type from listbox (now just defined `Format`) and renders this widget automatically. It's required only to see UI once using parameters \ No newline at end of file +- **AddWidgetIfFeatureEnabled:** Registers a widget conditionally, only if a specified [global feature](../../framework/infrastructure/global-features.md) is enabled. It accepts the same parameters as `AddWidget`, plus an additional first parameter: + - `featureType` (required): The type of the global feature that must be enabled for the widget to be available (e.g., `typeof(PagesFeature)`). \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/CmsKitContentWidgetOptions.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/CmsKitContentWidgetOptions.cs index ad643f7770..67c74d8554 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/CmsKitContentWidgetOptions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/CmsKitContentWidgetOptions.cs @@ -1,4 +1,8 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Reflection; +using Volo.Abp; +using Volo.Abp.GlobalFeatures; namespace Volo.CmsKit.Web.Contents; @@ -16,4 +20,21 @@ public class CmsKitContentWidgetOptions var config = new ContentWidgetConfig(widgetName, parameterWidgetName); WidgetConfigs.Add(widgetType, config); } + + public void AddWidgetIfFeatureEnabled(Type globalFeatureType, string widgetType, string widgetName, string parameterWidgetName = null) + { + Check.NotNull(globalFeatureType, nameof(globalFeatureType)); + + if(globalFeatureType.GetCustomAttribute() == null) + { + throw new ArgumentException($"The type {globalFeatureType.Name} must have a {nameof(GlobalFeatureNameAttribute)} attribute.", nameof(globalFeatureType)); + } + + if(!GlobalFeatureManager.Instance.IsEnabled(globalFeatureType)) + { + return; + } + + AddWidget(widgetType, widgetName, parameterWidgetName); + } } \ No newline at end of file From 7881047b57a5aa179a4aa24806ff760f8d37e740 Mon Sep 17 00:00:00 2001 From: EngincanV Date: Wed, 5 Nov 2025 15:28:49 +0300 Subject: [PATCH 2/6] cms: Add commenting widget to content widgets --- .../src/Volo.CmsKit.Common.Web/CmsKitCommonWebModule.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/CmsKitCommonWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/CmsKitCommonWebModule.cs index 754f2263a0..9ef47dd1d4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/CmsKitCommonWebModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/CmsKitCommonWebModule.cs @@ -7,6 +7,8 @@ using Volo.CmsKit.Reactions; using Volo.CmsKit.Web.Icons; using Markdig; using Microsoft.Extensions.DependencyInjection; +using Volo.CmsKit.GlobalFeatures; +using Volo.CmsKit.Web.Contents; namespace Volo.CmsKit.Web; @@ -54,6 +56,11 @@ public class CmsKitCommonWebModule : AbpModule { options.DisableModule(CmsKitCommonRemoteServiceConsts.ModuleName); }); + + Configure(options => + { + options.AddWidgetIfFeatureEnabled(typeof(CommentsFeature), "Comment", "CmsCommenting"); + }); } } From 83b7e0091ec6790e61188848c20af32b78649ed4 Mon Sep 17 00:00:00 2001 From: EngincanV Date: Wed, 5 Nov 2025 16:15:49 +0300 Subject: [PATCH 3/6] cms: add comment configuration component for comment content widget --- .../CmsKitCommonWebModule.cs | 2 +- .../Comments/CmsKitCommentConfiguration.cshtml | 11 +++++++++++ .../CmsKitCommentConfigurationViewComponent.cs | 15 +++++++++++++++ .../CmsKitCommentConfigurationViewModel.cs | 15 +++++++++++++++ .../Volo/CmsKit/Localization/Resources/en.json | 3 ++- 5 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfiguration.cshtml create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfigurationViewComponent.cs create mode 100644 modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfigurationViewModel.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/CmsKitCommonWebModule.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/CmsKitCommonWebModule.cs index 9ef47dd1d4..7d081b09d9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/CmsKitCommonWebModule.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/CmsKitCommonWebModule.cs @@ -59,7 +59,7 @@ public class CmsKitCommonWebModule : AbpModule Configure(options => { - options.AddWidgetIfFeatureEnabled(typeof(CommentsFeature), "Comment", "CmsCommenting"); + options.AddWidgetIfFeatureEnabled(typeof(CommentsFeature), "Comment", "CmsCommenting", "CmsKitCommentConfiguration"); }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfiguration.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfiguration.cshtml new file mode 100644 index 0000000000..08b46e4e61 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfiguration.cshtml @@ -0,0 +1,11 @@ +@using Microsoft.Extensions.Localization +@using Volo.CmsKit.Localization +@using Volo.CmsKit.Web.Pages.CmsKit.Components.Comments +@inject IStringLocalizer L +@model CmsKitCommentConfigurationViewModel + +
+ + + +
\ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfigurationViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfigurationViewComponent.cs new file mode 100644 index 0000000000..1c4f847bf9 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfigurationViewComponent.cs @@ -0,0 +1,15 @@ +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.Widgets; + +namespace Volo.CmsKit.Web.Pages.CmsKit.Components.Comments; + +[Widget] +[ViewComponent(Name = "CmsKitCommentConfiguration")] +public class CmsKitCommentConfigurationViewComponent : AbpViewComponent +{ + public IViewComponentResult Invoke() + { + return View("~/Pages/CmsKit/Components/Comments/CmsKitCommentConfiguration.cshtml", new CmsKitCommentConfigurationViewModel()); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfigurationViewModel.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfigurationViewModel.cs new file mode 100644 index 0000000000..df24dc8c12 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfigurationViewModel.cs @@ -0,0 +1,15 @@ +using System.ComponentModel.DataAnnotations; + +namespace Volo.CmsKit.Web.Pages.CmsKit.Components.Comments; + +public class CmsKitCommentConfigurationViewModel +{ + [Required] + public string EntityType { get; set; } + + [Required] + public string EntityId { get; set; } + + [Required] + public bool IsReadOnly { get; set; } = false; +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json index a93ec96af7..e4e5a8aa2c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en.json @@ -280,6 +280,7 @@ "SelectAnBlogToAssign": "Select a blog to assign", "DeleteAllBlogPostsOfThisBlog": "Delete all blog posts of this blog", "RequiredPermissionName": "Required permission name", - "AllPosts": "All posts" + "AllPosts": "All posts", + "IsReadOnly": "Readonly" } } \ No newline at end of file From 792356be2d128d272b1822519a796b99a3a791ae Mon Sep 17 00:00:00 2001 From: EngincanV Date: Wed, 5 Nov 2025 16:44:23 +0300 Subject: [PATCH 4/6] Skip empty property values in widget text Updated addWidgetModal.js to exclude properties with default or empty values when generating widgetText. This prevents unnecessary attributes from being added to the widget markup. --- .../Pages/CmsKit/Contents/addWidgetModal.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Contents/addWidgetModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Contents/addWidgetModal.js index 78628314b2..03a06eb86b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Contents/addWidgetModal.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Contents/addWidgetModal.js @@ -31,7 +31,14 @@ $(function () { for (var propertyName in properties) { if (!propertyName.includes(']') && !propertyName.includes('[')) { - widgetText += propertyName + "=\"" + properties[propertyName] + "\" "; + var propertyValue = properties[propertyName]; + + //skip default/empty values + if(!propertyValue) { + continue; + } + + widgetText += propertyName + "=\"" + propertyValue + "\" "; } } From 86061493814df1ec7a512578ddad460a4b79a19a Mon Sep 17 00:00:00 2001 From: EngincanV Date: Thu, 6 Nov 2025 09:31:42 +0300 Subject: [PATCH 5/6] cms: apply copilot linting suggestions and add missing localization entry to the all languages --- .../Pages/CmsKit/Contents/addWidgetModal.js | 2 +- .../Components/Comments/CmsKitCommentConfigurationViewModel.cs | 1 - .../Volo/CmsKit/Localization/Resources/ar.json | 3 ++- .../Volo/CmsKit/Localization/Resources/cs.json | 3 ++- .../Volo/CmsKit/Localization/Resources/de-DE.json | 3 ++- .../Volo/CmsKit/Localization/Resources/de.json | 3 ++- .../Volo/CmsKit/Localization/Resources/el.json | 3 ++- .../Volo/CmsKit/Localization/Resources/en-GB.json | 3 ++- .../Volo/CmsKit/Localization/Resources/es.json | 3 ++- .../Volo/CmsKit/Localization/Resources/fa.json | 3 ++- .../Volo/CmsKit/Localization/Resources/fi.json | 3 ++- .../Volo/CmsKit/Localization/Resources/fr.json | 3 ++- .../Volo/CmsKit/Localization/Resources/hi.json | 3 ++- .../Volo/CmsKit/Localization/Resources/hr.json | 3 ++- .../Volo/CmsKit/Localization/Resources/hu.json | 3 ++- .../Volo/CmsKit/Localization/Resources/is.json | 3 ++- .../Volo/CmsKit/Localization/Resources/it.json | 3 ++- .../Volo/CmsKit/Localization/Resources/nl.json | 3 ++- .../Volo/CmsKit/Localization/Resources/pl-PL.json | 3 ++- .../Volo/CmsKit/Localization/Resources/pt-BR.json | 3 ++- .../Volo/CmsKit/Localization/Resources/ro-RO.json | 3 ++- .../Volo/CmsKit/Localization/Resources/ru.json | 3 ++- .../Volo/CmsKit/Localization/Resources/sk.json | 3 ++- .../Volo/CmsKit/Localization/Resources/sl.json | 3 ++- .../Volo/CmsKit/Localization/Resources/sv.json | 3 ++- .../Volo/CmsKit/Localization/Resources/tr.json | 3 ++- .../Volo/CmsKit/Localization/Resources/vi.json | 3 ++- .../Volo/CmsKit/Localization/Resources/zh-Hans.json | 3 ++- .../Volo/CmsKit/Localization/Resources/zh-Hant.json | 3 ++- 29 files changed, 55 insertions(+), 29 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Contents/addWidgetModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Contents/addWidgetModal.js index 03a06eb86b..6786870c6b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Contents/addWidgetModal.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Contents/addWidgetModal.js @@ -34,7 +34,7 @@ $(function () { var propertyValue = properties[propertyName]; //skip default/empty values - if(!propertyValue) { + if (propertyValue === null || propertyValue === undefined || propertyValue === '') { continue; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfigurationViewModel.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfigurationViewModel.cs index df24dc8c12..721a4dd2a2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfigurationViewModel.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Comments/CmsKitCommentConfigurationViewModel.cs @@ -10,6 +10,5 @@ public class CmsKitCommentConfigurationViewModel [Required] public string EntityId { get; set; } - [Required] public bool IsReadOnly { get; set; } = false; } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ar.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ar.json index bd2ba476ed..c051fe6f3b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ar.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ar.json @@ -262,6 +262,7 @@ "SelectAnBlogToAssign": "حدد مدونة لتعيين مشاركات المدونة إليها", "DeleteAllBlogPostsOfThisBlog": "حذف جميع مشاركات المدونة", "RequiredPermissionName": "اسم الإذن المطلوب", - "AllPosts": "جميع المشاركات" + "AllPosts": "جميع المشاركات", + "IsReadOnly": "للقراءة فقط" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/cs.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/cs.json index ae03a27173..f7040b3044 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/cs.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/cs.json @@ -281,6 +281,7 @@ "SelectAnBlogToAssign": "Vyberte blog, ke kterému chcete přiřadit blogové příspěvky", "DeleteAllBlogPostsOfThisBlog": "Smazat všechny blogové příspěvky tohoto blogu", "RequiredPermissionName": "Je vyžadováno oprávnění", - "AllPosts": "Všechny příspěvky" + "AllPosts": "Všechny příspěvky", + "IsReadOnly": "Pouze pro čtení" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json index d04bbf95b7..6d87ffcc99 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de-DE.json @@ -169,6 +169,7 @@ "SelectAnBlogToAssign": "Wählen Sie einen Blog aus, um Blogbeiträge zuzuweisen", "DeleteAllBlogPostsOfThisBlog": "Alle Blogbeiträge dieses Blogs löschen", "RequiredPermissionName": "Erforderlicher Berechtigungsname", - "AllPosts": "Alle Beiträge" + "AllPosts": "Alle Beiträge", + "IsReadOnly": "Schreibgeschützt" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de.json index 44514f8ba2..d5d9d8d1b0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/de.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Wählen Sie einen Blog aus, um Blogbeiträge zuzuweisen", "DeleteAllBlogPostsOfThisBlog": "Alle Blogbeiträge dieses Blogs löschen", "RequiredPermissionName": "Erforderlicher Berechtigungsname", - "AllPosts": "Alle Beiträge" + "AllPosts": "Alle Beiträge", + "IsReadOnly": "Schreibgeschützt" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/el.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/el.json index 5767a7fcf1..897e02a07d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/el.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/el.json @@ -192,6 +192,7 @@ "SelectAnBlogToAssign": "Επιλέξτε ένα ιστολόγιο για να αναθέσετε αναρτήσεις ιστολογίου", "DeleteAllBlogPostsOfThisBlog": "Διαγραφή όλων των αναρτήσεων ιστολογίου αυτού του ιστολογίου", "RequiredPermissionName": "Απαιτούμενο όνομα δικαιώματος", - "AllPosts": "Όλες οι δημοσιεύσεις" + "AllPosts": "Όλες οι δημοσιεύσεις", + "IsReadOnly": "Μόνο για ανάγνωση" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json index 896a58ee9f..290dc26fe5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/en-GB.json @@ -34,6 +34,7 @@ "SelectAnBlogToAssign": "Select a blog to assign", "DeleteAllBlogPostsOfThisBlog": "Delete all blog posts of this blog", "RequiredPermissionName": "Required permission name", - "AllPosts": "All posts" + "AllPosts": "All posts", + "IsReadOnly": "Readonly" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json index aced3c3227..5396f02fd4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/es.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Seleccione un blog para asignar publicaciones de blog", "DeleteAllBlogPostsOfThisBlog": "Eliminar todas las publicaciones de blog de este blog", "RequiredPermissionName": "Nombre de permiso requerido", - "AllPosts": "Todas las publicaciones" + "AllPosts": "Todas las publicaciones", + "IsReadOnly": "Solo lectura" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fa.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fa.json index 9fc765010a..8769a8cb4c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fa.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fa.json @@ -191,6 +191,7 @@ "SelectAnBlogToAssign": "یک وبلاگ برای اختصاص دادن انتخاب کنید", "DeleteAllBlogPostsOfThisBlog": "تمام پست های وبلاگ این وبلاگ را حذف کنید", "RequiredPermissionName": "نام مجوز مورد نیاز", - "AllPosts": "همه پست ها" + "AllPosts": "همه پست ها", + "IsReadOnly": "فقط خواندنی" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json index fe22839e13..4e9eb5123f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fi.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Valitse blogi, johon haluat määrittää", "DeleteAllBlogPostsOfThisBlog": "Poista tämän blogin kaikki blogiviestit", "RequiredPermissionName": "Tarvittava lupa", - "AllPosts": "Kaikki viestit" + "AllPosts": "Kaikki viestit", + "IsReadOnly": "Vain luku" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json index 6a2dc59d38..2d2ff61a3c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/fr.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Sélectionnez un blog à attribuer", "DeleteAllBlogPostsOfThisBlog": "Supprimer tous les articles de blog de ce blog", "RequiredPermissionName": "Nom de permission requis", - "AllPosts": "Tous les messages" + "AllPosts": "Tous les messages", + "IsReadOnly": "Lecture seule" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json index 3522ff8386..d0ba97001c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hi.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "असाइन करने के लिए एक ब्लॉग चुनें", "DeleteAllBlogPostsOfThisBlog": "इस ब्लॉग के सभी ब्लॉग पोस्ट हटाएं", "RequiredPermissionName": "आवश्यक अनुमति नाम", - "AllPosts": "सभी पोस्ट" + "AllPosts": "सभी पोस्ट", + "IsReadOnly": "केवल पढ़ने के लिए" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hr.json index c8c855444e..30f65f12c9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hr.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Odaberite blog za dodjelu", "DeleteAllBlogPostsOfThisBlog": "Izbrišite sve postove na blogu", "RequiredPermissionName": "Potrebno ime dozvole", - "AllPosts": "Sve objave" + "AllPosts": "Sve objave", + "IsReadOnly": "Samo za čitanje" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hu.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hu.json index 31d9dc98da..1505e39597 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hu.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/hu.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Válasszon egy blogot a hozzárendeléshez", "DeleteAllBlogPostsOfThisBlog": "Ez a művelet törli az összes blogbejegyzést ebből a blogból. Biztos vagy benne?", "RequiredPermissionName": "Szükséges engedély neve", - "AllPosts": "Minden bejegyzés" + "AllPosts": "Minden bejegyzés", + "IsReadOnly": "Csak olvasható" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/is.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/is.json index f31e8b75cb..d31c9316ea 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/is.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/is.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Veldu blogg til að úthluta", "DeleteAllBlogPostsOfThisBlog": "Eyða öllum bloggfærslum þessa bloggs", "RequiredPermissionName": "Nafn á nauðsynlegri leyfi", - "AllPosts": "Allar færslur" + "AllPosts": "Allar færslur", + "IsReadOnly": "Skrifvarið" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json index 03e4010f5e..da69759dff 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Seleziona un blog a cui assegnare i post del blog", "DeleteAllBlogPostsOfThisBlog": "Elimina tutti i post del blog di questo blog", "RequiredPermissionName": "Nome del permesso richiesto", - "AllPosts": "Tutti i post" + "AllPosts": "Tutti i post", + "IsReadOnly": "Sola lettura" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/nl.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/nl.json index 0215dbf6dc..6d95e6aa36 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/nl.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/nl.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Selecteer een blog om toe te wijzen", "DeleteAllBlogPostsOfThisBlog": "Verwijder alle blogberichten van deze blog", "RequiredPermissionName": "Vereiste toestemming", - "AllPosts": "Alle berichten" + "AllPosts": "Alle berichten", + "IsReadOnly": "Alleen-lezen" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pl-PL.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pl-PL.json index 8ef422c412..7bb4e8e471 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pl-PL.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pl-PL.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Wybierz blog, do którego chcesz przypisać posty na blogu", "DeleteAllBlogPostsOfThisBlog": "Usuń wszystkie posty na blogu tego bloga", "RequiredPermissionName": "Wymagana nazwa uprawnienia", - "AllPosts": "Wszystkie posty" + "AllPosts": "Wszystkie posty", + "IsReadOnly": "Tylko do odczytu" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pt-BR.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pt-BR.json index 66b79628e5..3b3fa3db92 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pt-BR.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/pt-BR.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Selecione um blog para atribuir", "DeleteAllBlogPostsOfThisBlog": "Excluir todas as postagens de blog deste blog", "RequiredPermissionName": "Nome da permissão necessária", - "AllPosts": "Todas as postagens" + "AllPosts": "Todas as postagens", + "IsReadOnly": "Somente leitura" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json index 44fd87e2f9..0a283006be 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ro-RO.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Selectaţi un blog pentru a atribui postările de blog", "DeleteAllBlogPostsOfThisBlog": "Ştergeţi toate postările de blog ale acestui blog", "RequiredPermissionName": "Numele permisiunii necesare", - "AllPosts": "Toate postările" + "AllPosts": "Toate postările", + "IsReadOnly": "Doar citire" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ru.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ru.json index d24f504ccb..8123f37403 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ru.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/ru.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Выберите блог для назначения", "DeleteAllBlogPostsOfThisBlog": "Удалить все сообщения в блоге этого блога", "RequiredPermissionName": "Имя требуемого разрешения", - "AllPosts": "Все записи" + "AllPosts": "Все записи", + "IsReadOnly": "Только для чтения" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sk.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sk.json index c8ad091d7b..ddc10c923c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sk.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sk.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Vyberte blog, na ktorý chcete priradiť blogové príspevky", "DeleteAllBlogPostsOfThisBlog": "Zmazať všetky blogové príspevky tohto blogu", "RequiredPermissionName": "Požadovaný názov oprávnenia", - "AllPosts": "Všetky príspevky" + "AllPosts": "Všetky príspevky", + "IsReadOnly": "Iba na čítanie" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sl.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sl.json index c62fd96e03..83c9ec57b4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sl.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sl.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Izberite blog, ki mu želite dodeliti objave", "DeleteAllBlogPostsOfThisBlog": "Izbriši vse objave v tem blogu", "RequiredPermissionName": "Ime zahtevane dovoljenja", - "AllPosts": "Vse objave" + "AllPosts": "Vse objave", + "IsReadOnly": "Samo za branje" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sv.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sv.json index 93c549c916..3b6d296da4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sv.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/sv.json @@ -262,6 +262,7 @@ "SelectAnBlogToAssign": "Välj en blogg att tilldela", "DeleteAllBlogPostsOfThisBlog": "Radera alla blogginlägg i denna blogg", "RequiredPermissionName": "Nödvändigt behörighetsnamn", - "AllPosts": "Alla inlägg" + "AllPosts": "Alla inlägg", + "IsReadOnly": "Skrivskyddad" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json index 2c9abaa6d7..e338aaff68 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/tr.json @@ -226,6 +226,7 @@ "SelectAnBlogToAssign": "Atanacak bir blog seçin", "DeleteAllBlogPostsOfThisBlog": "Bu blogun tüm blog yazılarını sil", "RequiredPermissionName": "Gerekli izin adı", - "AllPosts": "Tüm gönderiler" + "AllPosts": "Tüm gönderiler", + "IsReadOnly": "Salt okunur" } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/vi.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/vi.json index 1b49874177..d7d608659f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/vi.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/vi.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "Chọn một blog để gán", "DeleteAllBlogPostsOfThisBlog": "Xóa tất cả bài đăng trên blog của blog này", "RequiredPermissionName": "Tên quyền cần thiết", - "AllPosts": "Tất cả bài viết" + "AllPosts": "Tất cả bài viết", + "IsReadOnly": "Chỉ đọc" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json index ab61627a3c..3b4edf6e8f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hans.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "选择要分配的博客", "DeleteAllBlogPostsOfThisBlog": "删除此博客的所有博客文章", "RequiredPermissionName": "所需权限名称", - "AllPosts": "所有帖子" + "AllPosts": "所有帖子", + "IsReadOnly": "只读" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json index 37ec01da26..d8b0ed9f67 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/zh-Hant.json @@ -235,6 +235,7 @@ "SelectAnBlogToAssign": "選擇要分配的部落格", "DeleteAllBlogPostsOfThisBlog": "刪除此部落格的所有部落格文章", "RequiredPermissionName": "所需權限名稱", - "AllPosts": "所有文章" + "AllPosts": "所有文章", + "IsReadOnly": "唯讀" } } \ No newline at end of file From 803b991dc6fb92802c7b1b84459ffa4eadb20a68 Mon Sep 17 00:00:00 2001 From: EngincanV Date: Thu, 6 Nov 2025 09:33:48 +0300 Subject: [PATCH 6/6] Update CmsKitContentWidgetOptions.cs --- .../CmsKit/Components/Contents/CmsKitContentWidgetOptions.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/CmsKitContentWidgetOptions.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/CmsKitContentWidgetOptions.cs index 67c74d8554..d879eb9dce 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/CmsKitContentWidgetOptions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/CmsKitContentWidgetOptions.cs @@ -25,12 +25,12 @@ public class CmsKitContentWidgetOptions { Check.NotNull(globalFeatureType, nameof(globalFeatureType)); - if(globalFeatureType.GetCustomAttribute() == null) + if (globalFeatureType.GetCustomAttribute() == null) { throw new ArgumentException($"The type {globalFeatureType.Name} must have a {nameof(GlobalFeatureNameAttribute)} attribute.", nameof(globalFeatureType)); } - if(!GlobalFeatureManager.Instance.IsEnabled(globalFeatureType)) + if (!GlobalFeatureManager.Instance.IsEnabled(globalFeatureType)) { return; }