diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 22ef0df894..7a064a8ce7 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -397,6 +397,8 @@ "BookDiscountDeletionConfirmationMessage": "Are you sure you want to delete this book discount?", "CustomPaymentFlexSwitchDescription": "With license", "AllowFeatureUpgradeOnLicenseExpire": "Allow feature upgrade on license expire", - "Deleted{0}": "[Deleted {0}]" + "Deleted{0}": "[Deleted {0}]", + "Tags": "Tags", + "SetTagsInfo": "Tags should be comma-separated. Eg: CSharp, Entity Framework" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/ro-RO.json index 44ac964263..409ab816a5 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/ro-RO.json @@ -30,7 +30,7 @@ "NugetPackageDeletionWarningMessage": "Sunteţi sigur(ă) că doriţi să ştergeţi acest pachet de tip Nuget?", "ModuleDeletionWarningMessage": "Sunteţi sigur(ă) că doriţi să ştergeţi acest modul?", "Name": "Nume", - "DisplayName": "Nume de afişare", + "DisplayName": "Nume afişat", "ShortDescription": "Descriere scurtă", "NameFilter": "Nume", "CreationTime": "Data şi ora creării", @@ -317,7 +317,7 @@ "TrialLicenseStartDateFilter": "Data de început", "TrialLicenseEndDateFilter": "Data de încheiere", "FirsName": "Nume", - "LastName": "Nume", + "LastName": "Nume de familie", "StartDate": "Data de început", "EndDate": "Data de încheiere", "PurchasedDate": "Data achiziției", @@ -350,4 +350,4 @@ "Volo.AbpIo.Commercial:030010": "Pentru a achiziționa licența de probă, mai întâi trebuie să vă activați licența de probă!", "Volo.AbpIo.Commercial:030011": "Nu puteți șterge o licență de probă atunci când este achiziționată!" } -} \ No newline at end of file +} diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index 3a1b574d21..98f6ed0820 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -73,6 +73,7 @@ "DeveloperFocused": "Developer Focused", "ShareYourExperiences": "Share your experiences with the ABP Framework", "LatestPosts": "Latest Posts", + "LatestVideos": "Latest Videos", "Views": "Views", "LearnLatestNewsAboutABPFramework": "Get information about happenings in ABP like new releases, free sources, posts, and more.", "DeveloperTools": "Developer Tools", @@ -98,6 +99,7 @@ "Logout": "Logout", "Home": "Home", "Posts": "Posts", + "Videos": "Videos", "JoinTheABPCommunity": "Join the ABP Community", "SubmitYourPost": "Submit Your Post", "Modules": "Modules", @@ -164,6 +166,17 @@ "Books": "Books", "ABPDiscordServer": "ABP Discord Server", "ABPCommunityTalks": "ABP Community Talks", - "ABPCommunityPosts": "ABP Community Posts" + "ABPCommunityPosts": "ABP Community Posts", + "BuyAndGetMonths": "BUY 12 MONTHS, GET 14 MONTHS!", + "GetYourDeal": "Get Your Deal", + "BuyOrRenewLicense": "Buy or Renew License Now and Get 2 Extra Months!", + "BuyOrRenewLicenseToGetExtra2Months": "Buy or Renew License Now and Get 2 Extra Months! HURRY UP! ⏰ Last Day: {0}", + "HurryUp": "HURRY UP!", + "LastDay": "Last Day: {0}", + "BuyNewLicenseBetweenDatesToGetBenefit": "Buy a new license between {0} and {1} to get benefit for extra 2 months!", + "CheckAllCommunityTalks": "Check All Community Posts", + "ReadMore": "Read More", + "Post": "Post", + "ExploreTheContentsCreatedByTheCoreABPTeamAndTheABPCommunity": "Explore the contents created by the core ABP team and the ABP community." } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json index 2ea126df0f..4ba89108ce 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/zh-Hans.json @@ -73,6 +73,7 @@ "DeveloperFocused": "以开发者为中心", "ShareYourExperiences": "分享您使用 ABP 框架的经验", "LatestPosts": "最新的帖子", + "LatestVideos": "最新的视频", "Views": "意见", "LearnLatestNewsAboutABPFramework": "获取有关 ABP 的最新相关信息,例如新版本、免费资源、帖子等。", "DeveloperTools": "开发者工具", @@ -98,6 +99,7 @@ "Logout": "登出", "Home": "主页", "Posts": "帖子", + "Videos": "视频", "JoinTheABPCommunity": "加入 ABP 社区", "SubmitYourPost": "提交您的帖子", "Modules": "模块", @@ -161,6 +163,17 @@ "Error_Page_500_Title": "好像出了什么问题!", "Error_Page_500_Description_1": "我们会自动跟踪这些错误,但如果问题仍然存在,请随时
联系我们。 与此同时,尝试刷新。", "Error_Page_500_Description_2": "通过 info@abp.io 与我们联系。", - "Books": "书籍" + "Books": "书籍", + "BuyAndGetMonths": "购买 12 个月,获得 14 个月!", + "GetYourDeal": "得到你的交易", + "BuyOrRenewLicense": "立即购买或续订许可证并额外获得 2 个月!", + "BuyOrRenewLicenseToGetExtra2Months": "立即购买或续订 ABP 商业许可证(适用于所有版本)并额外获得 2 个月!", + "HurryUp": "赶快下单!", + "LastDay": "活动截止日期: {0}", + "BuyNewLicenseBetweenDatesToGetBenefit": "在 {0} 和 {1} 之间购买一个新的许可证以获得额外 2 个月的收益!", + "CheckAllCommunityTalks": "检查所有社区帖子", + "ReadMore": "阅读更多", + "Post": "邮政", + "ExploreTheContentsCreatedByTheCoreABPTeamAndTheABPCommunity": "探索核心 ABP 团队和 ABP 社区创建的内容。" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json index 1a9aa7cba2..c7b91a99a0 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json @@ -89,7 +89,7 @@ "Blogging": "التدوين", "Identity": "هوية", "IdentityServer": "خادم الهوية", - "Saas": "ساس", + "Saas": "البرمجيات كخدمة", "LanguageManagement": "إدارة اللغة", "TextTemplateManagement": "إدارة قالب النص", "See All Modules": "انظر جميع الوحدات", @@ -382,4 +382,4 @@ "RenewLicenseEarly": "إذا قمت بتجديد رخصتي في وقت مبكر ، هل سأحصل على السنة كاملة؟", "RenewLicenseEarylExplanation": "عند تجديد الترخيص الخاص بك قبل تاريخ انتهاء الترخيص الخاص بك ، ستتم إضافة سنة واحدة إلى تاريخ انتهاء الترخيص الخاص بك. على سبيل المثال ، إذا انتهت صلاحية ترخيصك في {0} -06-06 وقمت بتجديده في {0} -01-01 ، فسيكون تاريخ انتهاء صلاحية الترخيص الجديد {1} -06-06." } -} \ No newline at end of file +} diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index caf4a9dbbe..64cefef9af 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -735,6 +735,14 @@ "ConfirmedEmailAddressRequiredToStartTrial": "You should have a confirmed email address in order to start a trial license.", "EmailVerificationMailNotSent": "Email verification mail couldn't send.", "GetConfirmationEmail": "Click here to get a confirmation email if you haven't got it before.", - "WhichLicenseTypeYouAreInterestedIn": "Which license type you are interested in?" + "WhichLicenseTypeYouAreInterestedIn": "Which license type you are interested in?", + "DontTakeOurWordForIt": "Don't take our word for it...", + "ReadAbpCommercialUsersWantYouToKnow": "Read what ABP Commercial users want you to know", + "Testimonial_ShortDescription_1": "The modularity of ABP made it possible for the team to deliver in time.", + "Testimonial_ShortDescription_2": "Build new features faster than before.", + "Testimonial_ShortDescription_3": "We start from out-of-the-box features and just focus on what we really need to write.", + "Testimonial_ShortDescription_4": "ABP Commercial was the best fit for our needs.", + "OnlineReviewersOnAbpCommercial": "Online Reviews on ABP Commercial", + "SeeWhatToldAboutAbpCommercial": "See what has been told about ABP Commercial and write your thoughts if you want." } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json index 44b6f66037..be56afbb43 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ro-RO.json @@ -341,7 +341,7 @@ "SignIn": "Autentificare", "Or": "Sau", "TellUsAboutYourself": "Spuneţi-ne despre dumneavoastră", - "Surname": "Nume", + "Surname": "Nume de familie", "DoYouAgreePrivacyPolicy": "Sunt de acord cu Termenii şi condiţiile şi Politica de confidenţialitate.", "VolosoftMarketingInformationMessage": "Sunt de acord să primesc informaţii, sfaturi şi oferte despre soluţii pentru afaceri şi organizaţii şi alte produse şi servicii Volosoft.", "VolosoftSharingInformationMessage": "Sunt de acord ca Volosoft să partajeze informaţiile mele cu partenerii selectaţi astfel încât să primesc informaţii relevante despre produsele şi serviciile lor.", @@ -380,4 +380,4 @@ "TrialLicenseExpiredInfo": "Perioada de licență de probă a expirat!", "CommercialNewsletterConfirmationMessage": "Sunt de acord cu Termenii și condițiile și cu Politica de confidențialitate ." } -} \ No newline at end of file +} diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json index 924306634e..0d67d9cca5 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json @@ -565,7 +565,7 @@ "PrePayment_IyzicoRedirectionInfo": "您将被重定向到 Iyzico 支付网关以安全地完成您的购买。", "PrePayment_IyzicoAcceptVisaAndMasterCard": "Iyzico 接受 Visa 和 MasterCard。", "Purchase": "购买", - "AcceptTermsAndConditions": "我已阅读、理解并接受隐私政策条款和条件 EULA。", + "AcceptTermsAndConditions": "我已阅读、理解并接受隐私政策条款和条件 EULA。", "AcceptTermsAndConditionsWarningMessage": "请接受隐私政策和条款和条件", "SelectGatewayToContinue": "请选择一个网关以继续!", "GatewaySelection_SelectGateway": "选择支付网关", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index 0ed3eda832..c73da26137 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -150,7 +150,6 @@ "GetStarted": "Get Started", "SourceCode": "Source Code", "LeaveComment": "Leave Comment", - "ReadMore": "Read more", "ShowMore": "Show More", "NoPublishedPostsYet": "No published posts yet.", "Name": "Name", @@ -184,6 +183,7 @@ "Post_Index_Page_MetaDescription": "ABP Community's purpose is to create a contribution environment for developers who use the ABP framework.", "Layout_Title": "{0} | ABP Community", "Layout_MetaDescription": "ABP Community is an environment where people can share posts about ABP framework and follows the projects.", - "Index_Page_CommunityIntroduction": "This is a hub for ABP Framework, .NET and software development. You can read the articles, watch the video tutorials, get informed about ABP’s development progress and ABP-related events, help other developers and share your expertise with the ABP community." + "Index_Page_CommunityIntroduction": "This is a hub for ABP Framework, .NET and software development. You can read the articles, watch the video tutorials, get informed about ABP’s development progress and ABP-related events, help other developers and share your expertise with the ABP community.", + "TagsInArticle": "Tags in article" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json index 3513a37dde..8196d567a1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/zh-Hans.json @@ -150,7 +150,6 @@ "GetStarted": "开始使用", "SourceCode": "源代码", "LeaveComment": "发表评论", - "ReadMore": "阅读更多", "ShowMore": "展示更多", "NoPublishedPostsYet": "还没有发布的帖子。", "Name": "名字", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/AbpIoWwwResource.cs b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/AbpIoWwwResource.cs index 552b5949e1..f64552be30 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/AbpIoWwwResource.cs +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/AbpIoWwwResource.cs @@ -1,5 +1,8 @@ -namespace AbpIoLocalization.Www +using Volo.Abp.Localization; + +namespace AbpIoLocalization.Www { + [LocalizationResourceName("AbpIoWww")] public class AbpIoWwwResource { diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json index 41eda60de6..0b9dfab886 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/en.json @@ -293,7 +293,6 @@ "ExploreDocumentationAndGuides": "Explore the comprehensive documentation and guides.", "Documentations": "Documentation", "Views": "Views", - "ReadMore": "Read More", "EnterYouEmailToGetNews": "Enter your email to get the latest news about the ABP Framework", "Tiered": "Tiered", "SeparateIdentityServer": "Separate Identity Server", @@ -372,6 +371,27 @@ "MasteringAbpFramework_Book_What_You_Will_Learn_8": "Write unit, integration, and UI tests using ABP Framework.", "MasteringAbpFramework_Book_WhoIsThisBookFor": "Who's this book for", "MasteringAbpFramework_Book_WhoIsThisBookFor_Description": "This book is for web developers who want to learn software architectures and best practices for building\n maintainable web-based solutions using Microsoft technologies and ABP Framework. Basic knowledge of C#\n and ASP.NET Core is necessary to get started with this book.", - "ComputersAndTechnology": "Computers & Technology" + "ComputersAndTechnology": "Computers & Technology", + "BuildingMicroserviceSolutions": "Building Microservice Solutions", + "MicroserviceBookPracticalGuide": "This book is a reference guide for developing and managing microservice-based applications using the ABP Framework. It references the .NET Microservice Sample Reference Application: eShopOnContainers and discusses the architectural design and implementation approaches using the ABP Framework. By the end of this book, you'll learn how ABP approaches the common microservice complexities such as authorization, distributed transactions, inter-microservice communications, deployment, etc.", + "IntroducingTheSolution": "Introducing the eShopOnAbp Solution", + "RunningTheSolution": "Running the Solution", + "UnderstandingTheAuthenticationSystem": "Understanding the Authentication System", + "ExploringTheApplications": "Exploring the Applications", + "UnderstandingTheAPIGateways": "Understanding the API Gateways", + "DevelopingTheMicroservices": "Developing the Microservices", + "UnderstandingTheInfrastructure": "Understanding the Infrastructure", + "DiggingInTheUseCases": "Digging in the Use Cases", + "DeployingTheSolution": "Deploying the Solution", + "ThisBookIsInDraftStageAndIsNotCompletedYet": "This book is in draft stage and is not completed yet.", + "Authors": "Authors", + "MicroserviceEBook": "Microservice E-Book", + "SelectUITheme": "Select UI Theme", + "LeptonXLiteTheme": "LeptonX Lite Theme", + "BasicTheme": "Basic Theme", + "LeptonXLiteThemeInfo": " A modern and stylish Bootstrap UI theme. Ideal if you want to have a production ready UI theme. This is the newest theme and is the default.", + "BasicThemeInfo": "Minimalist UI theme with plain Bootstrap colors and styles. Ideal if you will build your own UI theme.", + "SeeDocumentation": "See documentation.", + "SeeFullScreen": "🖼️ See the screenshot" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json index bd04ba7f49..a1ff5f58ad 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/ro-RO.json @@ -253,18 +253,18 @@ "Or": "Sau", "TellUsAboutYourself": "Spuneţi-ne un pic despre dumneavoastră", "Name": "Nume", - "Surname": "Nume", + "Surname": "Nume de familie", "CompanyName": "Nume companie", "DoYouAgreePrivacyPolicy": "Sunt de acord cu Termenii & condiţiile şi Politica de confidenţialitate.", "Free": "Gratuit", "DDDEBook": "E-book DDD", "PracticalGuideForImplementingDDD": "Această carte este un ghid practic pentru implementarea Domain Driven Design în framework-ul ABP.", "IntroducingDDD": "Introducere în Domain Driven Design", - "DDDLayersAndCleanArchitecture": "Straturile DDD & Arhitectură curată", + "DDDLayersAndCleanArchitecture": "Straturile DDD şi Arhitectură curată", "LayeringOfADotnetSolution": "Stratificarea unei soluţii .NET", "ImplementingDDDBuildingBlocks": "Implementând DDD Building Blocks", "DomainVsApplicationLogic": "Domain Logic vs Application Logic", - "SamplesAndDiscussions": "Exemple & Discuţii", + "SamplesAndDiscussions": "Exemple şi Discuţii", "EmailNotValid": "Vă rugăm să introduceţi o adresa de email validă.", "WeWillSendYouADownloadLink": "Un link care conţine e-book-ul a fost trimis către {0}. Verificaţi-vă folderele de inbox, junk sau spam!", "GoHome": "Pagina principală", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json index 01fe9f8b7b..a4a6e142a9 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/tr.json @@ -279,6 +279,7 @@ "SubscribeToNewsletter": "ABP.IO Platform'u ile ilgili yeni haberler, makaleler, teklifler ve daha fazlası gibi gelişmeler hakkında bilgi almak için bültene abone olun.", "FirstEdition": "İlk Baskı", "ThankYou": "Teşekkürler!", - "CheckboxMandatory": "Devam etmek için bunu kontrol etmeniz gerekiyor!" + "CheckboxMandatory": "Devam etmek için bunu kontrol etmeniz gerekiyor!", + "ThisBookIsInDraftStageAndIsNotCompletedYet": "Bu kitap taslak aşamasındadır ve henüz tamamlanmamıştır." } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json index 9a1373f76b..7826f00ca2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/zh-Hans.json @@ -293,7 +293,6 @@ "ExploreDocumentationAndGuides": "探索全面的文档和指南。", "Documentations": "文档", "Views": "意见", - "ReadMore": "阅读更多", "EnterYouEmailToGetNews": "输入您的电子邮件以获取有关 ABP 框架的最新消息", "Tiered": "分层", "SeparateIdentityServer": "独立的身份服务器", @@ -372,6 +371,7 @@ "MasteringAbpFramework_Book_What_You_Will_Learn_8": "使用 ABP 框架编写单元、集成和 UI 测试。", "MasteringAbpFramework_Book_WhoIsThisBookFor": "这本书是给谁看的", "MasteringAbpFramework_Book_WhoIsThisBookFor_Description": "本书适用于希望学习软件架构和最佳实践的 Web 开发人员,以使用 Microsoft 技术和 ABP 框架构建\n 可维护的基于 Web 的解决方案。 C#\n 和 ASP.NET Core 的基本知识是开始阅读本书所必需的。", - "ComputersAndTechnology": "计算机与技术" + "ComputersAndTechnology": "计算机与技术", + "ThisBookIsInDraftStageAndIsNotCompletedYet": "这本书正在草案阶段,还没有完成。" } } \ No newline at end of file diff --git a/common.props b/common.props index e821fbcca0..f8b7c620c2 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 6.0.0-rc.2 + 7.0.0 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ diff --git a/docs/en/Background-Jobs-RabbitMq.md b/docs/en/Background-Jobs-RabbitMq.md index 16b8b0981a..8eec3733fb 100644 --- a/docs/en/Background-Jobs-RabbitMq.md +++ b/docs/en/Background-Jobs-RabbitMq.md @@ -126,25 +126,31 @@ By default, all the job types use the `Default` RabbitMQ connection. Configure(options => { options.DefaultQueueNamePrefix = "my_app_jobs."; + options.DefaultDelayedQueueNamePrefix = "my_app_jobs.delayed" + options.PrefetchCount = 1; options.JobQueues[typeof(EmailSendingArgs)] = new JobQueueConfiguration( typeof(EmailSendingArgs), queueName: "my_app_jobs.emails", - connectionName: "SecondConnection" + connectionName: "SecondConnection", + delayedQueueName:"my_app_jobs.emails.delayed" ); }); ```` -* This example sets the default queue name prefix to `my_app_jobs.`. If different applications use the same RabbitMQ server, it would be important to use different prefixes for each application to not consume jobs of each other. +* This example sets the default queue name prefix to `my_app_jobs.` and default delayed queue name prefix to `my_app_jobs.delayed`. If different applications use the same RabbitMQ server, it would be important to use different prefixes for each application to not consume jobs of each other. +* Sets `PrefetchCount` for all queues. * Also specifies a different connection string for the `EmailSendingArgs`. `JobQueueConfiguration` class has some additional options in its constructor; * `queueName`: The queue name that is used for this job. The prefix is not added, so you need to specify the full name of the queue. +* `DelayedQueueName`: The delayed queue name that is used for delayed execution of job. The prefix is not added, so you need to specify the full name of the queue. * `connectionName`: The RabbitMQ connection name (see the connection configuration above). This is optional and the default value is `Default`. * `durable` (optional, default: `true`). * `exclusive` (optional, default: `false`). -* `autoDelete` (optional, default: `false`) +* `autoDelete` (optional, default: `false`). +* `PrefetchCount` (optional, default: null) See the RabbitMQ documentation if you want to understand the `durable`, `exclusive` and `autoDelete` options better, while most of the times the default configuration is what you want. diff --git a/docs/en/Community-Articles/15-08-2022-How-to-Design-Multi-Lingual-Entity/How-to-Design-Multi-Lingual-Entity.md b/docs/en/Community-Articles/15-08-2022-How-to-Design-Multi-Lingual-Entity/How-to-Design-Multi-Lingual-Entity.md new file mode 100644 index 0000000000..2c4b860c95 --- /dev/null +++ b/docs/en/Community-Articles/15-08-2022-How-to-Design-Multi-Lingual-Entity/How-to-Design-Multi-Lingual-Entity.md @@ -0,0 +1,690 @@ +# How to Design Multi-Lingual Entity + +## Introduction + +If you want to open up to the global market these days, end-to-end localization is a must. ABP provides an already established infrastructure for static texts. However, this may not be sufficient for many applications. You may need to fully customize your app for a particular language and region. + +Let's take a look at a few quotes from Christian Arno's article "[How Foreign-Language Internet Strategies Boost Sales](https://www.mediapost.com/publications/article/155250/how-foreign-language-internet-strategies-boost-sal.html)" to better understand the impact of this: + +- 82% of European consumers are less likely to buy online if the site is not in their native tongue ([Eurobarometer survey](http://europa.eu/rapid/pressReleasesAction.do?reference=IP/11/556)). +- 72.4% of global consumers are more likely to buy a product if the information is available in their own language ([Common Sense Advisory](http://www.commonsenseadvisory.com/)). +- The English language currently only accounts for 31% of all online use, and more than half of all searches are in languages other than English. +- Today, 42% of all Internet users are in Asia, while almost one-quarter are in Europe and just over 10% are in Latin America. + +- Foreign languages have experienced exponential growth in online usage in the past decade -- with Chinese now officially the [second-most-prominent-language](http://english.peopledaily.com.cn/90001/90776/90882/7438489.html) on the Web. [Arabic](http://www.internetworldstats.com/stats7.htm) has increased by a whopping 2500%, while English has only risen by 204% + +If you are looking for ways to expand your market share by fully customizing your application for a particular language and region, in this article I will explain how you can do it with ABP framework. + +### Source Code + +You can find the source code of the application at [abpframework/abp-samples](https://github.com/abpframework/abp-samples/tree/master/AcmeBookStoreMultiLingual). + +### Demo of the Final Application + +At the end of this article, we will have created an application same as in the gif below. + +![data-model](./result.gif) + +## Development + +In order to keep the article short and get rid of unrelated information in the article (like defining entities etc.), we'll be using the [BookStore](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore) example, which is used in the "[Web Application Development Tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Part-1?UI=MVC&DB=EF)" documentation of ABP Framework and we will make the Book entity as multi-lingual. If you do not want to finish this tutorial, you can find the application [here](https://github.com/abpframework/abp-samples/tree/master/BookStore-Mvc-EfCore). + +### Determining the data model + +We need a robust, maintainable, and efficient data model to store content in multiple languages. + +> I read many articles to determine the data model correctly, and as a result, I decided to use one of the many approaches that suit us. +> However, as in everything, there is a trade-off here. If you are wondering about the advantages and disadvantages of the model we will implement compared to other models, I recommend you to read [this article](https://vertabelo.com/blog/data-modeling-for-multiple-languages-how-to-design-a-localization-ready-system/). + +![data-model](./data-model.png) + +As a result of the tutorial, we already have the `Book` and `Author` entities, as an extra, we will just add the `BookTranslation`. + +> In the article, we will make the Name property of the Book entity multi-lingual, but the article is independent of the Book entity, you can make the entity you want multi-lingual with similar codes according to your requirements. + +#### Acme.BookStore.Domain.Shared + +Create a folder named `MultiLingualObjects` and create the following interfaces in its contents. + +We will use the `IObjectTranslation` interface to mark the translation of a multi-lingual entity: + +```csharp +public interface IObjectTranslation +{ + string Language { get; set; } +} +``` + +We will use the `IMultiLingualObject` interface to mark multi-lingual entities: + +```csharp +public interface IMultiLingualObject + where TTranslation : class, IObjectTranslation +{ + ICollection Translations { get; set; } +} +``` + +#### Acme.BookStore.Domain + +In the `Books` folder, create the `BookTranslation` class as follows: + +```csharp +public class BookTranslation : Entity, IObjectTranslation +{ + public Guid BookId { get; set; } + + public string Name { get; set; } + + public string Language { get; set; } + + public override object[] GetKeys() + { + return new object[] {BookId, Language}; + } +} +``` + +`BookTranslation` contains the `Language` property, which contains a language code for translation and a reference to the multi-lingual entity. We also have the `BookId` foreign key to help us know which book is translated. + +Implement `IMultiLingualObject` in the `Book` class as follows: + +```csharp +public class Book : AuditedAggregateRoot, IMultiLingualObject +{ + public Guid AuthorId { get; set; } + + public string Name { get; set; } + + public BookType Type { get; set; } + + public DateTime PublishDate { get; set; } + + public float Price { get; set; } + + public ICollection Translations { get; set; } +} +``` + +Create a folder named `MultiLingualObjects` and add the following class inside of this folder: + +```csharp +public class MultiLingualObjectManager : ITransientDependency +{ + protected const int MaxCultureFallbackDepth = 5; + + public async Task FindTranslationAsync( + TMultiLingual multiLingual, + string culture = null, + bool fallbackToParentCultures = true) + where TMultiLingual : IMultiLingualObject + where TTranslation : class, IObjectTranslation + { + culture ??= CultureInfo.CurrentUICulture.Name; + + if (multiLingual.Translations.IsNullOrEmpty()) + { + return null; + } + + var translation = multiLingual.Translations.FirstOrDefault(pt => pt.Language == culture); + if (translation != null) + { + return translation; + } + + if (fallbackToParentCultures) + { + translation = GetTranslationBasedOnCulturalRecursive( + CultureInfo.CurrentUICulture.Parent, + multiLingual.Translations, + 0 + ); + + if (translation != null) + { + return translation; + } + } + + return null; + } + + protected TTranslation GetTranslationBasedOnCulturalRecursive( + CultureInfo culture, ICollection translations, int currentDepth) + where TTranslation : class, IObjectTranslation + { + if (culture == null || + culture.Name.IsNullOrWhiteSpace() || + translations.IsNullOrEmpty() || + currentDepth > MaxCultureFallbackDepth) + { + return null; + } + + var translation = translations.FirstOrDefault(pt => pt.Language.Equals(culture.Name, StringComparison.OrdinalIgnoreCase)); + return translation ?? GetTranslationBasedOnCulturalRecursive(culture.Parent, translations, currentDepth + 1); + } +} +``` + +With `MultiLingualObjectManager`'s `FindTranslationAsync` method, we get the translated version of the book according to `CurrentUICulture`. If no translation of culture is found, we return null. + +> Every thread in .NET has `CurrentCulture` and `CurrentUICulture` objects. + +#### Acme.BookStore.EntityFrameworkCore + +In the `OnModelCreating` method of the `BookStoreDbContext` class, configure the `BookTranslation` as follows: + +```csharp +builder.Entity(b => +{ + b.ToTable(BookStoreConsts.DbTablePrefix + "BookTranslations", + BookStoreConsts.DbSchema); + + b.ConfigureByConvention(); + + b.HasKey(x => new {x.BookId, x.Language}); +}); +``` + +> I haven't explicitly set up a one-to-many relationship between `Book` and `BookTranslation` here, but the entity framework will do it for us. + +After that, you can just run the following command in a command-line terminal to add a new database migration (in the directory of the `EntityFrameworkCore` project): + +```bash +dotnet ef migrations add Added_BookTranslation +``` + +This will add a new migration class to your project. You can then run the following command (or run the `.DbMigrator` application) to apply changes to the database: + +```bash +dotnet ef database update +``` + +Add the following code to the `ConfigureServices` method of the `BookStoreEntityFrameworkCoreModule`: + +```csharp + Configure(options => + { + options.Entity(bookOptions => + { + bookOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Translations); + }); +}); +``` + +Now we can use `WithDetailsAsync` without any parameters on `BookAppService` knowing that `Translations` will be included. + +#### Acme.BookStore.Application.Contracts + +Implement `IObjectTranslation` in the `BookDto` class as follows: + +```csharp +public class BookDto : AuditedEntityDto, IObjectTranslation +{ + public Guid AuthorId { get; set; } + + public string AuthorName { get; set; } + + public string Name { get; set; } + + public BookType Type { get; set; } + + public DateTime PublishDate { get; set; } + + public float Price { get; set; } + + public string Language { get; set; } +} +``` + +`Language` property is required to understand which language the translated book name belongs to in the UI. + +Create the `AddBookTranslationDto` class in the `Books` folder as follows: + +```csharp +public class AddBookTranslationDto : IObjectTranslation +{ + [Required] + public string Language { get; set; } + + [Required] + public string Name { get; set; } +} +``` + +Add the `AddTranslationsAsync` method to the `IBookAppService` as follows: + +```csharp +public interface IBookAppService : + ICrudAppService< + BookDto, + Guid, + PagedAndSortedResultRequestDto, + CreateUpdateBookDto> +{ + Task> GetAuthorLookupAsync(); + + Task AddTranslationsAsync(Guid id, AddBookTranslationDto input); // added this line +} +``` + +#### Acme.BookStore.Application + +Now, we need to implement the `AddTranslationsAsync` method in `BookAppService` and include `Translations` in the `Book` entity, for this you can change the `BookAppService` as follows: + +```csharp +[Authorize(BookStorePermissions.Books.Default)] +public class BookAppService : + CrudAppService< + Book, //The Book entity + BookDto, //Used to show books + Guid, //Primary key of the book entity + PagedAndSortedResultRequestDto, //Used for paging/sorting + CreateUpdateBookDto>, //Used to create/update a book + IBookAppService //implement the IBookAppService +{ + private readonly IAuthorRepository _authorRepository; + + public BookAppService( + IRepository repository, + IAuthorRepository authorRepository) + : base(repository) + { + _authorRepository = authorRepository; + GetPolicyName = BookStorePermissions.Books.Default; + GetListPolicyName = BookStorePermissions.Books.Default; + CreatePolicyName = BookStorePermissions.Books.Create; + UpdatePolicyName = BookStorePermissions.Books.Edit; + DeletePolicyName = BookStorePermissions.Books.Create; + } + + public override async Task GetAsync(Guid id) + { + //Get the IQueryable from the repository + var queryable = await Repository.WithDetailsAsync(); // this line changed + + //Prepare a query to join books and authors + var query = from book in queryable + join author in await _authorRepository.GetQueryableAsync() on book.AuthorId equals author.Id + where book.Id == id + select new { book, author }; + + //Execute the query and get the book with author + var queryResult = await AsyncExecuter.FirstOrDefaultAsync(query); + if (queryResult == null) + { + throw new EntityNotFoundException(typeof(Book), id); + } + + var bookDto = ObjectMapper.Map(queryResult.book); + bookDto.AuthorName = queryResult.author.Name; + return bookDto; + } + + public override async Task> GetListAsync(PagedAndSortedResultRequestDto input) + { + //Get the IQueryable from the repository + var queryable = await Repository.WithDetailsAsync(); // this line changed + + //Prepare a query to join books and authors + var query = from book in queryable + join author in await _authorRepository.GetQueryableAsync() on book.AuthorId equals author.Id + select new {book, author}; + + //Paging + query = query + .OrderBy(NormalizeSorting(input.Sorting)) + .Skip(input.SkipCount) + .Take(input.MaxResultCount); + + //Execute the query and get a list + var queryResult = await AsyncExecuter.ToListAsync(query); + + //Convert the query result to a list of BookDto objects + var bookDtos = queryResult.Select(x => + { + var bookDto = ObjectMapper.Map(x.book); + bookDto.AuthorName = x.author.Name; + return bookDto; + }).ToList(); + + //Get the total count with another query + var totalCount = await Repository.GetCountAsync(); + + return new PagedResultDto( + totalCount, + bookDtos + ); + } + + public async Task> GetAuthorLookupAsync() + { + var authors = await _authorRepository.GetListAsync(); + + return new ListResultDto( + ObjectMapper.Map, List>(authors) + ); + } + + public async Task AddTranslationsAsync(Guid id, AddBookTranslationDto input) + { + var queryable = await Repository.WithDetailsAsync(); + + var book = await AsyncExecuter.FirstOrDefaultAsync(queryable, x => x.Id == id); + + if (book.Translations.Any(x => x.Language == input.Language)) + { + throw new UserFriendlyException($"Translation already available for {input.Language}"); + } + + book.Translations.Add(new BookTranslation + { + BookId = book.Id, + Name = input.Name, + Language = input.Language + }); + + await Repository.UpdateAsync(book); + } + + private static string NormalizeSorting(string sorting) + { + if (sorting.IsNullOrEmpty()) + { + return $"book.{nameof(Book.Name)}"; + } + + if (sorting.Contains("authorName", StringComparison.OrdinalIgnoreCase)) + { + return sorting.Replace( + "authorName", + "author.Name", + StringComparison.OrdinalIgnoreCase + ); + } + + return $"book.{sorting}"; + } +} +``` + +Create the `MultiLingualBookObjectMapper` class as follows: + +```csharp +public class MultiLingualBookObjectMapper : IObjectMapper, ITransientDependency +{ + private readonly MultiLingualObjectManager _multiLingualObjectManager; + + private readonly ISettingProvider _settingProvider; + + public MultiLingualBookObjectMapper( + MultiLingualObjectManager multiLingualObjectManager, + ISettingProvider settingProvider) + { + _multiLingualObjectManager = multiLingualObjectManager; + _settingProvider = settingProvider; + } + + public BookDto Map(Book source) + { + var translation = AsyncHelper.RunSync(() => + _multiLingualObjectManager.FindTranslationAsync(source)); + + return new BookDto + { + Id = source.Id, + AuthorId = source.AuthorId, + Type = source.Type, + Name = translation?.Name ?? source.Name, + PublishDate = source.PublishDate, + Price = source.Price, + Language = translation?.Language ?? AsyncHelper.RunSync(() => _settingProvider.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage)), + CreationTime = source.CreationTime, + CreatorId = source.CreatorId, + LastModificationTime = source.LastModificationTime, + LastModifierId = source.LastModifierId + }; + } + + public BookDto Map(Book source, BookDto destination) + { + return default; + } +} +``` + +To map the multi-lingual `Book` entity to `BookDto`, we implement custom mapping using the `IObjectMapper` interface. If no translation is found, default values are returned. + +So far we have created the entire infrastructure. We don't need to change anything in the UI, if there is a translation according to the language chosen by the user, the list view will change. However, I want to create a simple modal where we can add new translations to an existing book in order to see what we have done. + +#### Acme.BookStore.Web + +Create a new razor page named `AddTranslationModal` in the `Books` folder as below. + +**View** + +```html +@page +@using Microsoft.AspNetCore.Mvc.TagHelpers +@using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +@model Acme.BookStore.Web.Pages.Books.AddTranslationModal + +@{ + Layout = null; +} + +
+ + Translations + + + + + + + + + +
+``` + +**Model** + +```csharp +public class AddTranslationModal : BookStorePageModel +{ + [HiddenInput] + [BindProperty(SupportsGet = true)] + public Guid Id { get; set; } + + public List Languages { get; set; } + + [BindProperty] + public BookTranslationViewModel TranslationViewModel { get; set; } + + private readonly IBookAppService _bookAppService; + private readonly ILanguageProvider _languageProvider; + + public AddTranslationModal( + IBookAppService bookAppService, + ILanguageProvider languageProvider) + { + _bookAppService = bookAppService; + _languageProvider = languageProvider; + } + + public async Task OnGetAsync() + { + Languages = await GetLanguagesSelectItem(); + + TranslationViewModel = new BookTranslationViewModel(); + } + + public async Task OnPostAsync() + { + await _bookAppService.AddTranslationsAsync(Id, ObjectMapper.Map(TranslationViewModel)); + + return NoContent(); + } + + private async Task> GetLanguagesSelectItem() + { + var result = await _languageProvider.GetLanguagesAsync(); + + return result.Select( + languageInfo => new SelectListItem + { + Value = languageInfo.CultureName, + Text = languageInfo.DisplayName + " (" + languageInfo.CultureName + ")" + } + ).ToList(); + } + + public class BookTranslationViewModel + { + [Required] + [SelectItems(nameof(Languages))] + public string Language { get; set; } + + [Required] + public string Name { get; set; } + + } +} +``` + +Then, we can open the `BookStoreWebAutoMapperProfile` class and define the required mapping as follows: + +```csharp +CreateMap(); +``` + +Finally, change the content of `index.js` in the `Books` folder as follows: + +```javascript +$(function () { + var l = abp.localization.getResource('BookStore'); + var createModal = new abp.ModalManager(abp.appPath + 'Books/CreateModal'); + var editModal = new abp.ModalManager(abp.appPath + 'Books/EditModal'); + var addTranslationModal = new abp.ModalManager(abp.appPath + 'Books/AddTranslationModal'); // added this line + + var dataTable = $('#BooksTable').DataTable( + abp.libs.datatables.normalizeConfiguration({ + serverSide: true, + paging: true, + order: [[1, "asc"]], + searching: false, + scrollX: true, + ajax: abp.libs.datatables.createAjax(acme.bookStore.books.book.getList), + columnDefs: [ + { + title: l('Actions'), + rowAction: { + items: + [ + { + text: l('Edit'), + visible: abp.auth.isGranted('BookStore.Books.Edit'), + action: function (data) { + editModal.open({ id: data.record.id }); + } + }, + { + text: l('Add Translation'), // added this action + visible: abp.auth.isGranted('BookStore.Books.Edit'), + action: function (data) { + addTranslationModal.open({ id: data.record.id }); + } + }, + { + text: l('Delete'), + visible: abp.auth.isGranted('BookStore.Books.Delete'), + confirmMessage: function (data) { + return l( + 'BookDeletionConfirmationMessage', + data.record.name + ); + }, + action: function (data) { + acme.bookStore.books.book + .delete(data.record.id) + .then(function() { + abp.notify.info( + l('SuccessfullyDeleted') + ); + dataTable.ajax.reload(); + }); + } + } + ] + } + }, + { + title: l('Name'), + data: "name" + }, + { + title: l('Author'), + data: "authorName" + }, + { + title: l('Type'), + data: "type", + render: function (data) { + return l('Enum:BookType:' + data); + } + }, + { + title: l('PublishDate'), + data: "publishDate", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(); + } + }, + { + title: l('Price'), + data: "price" + }, + { + title: l('CreationTime'), + data: "creationTime", + render: function (data) { + return luxon + .DateTime + .fromISO(data, { + locale: abp.localization.currentCulture.name + }).toLocaleString(luxon.DateTime.DATETIME_SHORT); + } + } + ] + }) + ); + + createModal.onResult(function () { + dataTable.ajax.reload(); + }); + + editModal.onResult(function () { + dataTable.ajax.reload(); + }); + + $('#NewBookButton').click(function (e) { + e.preventDefault(); + createModal.open(); + }); +}); +``` + +## Conclusion + +With a multi-lingual application, you can expand your market share, but if not designed well, may your application will be unusable. So, I've tried to explain how to design a sustainable multi-lingual entity in this article. + +### Source Code + +You can find source code of the example solution used in this article [here](https://github.com/abpframework/abp-samples/tree/master/AcmeBookStoreMultiLingual). diff --git a/docs/en/Community-Articles/15-08-2022-How-to-Design-Multi-Lingual-Entity/data-model.png b/docs/en/Community-Articles/15-08-2022-How-to-Design-Multi-Lingual-Entity/data-model.png new file mode 100644 index 0000000000..c7e02bc2cd Binary files /dev/null and b/docs/en/Community-Articles/15-08-2022-How-to-Design-Multi-Lingual-Entity/data-model.png differ diff --git a/docs/en/Community-Articles/15-08-2022-How-to-Design-Multi-Lingual-Entity/result.gif b/docs/en/Community-Articles/15-08-2022-How-to-Design-Multi-Lingual-Entity/result.gif new file mode 100644 index 0000000000..0bc41cb8f1 Binary files /dev/null and b/docs/en/Community-Articles/15-08-2022-How-to-Design-Multi-Lingual-Entity/result.gif differ diff --git a/docs/en/Deploy-azure-app-service.md b/docs/en/Deploy-azure-app-service.md new file mode 100644 index 0000000000..9e0309f3b9 --- /dev/null +++ b/docs/en/Deploy-azure-app-service.md @@ -0,0 +1,452 @@ +# Deploying ABP Project to Azure App Service + +In this document, you will learn how to create and deploy your first ABP web app to [Azure App Service](https://docs.microsoft.com/en-us/azure/app-service/overview). The App Service supports various versions of .NET apps, and provides a highly scalable, self-patching web hosting service. ABP web apps are cross-platform and can be hosted on Linux, Windows or MacOS. + +****Prerequisites**** + +- An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/free/dotnet). +- A GitHub account [Create an account for free](http://github.com/). + + + +## Creating a new ABP application + +Create a repository on [GitHub.com](https://github.com/) (keep all settings as default). + +Open the command prompt and clone the repository into a folder on your computer + +```bash +git clone https://github.com/your-username/your-repository-name.git +``` + +Check your dotnet version. It should be at least 3.1.x + +```bash +dotnet --version +``` + +Install or update the [ABP CLI](https://docs.abp.io/en/abp/latest/cli) with the following command: + +```bash +dotnet tool install -g Volo.Abp.Cli || dotnet tool update -g Volo.Abp.Cli +``` + +Open the command prompt in the *GitHub repository folder* and create a new ABP Blazor solution with the command below: + +```bash +abp new YourAppName -u blazor +``` + + + +## Running the application + +Open the command prompt in the *[YourAppName].DbMigrator* project and enter the command below to apply the database migrations: + +```bash +dotnet run +``` + +Open the command prompt in the *[YourAppName].HttpApi.Host* project to run the API project: + +```bash +dotnet run +``` + +Navigate to the *applicationUrl* specified in *the launchSettings.json* file of the *[YourAppName].HttpApi.Host project*. You should get the *Swagger window* + +Open the command prompt in the *[YourAppName].Blazor* folder and enter the command below to run the Blazor project: + +```bash +dotnet run +``` + +Navigate to the *applicationUrl* specified in the *launchSettings.json* file of the *[YourAppName].Blazor* project and you should see the landing page. + +Stop both the *API* and the *Blazor* project by pressing **CTRL+C** + + + +## Committing to GitHub + +Before the GitHub commit, you have to delete the line "**/wwwroot/libs/*" at *.gitignore* file. + +![azdevops-23](images/azdevops-23.png) + +Open the command prompt in the root folder of your project and *add, commit and push* all your changes to your GitHub repository: + +```bash +git add . +git commit -m initialcommit +git push +``` + + + +## Configuring Azure database connection string + +Create a SQL database on Azure and change the connection string in all the *appsettings.json* files. + +* Login into [Azure Portal](https://portal.azure.com/) + +* Click **Create a resource** + +* Search for *SQL Database* + +* Click the **Create** button in the *SQL Database window* + +* Create a new resource group. Name it *rg[YourAppName]* + +* Enter *[YourAppName]Db* as database name + +* Create a new Server and name it *[yourappname]server* + +* Enter a serveradmin login and passwords. Click the **OK** button + +* Select your *Location* + +* Check *Allow Azure services to access server* + +* Click **Configure database**. Go to the *Basic* version and click the **Apply** button + +* Click the **Review + create** button. Click **Create** + +* Click **Go to resource** and click **SQL server** when the SQL Database is created + +* Click **Networking** under Security left side menu + +* Select **Selected networks** and click **Add your client IP$ address** at the Firewall rules + +* Select **Allow Azure and resources to access this seerver** and save + +* Go to your **SQL database**, click **Connection strings** and copy the connection string + +* Copy/paste the *appsettings.json* files of the *[YourAppName].HttpApi.Host* and the *[YourAppName].DbMigrator* project + +* Do not forget to replace {your_password} with the correct server password you entered in Azure SQL Database + + + +## Running DB Migrations + +Open the command prompt in the *[YourAppName].DbMigrator* project again and enter the command below to apply the database migrations: + +```bash +dotnet run +``` + +Open the command prompt in the *[YourAppName].HttpApi.Host* project and enter the command below to check your API is working: + +```bash +dotnet run +``` + +Stop the *[YourAppName].HttpApi.Host* by pressing CTRL+C. + + + +## Committing to GitHub + +Open the command prompt in the root folder of your project and add, commit and push all your changes to your GitHub repository + +```bash +git add . +git commit -m initialcommit +git push +``` + + + +## Setting up the Build pipeline in AzureDevops and publish the Build Artifacts + +* Sign in Azure DevOps + +* Click **New organization** and follow the steps to create a new organisation. Name it [YourAppName]org + +* Enter [YourAppName]Proj as project name in the ***Create a project to get started*** window + +* Select **Public visibility** and click the **Create project** button + +* Click the **Pipelines** button to continue + +* Click the **Create Pipeline** button + + Select GitHub in the Select your repository window + +![azdevops-1](images/azdevops-1.png) + +* Enter the Connection name. *[YourAppName]GitHubConnection* and click **Authorize using OAuth** + +* Select your **GitHub** [YourAppName]repo and click Continue + +* Search for **ASP.NET** in the ***Select a template*** window + +![azdevops-2](images/azdevops-2.png) + +* Select the ASP.NET Core template and click the **Apply** button + +* Add the below commands block as a first step in the pipeline + + ``` + - task: UseDotNet@2 + inputs: + packageType: 'sdk' + version: '6.0.106' + ``` + +![azdevops-18](images/azdevops-18.png) + +* Select **Settings** on the second task(Nugetcommand@2) in the pipeline + +* Select **Feeds in my Nuget.config** and type **Nuget.config** in the text box + +![azdevops-3](images/azdevops-3.png) + +* Add the below commands block to the end of the pipeline + + ``` + - task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact' + inputs: + PathtoPublish: '$(build.artifactstagingdirectory)' + ArtifactName: '$(Parameters.ArtifactName)' + condition: succeededOrFailed() + ``` + + ![azdevops-4](images/azdevops-4.png) + +``` +# ASP.NET +# Build and test ASP.NET projects. +# Add steps that publish symbols, save build artifacts, deploy, and more: +# https://docs.microsoft.com/azure/devops/pipelines/apps/aspnet/build-aspnet-4 + +trigger: +- main + +pool: + vmImage: 'windows-latest' + +variables: + solution: '**/*.sln' + buildPlatform: 'Any CPU' + buildConfiguration: 'Release' + +steps: +- task: UseDotNet@2 + inputs: + packageType: 'sdk' + version: '6.0.106' + +- task: NuGetToolInstaller@1 + +- task: NuGetCommand@2 + inputs: + command: 'restore' + restoreSolution: '$(solution)' + feedsToUse: 'config' + nugetConfigPath: 'NuGet.config' + +- task: VSBuild@1 + inputs: + solution: '$(solution)' + msbuildArgs: '/p:DeployOnBuild=true /p:WebPublishMethod=Package /p:PackageAsSingleFile=true /p:SkipInvalidConfigurations=true /p:PackageLocation="$(build.artifactStagingDirectory)"' + platform: '$(buildPlatform)' + configuration: '$(buildConfiguration)' + +- task: VSTest@2 + inputs: + platform: '$(buildPlatform)' + configuration: '$(buildConfiguration)' + +- task: PublishBuildArtifacts@1 + displayName: 'Publish Artifact' + inputs: + PathtoPublish: '$(build.artifactstagingdirectory)' + ArtifactName: '$(Parameters.ArtifactName)' + publishLocation: 'Container' + condition: succeededOrFailed() +``` + +* Click **Save & queue** in the top menu. Click **Save & queue** again and click **Save and run** to run the Build pipeline + +* When the Build pipeline has finished. Click **1 published; 1 consumed** + + + +## Creating a Web App in the Azure Portal to deploy [YourAppName].HttpApi.Host project + +* Search for Web App in the *Search the Marketplace* field + +* Click the **Create** button in the Web App window + +* Select rg[YourAppName] in the *Resource Group* dropdown + +* Enter [YourAppName]API in the *Name input* field + +* Select code, .NET Core 3.1 (LTS) and windows as *Operating System* + +* Enter [YourAppName]API in the *Name input* field + +* Select .NET Core 3.1 (LTS) in the *Runtime stack* dropdown + +* Select Windows as *Operating System* + +* Select the same *Region* as in the SQL server you created in Part 3 + +![azdevops-5](images/azdevops-5.png) + +* Click **Create new** in the Windows Plan. Name it [YourAppName]ApiWinPlan + +* Click **Change size** in Sku and size. Go to the Dev/Test Free F1 version and click the **Apply** button + +![azdevops-6](images/azdevops-6.png) + +* Click the **Review + create** button. Click the **Create** button + +* Click **Go to resource** when the Web App has been created + + + +## Creating a release pipeline in the AzureDevops and deploy [YourAppName].HttpApi.Host project + +* Sign in into [Azure DevOps](https://azure.microsoft.com/en-us/services/devops/) + +* Click [YourAppName]Proj and click **Releases** in the *Pipelines* menu + +* Click the **New pipeline** button in the *No release pipelines found* window + +* Select *Azure App Service deployment* and click the **Apply** button + +![azdevops-7](images/azdevops-7.png) + +* Enter *[YourAppName]staging* in the *Stage name* field in the *Stage* window. And close the window + +* Click **+ Add an artifact** in the *Pipeline* tab + +* Select the **Build** icon as *Source type* in the *Add an artifact* window + +* Select Build pipeline in the *Source (build pipeline)* dropdown and click the **Add** button + +![azdevops-8](images/azdevops-8.png) + +* Click the **Continuous deployment trigger (thunderbolt icon)** + +* Set the toggle to **Enabled** in the the *Continuous deployment trigger* window + +* Click **+ Add** in *No filters added*. Select **Include** in the *Type* dropdown. Select your branch in the *Build branch* dropdown and close the window + +![azdevops-9](images/azdevops-9.png) + +* Click **the little red circle with the exclamation mark** in the *Tasks* tab menu + +* Select your subscription in the *Azure subscription* dropdown. + +![azdevops-10](images/azdevops-10.png) + +* Click **Authorize** and enter your credentials in the next screens + +* After Authorization, select the **[YourAppName]API** in the *App service name* dropdown + +* Click the **Deploy Azure App Service** task + +* Select **[YourAppName].HttpApi.Host.zip** in the *Package or folder* input field + +![azdevops-11](images/azdevops-11.png) + +* Click the **Save** icon in the top menu and click **OK** + +* Click **Create release** in the top menu. Click **Create** to create a release + +* Click the *Pipeline* tab and wait until the Deployment succeeds + +![azdevops-12](images/azdevops-12.png) + +* Open a browser and navigate to the URL of your Web App + +``` +https://[YourAppName]api.azurewebsites.net +``` + +![azdevops-13](images/azdevops-13.png) + + + +## Creating a Web App in Azure Portal to deploy [YourAppName].Blazor project + +* Login into [Azure Portal](https://portal.azure.com/) + +* Click **Create a resource** + +* Search for *Web App* in the *Search the Marketplace* field + +* Click the **Create** button in the *Web App* window + +* Select *rg[YourAppName]* in the *Resource Group* dropdown + +* Enter *[YourAppName]Blazor* in the *Name* input field + +* Select *.NET Core 3.1 (LTS)* in the *Runtime stack* dropdown + +* Select *Windows* as *Operating System* + +* Select the same region as the SQL server you created in Part 3 + +* Select the [YourAppName]ApiWinPlan in the *Windows Plan* dropdown + +![azdevops-14](images/azdevops-14.png) + +* Click the **Review + create** button. Click **Create** button + +* Click **Go to resource** when the Web App has been created + +* Copy the URL of the Blazor Web App for later use + +``` +https://[YourAppName]blazor.azurewebsites.net +``` + + +## Changing the Web App configuration for the Azure App Service + +Copy the URL of the Api Host and Blazor Web App. Change appsettings.json files in the Web App as follows images. + +![azdevops-19](images/azdevops-19.png) + +![azdevops-20](images/azdevops-20.png) + +![azdevops-21](images/azdevops-21.png) + + + +## Adding an extra Stage in the Release pipeline in the AzureDevops to deploy [YourAppName].Blazor project + +* Go to the *Release* pipeline in [Azure DevOps](https://azure.microsoft.com/en-us/services/devops/) and click **Edit** + +* Click the **+ Add** link and add a **New Stage** + +![azdevops-15](images/azdevops-15.png) + +* Select *Azure App Service deployment* and click the **Apply** button + +* Enter *BlazorDeployment* in the *Stage name* input field and close the *Stage* window + +* Click the **little red circle with the exclamation mark** in the BlazorDeployment stage + +* Select your subscription in the *Azure subscription* dropdown + +* Select your Blazor Web App in the *App service name* dropdown + +* Click the **Deploy Azure App Service task** + +* Select *[YourAppName].Blazor.zip* in the *Package or folder* input field + +![azdevops-16](images/azdevops-16.png) + +* Click **Save** in the top menu and click the **OK** button after + +* Click **Create release** in the top menu and click the **Create** button + +![azdevops-17](images/azdevops-17.png) + +![azdevops-22](images/azdevops-22.png) diff --git a/docs/en/Distributed-Event-Bus-RabbitMQ-Integration.md b/docs/en/Distributed-Event-Bus-RabbitMQ-Integration.md index 3d99e1e3cf..1961726b8f 100644 --- a/docs/en/Distributed-Event-Bus-RabbitMQ-Integration.md +++ b/docs/en/Distributed-Event-Bus-RabbitMQ-Integration.md @@ -141,13 +141,14 @@ Configure(options => }); ```` -**Example: Configure the client and exchange names** +**Example: Configure the client, exchange names and prefetchCount** ````csharp Configure(options => { options.ClientName = "TestApp1"; options.ExchangeName = "TestMessages"; + options.PrefetchCount = 1; }); ```` diff --git a/docs/es/Getting-Started-AspNetCore-Application.md b/docs/es/Getting-Started-AspNetCore-Application.md new file mode 100644 index 0000000000..c4d124d827 --- /dev/null +++ b/docs/es/Getting-Started-AspNetCore-Application.md @@ -0,0 +1,140 @@ +# Empezando con ABP y una Aplicacion AspNet Core MVC Web + +Este tutorial explica como empezar una aplicacion ABP desde cero usando las dependencias minimas. Uno generalmente desea +empezar con la **[plantilla de inicio](Getting-Started-AspNetCore-MVC-Template.md)**. + +## Crea un Proyecto Nuevo + +1. Crea una Aplicacion Web AspNet Core nueva usando Visual Studio 2022 (17.0.0+): + +![](images/create-new-aspnet-core-application-v2.png) + +2. Configura el nuevo proyecto: + +![](images/select-empty-web-application-v2.png) + +3. Presione el boton Create: + +![create-aspnet-core-application](images/create-aspnet-core-application.png) + +## Instale el paquete Volo.Abp.AspNetCore.Mvc + +Volo.Abp.AspNetCore.Mvc es el paquete de integracion con AspNet Core MVC para ABP. Siendo asi, instalalo en su proyecto: + +```` +Install-Package Volo.Abp.AspNetCore.Mvc +```` + +## Crea el primer modulo ABP + +ABP es un marco de referencia modular y require una clase de **inicio (raíz) tipo modulo** derivada de ``AbpModule``: + +````C# +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.Hosting; +using Volo.Abp; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Modularity; + +namespace BasicAspNetCoreApplication +{ + [DependsOn(typeof(AbpAspNetCoreMvcModule))] + public class AppModule : AbpModule + { + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + // Configura la canalización de peticiones HTTP. + if (env.IsDevelopment()) + { + app.UseExceptionHandler("/Error"); + // El valor por defecto de HSTS es 30 dias. Debes cambiar esto en ambientes productivos. Referencia https://aka.ms/aspnetcore-hsts. + app.UseHsts(); + } + + app.UseHttpsRedirection(); + app.UseStaticFiles(); + app.UseRouting(); + app.UseConfiguredEndpoints(); + } + } +} +```` + +``AppModule`` es un buen nombre para el modulo de inicio de una aplicacion. + +Los paquetes de ABP definen clases de tipo modulo y cada modulo puede depender de otro. +En el codigo anterior, el ``AppModule`` depende de el modulo ``AbpAspNetCoreMvcModule`` (definido por el paquete [Volo.Abp.AspNetCore.Mvc](https://www.nuget.org/packages/Volo.Abp.AspNetCore.Mvc)). Es comun agregar el atributo ``DependsOn`` despues de instalar un paquete ABP nuevo. + +En vez de la clase de inicion Startup, estamos configurando una canalizacion de ASP.NET Core en este modulo. + +## La clase Program + +El proximo paso es modificar la clase Program para integrate el sistema de modulos ABP: + +````C# +using BasicAspNetCoreApplication; + +var builder = WebApplication.CreateBuilder(args); + +await builder.Services.AddApplicationAsync(); + +var app = builder.Build(); + +await app.InitializeApplicationAsync(); +await app.RunAsync(); +```` + +``builder.Services.AddApplicationAsync();`` Agrega todos los servicios definidos en todos los modulos empezando desde ``AppModule``. + +``app.InitializeApplicationAsync()`` inicializa y empieza la aplicacion. + +## Ejecutar la Aplicación + +Es todo! Ejecuta la aplicación, debe funcionar como esperado. + +## Uso de Autofac como Marco de Inyección de Dependencia + +Mientras el sistema de Inyección de Dependencia de ASP.NET Core es suficiente para requerimientos basico, [Autofac](https://autofac.org/) proporciona características avanzadas como Inyección de Propiedades e Intercepcion de Metodos, los cuales son necesarios para que ABP pueda llevar a cabo funciones avanzadas. + +El acto de remplazar el sistema DI de ASP.NET Core por Autofac e integrarlo con ABP es facil. + +1. Instala el paquete [Volo.Abp.Autofac](https://www.nuget.org/packages/Volo.Abp.Autofac) + +```` +Install-Package Volo.Abp.Autofac +```` + +2. Agrega la dependencia sobre el modulo ``AbpAutofacModule`` + +````C# +[DependsOn(typeof(AbpAspNetCoreMvcModule))] +[DependsOn(typeof(AbpAutofacModule))] //Agrega la dependencia sobre el modulo ABP Autofac +public class AppModule : AbpModule +{ + ... +} +```` + +3. Actualiza `Program.cs` para que use Autofac: + +````C# +using BasicAspNetCoreApplication; + +var builder = WebApplication.CreateBuilder(args); + +builder.Host.UseAutofac(); //Agrega esta linea + +await builder.Services.AddApplicationAsync(); + +var app = builder.Build(); + +await app.InitializeApplicationAsync(); +await app.RunAsync(); +```` + +## Codigo fuente + + Obten el codigo fuente del ejemplo creado en este tutorial de [aqui](https://github.com/abpframework/abp-samples/tree/master/BasicAspNetCoreApplication). diff --git a/docs/es/images/create-aspnet-core-application.png b/docs/es/images/create-aspnet-core-application.png new file mode 100644 index 0000000000..b8b98f5c32 Binary files /dev/null and b/docs/es/images/create-aspnet-core-application.png differ diff --git a/docs/es/images/create-new-aspnet-core-application-v2.png b/docs/es/images/create-new-aspnet-core-application-v2.png new file mode 100644 index 0000000000..f8274ae2a4 Binary files /dev/null and b/docs/es/images/create-new-aspnet-core-application-v2.png differ diff --git a/docs/es/images/select-empty-web-application-v2.png b/docs/es/images/select-empty-web-application-v2.png new file mode 100644 index 0000000000..da32f71857 Binary files /dev/null and b/docs/es/images/select-empty-web-application-v2.png differ diff --git a/docs/zh-Hans/Background-Jobs-RabbitMq.md b/docs/zh-Hans/Background-Jobs-RabbitMq.md index 0f9fb21d8a..8bf61846e7 100644 --- a/docs/zh-Hans/Background-Jobs-RabbitMq.md +++ b/docs/zh-Hans/Background-Jobs-RabbitMq.md @@ -126,25 +126,31 @@ Configure(options => Configure(options => { options.DefaultQueueNamePrefix = "my_app_jobs."; + options.DefaultDelayedQueueNamePrefix = "my_app_jobs.delayed" + options.PrefetchCount = 1; options.JobQueues[typeof(EmailSendingArgs)] = new JobQueueConfiguration( typeof(EmailSendingArgs), queueName: "my_app_jobs.emails", - connectionName: "SecondConnection" + connectionName: "SecondConnection", + delayedQueueName:"my_app_jobs.emails.delayed" ); }); ``` -- 这个示例将默认的队列名前缀设置为 `my_app_jobs.`,如果多个项目都使用的同一个 RabbitMQ 服务,设置不同的前缀可以避免执行其他项目的后台作业. +- 这个示例将默认的队列名前缀设置为 `my_app_jobs.`并且设置默认的延迟队列名为 `my_app_jobs.delayed`,如果多个项目都使用的同一个 RabbitMQ 服务,设置不同的前缀可以避免执行其他项目的后台作业. +- 设置了预取数量, 用于所有队列. - 这里还设置了 `EmailSendingArgs` 绑定的 RabbitMQ 连接. `JobQueueConfiguration` 类的构造函数中,还有一些其他的可选参数. - `queueName`: 指定后台作业对应的队列名称(全名). +* `DelayedQueueName`: 指定后台延迟执行的作业对于的队列名称(全名). - `connectionName`: 后台作业对应的 RabbitMQ 连接名称,默认是 `Default`. - `durable`: 可选参数,默认为 `true`. - `exclusive`: 可选参数,默认为 `false`. - `autoDelete`: 可选参数,默认为 `false`. +* `PrefetchCount` (可选参数, 默认为: null) 如果你想要更多地了解 `durable`,`exclusive`,`autoDelete` 的用法,请阅读 RabbitMQ 提供的文档. diff --git a/docs/zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md b/docs/zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md index 1cd6b5b9dd..f45d4d90bf 100644 --- a/docs/zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md +++ b/docs/zh-Hans/Distributed-Event-Bus-RabbitMQ-Integration.md @@ -141,13 +141,14 @@ Configure(options => }); ```` -**示例: 配置客户端和交换机名称** +**示例: 配置客户端,交换机名称和预取数量** ````csharp Configure(options => { options.ClientName = "TestApp1"; options.ExchangeName = "TestMessages"; + options.PrefetchCount = 1; }); ```` diff --git a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/PageToolbars/PageToolbarManager.cs b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/PageToolbars/PageToolbarManager.cs index 05531096d4..00f7f5da23 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/PageToolbars/PageToolbarManager.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.Web.Theming/PageToolbars/PageToolbarManager.cs @@ -3,16 +3,17 @@ using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Components.Web.Theming.PageToolbars; public class PageToolbarManager : IPageToolbarManager, ITransientDependency { - protected IHybridServiceScopeFactory ServiceScopeFactory { get; } + protected IServiceScopeFactory ServiceScopeFactory { get; } public PageToolbarManager( - IHybridServiceScopeFactory serviceScopeFactory) + IServiceScopeFactory serviceScopeFactory) { ServiceScopeFactory = serviceScopeFactory; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarManager.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarManager.cs index b795c62c39..ec27b8087c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarManager.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/PageToolbars/PageToolbarManager.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; @@ -10,11 +11,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.PageToolbars; public class PageToolbarManager : IPageToolbarManager, ITransientDependency { protected AbpPageToolbarOptions Options { get; } - protected IHybridServiceScopeFactory ServiceScopeFactory { get; } + protected IServiceScopeFactory ServiceScopeFactory { get; } public PageToolbarManager( IOptions options, - IHybridServiceScopeFactory serviceScopeFactory) + IServiceScopeFactory serviceScopeFactory) { Options = options.Value; ServiceScopeFactory = serviceScopeFactory; diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs index a6569d001b..15c1d74ccb 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore/Microsoft/AspNetCore/Hosting/AbpHostingEnvironmentExtensions.cs @@ -9,7 +9,7 @@ public static class AbpHostingEnvironmentExtensions this IWebHostEnvironment env, AbpConfigurationBuilderOptions options = null) { - options = options ?? new AbpConfigurationBuilderOptions(); + options ??= new AbpConfigurationBuilderOptions(); if (options.BasePath.IsNullOrEmpty()) { diff --git a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/DependencyInjection/HttpContextServiceScopeFactory.cs b/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/DependencyInjection/HttpContextServiceScopeFactory.cs deleted file mode 100644 index a7f00f7451..0000000000 --- a/framework/src/Volo.Abp.AspNetCore/Volo/Abp/AspNetCore/DependencyInjection/HttpContextServiceScopeFactory.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.DependencyInjection; - -namespace Volo.Abp.AspNetCore.DependencyInjection; - -[ExposeServices( - typeof(IHybridServiceScopeFactory), - typeof(HttpContextServiceScopeFactory) - )] -[Dependency(ReplaceServices = true)] -public class HttpContextServiceScopeFactory : IHybridServiceScopeFactory, ITransientDependency -{ - protected IHttpContextAccessor HttpContextAccessor { get; } - - protected IServiceScopeFactory ServiceScopeFactory { get; } - - public HttpContextServiceScopeFactory( - IHttpContextAccessor httpContextAccessor, - IServiceScopeFactory serviceScopeFactory) - { - HttpContextAccessor = httpContextAccessor; - ServiceScopeFactory = serviceScopeFactory; - } - - public virtual IServiceScope CreateScope() - { - var httpContext = HttpContextAccessor.HttpContext; - if (httpContext == null) - { - return ServiceScopeFactory.CreateScope(); - } - - return new NonDisposedHttpContextServiceScope(httpContext.RequestServices); - } - - protected class NonDisposedHttpContextServiceScope : IServiceScope - { - public IServiceProvider ServiceProvider { get; } - - public NonDisposedHttpContextServiceScope(IServiceProvider serviceProvider) - { - ServiceProvider = serviceProvider; - } - - public void Dispose() - { - - } - } -} diff --git a/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IDeletionAuditedObject.cs b/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IDeletionAuditedObject.cs index be59ea0431..a7be0c29a1 100644 --- a/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IDeletionAuditedObject.cs +++ b/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IDeletionAuditedObject.cs @@ -10,7 +10,7 @@ public interface IDeletionAuditedObject : IHasDeletionTime /// /// Id of the deleter user. /// - Guid? DeleterId { get; set; } + Guid? DeleterId { get; } } /// @@ -22,5 +22,5 @@ public interface IDeletionAuditedObject : IDeletionAuditedObject /// /// Reference to the deleter user. /// - TUser Deleter { get; set; } + TUser Deleter { get; } } diff --git a/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IHasDeletionTime.cs b/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IHasDeletionTime.cs index a84fc78c41..ef45b1b057 100644 --- a/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IHasDeletionTime.cs +++ b/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IHasDeletionTime.cs @@ -11,5 +11,5 @@ public interface IHasDeletionTime : ISoftDelete /// /// Deletion time. /// - DateTime? DeletionTime { get; set; } + DateTime? DeletionTime { get; } } diff --git a/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IHasModificationTime.cs b/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IHasModificationTime.cs index b7b7494081..001d07d617 100644 --- a/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IHasModificationTime.cs +++ b/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IHasModificationTime.cs @@ -10,5 +10,5 @@ public interface IHasModificationTime /// /// The last modified time for this entity. /// - DateTime? LastModificationTime { get; set; } + DateTime? LastModificationTime { get; } } diff --git a/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IModificationAuditedObject.cs b/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IModificationAuditedObject.cs index 5ba4fd1e02..48f26b6299 100644 --- a/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IModificationAuditedObject.cs +++ b/framework/src/Volo.Abp.Auditing.Contracts/Volo/Abp/Auditing/IModificationAuditedObject.cs @@ -10,7 +10,7 @@ public interface IModificationAuditedObject : IHasModificationTime /// /// Last modifier user for this entity. /// - Guid? LastModifierId { get; set; } + Guid? LastModifierId { get; } } /// @@ -22,5 +22,5 @@ public interface IModificationAuditedObject : IModificationAuditedObject /// /// Reference to the last modifier user of this entity. /// - TUser LastModifier { get; set; } + TUser LastModifier { get; } } diff --git a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs index d85bad82eb..16632420d7 100644 --- a/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs +++ b/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditPropertySetter.cs @@ -99,7 +99,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency { if (targetObject is IHasModificationTime objectWithModificationTime) { - objectWithModificationTime.LastModificationTime = Clock.Now; + ObjectHelper.TrySetProperty(objectWithModificationTime, x => x.LastModificationTime, () => Clock.Now); } } @@ -112,7 +112,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency if (!CurrentUser.Id.HasValue) { - modificationAuditedObject.LastModifierId = null; + ObjectHelper.TrySetProperty(modificationAuditedObject, x => x.LastModifierId, () => null); return; } @@ -120,7 +120,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency { if (multiTenantEntity.TenantId != CurrentUser.TenantId) { - modificationAuditedObject.LastModifierId = null; + ObjectHelper.TrySetProperty(modificationAuditedObject, x => x.LastModifierId, () => null); return; } } @@ -134,7 +134,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency } */ - modificationAuditedObject.LastModifierId = CurrentUser.Id; + ObjectHelper.TrySetProperty(modificationAuditedObject, x => x.LastModifierId, () => CurrentUser.Id); } protected virtual void SetDeletionTime(object targetObject) @@ -143,7 +143,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency { if (objectWithDeletionTime.DeletionTime == null) { - objectWithDeletionTime.DeletionTime = Clock.Now; + ObjectHelper.TrySetProperty(objectWithDeletionTime, x => x.DeletionTime, () => Clock.Now); } } } @@ -162,7 +162,7 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency if (!CurrentUser.Id.HasValue) { - deletionAuditedObject.DeleterId = null; + ObjectHelper.TrySetProperty(deletionAuditedObject, x => x.DeleterId, () => null); return; } @@ -170,11 +170,11 @@ public class AuditPropertySetter : IAuditPropertySetter, ITransientDependency { if (multiTenantEntity.TenantId != CurrentUser.TenantId) { - deletionAuditedObject.DeleterId = null; + ObjectHelper.TrySetProperty(deletionAuditedObject, x => x.DeleterId, () => null); return; } } - deletionAuditedObject.DeleterId = CurrentUser.Id; + ObjectHelper.TrySetProperty(deletionAuditedObject, x => x.DeleterId, () => CurrentUser.Id); } } diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/AbpRabbitMqBackgroundJobOptions.cs b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/AbpRabbitMqBackgroundJobOptions.cs index 83efe8ff31..540d848412 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/AbpRabbitMqBackgroundJobOptions.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/AbpRabbitMqBackgroundJobOptions.cs @@ -19,6 +19,8 @@ public class AbpRabbitMqBackgroundJobOptions /// Default value: "AbpBackgroundJobsDelayed." /// public string DefaultDelayedQueueNamePrefix { get; set; } + + public ushort? PrefetchCount { get; set; } public AbpRabbitMqBackgroundJobOptions() { diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs index 208d7ecd9f..9c3bf26e62 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueue.cs @@ -66,7 +66,8 @@ public class JobQueue : IJobQueue new JobQueueConfiguration( typeof(TArgs), AbpRabbitMqBackgroundJobOptions.DefaultQueueNamePrefix + JobConfiguration.JobName, - AbpRabbitMqBackgroundJobOptions.DefaultDelayedQueueNamePrefix + JobConfiguration.JobName + AbpRabbitMqBackgroundJobOptions.DefaultDelayedQueueNamePrefix + JobConfiguration.JobName, + prefetchCount: AbpRabbitMqBackgroundJobOptions.PrefetchCount ); } @@ -140,9 +141,14 @@ public class JobQueue : IJobQueue if (AbpBackgroundJobOptions.IsJobExecutionEnabled) { + if (QueueConfiguration.PrefetchCount.HasValue) + { + ChannelAccessor.Channel.BasicQos(0, QueueConfiguration.PrefetchCount.Value, false); + } + Consumer = new AsyncEventingBasicConsumer(ChannelAccessor.Channel); Consumer.Received += MessageReceived; - + //TODO: What BasicConsume returns? ChannelAccessor.Channel.BasicConsume( queue: QueueConfiguration.QueueName, diff --git a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueConfiguration.cs b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueConfiguration.cs index 792eb9815e..ee706ab864 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueConfiguration.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.RabbitMQ/Volo/Abp/BackgroundJobs/RabbitMQ/JobQueueConfiguration.cs @@ -20,12 +20,14 @@ public class JobQueueConfiguration : QueueDeclareConfiguration string connectionName = null, bool durable = true, bool exclusive = false, - bool autoDelete = false) + bool autoDelete = false, + ushort? prefetchCount = null) : base( queueName, durable, exclusive, - autoDelete) + autoDelete, + prefetchCount) { JobArgsType = jobArgsType; ConnectionName = connectionName; diff --git a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs index d52a40e5b5..68a59aab2d 100644 --- a/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs +++ b/framework/src/Volo.Abp.Caching.StackExchangeRedis/Volo/Abp/Caching/StackExchangeRedis/AbpRedisCache.cs @@ -15,18 +15,18 @@ namespace Volo.Abp.Caching.StackExchangeRedis; [DisableConventionalRegistration] public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems { - protected static readonly string SetScript; protected static readonly string AbsoluteExpirationKey; protected static readonly string SlidingExpirationKey; protected static readonly string DataKey; protected static readonly long NotPresent; - private static readonly FieldInfo RedisDatabaseField; - private static readonly MethodInfo ConnectMethod; - private static readonly MethodInfo ConnectAsyncMethod; - private static readonly MethodInfo MapMetadataMethod; - private static readonly MethodInfo GetAbsoluteExpirationMethod; - private static readonly MethodInfo GetExpirationInSecondsMethod; + private readonly static FieldInfo SetScriptField; + private readonly static FieldInfo RedisDatabaseField; + private readonly static MethodInfo ConnectMethod; + private readonly static MethodInfo ConnectAsyncMethod; + private readonly static MethodInfo MapMetadataMethod; + private readonly static MethodInfo GetAbsoluteExpirationMethod; + private readonly static MethodInfo GetExpirationInSecondsMethod; protected IDatabase RedisDatabase => GetRedisDatabase(); private IDatabase _redisDatabase; @@ -36,9 +36,11 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems static AbpRedisCache() { var type = typeof(RedisCache); - + RedisDatabaseField = type.GetField("_cache", BindingFlags.Instance | BindingFlags.NonPublic); + SetScriptField = type.GetField("_setScript", BindingFlags.Instance | BindingFlags.NonPublic); + ConnectMethod = type.GetMethod("Connect", BindingFlags.Instance | BindingFlags.NonPublic); ConnectAsyncMethod = type.GetMethod("ConnectAsync", BindingFlags.Instance | BindingFlags.NonPublic); @@ -51,9 +53,6 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems GetExpirationInSecondsMethod = type.GetMethod("GetExpirationInSeconds", BindingFlags.Static | BindingFlags.NonPublic); - SetScript = type.GetField("SetScript", BindingFlags.Static | BindingFlags.NonPublic)?.GetValue(null) - .ToString(); - AbsoluteExpirationKey = type.GetField("AbsoluteExpirationKey", BindingFlags.Static | BindingFlags.NonPublic) ?.GetValue(null).ToString(); @@ -83,14 +82,14 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems ConnectMethod.Invoke(this, Array.Empty()); } - protected virtual Task ConnectAsync(CancellationToken token = default) + protected virtual async Task ConnectAsync(CancellationToken token = default) { if (GetRedisDatabase() != null) { - return Task.CompletedTask; + return; } - return (Task)ConnectAsyncMethod.Invoke(this, new object[] { token }); + await (Task)ConnectAsyncMethod.Invoke(this, new object[] { token }); } public byte[][] GetMany( @@ -283,7 +282,7 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems for (var i = 0; i < itemArray.Length; i++) { - tasks[i] = RedisDatabase.ScriptEvaluateAsync(SetScript, new RedisKey[] { Instance + itemArray[i].Key }, + tasks[i] = RedisDatabase.ScriptEvaluateAsync(GetSetScript(), new RedisKey[] { Instance + itemArray[i].Key }, new RedisValue[] { absoluteExpiration?.Ticks ?? NotPresent, @@ -333,4 +332,9 @@ public class AbpRedisCache : RedisCache, ICacheSupportsMultipleItems return _redisDatabase; } + + private string GetSetScript() + { + return SetScriptField?.GetValue(this).ToString(); + } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliOptions.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliOptions.cs index 62a7e59d8e..3068016f33 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliOptions.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/AbpCliOptions.cs @@ -16,6 +16,8 @@ public class AbpCliOptions /// Default value: "CLI". /// public string ToolName { get; set; } = "CLI"; + + public bool AlwaysHideExternalCommandOutput { get; set; } public AbpCliOptions() { diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs index bf8e2e3028..7874fddb86 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/GenerateProxyCommand.cs @@ -1,4 +1,5 @@ using System.Text; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.Cli.ServiceProxying; using Volo.Abp.DependencyInjection; @@ -13,7 +14,7 @@ public class GenerateProxyCommand : ProxyCommandBase public GenerateProxyCommand( IOptions serviceProxyOptions, - IHybridServiceScopeFactory serviceScopeFactory) + IServiceScopeFactory serviceScopeFactory) : base(serviceProxyOptions, serviceScopeFactory) { } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs index 22311bb986..67c61b2a28 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/ProxyCommandBase.cs @@ -2,6 +2,7 @@ using System.IO; using System.Text; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; @@ -19,11 +20,11 @@ public abstract class ProxyCommandBase : IConsoleCommand, ITransientDependenc protected AbpCliServiceProxyOptions ServiceProxyOptions { get; } - protected IHybridServiceScopeFactory ServiceScopeFactory { get; } + protected IServiceScopeFactory ServiceScopeFactory { get; } public ProxyCommandBase( IOptions serviceProxyOptions, - IHybridServiceScopeFactory serviceScopeFactory) + IServiceScopeFactory serviceScopeFactory) { ServiceScopeFactory = serviceScopeFactory; ServiceProxyOptions = serviceProxyOptions.Value; diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/RemoveProxyCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/RemoveProxyCommand.cs index d89c19c892..3372584f1a 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/RemoveProxyCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/RemoveProxyCommand.cs @@ -1,4 +1,5 @@ using System.Text; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.Cli.ServiceProxying; using Volo.Abp.DependencyInjection; @@ -13,7 +14,7 @@ public class RemoveProxyCommand : ProxyCommandBase public RemoveProxyCommand( IOptions serviceProxyOptions, - IHybridServiceScopeFactory serviceScopeFactory) + IServiceScopeFactory serviceScopeFactory) : base(serviceProxyOptions, serviceScopeFactory) { } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs index c6325a4681..95eaa8136c 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs @@ -2,6 +2,7 @@ using System.Diagnostics; using System.IO; using System.Runtime.InteropServices; +using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; namespace Volo.Abp.Cli.Utils; @@ -10,6 +11,13 @@ public class CmdHelper : ICmdHelper, ITransientDependency { private const int SuccessfulExitCode = 0; + protected AbpCliOptions CliOptions { get; } + + public CmdHelper(IOptionsSnapshot cliOptions) + { + CliOptions = cliOptions.Value; + } + public void OpenWebPage(string url) { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) @@ -27,10 +35,15 @@ public class CmdHelper : ICmdHelper, ITransientDependency } } - public void Run(string file, string arguments) { var procStartInfo = new ProcessStartInfo(file, arguments); + + if (CliOptions.AlwaysHideExternalCommandOutput) + { + HideNewCommandWindow(procStartInfo); + } + Process.Start(procStartInfo)?.WaitForExit(); } @@ -46,6 +59,11 @@ public class CmdHelper : ICmdHelper, ITransientDependency GetArguments(command) ); + if (CliOptions.AlwaysHideExternalCommandOutput) + { + HideNewCommandWindow(procStartInfo); + } + if (!string.IsNullOrEmpty(workingDirectory)) { procStartInfo.WorkingDirectory = workingDirectory; @@ -66,10 +84,14 @@ public class CmdHelper : ICmdHelper, ITransientDependency GetArguments(command) ); + if (CliOptions.AlwaysHideExternalCommandOutput) + { + HideNewCommandWindow(procStartInfo); + } + if (!string.IsNullOrEmpty(workingDirectory)) { procStartInfo.WorkingDirectory = workingDirectory; - procStartInfo.CreateNoWindow = false; } return Process.Start(procStartInfo); @@ -98,6 +120,7 @@ public class CmdHelper : ICmdHelper, ITransientDependency Arguments = GetArguments(command), UseShellExecute = false, CreateNoWindow = true, + WindowStyle = ProcessWindowStyle.Hidden, RedirectStandardOutput = true, RedirectStandardError = true }; @@ -137,6 +160,11 @@ public class CmdHelper : ICmdHelper, ITransientDependency { procStartInfo.WorkingDirectory = workingDirectory; } + + if (CliOptions.AlwaysHideExternalCommandOutput) + { + HideNewCommandWindow(procStartInfo); + } Process.Start(procStartInfo); Environment.Exit(0); @@ -178,4 +206,10 @@ public class CmdHelper : ICmdHelper, ITransientDependency $"Framework: {System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription} | " + $"Process Architecture{System.Runtime.InteropServices.RuntimeInformation.ProcessArchitecture}"); } + + private void HideNewCommandWindow(ProcessStartInfo procStartInfo) + { + procStartInfo.WindowStyle = ProcessWindowStyle.Hidden; + procStartInfo.CreateNoWindow = true; + } } diff --git a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/AbpConfigurationBuilderOptions.cs b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/AbpConfigurationBuilderOptions.cs index f922f2b7da..f9f2ca23ad 100644 --- a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/AbpConfigurationBuilderOptions.cs +++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/AbpConfigurationBuilderOptions.cs @@ -21,6 +21,16 @@ public class AbpConfigurationBuilderOptions /// public string FileName { get; set; } = "appsettings"; + /// + /// Whether the file is optional, Default value: true. + /// + public bool Optional { get; set; } = true; + + /// + /// Whether the configuration should be reloaded if the file changes, Default value: true. + /// + public bool ReloadOnChange { get; set; } = true; + /// /// Environment name. Generally used "Development", "Staging" or "Production". /// diff --git a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs index a4dfa48db8..28ea8326ac 100644 --- a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs +++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs @@ -9,7 +9,7 @@ public static class ConfigurationHelper AbpConfigurationBuilderOptions options = null, Action builderAction = null) { - options = options ?? new AbpConfigurationBuilderOptions(); + options ??= new AbpConfigurationBuilderOptions(); if (options.BasePath.IsNullOrEmpty()) { @@ -18,11 +18,11 @@ public static class ConfigurationHelper var builder = new ConfigurationBuilder() .SetBasePath(options.BasePath) - .AddJsonFile(options.FileName + ".json", optional: true, reloadOnChange: true); + .AddJsonFile(options.FileName + ".json", optional: options.Optional, reloadOnChange: options.ReloadOnChange); if (!options.EnvironmentName.IsNullOrEmpty()) { - builder = builder.AddJsonFile($"{options.FileName}.{options.EnvironmentName}.json", optional: true, reloadOnChange: true); + builder = builder.AddJsonFile($"{options.FileName}.{options.EnvironmentName}.json", optional: options.Optional, reloadOnChange: options.ReloadOnChange); } if (options.EnvironmentName == "Development") diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/DefaultServiceScopeFactory.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/DefaultServiceScopeFactory.cs deleted file mode 100644 index befcf7951e..0000000000 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/DefaultServiceScopeFactory.cs +++ /dev/null @@ -1,22 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Volo.Abp.DependencyInjection; - -[ExposeServices( - typeof(IHybridServiceScopeFactory), - typeof(DefaultServiceScopeFactory) - )] -public class DefaultServiceScopeFactory : IHybridServiceScopeFactory, ITransientDependency -{ - protected IServiceScopeFactory Factory { get; } - - public DefaultServiceScopeFactory(IServiceScopeFactory factory) - { - Factory = factory; - } - - public IServiceScope CreateScope() - { - return Factory.CreateScope(); - } -} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IHybridServiceScopeFactory.cs b/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IHybridServiceScopeFactory.cs deleted file mode 100644 index 62c3707352..0000000000 --- a/framework/src/Volo.Abp.Core/Volo/Abp/DependencyInjection/IHybridServiceScopeFactory.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; - -namespace Volo.Abp.DependencyInjection; - -public interface IHybridServiceScopeFactory : IServiceScopeFactory -{ - -} diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/ISoftDelete.cs b/framework/src/Volo.Abp.Core/Volo/Abp/ISoftDelete.cs index 1d7ba66d81..704dd3ba11 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/ISoftDelete.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/ISoftDelete.cs @@ -9,7 +9,7 @@ public interface ISoftDelete { /// - /// Used to mark an Entity as 'Deleted'. + /// Used to mark an Entity as 'Deleted'. /// - bool IsDeleted { get; set; } + bool IsDeleted { get; } } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs index 8f9be2318f..20556f16ff 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs @@ -42,18 +42,6 @@ public class EntityChangeEventHelper : IEntityChangeEventHelper, ITransientDepen Logger = NullLogger.Instance; } - public virtual void PublishEntityCreatingEvent(object entity) - { - TriggerEventWithEntity( - LocalEventBus, -#pragma warning disable 618 - typeof(EntityCreatingEventData<>), -#pragma warning restore 618 - entity, - entity - ); - } - public virtual void PublishEntityCreatedEvent(object entity) { TriggerEventWithEntity( @@ -89,18 +77,6 @@ public class EntityChangeEventHelper : IEntityChangeEventHelper, ITransientDepen ); } - public virtual void PublishEntityUpdatingEvent(object entity) - { - TriggerEventWithEntity( - LocalEventBus, -#pragma warning disable 618 - typeof(EntityUpdatingEventData<>), -#pragma warning restore 618 - entity, - entity - ); - } - public virtual void PublishEntityUpdatedEvent(object entity) { TriggerEventWithEntity( @@ -125,18 +101,6 @@ public class EntityChangeEventHelper : IEntityChangeEventHelper, ITransientDepen } } - public virtual void PublishEntityDeletingEvent(object entity) - { - TriggerEventWithEntity( - LocalEventBus, -#pragma warning disable 618 - typeof(EntityDeletingEventData<>), -#pragma warning restore 618 - entity, - entity - ); - } - public virtual void PublishEntityDeletedEvent(object entity) { TriggerEventWithEntity( diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangingEventData.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangingEventData.cs deleted file mode 100644 index ae24163966..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangingEventData.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; - -namespace Volo.Abp.Domain.Entities.Events; - -/// -/// Used to pass data for an event when an entity () is being changed (creating, updating or deleting). -/// See , and classes. -/// -/// Entity type -[Serializable] -[Obsolete("This event is no longer needed and identical to EntityChangedEventData. Please use EntityChangedEventData instead.")] -public class EntityChangingEventData : EntityEventData -{ - /// - /// Constructor. - /// - /// Changing entity in this event - public EntityChangingEventData(TEntity entity) - : base(entity) - { - - } -} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityCreatingEventData.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityCreatingEventData.cs deleted file mode 100644 index 914c8ca7c7..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityCreatingEventData.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -namespace Volo.Abp.Domain.Entities.Events; - -/// -/// This type of event is used to notify just before creation of an Entity. -/// -/// Entity type -[Serializable] -[Obsolete("This event is no longer needed and identical to EntityCreatedEventData. Please use EntityCreatedEventData instead.")] -public class EntityCreatingEventData : EntityChangingEventData -{ - /// - /// Constructor. - /// - /// The entity which is being created - public EntityCreatingEventData(TEntity entity) - : base(entity) - { - - } -} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityDeletingEventData.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityDeletingEventData.cs deleted file mode 100644 index af0d1218f7..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityDeletingEventData.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -namespace Volo.Abp.Domain.Entities.Events; - -/// -/// This type of event is used to notify just before deletion of an Entity. -/// -/// Entity type -[Serializable] -[Obsolete("This event is no longer needed and identical to EntityDeletedEventData. Please use EntityDeletedEventData instead.")] -public class EntityDeletingEventData : EntityChangingEventData -{ - /// - /// Constructor. - /// - /// The entity which is being deleted - public EntityDeletingEventData(TEntity entity) - : base(entity) - { - - } -} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityUpdatingEventData.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityUpdatingEventData.cs deleted file mode 100644 index 703304fefb..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityUpdatingEventData.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -namespace Volo.Abp.Domain.Entities.Events; - -/// -/// This type of event is used to notify just before update of an Entity. -/// -/// Entity type -[Serializable] -[Obsolete("This event is no longer needed and identical to EntityUpdatedEventData. Please use EntityUpdatedEventData instead.")] -public class EntityUpdatingEventData : EntityChangingEventData -{ - /// - /// Constructor. - /// - /// The entity which is being updated - public EntityUpdatingEventData(TEntity entity) - : base(entity) - { - - } -} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/IEntityChangeEventHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/IEntityChangeEventHelper.cs index db580a0682..aa63c7e3c9 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/IEntityChangeEventHelper.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/IEntityChangeEventHelper.cs @@ -5,12 +5,9 @@ namespace Volo.Abp.Domain.Entities.Events; /// public interface IEntityChangeEventHelper { - void PublishEntityCreatingEvent(object entity); void PublishEntityCreatedEvent(object entity); - void PublishEntityUpdatingEvent(object entity); void PublishEntityUpdatedEvent(object entity); - void PublishEntityDeletingEvent(object entity); void PublishEntityDeletedEvent(object entity); } diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/NullEntityChangeEventHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/NullEntityChangeEventHelper.cs index d428f84d6f..4d849f2f27 100644 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/NullEntityChangeEventHelper.cs +++ b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/NullEntityChangeEventHelper.cs @@ -14,26 +14,14 @@ public class NullEntityChangeEventHelper : IEntityChangeEventHelper { } - public void PublishEntityCreatingEvent(object entity) - { - } - public void PublishEntityCreatedEvent(object entity) { } - public void PublishEntityUpdatingEvent(object entity) - { - } - public void PublishEntityUpdatedEvent(object entity) { } - public void PublishEntityDeletingEvent(object entity) - { - } - public void PublishEntityDeletedEvent(object entity) { } diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs index 1f55bce770..fd998510af 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/AbpDbContext.cs @@ -292,7 +292,6 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, { case EntityState.Added: ApplyAbpConceptsForAddedEntity(entry); - EntityChangeEventHelper.PublishEntityCreatingEvent(entry.Entity); EntityChangeEventHelper.PublishEntityCreatedEvent(entry.Entity); break; case EntityState.Modified: @@ -301,12 +300,10 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, { if (entry.Entity is ISoftDelete && entry.Entity.As().IsDeleted) { - EntityChangeEventHelper.PublishEntityDeletingEvent(entry.Entity); EntityChangeEventHelper.PublishEntityDeletedEvent(entry.Entity); } else { - EntityChangeEventHelper.PublishEntityUpdatingEvent(entry.Entity); EntityChangeEventHelper.PublishEntityUpdatedEvent(entry.Entity); } } @@ -314,7 +311,6 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, break; case EntityState.Deleted: ApplyAbpConceptsForDeletedEntity(entry); - EntityChangeEventHelper.PublishEntityDeletingEvent(entry.Entity); EntityChangeEventHelper.PublishEntityDeletedEvent(entry.Entity); break; } @@ -485,7 +481,7 @@ public abstract class AbpDbContext : DbContext, IAbpEfCoreDbContext, } entry.Reload(); - entry.Entity.As().IsDeleted = true; + ObjectHelper.TrySetProperty(entry.Entity.As(), x => x.IsDeleted, () => true); SetDeletionAuditProperties(entry); } diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs index addbc49171..bac9bdf0c9 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/AbpRabbitMqEventBusOptions.cs @@ -13,6 +13,8 @@ public class AbpRabbitMqEventBusOptions public string ExchangeName { get; set; } public string ExchangeType { get; set; } + + public ushort? PrefetchCount { get; set; } public string GetExchangeTypeOrDefault() { diff --git a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs index c9ec49bc7e..7e352ca530 100644 --- a/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs +++ b/framework/src/Volo.Abp.EventBus.RabbitMQ/Volo/Abp/EventBus/RabbitMq/RabbitMqDistributedEventBus.cs @@ -78,7 +78,8 @@ public class RabbitMqDistributedEventBus : DistributedEventBusBase, ISingletonDe AbpRabbitMqEventBusOptions.ClientName, durable: true, exclusive: false, - autoDelete: false + autoDelete: false, + prefetchCount: AbpRabbitMqEventBusOptions.PrefetchCount ), AbpRabbitMqEventBusOptions.ConnectionName ); diff --git a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs index 4180121a9f..61bb9745e2 100644 --- a/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs +++ b/framework/src/Volo.Abp.MemoryDb/Volo/Abp/Domain/Repositories/MemoryDb/MemoryDbRepository.cs @@ -159,19 +159,16 @@ public class MemoryDbRepository : RepositoryBase : RepositoryBase x.IsDeleted, () => true); (await GetCollectionAsync()).Update(entity); } else diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index 0485dd74bc..e128c8dee8 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -294,7 +294,7 @@ public class MongoDbRepository if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity)) && !IsHardDeleted(entity)) { - ((ISoftDelete)entity).IsDeleted = true; + ObjectHelper.TrySetProperty(((ISoftDelete)entity), x => x.IsDeleted, () => true); ApplyAbpConceptsForDeletedEntity(entity); ReplaceOneResult result; @@ -365,8 +365,7 @@ public class MongoDbRepository { if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity)) && !IsHardDeleted(entity)) { - ((ISoftDelete)entity).IsDeleted = true; - + ObjectHelper.TrySetProperty(((ISoftDelete)entity), x => x.IsDeleted, () => true); softDeletedEntities.Add(entity, SetNewConcurrencyStamp(entity)); } else @@ -598,13 +597,11 @@ public class MongoDbRepository private void TriggerEntityCreateEvents(TEntity entity) { - EntityChangeEventHelper.PublishEntityCreatingEvent(entity); EntityChangeEventHelper.PublishEntityCreatedEvent(entity); } protected virtual void TriggerEntityUpdateEvents(TEntity entity) { - EntityChangeEventHelper.PublishEntityUpdatingEvent(entity); EntityChangeEventHelper.PublishEntityUpdatedEvent(entity); } @@ -617,7 +614,6 @@ public class MongoDbRepository protected virtual void TriggerEntityDeleteEvents(TEntity entity) { - EntityChangeEventHelper.PublishEntityDeletingEvent(entity); EntityChangeEventHelper.PublishEntityDeletedEvent(entity); } diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/QueueDeclareConfiguration.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/QueueDeclareConfiguration.cs index 36f638668c..4b03c788c6 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/QueueDeclareConfiguration.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/QueueDeclareConfiguration.cs @@ -13,6 +13,8 @@ public class QueueDeclareConfiguration public bool Exclusive { get; set; } public bool AutoDelete { get; set; } + + public ushort? PrefetchCount { get; set; } public IDictionary Arguments { get; } @@ -20,13 +22,15 @@ public class QueueDeclareConfiguration [NotNull] string queueName, bool durable = true, bool exclusive = false, - bool autoDelete = false) + bool autoDelete = false, + ushort? prefetchCount = null) { QueueName = queueName; Durable = durable; Exclusive = exclusive; AutoDelete = autoDelete; Arguments = new Dictionary(); + PrefetchCount = prefetchCount; } public virtual QueueDeclareOk Declare(IModel channel) diff --git a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs index 8ce184295a..5c45b6aefc 100644 --- a/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs +++ b/framework/src/Volo.Abp.RabbitMQ/Volo/Abp/RabbitMQ/RabbitMqMessageConsumer.cs @@ -165,9 +165,14 @@ public class RabbitMqMessageConsumer : IRabbitMqMessageConsumer, ITransientDepen arguments: Queue.Arguments ); + if (Queue.PrefetchCount.HasValue) + { + Channel.BasicQos(0, Queue.PrefetchCount.Value, false); + } + var consumer = new AsyncEventingBasicConsumer(Channel); consumer.Received += HandleIncomingMessageAsync; - + Channel.BasicConsume( queue: Queue.QueueName, autoAck: false, diff --git a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs index d325708175..aa933c6e09 100644 --- a/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs +++ b/framework/src/Volo.Abp.UI.Navigation/Volo/Abp/Ui/Navigation/MenuManager.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Volo.Abp.Authorization.Permissions; using Volo.Abp.DependencyInjection; @@ -13,11 +14,11 @@ namespace Volo.Abp.UI.Navigation; public class MenuManager : IMenuManager, ITransientDependency { protected AbpNavigationOptions Options { get; } - protected IHybridServiceScopeFactory ServiceScopeFactory { get; } + protected IServiceScopeFactory ServiceScopeFactory { get; } protected ISimpleStateCheckerManager SimpleStateCheckerManager { get; } public MenuManager( IOptions options, - IHybridServiceScopeFactory serviceScopeFactory, + IServiceScopeFactory serviceScopeFactory, ISimpleStateCheckerManager simpleStateCheckerManager) { Options = options.Value; diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json index 7e667c1bbc..4717b1fe9b 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ar.json @@ -11,7 +11,7 @@ "Close": "أغلق", "Save": "حفظ", "SavingWithThreeDot": "حفظ...", - "Actions": "أجراءات", + "Actions": "الإجراءات", "Delete": "حذف", "SuccessfullyDeleted": "تم الحذف بنجاح", "Edit": "تعديل", @@ -50,4 +50,4 @@ "ItemWillBeDeletedMessage": "سوف يتم حذف هذا البند!", "ManageYourAccount": "إدارة حسابك" } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json index 94e56a66f3..7064064671 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/ro-RO.json @@ -31,14 +31,14 @@ "PagerPrevious": "Anterior", "PagerFirst": "Primul", "PagerLast": "Ultimul", - "PagerInfo": "Afişate _START_ to _END_ of _TOTAL_ înregistrări", - "PagerInfo{0}{1}{2}": "Afişate {0} to {1} of {2} înregistrări", - "PagerInfoEmpty": "Afişate 0 to 0 of 0 înregistrări", + "PagerInfo": "Afişate de la _START_ la _END_ din _TOTAL_ înregistrări", + "PagerInfo{0}{1}{2}": "Afişate de la {0} la {1} din {2} înregistrări", + "PagerInfoEmpty": "Afişate 0 din 0 înregistrări", "PagerInfoFiltered": "(filtrate de la _MAX_ înregistrări totale)", "NoDataAvailableInDatatable": "Nicio informaţie disponibilă", "Total": "total", "Selected": "selectate", - "PagerShowMenuEntries": "Arată _MENU_ intrări", + "PagerShowMenuEntries": "Afişează _MENU_ intrări", "DatatableActionDropdownDefaultText": "Acţiuni", "ChangePassword": "Schimbă parola", "PersonalInfo": "Profilul meu", @@ -50,4 +50,4 @@ "ItemWillBeDeletedMessage": "Acest articol va fi şters!", "ManageYourAccount": "Administraţi-vă contul" } -} \ No newline at end of file +} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.PlugIn/Volo.Abp.AspNetCore.Mvc.PlugIn.csproj b/framework/test/Volo.Abp.AspNetCore.Mvc.PlugIn/Volo.Abp.AspNetCore.Mvc.PlugIn.csproj index 91ca2b1312..d917afa97f 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.PlugIn/Volo.Abp.AspNetCore.Mvc.PlugIn.csproj +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.PlugIn/Volo.Abp.AspNetCore.Mvc.PlugIn.csproj @@ -4,6 +4,7 @@ net6.0 Library true + true diff --git a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/HybridServiceScopeFactory_Tests.cs b/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/HybridServiceScopeFactory_Tests.cs deleted file mode 100644 index 6a3f059ba8..0000000000 --- a/framework/test/Volo.Abp.Core.Tests/Volo/Abp/DependencyInjection/HybridServiceScopeFactory_Tests.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; -using System.Threading.Tasks; -using Microsoft.Extensions.DependencyInjection; -using Shouldly; -using Volo.Abp.Modularity; -using Xunit; - -namespace Volo.Abp.DependencyInjection; - -public class HybridServiceScopeFactory_Tests -{ - [Fact] - public async Task Should_Use_Default_ServiceScopeFactory_By_Default_Async() - { - using (var application = await AbpApplicationFactory.CreateAsync()) - { - application.Services.AddType(typeof(MyServiceAsync)); - - await application.InitializeAsync(); - - var serviceScopeFactory = application.ServiceProvider.GetRequiredService(); - - using (var scope = serviceScopeFactory.CreateScope()) - { - scope.ServiceProvider.GetRequiredService(); - } - - MyServiceAsync.DisposeCount.ShouldBe(1); - } - } - - [Fact] - public void Should_Use_Default_ServiceScopeFactory_By_Default() - { - using (var application = AbpApplicationFactory.Create()) - { - application.Services.AddType(typeof(MyService)); - - application.Initialize(); - - var serviceScopeFactory = application.ServiceProvider.GetRequiredService(); - - using (var scope = serviceScopeFactory.CreateScope()) - { - scope.ServiceProvider.GetRequiredService(); - } - - MyService.DisposeCount.ShouldBe(1); - } - } - - private class MyServiceAsync : ITransientDependency, IDisposable - { - public static int DisposeCount { get; private set; } - - public void Dispose() - { - ++DisposeCount; - } - } - - private class MyService : ITransientDependency, IDisposable - { - public static int DisposeCount { get; private set; } - - public void Dispose() - { - ++DisposeCount; - } - } -} diff --git a/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj b/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj index 0664ad2b7b..5a6382eb80 100644 --- a/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj +++ b/framework/test/Volo.Abp.TestApp/Volo.Abp.TestApp.csproj @@ -5,6 +5,7 @@ net6.0 + true diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs index a94c722faf..12b3fa01c0 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs @@ -32,37 +32,18 @@ public abstract class EntityChangeEvents_Tests : TestAppTestBase { var personName = Guid.NewGuid().ToString("N"); - var creatingEventTriggered = false; var createdEventTriggered = false; var createdEtoTriggered = false; using (var uow = GetRequiredService().Begin()) { -#pragma warning disable 618 - LocalEventBus.Subscribe>(data => -#pragma warning restore 618 - { - creatingEventTriggered.ShouldBeFalse(); - createdEventTriggered.ShouldBeFalse(); - - creatingEventTriggered = true; - - data.Entity.Name.ShouldBe(personName); - - /* Want to change age from 15 to 18 */ - data.Entity.Age.ShouldBe(15); - data.Entity.Age = 18; - return Task.CompletedTask; - }); - LocalEventBus.Subscribe>(data => { - creatingEventTriggered.ShouldBeTrue(); createdEventTriggered.ShouldBeFalse(); createdEventTriggered = true; - data.Entity.Age.ShouldBe(18); + data.Entity.Age.ShouldBe(15); data.Entity.Name.ShouldBe(personName); return Task.CompletedTask; @@ -81,8 +62,7 @@ public abstract class EntityChangeEvents_Tests : TestAppTestBase await uow.CompleteAsync(); } - - creatingEventTriggered.ShouldBeTrue(); + createdEventTriggered.ShouldBeTrue(); createdEtoTriggered.ShouldBeTrue(); } diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json index c753009bb0..149ad71d95 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/ro-RO.json @@ -27,7 +27,7 @@ "DisplayName:UserName": "Nume de utilizator", "DisplayName:Email": "Email", "DisplayName:Name": "Nume", - "DisplayName:Surname": "Surname", + "DisplayName:Surname": "Nume de familie", "DisplayName:Password": "Parolă", "DisplayName:EmailAddress": "Adresa de email", "DisplayName:PhoneNumber": "Număr de telefon", diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDbProperties.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/AbpBackgroundJobsDbProperties.cs similarity index 86% rename from modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDbProperties.cs rename to modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/AbpBackgroundJobsDbProperties.cs index 401aa379a7..85e44815a2 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/BackgroundJobsDbProperties.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.Domain/Volo/Abp/BackgroundJobs/AbpBackgroundJobsDbProperties.cs @@ -2,7 +2,7 @@ namespace Volo.Abp.BackgroundJobs; -public static class BackgroundJobsDbProperties +public static class AbpBackgroundJobsDbProperties { public static string DbTablePrefix { get; set; } = AbpCommonDbProperties.DbTablePrefix; diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/BackgroundJobsDbContext.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/BackgroundJobsDbContext.cs index fb01736cfa..0beef8d3ea 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/BackgroundJobsDbContext.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/BackgroundJobsDbContext.cs @@ -6,7 +6,7 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.BackgroundJobs.EntityFrameworkCore; [IgnoreMultiTenancy] -[ConnectionStringName(BackgroundJobsDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpBackgroundJobsDbProperties.ConnectionStringName)] public class BackgroundJobsDbContext : AbpDbContext, IBackgroundJobsDbContext { public DbSet BackgroundJobs { get; set; } diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/BackgroundJobsDbContextModelCreatingExtensions.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/BackgroundJobsDbContextModelCreatingExtensions.cs index bf9f8d5ea3..849ac3c5d5 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/BackgroundJobsDbContextModelCreatingExtensions.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/BackgroundJobsDbContextModelCreatingExtensions.cs @@ -18,7 +18,7 @@ public static class BackgroundJobsDbContextModelCreatingExtensions builder.Entity(b => { - b.ToTable(BackgroundJobsDbProperties.DbTablePrefix + "BackgroundJobs", BackgroundJobsDbProperties.DbSchema); + b.ToTable(AbpBackgroundJobsDbProperties.DbTablePrefix + "BackgroundJobs", AbpBackgroundJobsDbProperties.DbSchema); b.ConfigureByConvention(); diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/IBackgroundJobsDbContext.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/IBackgroundJobsDbContext.cs index b091ac126a..a6276e37f8 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/IBackgroundJobsDbContext.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.EntityFrameworkCore/Volo/Abp/BackgroundJobs/EntityFrameworkCore/IBackgroundJobsDbContext.cs @@ -6,7 +6,7 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.BackgroundJobs.EntityFrameworkCore; [IgnoreMultiTenancy] -[ConnectionStringName(BackgroundJobsDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpBackgroundJobsDbProperties.ConnectionStringName)] public interface IBackgroundJobsDbContext : IEfCoreDbContext { DbSet BackgroundJobs { get; } diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/BackgroundJobsMongoDbContext.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/BackgroundJobsMongoDbContext.cs index 42b8a44f0d..8a94e26650 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/BackgroundJobsMongoDbContext.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/BackgroundJobsMongoDbContext.cs @@ -6,7 +6,7 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.BackgroundJobs.MongoDB; [IgnoreMultiTenancy] -[ConnectionStringName(BackgroundJobsDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpBackgroundJobsDbProperties.ConnectionStringName)] public class BackgroundJobsMongoDbContext : AbpMongoDbContext, IBackgroundJobsMongoDbContext { public IMongoCollection BackgroundJobs { get; set; } diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/BackgroundJobsMongoDbContextExtensions.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/BackgroundJobsMongoDbContextExtensions.cs index b687bf8f90..a4f255c724 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/BackgroundJobsMongoDbContextExtensions.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/BackgroundJobsMongoDbContextExtensions.cs @@ -11,7 +11,7 @@ public static class BackgroundJobsMongoDbContextExtensions builder.Entity(b => { - b.CollectionName = BackgroundJobsDbProperties.DbTablePrefix + "BackgroundJobs"; + b.CollectionName = AbpBackgroundJobsDbProperties.DbTablePrefix + "BackgroundJobs"; }); } } diff --git a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/IBackgroundJobsMongoDbContext.cs b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/IBackgroundJobsMongoDbContext.cs index 4f93e1cbe5..d8a94b740d 100644 --- a/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/IBackgroundJobsMongoDbContext.cs +++ b/modules/background-jobs/src/Volo.Abp.BackgroundJobs.MongoDB/Volo/Abp/BackgroundJobs/MongoDB/IBackgroundJobsMongoDbContext.cs @@ -6,7 +6,7 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.BackgroundJobs.MongoDB; [IgnoreMultiTenancy] -[ConnectionStringName(BackgroundJobsDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpBackgroundJobsDbProperties.ConnectionStringName)] public interface IBackgroundJobsMongoDbContext : IAbpMongoDbContext { IMongoCollection BackgroundJobs { get; } diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/BlobStoringDatabaseDbProperties.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/AbpBlobStoringDatabaseDbProperties.cs similarity index 85% rename from modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/BlobStoringDatabaseDbProperties.cs rename to modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/AbpBlobStoringDatabaseDbProperties.cs index a9689eb9fd..19985351de 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/BlobStoringDatabaseDbProperties.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.Domain/Volo/Abp/BlobStoring/Database/AbpBlobStoringDatabaseDbProperties.cs @@ -2,7 +2,7 @@ namespace Volo.Abp.BlobStoring.Database; -public static class BlobStoringDatabaseDbProperties +public static class AbpBlobStoringDatabaseDbProperties { public static string DbTablePrefix { get; set; } = AbpCommonDbProperties.DbTablePrefix; diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDbContext.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDbContext.cs index b20f5190c4..f3e7661366 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDbContext.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDbContext.cs @@ -4,7 +4,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore; -[ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpBlobStoringDatabaseDbProperties.ConnectionStringName)] public class BlobStoringDbContext : AbpDbContext, IBlobStoringDbContext { public DbSet BlobContainers { get; set; } diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDbContextModelCreatingExtensions.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDbContextModelCreatingExtensions.cs index e4fad62e37..6be009f3ec 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDbContextModelCreatingExtensions.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/BlobStoringDbContextModelCreatingExtensions.cs @@ -12,7 +12,7 @@ public static class BlobStoringDbContextModelCreatingExtensions builder.Entity(b => { - b.ToTable(BlobStoringDatabaseDbProperties.DbTablePrefix + "BlobContainers", BlobStoringDatabaseDbProperties.DbSchema); + b.ToTable(AbpBlobStoringDatabaseDbProperties.DbTablePrefix + "BlobContainers", AbpBlobStoringDatabaseDbProperties.DbSchema); b.ConfigureByConvention(); @@ -27,7 +27,7 @@ public static class BlobStoringDbContextModelCreatingExtensions builder.Entity(b => { - b.ToTable(BlobStoringDatabaseDbProperties.DbTablePrefix + "Blobs", BlobStoringDatabaseDbProperties.DbSchema); + b.ToTable(AbpBlobStoringDatabaseDbProperties.DbTablePrefix + "Blobs", AbpBlobStoringDatabaseDbProperties.DbSchema); b.ConfigureByConvention(); diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/IBlobStoringDbContext.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/IBlobStoringDbContext.cs index b36c0753d3..b139d8473b 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/IBlobStoringDbContext.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.EntityFrameworkCore/Volo/Abp/BlobStoring/Database/EntityFrameworkCore/IBlobStoringDbContext.cs @@ -4,7 +4,7 @@ using Volo.Abp.EntityFrameworkCore; namespace Volo.Abp.BlobStoring.Database.EntityFrameworkCore; -[ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpBlobStoringDatabaseDbProperties.ConnectionStringName)] public interface IBlobStoringDbContext : IEfCoreDbContext { DbSet BlobContainers { get; } diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringMongoDbContext.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringMongoDbContext.cs index d0be5f4973..108804fbb9 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringMongoDbContext.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringMongoDbContext.cs @@ -4,7 +4,7 @@ using Volo.Abp.MongoDB; namespace Volo.Abp.BlobStoring.Database.MongoDB; -[ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpBlobStoringDatabaseDbProperties.ConnectionStringName)] public class BlobStoringMongoDbContext : AbpMongoDbContext, IBlobStoringMongoDbContext { public IMongoCollection BlobContainers => Collection(); diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringMongoDbContextExtensions.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringMongoDbContextExtensions.cs index 7943215534..28c3bdde7f 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringMongoDbContextExtensions.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/BlobStoringMongoDbContextExtensions.cs @@ -11,12 +11,12 @@ public static class BlobStoringMongoDbContextExtensions builder.Entity(b => { - b.CollectionName = BlobStoringDatabaseDbProperties.DbTablePrefix + "BlobContainers"; + b.CollectionName = AbpBlobStoringDatabaseDbProperties.DbTablePrefix + "BlobContainers"; }); builder.Entity(b => { - b.CollectionName = BlobStoringDatabaseDbProperties.DbTablePrefix + "Blobs"; + b.CollectionName = AbpBlobStoringDatabaseDbProperties.DbTablePrefix + "Blobs"; }); } } diff --git a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/IBlobStoringMongoDbContext.cs b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/IBlobStoringMongoDbContext.cs index 1fcf61b146..803ed5171d 100644 --- a/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/IBlobStoringMongoDbContext.cs +++ b/modules/blob-storing-database/src/Volo.Abp.BlobStoring.Database.MongoDB/Volo/Abp/BlobStoring/Database/MongoDB/IBlobStoringMongoDbContext.cs @@ -4,7 +4,7 @@ using Volo.Abp.MongoDB; namespace Volo.Abp.BlobStoring.Database.MongoDB; -[ConnectionStringName(BlobStoringDatabaseDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpBlobStoringDatabaseDbProperties.ConnectionStringName)] public interface IBlobStoringMongoDbContext : IAbpMongoDbContext { IMongoCollection BlobContainers { get; } diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/BloggingDbProperties.cs b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/AbpBloggingDbProperties.cs similarity index 90% rename from modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/BloggingDbProperties.cs rename to modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/AbpBloggingDbProperties.cs index 6f57d5f404..464ea2c348 100644 --- a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/BloggingDbProperties.cs +++ b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/AbpBloggingDbProperties.cs @@ -1,6 +1,6 @@ namespace Volo.Blogging { - public static class BloggingDbProperties + public static class AbpBloggingDbProperties { /// /// Default value: "Blg". diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContext.cs b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContext.cs index 85c34aa996..9ccbe3aa3b 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContext.cs +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContext.cs @@ -11,7 +11,7 @@ using Volo.Blogging.Users; namespace Volo.Blogging.EntityFrameworkCore { [IgnoreMultiTenancy] - [ConnectionStringName(BloggingDbProperties.ConnectionStringName)] + [ConnectionStringName(AbpBloggingDbProperties.ConnectionStringName)] public class BloggingDbContext : AbpDbContext, IBloggingDbContext { public DbSet Users { get; set; } diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContextModelBuilderExtensions.cs b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContextModelBuilderExtensions.cs index 3386da25a5..abf96ebcef 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContextModelBuilderExtensions.cs +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContextModelBuilderExtensions.cs @@ -25,7 +25,7 @@ namespace Volo.Blogging.EntityFrameworkCore builder.Entity(b => { - b.ToTable(BloggingDbProperties.DbTablePrefix + "Users", BloggingDbProperties.DbSchema); + b.ToTable(AbpBloggingDbProperties.DbTablePrefix + "Users", AbpBloggingDbProperties.DbSchema); b.ConfigureByConvention(); b.ConfigureAbpUser(); @@ -35,7 +35,7 @@ namespace Volo.Blogging.EntityFrameworkCore builder.Entity(b => { - b.ToTable(BloggingDbProperties.DbTablePrefix + "Blogs", BloggingDbProperties.DbSchema); + b.ToTable(AbpBloggingDbProperties.DbTablePrefix + "Blogs", AbpBloggingDbProperties.DbSchema); b.ConfigureByConvention(); @@ -48,7 +48,7 @@ namespace Volo.Blogging.EntityFrameworkCore builder.Entity(b => { - b.ToTable(BloggingDbProperties.DbTablePrefix + "Posts", BloggingDbProperties.DbSchema); + b.ToTable(AbpBloggingDbProperties.DbTablePrefix + "Posts", AbpBloggingDbProperties.DbSchema); b.ConfigureByConvention(); @@ -68,7 +68,7 @@ namespace Volo.Blogging.EntityFrameworkCore builder.Entity(b => { - b.ToTable(BloggingDbProperties.DbTablePrefix + "Comments", BloggingDbProperties.DbSchema); + b.ToTable(AbpBloggingDbProperties.DbTablePrefix + "Comments", AbpBloggingDbProperties.DbSchema); b.ConfigureByConvention(); @@ -84,7 +84,7 @@ namespace Volo.Blogging.EntityFrameworkCore builder.Entity(b => { - b.ToTable(BloggingDbProperties.DbTablePrefix + "Tags", BloggingDbProperties.DbSchema); + b.ToTable(AbpBloggingDbProperties.DbTablePrefix + "Tags", AbpBloggingDbProperties.DbSchema); b.ConfigureByConvention(); @@ -99,7 +99,7 @@ namespace Volo.Blogging.EntityFrameworkCore builder.Entity(b => { - b.ToTable(BloggingDbProperties.DbTablePrefix + "PostTags", BloggingDbProperties.DbSchema); + b.ToTable(AbpBloggingDbProperties.DbTablePrefix + "PostTags", AbpBloggingDbProperties.DbSchema); b.ConfigureByConvention(); diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/IBloggingDbContext.cs b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/IBloggingDbContext.cs index 4eb8f35c03..ce63597029 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/IBloggingDbContext.cs +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/IBloggingDbContext.cs @@ -11,7 +11,7 @@ using Volo.Blogging.Users; namespace Volo.Blogging.EntityFrameworkCore { [IgnoreMultiTenancy] - [ConnectionStringName(BloggingDbProperties.ConnectionStringName)] + [ConnectionStringName(AbpBloggingDbProperties.ConnectionStringName)] public interface IBloggingDbContext : IEfCoreDbContext { DbSet Users { get; } diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/MongoDB/BloggingMongoDbContext.cs b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/MongoDB/BloggingMongoDbContext.cs index 1f20ff1744..d782f0fb1b 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/MongoDB/BloggingMongoDbContext.cs +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/MongoDB/BloggingMongoDbContext.cs @@ -10,7 +10,7 @@ using Volo.Blogging.Users; namespace Volo.Blogging.MongoDB { [IgnoreMultiTenancy] - [ConnectionStringName(BloggingDbProperties.ConnectionStringName)] + [ConnectionStringName(AbpBloggingDbProperties.ConnectionStringName)] public class BloggingMongoDbContext : AbpMongoDbContext, IBloggingMongoDbContext { public IMongoCollection Users => Collection(); diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/MongoDB/BloggingMongoDbContextExtensions.cs b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/MongoDB/BloggingMongoDbContextExtensions.cs index b04f0a74fc..1083169761 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/MongoDB/BloggingMongoDbContextExtensions.cs +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/MongoDB/BloggingMongoDbContextExtensions.cs @@ -16,27 +16,27 @@ namespace Volo.Blogging.MongoDB builder.Entity(b => { - b.CollectionName = BloggingDbProperties.DbTablePrefix + "Users"; + b.CollectionName = AbpBloggingDbProperties.DbTablePrefix + "Users"; }); builder.Entity(b => { - b.CollectionName = BloggingDbProperties.DbTablePrefix + "Blogs"; + b.CollectionName = AbpBloggingDbProperties.DbTablePrefix + "Blogs"; }); builder.Entity(b => { - b.CollectionName = BloggingDbProperties.DbTablePrefix + "Posts"; + b.CollectionName = AbpBloggingDbProperties.DbTablePrefix + "Posts"; }); builder.Entity(b => { - b.CollectionName = BloggingDbProperties.DbTablePrefix + "Tags"; + b.CollectionName = AbpBloggingDbProperties.DbTablePrefix + "Tags"; }); builder.Entity(b => { - b.CollectionName = BloggingDbProperties.DbTablePrefix + "Comments"; + b.CollectionName = AbpBloggingDbProperties.DbTablePrefix + "Comments"; }); } } diff --git a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/MongoDB/IBloggingMongoDbContext.cs b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/MongoDB/IBloggingMongoDbContext.cs index 1dbf5eee92..d3c898a14d 100644 --- a/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/MongoDB/IBloggingMongoDbContext.cs +++ b/modules/blogging/src/Volo.Blogging.MongoDB/Volo/Blogging/MongoDB/IBloggingMongoDbContext.cs @@ -10,7 +10,7 @@ using Volo.Blogging.Users; namespace Volo.Blogging.MongoDB { [IgnoreMultiTenancy] - [ConnectionStringName(BloggingDbProperties.ConnectionStringName)] + [ConnectionStringName(AbpBloggingDbProperties.ConnectionStringName)] public interface IBloggingMongoDbContext : IAbpMongoDbContext { IMongoCollection Users { get; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/EntityTagSetDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/EntityTagSetDto.cs index 245526cfc2..11466463f8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/EntityTagSetDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Tags/EntityTagSetDto.cs @@ -1,15 +1,40 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.ComponentModel.DataAnnotations; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; +using Volo.Abp.Validation.Localization; +using Volo.CmsKit.Localization; +using Volo.CmsKit.Tags; namespace Volo.CmsKit.Admin.Tags; [Serializable] -public class EntityTagSetDto +public class EntityTagSetDto : IValidatableObject { public string EntityId { get; set; } + public string EntityType { get; set; } + + [Required] public List Tags { get; set; } + + public IEnumerable Validate(ValidationContext validationContext) + { + var l = validationContext.GetRequiredService>(); + + foreach (var tag in Tags) + { + if (tag.Length > TagConsts.MaxNameLength) + { + yield return new ValidationResult( + l[ + "ThisFieldMustBeAStringWithAMaximumLengthOf{0}", + TagConsts.MaxNameLength + ], + new[] { nameof(Tags) } + ); + } + } + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs index 7cd17b7696..5736048076 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogAdminAppService.cs @@ -1,16 +1,19 @@ -using Microsoft.AspNetCore.Authorization; -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; using Volo.Abp.Data; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Blogs; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs; +[RequiresFeature(CmsKitFeatures.BlogEnable)] [RequiresGlobalFeature(typeof(BlogsFeature))] [Authorize(CmsKitAdminPermissions.Blogs.Default)] public class BlogAdminAppService : CmsKitAdminAppServiceBase, IBlogAdminAppService diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminAppService.cs index 823f569bed..774f28634d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminAppService.cs @@ -1,15 +1,18 @@ -using Microsoft.AspNetCore.Authorization; -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Blogs; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs; +[RequiresFeature(CmsKitFeatures.BlogEnable)] [RequiresGlobalFeature(typeof(BlogsFeature))] [Authorize(CmsKitAdminPermissions.Blogs.Features)] public class BlogFeatureAdminAppService : CmsKitAdminAppServiceBase, IBlogFeatureAdminAppService diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs index 9d8fcfd917..297e70344f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogPostAdminAppService.cs @@ -1,19 +1,22 @@ -using Microsoft.AspNetCore.Authorization; -using System; +using System; using System.Linq; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; using Volo.Abp.Data; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; using Volo.Abp.Users; using Volo.CmsKit.Admin.MediaDescriptors; using Volo.CmsKit.Blogs; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; using Volo.CmsKit.Users; namespace Volo.CmsKit.Admin.Blogs; +[RequiresFeature(CmsKitFeatures.BlogEnable)] [RequiresGlobalFeature(typeof(BlogsFeature))] [Authorize(CmsKitAdminPermissions.BlogPosts.Default)] public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppService @@ -66,18 +69,18 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe public virtual async Task UpdateAsync(Guid id, UpdateBlogPostDto input) { var blogPost = await BlogPostRepository.GetAsync(id); - + blogPost.SetTitle(input.Title); blogPost.SetShortDescription(input.ShortDescription); blogPost.SetContent(input.Content); blogPost.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp); - + if (blogPost.CoverImageMediaId != null && input.CoverImageMediaId == null) { await MediaDescriptorAdminAppService.DeleteAsync(blogPost.CoverImageMediaId.Value); } blogPost.CoverImageMediaId = input.CoverImageMediaId; - + if (blogPost.Slug != input.Slug) { await BlogPostManager.SetSlugUrlAsync(blogPost, input.Slug); @@ -146,12 +149,12 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe { var blogPost = await CreateAsync(input); await CurrentUnitOfWork.SaveChangesAsync(); - + await PublishAsync(blogPost.Id); blogPost.Status = BlogPostStatus.Published; return blogPost; } - + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] public virtual async Task SendToReviewAsync(Guid id) { @@ -159,13 +162,13 @@ public class BlogPostAdminAppService : CmsKitAppServiceBase, IBlogPostAdminAppSe blogPost.SetWaitingForReview(); await BlogPostRepository.UpdateAsync(blogPost); } - + [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] public virtual async Task CreateAndSendToReviewAsync(CreateBlogPostDto input) { var blogPost = await CreateAsync(input); await CurrentUnitOfWork.SaveChangesAsync(); - + await SendToReviewAsync(blogPost.Id); blogPost.Status = BlogPostStatus.WaitingForReview; return blogPost; diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Comments/CommentAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Comments/CommentAdminAppService.cs index 5295557860..973a74b58e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Comments/CommentAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Comments/CommentAdminAppService.cs @@ -3,14 +3,17 @@ using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Comments; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; using Volo.CmsKit.Users; namespace Volo.CmsKit.Admin.Comments; +[RequiresFeature(CmsKitFeatures.CommentEnable)] [RequiresGlobalFeature(typeof(CommentsFeature))] [Authorize(CmsKitAdminPermissions.Comments.Default)] public class CommentAdminAppService : CmsKitAdminAppServiceBase, ICommentAdminAppService diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminAppService.cs index a78a21de41..c5b63db6c3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminAppService.cs @@ -1,13 +1,16 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Services; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.GlobalResources; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.GlobalResources; +[RequiresFeature(CmsKitFeatures.GlobalResourceEnable)] [RequiresGlobalFeature(typeof(GlobalResourcesFeature))] [Authorize(CmsKitAdminPermissions.GlobalResources.Default)] public class GlobalResourceAdminAppService : ApplicationService, IGlobalResourceAdminAppService @@ -18,10 +21,11 @@ public class GlobalResourceAdminAppService : ApplicationService, IGlobalResource { GlobalResourceManager = globalResourceManager; } - + public async Task GetAsync() { - return new GlobalResourcesDto { + return new GlobalResourcesDto + { StyleContent = (await GlobalResourceManager.GetGlobalStyleAsync()).Value, ScriptContent = (await GlobalResourceManager.GetGlobalScriptAsync()).Value }; diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs index cc785adac0..af347bcc55 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminAppService.cs @@ -1,12 +1,15 @@ using System; using System.Threading.Tasks; using Volo.Abp.BlobStoring; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.MediaDescriptors; namespace Volo.CmsKit.Admin.MediaDescriptors; +[RequiresFeature(CmsKitFeatures.MediaEnable)] [RequiresGlobalFeature(typeof(MediaFeature))] public class MediaDescriptorAdminAppService : CmsKitAdminAppServiceBase, IMediaDescriptorAdminAppService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs index 8ef6ce0346..3ba2a4b5b9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs @@ -1,12 +1,12 @@ -using Microsoft.AspNetCore.Authorization; -using System; +using System; using System.Collections.Generic; -using System.Linq; -using System.Text; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; using Volo.Abp.Data; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Menus; using Volo.CmsKit.Pages; @@ -14,6 +14,7 @@ using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Menus; +[RequiresFeature(CmsKitFeatures.MenuEnable)] [RequiresGlobalFeature(typeof(MenuFeature))] [Authorize(CmsKitAdminPermissions.Menus.Default)] public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdminAppService diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs index 68f0690555..647568e561 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Pages/PageAdminAppService.cs @@ -1,18 +1,19 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; -using AutoMapper; using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; using Volo.Abp.Data; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; -using Volo.CmsKit.Admin.Menus; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Pages; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Pages; +[RequiresFeature(CmsKitFeatures.PageEnable)] [RequiresGlobalFeature(typeof(PagesFeature))] [Authorize(CmsKitAdminPermissions.Pages.Default)] public class PageAdminAppService : CmsKitAdminAppServiceBase, IPageAdminAppService diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs index 8d106b70e0..3cdc4dc093 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/EntityTagAdminAppService.cs @@ -1,10 +1,13 @@ using System.Threading.Tasks; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Tags; namespace Volo.CmsKit.Admin.Tags; +[RequiresFeature(CmsKitFeatures.TagEnable)] [RequiresGlobalFeature(typeof(TagsFeature))] public class EntityTagAdminAppService : CmsKitAdminAppServiceBase, IEntityTagAdminAppService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs index f6de1ac5b9..46324937cc 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Tags/TagAdminAppService.cs @@ -1,18 +1,21 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.Extensions.Localization; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Localization; using Volo.Abp.Application.Dtos; using Volo.Abp.Data; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; using Volo.CmsKit.Tags; namespace Volo.CmsKit.Admin.Tags; +[RequiresFeature(CmsKitFeatures.TagEnable)] [Authorize(CmsKitAdminPermissions.Tags.Default)] [RequiresGlobalFeature(typeof(TagsFeature))] public class TagAdminAppService : CmsKitAppServiceBase, ITagAdminAppService diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs index 094c1b1b5a..e7d59ddbcd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogAdminController.cs @@ -1,15 +1,18 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using System; +using System; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs; +[RequiresFeature(CmsKitFeatures.BlogEnable)] [RequiresGlobalFeature(typeof(BlogsFeature))] [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitAdminRemoteServiceConsts.ModuleName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminController.cs index e3cc3c5e73..93bdced888 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminController.cs @@ -1,16 +1,19 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; using Volo.Abp; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Blogs; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs; +[RequiresFeature(CmsKitFeatures.BlogEnable)] [RequiresGlobalFeature(typeof(BlogsFeature))] [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitAdminRemoteServiceConsts.ModuleName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs index 563d90c254..923f9a4036 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Blogs/BlogPostAdminController.cs @@ -1,15 +1,18 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using System; +using System; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Blogs; +[RequiresFeature(CmsKitFeatures.BlogEnable)] [RequiresGlobalFeature(typeof(BlogsFeature))] [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitAdminRemoteServiceConsts.ModuleName)] @@ -61,7 +64,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS { return BlogPostAdminAppService.UpdateAsync(id, input); } - + [HttpPost] [Route("{id}/publish")] [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] @@ -69,7 +72,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS { return BlogPostAdminAppService.PublishAsync(id); } - + [HttpPost] [Route("{id}/draft")] [Authorize(CmsKitAdminPermissions.BlogPosts.Update)] @@ -86,7 +89,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS { return BlogPostAdminAppService.CreateAndPublishAsync(input); } - + [HttpPost] [Route("{id}/send-to-review")] [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] @@ -94,7 +97,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS { return BlogPostAdminAppService.SendToReviewAsync(id); } - + [HttpPost] [Route("create-and-send-to-review")] [Authorize(CmsKitAdminPermissions.BlogPosts.Create)] @@ -102,7 +105,7 @@ public class BlogPostAdminController : CmsKitAdminController, IBlogPostAdminAppS { return BlogPostAdminAppService.CreateAndSendToReviewAsync(input); } - + [HttpGet] [Route("has-blogpost-waiting-for-review")] [Authorize(CmsKitAdminPermissions.BlogPosts.Publish)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Comments/CommentAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Comments/CommentAdminController.cs index 6082ad3794..f4813f61ad 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Comments/CommentAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Comments/CommentAdminController.cs @@ -4,12 +4,15 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Comments; +[RequiresFeature(CmsKitFeatures.CommentEnable)] [Authorize(CmsKitAdminPermissions.Comments.Default)] [RequiresGlobalFeature(typeof(CommentsFeature))] [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminController.cs index 3bfe51a600..b1ae9b3f2e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/GlobalResources/GlobalResourceAdminController.cs @@ -2,18 +2,21 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Volo.Abp; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.GlobalResources; +[RequiresFeature(CmsKitFeatures.GlobalResourceEnable)] [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 +public class GlobalResourceAdminController : CmsKitAdminController, IGlobalResourceAdminAppService { private readonly IGlobalResourceAdminAppService _globalResourceAdminAppService; @@ -21,7 +24,7 @@ public class GlobalResourceAdminController: CmsKitAdminController, IGlobalResour { _globalResourceAdminAppService = globalResourceAdminAppService; } - + [HttpGet] public Task GetAsync() { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs index f95d2a86b2..c304c5c684 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/MediaDescriptors/MediaDescriptorAdminController.cs @@ -1,16 +1,15 @@ using System; -using System.Net; using System.Threading.Tasks; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Volo.Abp; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; -using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.MediaDescriptors; +[RequiresFeature(CmsKitFeatures.MediaEnable)] [RequiresGlobalFeature(typeof(MediaFeature))] [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitAdminRemoteServiceConsts.ModuleName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs index de36883ff7..a0325f4f27 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Menus/MenuItemAdminController.cs @@ -1,16 +1,19 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using System; +using System; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Menus; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Menus; +[RequiresFeature(CmsKitFeatures.MenuEnable)] [RequiresGlobalFeature(typeof(MenuFeature))] [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitAdminRemoteServiceConsts.ModuleName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs index 7936b206e6..5acccb07aa 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Pages/PageAdminController.cs @@ -4,13 +4,15 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; -using Volo.CmsKit.Admin.Menus; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Pages; +[RequiresFeature(CmsKitFeatures.PageEnable)] [RequiresGlobalFeature(typeof(PagesFeature))] [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitAdminRemoteServiceConsts.ModuleName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/EntityTagAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/EntityTagAdminController.cs index 9df9394fdd..c57e7bb0a7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/EntityTagAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/EntityTagAdminController.cs @@ -1,13 +1,14 @@ -using Microsoft.AspNetCore.Authorization; +using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -using System.Threading.Tasks; using Volo.Abp; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; -using Volo.CmsKit.Permissions; namespace Volo.CmsKit.Admin.Tags; +[RequiresFeature(CmsKitFeatures.TagEnable)] [RequiresGlobalFeature(typeof(TagsFeature))] [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitAdminRemoteServiceConsts.ModuleName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagAdminController.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagAdminController.cs index c34107b742..db0131ba2f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagAdminController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi/Volo/CmsKit/Admin/Tags/TagAdminController.cs @@ -1,18 +1,20 @@ -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; -using Volo.CmsKit.Admin.Tags; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Permissions; using Volo.CmsKit.Tags; namespace Volo.CmsKit.Admin.Tags; +[RequiresFeature(CmsKitFeatures.TagEnable)] [RequiresGlobalFeature(typeof(TagsFeature))] [RemoteService(Name = CmsKitAdminRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitAdminRemoteServiceConsts.ModuleName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs index bc9bbfb310..9cc76c080c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Menus/CmsKitAdminMenuContributor.cs @@ -2,8 +2,10 @@ using System.Linq; using System.Threading.Tasks; using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; using Volo.Abp.UI.Navigation; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Localization; using Volo.CmsKit.Permissions; @@ -36,6 +38,7 @@ public class CmsKitAdminMenuContributor : IMenuContributor l["Pages"].Value, "/Cms/Pages", "fa fa-file-alt") + .RequireFeatures(CmsKitFeatures.PageEnable) .RequireGlobalFeatures(typeof(PagesFeature)) .RequirePermissions(CmsKitAdminPermissions.Pages.Default)); @@ -44,6 +47,7 @@ public class CmsKitAdminMenuContributor : IMenuContributor l["Blogs"], "/Cms/Blogs", "fa fa-blog") + .RequireFeatures(CmsKitFeatures.BlogEnable) .RequireGlobalFeatures(typeof(BlogsFeature)) .RequirePermissions(CmsKitAdminPermissions.Blogs.Default)); @@ -52,6 +56,7 @@ public class CmsKitAdminMenuContributor : IMenuContributor l["BlogPosts"], "/Cms/BlogPosts", "fa fa-file-signature") + .RequireFeatures(CmsKitFeatures.BlogEnable) .RequireGlobalFeatures(typeof(BlogsFeature)) .RequirePermissions(CmsKitAdminPermissions.BlogPosts.Default)); @@ -60,6 +65,7 @@ public class CmsKitAdminMenuContributor : IMenuContributor l["Tags"].Value, "/Cms/Tags", "fa fa-tags") + .RequireFeatures(CmsKitFeatures.TagEnable) .RequireGlobalFeatures(typeof(TagsFeature)) .RequirePermissions(CmsKitAdminPermissions.Tags.Default)); @@ -68,6 +74,7 @@ public class CmsKitAdminMenuContributor : IMenuContributor l["Comments"].Value, "/Cms/Comments", "fa fa-comments") + .RequireFeatures(CmsKitFeatures.CommentEnable) .RequireGlobalFeatures(typeof(CommentsFeature)) .RequirePermissions(CmsKitAdminPermissions.Comments.Default)); @@ -76,6 +83,7 @@ public class CmsKitAdminMenuContributor : IMenuContributor l["Menus"], "/Cms/Menus/Items", "fa fa-stream") + .RequireFeatures(CmsKitFeatures.MenuEnable) .RequireGlobalFeatures(typeof(MenuFeature)) .RequirePermissions(CmsKitAdminPermissions.Menus.Default)); @@ -84,6 +92,7 @@ public class CmsKitAdminMenuContributor : IMenuContributor l["GlobalResources"], "/Cms/GlobalResources", "fa fa-newspaper") + .RequireFeatures(CmsKitFeatures.GlobalResourceEnable) .RequireGlobalFeatures(typeof(GlobalResourcesFeature)) .RequirePermissions(CmsKitAdminPermissions.GlobalResources.Default)); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js index 375b7ad41b..a101635d73 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/create.js @@ -334,6 +334,25 @@ $(function () { editor.insertText(txt); }); + $('.tab-item').on('click', function () { + if ($(this).attr("aria-label") == 'Preview' && editor.isMarkdownMode()) { + + let content = editor.getMarkdown(); + localStorage.setItem('content', content); + + $.post("/CmsKitCommonWidgets/ContentPreview", { content: content }, function (result) { + editor.setHTML(result); + + var highllightedText = $('#ContentEditor').find('.toastui-editor-md-preview-highlight'); + highllightedText.removeClass('toastui-editor-md-preview-highlight'); + }); + } + else if ($(this).attr("aria-label") == 'Write') { + var retrievedObject = localStorage.getItem('content'); + editor.setMarkdown(retrievedObject); + } + }); + function createAddWidgetButton() { const button = document.createElement('button'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js index 51e3eda96c..d14194ecb5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/BlogPosts/update.js @@ -255,6 +255,25 @@ $(function () { editor.insertText(txt); }); + $('.tab-item').on('click', function () { + if ($(this).attr("aria-label") == 'Preview' && editor.isMarkdownMode()) { + + let content = editor.getMarkdown(); + localStorage.setItem('content', content); + + $.post("/CmsKitCommonWidgets/ContentPreview", { content: content }, function (result) { + editor.setHTML(result); + + var highllightedText = $('#ContentEditor').find('.toastui-editor-md-preview-highlight'); + highllightedText.removeClass('toastui-editor-md-preview-highlight'); + }); + } + else if ($(this).attr("aria-label") == 'Write') { + var retrievedObject = localStorage.getItem('content'); + editor.setMarkdown(retrievedObject); + } + }); + function createAddWidgetButton() { const button = document.createElement('button'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js index 49a482bf33..ee6c7b7f9f 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/create.js @@ -1,6 +1,6 @@ $(function () { var l = abp.localization.getResource("CmsKit"); - + var $createForm = $('#form-page-create'); var $title = $('#ViewModel_Title'); var $slug = $('#ViewModel_Slug'); @@ -90,7 +90,7 @@ $(function () { var fileUriPrefix = "/api/cms-kit/media/"; initEditor(); - + var editor; function initEditor() { var $editorContainer = $("#ContentEditor"); @@ -133,7 +133,7 @@ $(function () { } }); } - + function uploadFile(blob, callback, source) { var UPPY_OPTIONS = { endpoint: fileUploadUri, @@ -166,11 +166,37 @@ $(function () { }); } - $('#GeneratedWidgetText').on('change',function () { + $('#GeneratedWidgetText').on('change', function () { var txt = $('#GeneratedWidgetText').val(); editor.insertText(txt); }); - + + $('.tab-item').on('click', function () { + if ($(this).attr("aria-label") == 'Preview' && editor.isMarkdownMode()) { + + let content = editor.getMarkdown(); + localStorage.setItem('content', content); + + $.post("/CmsKitCommonWidgets/ContentPreview", { content: content }, function (result) { + + let style = styleEditor.getValue(); + + $('#editor-preview-style').remove(); + + $('head').append(''); + + editor.setHTML(result); + + var highllightedText = $('#ContentEditor').find('.toastui-editor-md-preview-highlight'); + highllightedText.removeClass('toastui-editor-md-preview-highlight'); + }); + } + else if ($(this).attr("aria-label") == 'Write'){ + var retrievedObject = localStorage.getItem('content'); + editor.setMarkdown(retrievedObject); + } + }); + function createAddWidgetButton() { const button = document.createElement('button'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js index 565f758552..c46f1c274c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Pages/update.js @@ -140,7 +140,33 @@ $(function () { var txt = $('#GeneratedWidgetText').val(); editor.insertText(txt); }); - + + $('.tab-item').on('click', function () { + if ($(this).attr("aria-label") == 'Preview' && editor.isMarkdownMode()) { + + let content = editor.getMarkdown(); + localStorage.setItem('content', content); + + $.post("/CmsKitCommonWidgets/ContentPreview", { content: content }, function (result) { + + let style = styleEditor.getValue(); + + $('#editor-preview-style').remove(); + + $('head').append(''); + + editor.setHTML(result); + + var highllightedText = $('#ContentEditor').find('.toastui-editor-md-preview-highlight'); + highllightedText.removeClass('toastui-editor-md-preview-highlight'); + }); + } + else if ($(this).attr("aria-label") == 'Write') { + var retrievedObject = localStorage.getItem('content'); + editor.setMarkdown(retrievedObject); + } + }); + function createAddWidgetButton() { const button = document.createElement('button'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostPublicDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/BlogPostCommonDto.cs similarity index 80% rename from modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostPublicDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/BlogPostCommonDto.cs index 695f50836e..c2b2373d9c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/BlogPostPublicDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/BlogPostCommonDto.cs @@ -1,13 +1,12 @@ using System; using System.Collections.Generic; using Volo.Abp.Application.Dtos; -using Volo.CmsKit.Contents; using Volo.CmsKit.Users; -namespace Volo.CmsKit.Public.Blogs; +namespace Volo.CmsKit.Contents; [Serializable] -public class BlogPostPublicDto : AuditedEntityDto +public class BlogPostCommonDto : AuditedEntityDto, IContent { public Guid BlogId { get; set; } @@ -24,4 +23,4 @@ public class BlogPostPublicDto : AuditedEntityDto public Guid? CoverImageMediaId { get; set; } public CmsUserDto Author { get; set; } -} +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/DefaultContentDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/DefaultContentDto.cs new file mode 100644 index 0000000000..731e346df4 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/DefaultContentDto.cs @@ -0,0 +1,8 @@ +using System.Collections.Generic; + +namespace Volo.CmsKit.Contents; + +public class DefaultContentDto : IContent +{ + public List ContentFragments { get; set; } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContent.cs new file mode 100644 index 0000000000..2a393e0a14 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContent.cs @@ -0,0 +1,7 @@ +using System.Collections.Generic; + +namespace Volo.CmsKit.Contents; +public interface IContent +{ + public List ContentFragments { get; set; } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs new file mode 100644 index 0000000000..ec2b9bcf42 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/IContentAppService.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Application.Services; + +namespace Volo.CmsKit.Contents; + +public interface IContentAppService : IApplicationService +{ + Task> ParseAsync(string content); +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/PageDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/PageDto.cs similarity index 65% rename from modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/PageDto.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/PageDto.cs index a336844289..0b573be372 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/PageDto.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application.Contracts/Volo/CmsKit/Contents/PageDto.cs @@ -1,22 +1,21 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; +using System; using Volo.Abp.Application.Dtos; -using Volo.CmsKit.Contents; -namespace Volo.CmsKit.Public.Pages; +namespace Volo.CmsKit.Contents; [Serializable] -public class PageDto : EntityDto +public class PageDto : EntityDto, IContent { public string Title { get; set; } public string Slug { get; set; } public string Content { get; set; } - + public List ContentFragments { get; set; } public string Script { get; set; } public string Style { get; set; } -} +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs new file mode 100644 index 0000000000..a227f31e18 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentAppService.cs @@ -0,0 +1,22 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.GlobalFeatures; + +namespace Volo.CmsKit.Contents; + +[RequiresGlobalFeature(typeof(PagesFeature))] +public class ContentAppService : CmsKitAppServiceBase, IContentAppService +{ + protected ContentParser ContentParser { get; } + + public ContentAppService(ContentParser contentParser) + { + ContentParser = contentParser; + } + + public async Task> ParseAsync(string content) + { + return await ContentParser.ParseAsync(content); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentParser.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentParser.cs index 617e7d61cc..aea5cc2a82 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentParser.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Application/Volo/CmsKit/Contents/ContentParser.cs @@ -28,10 +28,10 @@ public class ContentParser : ITransientDependency }); } - var parsedList = new List(); + List parsedList = new(); ParseContent(content, parsedList); - var contentFragments = new List(); + List contentFragments = new(); FillContentFragment(content, parsedList, contentFragments); return Task.FromResult(contentFragments); diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Controllers/CmsKitCommonWidgetsController.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Controllers/CmsKitCommonWidgetsController.cs new file mode 100644 index 0000000000..8e226a31f2 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Controllers/CmsKitCommonWidgetsController.cs @@ -0,0 +1,14 @@ +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; +using Volo.CmsKit.Web.Pages.CmsKit.Components.ContentPreview; + +namespace Volo.CmsKit.Web.Controllers; + +public class CmsKitCommonWidgetsController : AbpController +{ + [HttpPost] + public IActionResult ContentPreview(ContentPreviewDto dto) + { + return ViewComponent(typeof(ContentPreviewViewComponent), new { content = dto.Content }); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewDto.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewDto.cs new file mode 100644 index 0000000000..9c01a325bf --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewDto.cs @@ -0,0 +1,9 @@ +using System; + +namespace Volo.CmsKit.Web.Pages.CmsKit.Components.ContentPreview; + +[Serializable] +public class ContentPreviewDto +{ + public string Content { get; set; } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewViewComponent.cs new file mode 100644 index 0000000000..987c404e31 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/ContentPreviewViewComponent.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Web.Pages.CmsKit.Components.ContentPreview; + +public class ContentPreviewViewComponent : AbpViewComponent +{ + protected IContentAppService ContentAppService { get; } + + public ContentPreviewViewComponent(IContentAppService contentAppService) + { + ContentAppService = contentAppService; + } + + public virtual async Task InvokeAsync(string content) + { + var fragments = await ContentAppService.ParseAsync(content); + + return View("~/Pages/CmsKit/Components/ContentPreview/Default.cshtml", new DefaultContentDto + { + ContentFragments = fragments + }); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/Default.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/Default.cshtml new file mode 100644 index 0000000000..6baf41716e --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/ContentPreview/Default.cshtml @@ -0,0 +1,10 @@ +@using Volo.CmsKit.Contents +@using Volo.CmsKit.Web.Pages.CmsKit.Components.Contents + +@model DefaultContentDto + +
+ + @await Component.InvokeAsync(typeof(ContentFragmentViewComponent), Model) + +
\ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml new file mode 100644 index 0000000000..0fa7d59064 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragment.cshtml @@ -0,0 +1,20 @@ +@using System.Dynamic +@using Volo.Abp.Data +@using Volo.CmsKit.Web.Renderers; +@using Volo.CmsKit.Web.Pages.CmsKit.Components.Contents; + +@model ContentFragmentViewComponent + +@inject IMarkdownToHtmlRenderer MarkdownRenderer + +@foreach (var contentFragment in Model.ContentDto.ContentFragments) +{ + if (contentFragment.Type == "Markdown") + { + @Html.Raw(await MarkdownRenderer.RenderAsync(contentFragment.GetProperty("Content"))) + } + else if (contentFragment.Type == "Widget") + { + @await Component.InvokeAsync(contentFragment.GetProperty("Type"), contentFragment.ExtraProperties.ConvertToDynamicObject()) + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragmentViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragmentViewComponent.cs new file mode 100644 index 0000000000..d276165982 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/ContentFragmentViewComponent.cs @@ -0,0 +1,21 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.Widgets; +using Volo.CmsKit.Contents; + +namespace Volo.CmsKit.Web.Pages.CmsKit.Components.Contents; + +[ViewComponent(Name = "ContentFragment")] +[Widget( + AutoInitialize = true +)] +public class ContentFragmentViewComponent : AbpViewComponent +{ + public IContent ContentDto { get; set; } + + public virtual async Task InvokeAsync(IContent contentDto) + { + return View("~/Pages/CmsKit/Components/Contents/ContentFragment.cshtml", new ContentFragmentViewComponent() { ContentDto = contentDto }); + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/IContentRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/IContentRenderer.cs similarity index 66% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/IContentRenderer.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/IContentRenderer.cs index 879b27cda7..b33c044392 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/IContentRenderer.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/IContentRenderer.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace Volo.CmsKit.Web.Contents; +namespace Volo.CmsKit.Web.Pages.CmsKit.Components.Contents; public interface IContentRenderer { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/PlainTextContentRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/PlainTextContentRenderer.cs similarity index 80% rename from modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/PlainTextContentRenderer.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/PlainTextContentRenderer.cs index cf68e25e15..3fcc78f658 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Contents/PlainTextContentRenderer.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Pages/CmsKit/Components/Contents/PlainTextContentRenderer.cs @@ -1,7 +1,7 @@ using System.Threading.Tasks; using Volo.Abp.DependencyInjection; -namespace Volo.CmsKit.Web.Contents; +namespace Volo.CmsKit.Web.Pages.CmsKit.Components.Contents; public class PlainTextContentRenderer : IContentRenderer, ITransientDependency { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/IMarkdownToHtmlRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/IMarkdownToHtmlRenderer.cs similarity index 80% rename from modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/IMarkdownToHtmlRenderer.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/IMarkdownToHtmlRenderer.cs index 0dd60f34c5..565437af7e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/IMarkdownToHtmlRenderer.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/IMarkdownToHtmlRenderer.cs @@ -1,6 +1,6 @@ using System.Threading.Tasks; -namespace Volo.CmsKit.Public.Web.Renderers; +namespace Volo.CmsKit.Web.Renderers; public interface IMarkdownToHtmlRenderer { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/MarkdownToHtmlRenderer.cs b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/MarkdownToHtmlRenderer.cs similarity index 98% rename from modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/MarkdownToHtmlRenderer.cs rename to modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/MarkdownToHtmlRenderer.cs index 4ef7c82c0d..83317c2111 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Renderers/MarkdownToHtmlRenderer.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Renderers/MarkdownToHtmlRenderer.cs @@ -7,7 +7,7 @@ using Ganss.XSS; using Markdig; using Volo.Abp.DependencyInjection; -namespace Volo.CmsKit.Public.Web.Renderers; +namespace Volo.CmsKit.Web.Renderers; public class MarkdownToHtmlRenderer : IMarkdownToHtmlRenderer, ITransientDependency { diff --git a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj index 1ca9a78b27..e717f49be5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Common.Web/Volo.CmsKit.Common.Web.csproj @@ -1,38 +1,40 @@ - - + + - - net6.0 - $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; - true - Library - Volo.CmsKit.Web - true - + + net6.0 + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + true + Library + Volo.CmsKit.Web + true + - - - - - + + + + + - - - + + + + + - - - - - - - - - - - - + + + + + + + + + + + + diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj index 22160272fd..550a704a75 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo.CmsKit.Domain.Shared.csproj @@ -12,6 +12,7 @@ + diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Features/CmsKitFeatureDefinitionProvider.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Features/CmsKitFeatureDefinitionProvider.cs new file mode 100644 index 0000000000..597e5240e8 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Features/CmsKitFeatureDefinitionProvider.cs @@ -0,0 +1,73 @@ +using Volo.Abp.Features; +using Volo.Abp.Localization; +using Volo.Abp.Validation.StringValues; +using Volo.CmsKit.Localization; + +namespace Volo.CmsKit.Features; +public class CmsKitFeatureDefinitionProvider : FeatureDefinitionProvider +{ + public override void Define(IFeatureDefinitionContext context) + { + var group = context.AddGroup(CmsKitFeatures.GroupName, + L("Feature:CmsKitGroup")); + + group.AddFeature(CmsKitFeatures.BlogEnable, + "true", + L("Feature:BlogEnable"), + L("Feature:BlogEnableDescription"), + new ToggleStringValueType()); + + group.AddFeature(CmsKitFeatures.CommentEnable, + "true", + L("Feature:CommentEnable"), + L("Feature:CommentEnableDescription"), + new ToggleStringValueType()); + + group.AddFeature(CmsKitFeatures.GlobalResourceEnable, + "true", + L("Feature:GlobalResourceEnable"), + L("Feature:GlobalResourceEnableDescription"), + new ToggleStringValueType()); + + group.AddFeature(CmsKitFeatures.MediaEnable, + "true", + L("Feature:MediaEnable"), + L("Feature:MediaEnableDescription"), + new ToggleStringValueType()); + + group.AddFeature(CmsKitFeatures.MenuEnable, + "true", + L("Feature:MenuEnable"), + L("Feature:MenuEnableDescription"), + new ToggleStringValueType()); + + group.AddFeature(CmsKitFeatures.PageEnable, + "true", + L("Feature:PageEnable"), + L("Feature:PageEnableDescription"), + new ToggleStringValueType()); + + group.AddFeature(CmsKitFeatures.RatingEnable, + "true", + L("Feature:RatingEnable"), + L("Feature:RatingEnableDescription"), + new ToggleStringValueType()); + + group.AddFeature(CmsKitFeatures.ReactionEnable, + "true", + L("Feature:ReactionEnable"), + L("Feature:ReactionEnableDescription"), + new ToggleStringValueType()); + + group.AddFeature(CmsKitFeatures.TagEnable, + "true", + L("Feature:TagEnable"), + L("Feature:TagEnableDescription"), + new ToggleStringValueType()); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Features/CmsKitFeatures.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Features/CmsKitFeatures.cs new file mode 100644 index 0000000000..1dbf642755 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Features/CmsKitFeatures.cs @@ -0,0 +1,15 @@ +namespace Volo.CmsKit.Features; +public static class CmsKitFeatures +{ + public const string GroupName = "CmsKit"; + + public const string BlogEnable = GroupName + ".BlogEnable"; + public const string CommentEnable = GroupName + ".CommentEnable"; + public const string GlobalResourceEnable = GroupName + ".GlobalResourceEnable"; + public const string MediaEnable = GroupName + ".MediaEnable"; + public const string MenuEnable = GroupName + ".MenuEnable"; + public const string PageEnable = GroupName + ".PageEnable"; + public const string RatingEnable = GroupName + ".RatingEnable"; + public const string ReactionEnable = GroupName + ".ReactionEnable"; + public const string TagEnable = GroupName + ".TagEnable"; +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/ContentsFeature.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/ContentsFeature.cs new file mode 100644 index 0000000000..ac752a68c4 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/ContentsFeature.cs @@ -0,0 +1,28 @@ +using JetBrains.Annotations; +using Volo.Abp.GlobalFeatures; + +namespace Volo.CmsKit.GlobalFeatures; + +[GlobalFeatureName(Name)] +public class ContentsFeature : GlobalFeature +{ + public const string Name = "CmsKit.Contents"; + + internal ContentsFeature( + [NotNull] GlobalCmsKitFeatures cmsKit + ) : base(cmsKit) + { + + } + + public override void Enable() + { + var userFeature = FeatureManager.Modules.CmsKit().User; + if (!userFeature.IsEnabled) + { + userFeature.Enable(); + } + + base.Enable(); + } +} 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 922059463f..3119bf618c 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "هل أنت متأكد من حذف هذه الصفحة؟", "PageId": "صفحة", "Pages": "الصفحات", - "PageSlugInformation": "سبيكة تستخدم على url. سيكون عنوان url الخاص بك هو \"/pages/{{slug}}\".", + "PageSlugInformation": "سبيكة تستخدم على url. سيكون عنوان url الخاص بك هو \"/{slug}}\".", "Permission:BlogManagement": "إدارة المدونة", "Permission:BlogManagement.Create": "إنشاء", "Permission:BlogManagement.Delete": "حذف", 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 9192b48abe..8ae9479b06 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Opravdu chcete smazat tuto stránku?", "PageId": "Strana", "Pages": "stránky", - "PageSlugInformation": "Na adrese URL je použit Slug. Vaše adresa URL bude '/pages/{{slug}}'.", + "PageSlugInformation": "Na adrese URL je použit Slug. Vaše adresa URL bude '/{{slug}}'.", "Permission:BlogManagement": "Správa blogu", "Permission:BlogManagement.Create": "Vytvořit", "Permission:BlogManagement.Delete": "Vymazat", 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 903a7e3d0a..857f7f1e1a 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Möchten Sie diese Seite wirklich löschen?", "PageId": "Buchseite", "Pages": "Seiten", - "PageSlugInformation": "Slug wird auf URL verwendet. Ihre URL lautet '/pages/{{slug}}'.", + "PageSlugInformation": "Slug wird auf URL verwendet. Ihre URL lautet '/{{slug}}'.", "Permission:BlogManagement": "Blog-Verwaltung", "Permission:BlogManagement.Create": "Schaffen", "Permission:BlogManagement.Delete": "Löschen", 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 222cbe0fbd..7a838b120a 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Είστε βέβαιοι ότι θα διαγράψετε αυτήν τη σελίδα;", "PageId": "Σελίδα", "Pages": "Σελίδες", - "PageSlugInformation": "Το Slug χρησιμοποιείται στο url. Το url σας θα είναι '/pages/{{slug}}'.", + "PageSlugInformation": "Το Slug χρησιμοποιείται στο url. Το url σας θα είναι '/{{slug}}'.", "Permission:BlogManagement": "Διαχείριση ιστολογίου", "Permission:BlogManagement.Create": "Δημιουργώ", "Permission:BlogManagement.Delete": "Διαγράφω", 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 8da6be8bd5..0faaf04e81 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Are you sure to delete this page?", "PageId": "Page", "Pages": "Pages", - "PageSlugInformation": "Slug is used on url. Your url will be '/pages/{{slug}}'.", + "PageSlugInformation": "Slug is used on url. Your url will be '/{{slug}}'.", "Permission:BlogManagement": "Blog Management", "Permission:BlogManagement.Create": "Create", "Permission:BlogManagement.Delete": "Delete", @@ -185,8 +185,27 @@ "Add": "Add", "AddWidget": "Add Widget", "PleaseConfigureWidgets": "Please configure widgets", - "SelectAnAuthor":"Select an Author", - "InThisDocument":"In This Document", - "GoToTop":"Go To Top" + "SelectAnAuthor": "Select an Author", + "InThisDocument": "In This Document", + "GoToTop": "Go To Top", + "Feature:CmsKitGroup": "Cms Kit", + "Feature:BlogEnable": "Enabled blog page", + "Feature:BlogEnableDescription": "Enable blog page in the application.", + "Feature:CommentEnable": "Enabled commenting", + "Feature:CommentEnableDescription": "Enable comment in the application.", + "Feature:GlobalResourceEnable": "Enabled global resourcing", + "Feature:GlobalResourceEnableDescription": "Enable global resource in the application.", + "Feature:MediaEnable": "Enabled media", + "Feature:MediaEnableDescription": "Enable media in the application.", + "Feature:MenuEnable": "Enabled menu", + "Feature:MenuEnableDescription": "Enable menu in the application.", + "Feature:PageEnable": "Enabled paging page", + "Feature:PageEnableDescription": "Enable paging page in the application.", + "Feature:RatingEnable": "Enabled rating", + "Feature:RatingEnableDescription": "Enable rating in the application.", + "Feature:ReactionEnable": "Enabled reaction", + "Feature:ReactionEnableDescription": "Enable reaction in the application.", + "Feature:TagEnable": "Enabled taging", + "Feature:TagEnableDescription": "Enable taging in the application." } } \ 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 19df2c45a2..8e8750e530 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "¿Está seguro de eliminar esta página?", "PageId": "Página", "Pages": "Paginas", - "PageSlugInformation": "Slug se usa en la URL. Su URL será '/pages/{{slug}}'.", + "PageSlugInformation": "Slug se usa en la URL. Su URL será '/{{slug}}'.", "Permission:BlogManagement": "Gestión de blogs", "Permission:BlogManagement.Create": "Crear", "Permission:BlogManagement.Delete": "Borrar", 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 3ac961feef..855b6d091d 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "آیا مطمئن هستید که این صفحه را حذف می کنید؟", "PageId": "صفحه", "Pages": "صفحات", - "PageSlugInformation": "Slug در url استفاده می شود. آدرس اینترنتی شما '/pages/{{slug}}' خواهد بود.", + "PageSlugInformation": "Slug در url استفاده می شود. آدرس اینترنتی شما '/{{slug}}' خواهد بود.", "Permission:BlogManagement": "مدیریت وبلاگ", "Permission:BlogManagement.Create": "ایجاد", "Permission:BlogManagement.Delete": "حذف", 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 30a56fa9c0..438818cdfb 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Haluatko varmasti poistaa tämän sivun?", "PageId": "Sivu", "Pages": "Sivut", - "PageSlugInformation": "Etanaa käytetään URL-osoitteessa. URL-osoitteesi on '/pages/{{slug}}'.", + "PageSlugInformation": "Etanaa käytetään URL-osoitteessa. URL-osoitteesi on '/{{slug}}'.", "Permission:BlogManagement": "Blogin hallinta", "Permission:BlogManagement.Create": "Luoda", "Permission:BlogManagement.Delete": "Poistaa", 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 6d4e8f4cf5..5c789e996e 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Êtes-vous sûr de vouloir supprimer cette page?", "PageId": "Page", "Pages": "Pages", - "PageSlugInformation": "Slug est utilisé sur l'url. Votre URL sera '/pages/{{slug}}'.", + "PageSlugInformation": "Slug est utilisé sur l'url. Votre URL sera '/{{slug}}'.", "Permission:BlogManagement": "Gestion de blog", "Permission:BlogManagement.Create": "Créer", "Permission:BlogManagement.Delete": "Effacer", 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 732ca3d2de..8f69f2e25f 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "क्या आप इस पृष्ठ को हटाना सुनिश्चित कर रहे हैं?", "PageId": "पृष्ठ", "Pages": "पृष्ठों", - "PageSlugInformation": "स्लग का उपयोग url पर किया जाता है। आपका url '/pages/{{slug}}' होगा।", + "PageSlugInformation": "स्लग का उपयोग url पर किया जाता है। आपका url '/{{slug}}' होगा।", "Permission:BlogManagement": "ब्लॉग प्रबंधन", "Permission:BlogManagement.Create": "सृजन करना", "Permission:BlogManagement.Delete": "हटाएं", 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 49b7d5f828..ebeb5dad25 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Biztosan törlöd ezt az oldalt?", "PageId": "oldal", "Pages": "Oldalak", - "PageSlugInformation": "A Slug az url-en használatos. Az Ön URL-je a következő lesz: „/pages/{{slug}}”.", + "PageSlugInformation": "A Slug az url-en használatos. Az Ön URL-je a következő lesz: „/{{slug}}”.", "Permission:BlogManagement": "Blogkezelés", "Permission:BlogManagement.Create": "Teremt", "Permission:BlogManagement.Delete": "Töröl", 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 f5bb342dc6..60c8d13744 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Sei sicuro di cancellare questa pagina?", "PageId": "Pagina", "Pages": "Pagine", - "PageSlugInformation": "Lo slug viene utilizzato sull'URL. Il tuo URL sarà '/pages/{{slug}}'.", + "PageSlugInformation": "Lo slug viene utilizzato sull'URL. Il tuo URL sarà '/{{slug}}'.", "Permission:BlogManagement": "Gestione del blog", "Permission:BlogManagement.Create": "Crea", "Permission:BlogManagement.Delete": "Elimina", 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 b8adbbd5bb..39779d1d57 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Weet u zeker dat u deze pagina wilt verwijderen?", "PageId": "Bladzijde", "Pages": "Pagina's", - "PageSlugInformation": "Slug wordt gebruikt voor de url. Uw url wordt '/pages/{{slug}}'.", + "PageSlugInformation": "Slug wordt gebruikt voor de url. Uw url wordt '/{{slug}}'.", "Permission:BlogManagement": "Blogbeheer", "Permission:BlogManagement.Create": "Toevoegen", "Permission:BlogManagement.Delete": "Verwijderen", 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 6c5e77a7d3..5a2ed06a5d 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Czy na pewno chcesz usunąć tę stronę?", "PageId": "Strona", "Pages": "Strony", - "PageSlugInformation": "Slug jest używany na adresie URL. Twój adres URL to „/pages/{{slug}}”.", + "PageSlugInformation": "Slug jest używany na adresie URL. Twój adres URL to „/{{slug}}”.", "Permission:BlogManagement": "Zarządzanie blogiem", "Permission:BlogManagement.Create": "Tworzyć", "Permission:BlogManagement.Delete": "Kasować", 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 5ec2a64799..fbc0091d18 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Tem certeza que deseja deletar esta página?", "PageId": "Página", "Pages": "Páginas", - "PageSlugInformation": "Slug é usado na url. Sua url será '/pages/{{slug}}'.", + "PageSlugInformation": "Slug é usado na url. Sua url será '/{{slug}}'.", "Permission:BlogManagement": "Gerenciamento de blogs", "Permission:BlogManagement.Create": "Criar", "Permission:BlogManagement.Delete": "Excluir", 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 3e7e1caaa9..9cd519bb53 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Sunteţi sigur(ă) că vreţi să ştergeţi această pagină?", "PageId": "Pagina", "Pages": "Pagini", - "PageSlugInformation": "Slug este folosit pe url. Url-ul dumneavoastră va fi '/pages/{{slug}}'.", + "PageSlugInformation": "Slug este folosit pe url. Url-ul dumneavoastră va fi '/{{slug}}'.", "Permission:BlogManagement": "Administrare Blog", "Permission:BlogManagement.Create": "Creează", "Permission:BlogManagement.Delete": "Şterge", 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 289b952e1b..f95ee910e4 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Вы уверены, что хотите удалить эту страницу?", "PageId": "Страница", "Pages": "Страницы", - "PageSlugInformation": "Слаг используется для URL. Ваш URL-адрес будет '/pages/{{slug}}'.", + "PageSlugInformation": "Слаг используется для URL. Ваш URL-адрес будет '/{{slug}}'.", "Permission:BlogManagement": "Управление блогом", "Permission:BlogManagement.Create": "Создавать", "Permission:BlogManagement.Delete": "Удалить", 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 d5873f42e1..2cf9410ca9 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Určite chcete túto stránku vymazať?", "PageId": "Stránka", "Pages": "Stránky", - "PageSlugInformation": "Slug sa používa v URL. Vaša URL bude '/pages/{{slug}}'.", + "PageSlugInformation": "Slug sa používa v URL. Vaša URL bude '/{{slug}}'.", "Permission:BlogManagement": "Správa blogov", "Permission:BlogManagement.Create": "Vytvoriť", "Permission:BlogManagement.Delete": "Zmazať", 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 0a79428aac..22f252ea51 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Ali ste prepričani, da želite izbrisati to stran?", "PageId": "stran", "Pages": "strani", - "PageSlugInformation": "Slug se uporablja na url-ju. Vaš url bo '/pages/{{slug}}'.", + "PageSlugInformation": "Slug se uporablja na url-ju. Vaš url bo '/{{slug}}'.", "Permission:BlogManagement": "Upravljanje blogov", "Permission:BlogManagement.Create": "Ustvari", "Permission:BlogManagement.Delete": "Izbriši", 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 431c50596c..78fb34087b 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Bu sayfayı silmek istediğinize emin misiniz?", "PageId": "Sayfa", "Pages": "Sayfalar", - "PageSlugInformation": "Etiket URL'de kullanılır. Url şöyle görünür: '/pages/{{slug}}'.", + "PageSlugInformation": "Etiket URL'de kullanılır. Url şöyle görünür: '/{{slug}}'.", "Permission:BlogManagement": "Blog Yönetimi", "Permission:BlogManagement.Create": "Oluşturma", "Permission:BlogManagement.Delete": "Silme", @@ -190,6 +190,25 @@ "CmsKit.BlogPost.ScrollIndex": "Blog yazılarında hızlı gezinme çubuğu", "Add": "Ekle", "AddWidget": "Widget Ekle", - "PleaseConfigureWidgets": "Lütfen widget'leri yapılandırın" + "PleaseConfigureWidgets": "Lütfen widget'leri yapılandırın", + "Feature:CmsKitGroup": "Cms Kit", + "Feature:BlogEnable": "Blog sayfasını etkinleştirin", + "Feature:BlogEnableDescription": "Uygulamınızdaki blog sayfasını etkinleştirir.", + "Feature:CommentEnable": "Yorum özelliğini etkinleştirin", + "Feature:CommentEnableDescription": "Uygulamınızdaki yorum özelliğini etkinleştirir.", + "Feature:GlobalResourceEnable": "Blog global kaynakları etkinleştirin", + "Feature:GlobalResourceEnableDescription": "Uygulamınızdaki global kaynakları etkinleştirir.", + "Feature:MediaEnable": "Medyayı etkinleştirin", + "Feature:MediaEnableDescription": "Uygulamınızdaki medyayı etkinleştirir.", + "Feature:MenuEnable": "Menüyü etkinleştirin", + "Feature:MenuEnableDescription": "Uygulamınızdaki menüyü etkinleştirir.", + "Feature:PageEnable": "Sayfa özelliğini etkinleştirin", + "Feature:PageEnableDescription": "Uygulamınızdaki sayfa özelliğini etkinleştirir.", + "Feature:RatingEnable": "Oylamayı etkinleştirin", + "Feature:RatingEnableDescription": "Uygulamınızdaki oylamayı etkinleştirir.", + "Feature:ReactionEnable": "Reaksiyonları etkinleştirin", + "Feature:ReactionEnableDescription": "Uygulamınızdaki reaksiyonları etkinleştirir.", + "Feature:TagEnable": "Etkiketleri etkinleştirin", + "Feature:TagEnableDescription": "Uygulamınızdaki etiketleri etkinleştirir." } } 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 b0ed51a5d6..a581da6362 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "Bạn có chắc chắn xóa trang này không?", "PageId": "Trang", "Pages": "Các trang", - "PageSlugInformation": "Slug được sử dụng trên url. Url của bạn sẽ là '/pages/{{slug}}'.", + "PageSlugInformation": "Slug được sử dụng trên url. Url của bạn sẽ là '/{{slug}}'.", "Permission:BlogManagement": "Quản lý blog", "Permission:BlogManagement.Create": "Tạo ra", "Permission:BlogManagement.Delete": "Xóa bỏ", 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 b312349ef4..bba6fff938 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "你确定删除这个页面吗?", "PageId": "页", "Pages": "页面", - "PageSlugInformation": "Slug用于url. 你的url将是 '/pages/{{slug}}'.", + "PageSlugInformation": "Slug用于url. 你的url将是 '/{{slug}}'.", "Permission:BlogManagement": "博客管理", "Permission:BlogManagement.Create": "创建", "Permission:BlogManagement.Delete": "删除", 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 49584e5af0..91a742deba 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 @@ -75,7 +75,7 @@ "PageDeletionConfirmationMessage": "你確定刪除這個頁面嗎?", "PageId": "頁", "Pages": "頁面", - "PageSlugInformation": "Slug用於網址. 你的網址將是 '/pages/{{slug}}'.", + "PageSlugInformation": "Slug用於網址. 你的網址將是 '/{{slug}}'.", "Permission:BlogManagement": "部落格管理", "Permission:BlogManagement.Create": "創建", "Permission:BlogManagement.Delete": "刪除", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs index 9f03dc809f..ff07df87a1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Pages/PageConsts.cs @@ -2,7 +2,7 @@ namespace Volo.CmsKit.Pages; -public class PageConsts +public static class PageConsts { public const string EntityType = "Page"; @@ -16,7 +16,7 @@ public class PageConsts public static int MaxStyleLength { get; set; } = int.MaxValue; - private static string _urlPrefix = "/pages/"; + private static string _urlPrefix = "/"; public static string UrlPrefix { get => _urlPrefix; set => _urlPrefix = value.EnsureEndsWith('/').EnsureStartsWith('/'); diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDbProperties.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/AbpCmsKitDbProperties.cs similarity index 83% rename from modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDbProperties.cs rename to modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/AbpCmsKitDbProperties.cs index 6a29834233..1ce1fd8413 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDbProperties.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/AbpCmsKitDbProperties.cs @@ -1,6 +1,6 @@ namespace Volo.CmsKit; -public static class CmsKitDbProperties +public static class AbpCmsKitDbProperties { public static string DbTablePrefix { get; set; } = "Cms"; diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTagManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTagManager.cs index 2707b8854c..98a401af17 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTagManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/EntityTagManager.cs @@ -1,9 +1,9 @@ -using JetBrains.Annotations; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using JetBrains.Annotations; using Volo.Abp.Domain.Services; namespace Volo.CmsKit.Tags; @@ -62,7 +62,7 @@ public class EntityTagManager : DomainService var deletedTags = existingTags.Where(x => !tags.Contains(x.Name)).ToList(); var addedTags = tags.Where(x => !existingTags.Any(a => a.Name == x)); - await EntityTagRepository.DeleteManyAsync(deletedTags.Select(s => s.Id).ToArray()); + await EntityTagRepository.DeleteManyAsync(deletedTags.Select(s => s.Id).ToArray(), entityId); foreach (var addedTag in addedTags) { @@ -85,6 +85,6 @@ public class EntityTagManager : DomainService [CanBeNull] Guid? tenantId, CancellationToken cancellationToken = default) { - return await EntityTagRepository.GetEntityIdsFilteredByTagNameAsync(tagName, entityType,tenantId, cancellationToken); + return await EntityTagRepository.GetEntityIdsFilteredByTagNameAsync(tagName, entityType, tenantId, cancellationToken); } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs index 5105635c82..098ac8e46c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Tags/IEntityTagRepository.cs @@ -1,8 +1,8 @@ -using JetBrains.Annotations; -using System; +using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using JetBrains.Annotations; using Volo.Abp.Domain.Repositories; namespace Volo.CmsKit.Tags; @@ -15,7 +15,7 @@ public interface IEntityTagRepository : IBasicRepository [CanBeNull] Guid? tenantId, CancellationToken cancellationToken = default); - Task DeleteManyAsync(Guid[] tagIds, CancellationToken cancellationToken = default); + Task DeleteManyAsync(Guid[] tagIds, string entityId, CancellationToken cancellationToken = default); Task> GetEntityIdsFilteredByTagAsync( [NotNull] Guid tagId, @@ -25,6 +25,6 @@ public interface IEntityTagRepository : IBasicRepository Task> GetEntityIdsFilteredByTagNameAsync( [NotNull] string tagName, [NotNull] string entityType, - [CanBeNull] Guid? tenantId=null, - CancellationToken cancellationToken=default); + [CanBeNull] Guid? tenantId = null, + CancellationToken cancellationToken = default); } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs index 8f501f4c98..265495f5bf 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs @@ -14,7 +14,7 @@ using Volo.CmsKit.Users; namespace Volo.CmsKit.EntityFrameworkCore; -[ConnectionStringName(CmsKitDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpCmsKitDbProperties.ConnectionStringName)] public class CmsKitDbContext : AbpDbContext, ICmsKitDbContext { public DbSet Comments { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs index 9ab103fefc..9a42f6c4b0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs @@ -28,7 +28,7 @@ public static class CmsKitDbContextModelCreatingExtensions { builder.Entity(b => { - b.ToTable(CmsKitDbProperties.DbTablePrefix + "Users", CmsKitDbProperties.DbSchema); + b.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "Users", AbpCmsKitDbProperties.DbSchema); b.ConfigureByConvention(); b.ConfigureAbpUser(); @@ -48,7 +48,7 @@ public static class CmsKitDbContextModelCreatingExtensions { builder.Entity(b => { - b.ToTable(CmsKitDbProperties.DbTablePrefix + "UserReactions", CmsKitDbProperties.DbSchema); + b.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "UserReactions", AbpCmsKitDbProperties.DbSchema); b.ConfigureByConvention(); @@ -71,7 +71,7 @@ public static class CmsKitDbContextModelCreatingExtensions { builder.Entity(b => { - b.ToTable(CmsKitDbProperties.DbTablePrefix + "Comments", CmsKitDbProperties.DbSchema); + b.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "Comments", AbpCmsKitDbProperties.DbSchema); b.ConfigureByConvention(); @@ -95,7 +95,7 @@ public static class CmsKitDbContextModelCreatingExtensions { builder.Entity(r => { - r.ToTable(CmsKitDbProperties.DbTablePrefix + "Ratings", CmsKitDbProperties.DbSchema); + r.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "Ratings", AbpCmsKitDbProperties.DbSchema); r.ConfigureByConvention(); @@ -117,7 +117,7 @@ public static class CmsKitDbContextModelCreatingExtensions { builder.Entity(b => { - b.ToTable(CmsKitDbProperties.DbTablePrefix + "Tags", CmsKitDbProperties.DbSchema); + b.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "Tags", AbpCmsKitDbProperties.DbSchema); b.ConfigureByConvention(); @@ -134,7 +134,7 @@ public static class CmsKitDbContextModelCreatingExtensions builder.Entity(b => { - b.ToTable(CmsKitDbProperties.DbTablePrefix + "EntityTags", CmsKitDbProperties.DbSchema); + b.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "EntityTags", AbpCmsKitDbProperties.DbSchema); b.ConfigureByConvention(); @@ -158,7 +158,7 @@ public static class CmsKitDbContextModelCreatingExtensions { builder.Entity(b => { - b.ToTable(CmsKitDbProperties.DbTablePrefix + "Pages", CmsKitDbProperties.DbSchema); + b.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "Pages", AbpCmsKitDbProperties.DbSchema); b.ConfigureByConvention(); @@ -180,7 +180,7 @@ public static class CmsKitDbContextModelCreatingExtensions { builder.Entity(b => { - b.ToTable(CmsKitDbProperties.DbTablePrefix + "Blogs", CmsKitDbProperties.DbSchema); + b.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "Blogs", AbpCmsKitDbProperties.DbSchema); b.ConfigureByConvention(); @@ -193,7 +193,7 @@ public static class CmsKitDbContextModelCreatingExtensions builder.Entity(b => { - b.ToTable(CmsKitDbProperties.DbTablePrefix + "BlogPosts", CmsKitDbProperties.DbSchema); + b.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "BlogPosts", AbpCmsKitDbProperties.DbSchema); b.ConfigureByConvention(); @@ -210,7 +210,7 @@ public static class CmsKitDbContextModelCreatingExtensions builder.Entity(b => { - b.ToTable(CmsKitDbProperties.DbTablePrefix + "BlogFeatures", CmsKitDbProperties.DbSchema); + b.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "BlogFeatures", AbpCmsKitDbProperties.DbSchema); b.ConfigureByConvention(); @@ -230,7 +230,7 @@ public static class CmsKitDbContextModelCreatingExtensions { builder.Entity(b => { - b.ToTable(CmsKitDbProperties.DbTablePrefix + "MediaDescriptors", CmsKitDbProperties.DbSchema); + b.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "MediaDescriptors", AbpCmsKitDbProperties.DbSchema); b.ConfigureByConvention(); @@ -251,7 +251,7 @@ public static class CmsKitDbContextModelCreatingExtensions { builder.Entity(b => { - b.ToTable(CmsKitDbProperties.DbTablePrefix + "MenuItems", CmsKitDbProperties.DbSchema); + b.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "MenuItems", AbpCmsKitDbProperties.DbSchema); b.ConfigureByConvention(); @@ -269,7 +269,7 @@ public static class CmsKitDbContextModelCreatingExtensions { builder.Entity(b => { - b.ToTable(CmsKitDbProperties.DbTablePrefix + "GlobalResources", CmsKitDbProperties.DbSchema); + b.ToTable(AbpCmsKitDbProperties.DbTablePrefix + "GlobalResources", AbpCmsKitDbProperties.DbSchema); b.ConfigureByConvention(); diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs index fca31f2d73..8b6edc1cbe 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs @@ -14,7 +14,7 @@ using Volo.CmsKit.Users; namespace Volo.CmsKit.EntityFrameworkCore; -[ConnectionStringName(CmsKitDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpCmsKitDbProperties.ConnectionStringName)] public interface ICmsKitDbContext : IEfCoreDbContext { DbSet Comments { get; } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs index c9e501edc0..8dfeacfc36 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Tags/EfCoreEntityTagRepository.cs @@ -1,9 +1,9 @@ -using JetBrains.Annotations; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using JetBrains.Annotations; using Microsoft.EntityFrameworkCore; using Volo.Abp; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; @@ -19,11 +19,11 @@ public class EfCoreEntityTagRepository : EfCoreRepository(); - dbSet.RemoveRange(dbSet.Where(x => tagIds.Contains(x.TagId))); + dbSet.RemoveRange(dbSet.Where(x => tagIds.Contains(x.TagId) && x.EntityId == entityId)); await dbContext.SaveChangesAsync(GetCancellationToken(cancellationToken)); } @@ -56,18 +56,18 @@ public class EfCoreEntityTagRepository : EfCoreRepository> GetEntityIdsFilteredByTagNameAsync( [NotNull] string tagName, [NotNull] string entityType, - [CanBeNull] Guid? tenantId=null, - CancellationToken cancellationToken=default) + [CanBeNull] Guid? tenantId = null, + CancellationToken cancellationToken = default) { var dbContext = await GetDbContextAsync(); var result = from et in dbContext.Set() join t in dbContext.Set() on et.TagId equals t.Id - where t.Name == tagName - && t.EntityType == entityType - && et.TenantId == tenantId + where t.Name == tagName + && t.EntityType == entityType + && et.TenantId == tenantId && t.TenantId == tenantId && !t.IsDeleted - select et.EntityId; - return await result.ToListAsync(cancellationToken:GetCancellationToken(cancellationToken)); + select et.EntityId; + return await result.ToListAsync(cancellationToken: GetCancellationToken(cancellationToken)); } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs index 36c9cf882c..c6a97dfbef 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs @@ -15,7 +15,7 @@ using Tag = Volo.CmsKit.Tags.Tag; namespace Volo.CmsKit.MongoDB; -[ConnectionStringName(CmsKitDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpCmsKitDbProperties.ConnectionStringName)] public class CmsKitMongoDbContext : AbpMongoDbContext, ICmsKitMongoDbContext { public IMongoCollection Comments => Collection(); diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs index 7b7edcce0d..b6127ab125 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs @@ -22,67 +22,67 @@ public static class CmsKitMongoDbContextExtensions builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Users"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "Users"; }); builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "UserReactions"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "UserReactions"; }); builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Comments"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "Comments"; }); builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Ratings"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "Ratings"; }); builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Tags"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "Tags"; }); builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "EntityTags"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "EntityTags"; }); builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Pages"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "Pages"; }); builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "Blogs"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "Blogs"; }); builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "BlogPosts"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "BlogPosts"; }); builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "BlogFeatures"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "BlogFeatures"; }); builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "MediaDescriptors"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "MediaDescriptors"; }); builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "MenuItems"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "MenuItems"; }); builder.Entity(x => { - x.CollectionName = CmsKitDbProperties.DbTablePrefix + "GlobalResources"; + x.CollectionName = AbpCmsKitDbProperties.DbTablePrefix + "GlobalResources"; }); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs index a2dff419e2..e220aff46e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs @@ -15,7 +15,7 @@ using Tag = Volo.CmsKit.Tags.Tag; namespace Volo.CmsKit.MongoDB; -[ConnectionStringName(CmsKitDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpCmsKitDbProperties.ConnectionStringName)] public interface ICmsKitMongoDbContext : IAbpMongoDbContext { IMongoCollection UserReactions { get; } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs index e3835bfe42..b270255900 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Tags/MongoEntityTagRepository.cs @@ -1,15 +1,14 @@ -using JetBrains.Annotations; -using MongoDB.Driver; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using JetBrains.Annotations; +using MongoDB.Driver; using Volo.Abp; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; using Volo.CmsKit.Tags; -using Tag = Volo.CmsKit.Tags.Tag; namespace Volo.CmsKit.MongoDB.Tags; @@ -20,12 +19,19 @@ public class MongoEntityTagRepository : MongoDbRepository.Filter.In(x => x.TagId, tagIds), token); + + var builder = Builders.Filter; + var filter = builder.And( + builder.In(x => x.TagId, tagIds), + builder.Eq(x => x.EntityId, entityId) + ); + + await collection.DeleteManyAsync(filter, token); } public virtual Task FindAsync( @@ -57,7 +63,7 @@ public class MongoEntityTagRepository : MongoDbRepository> GetEntityIdsFilteredByTagNameAsync( [NotNull] string tagName, [NotNull] string entityType, - [CanBeNull] Guid? tenantId=null, + [CanBeNull] Guid? tenantId = null, CancellationToken cancellationToken = default) { var dbContext = await GetDbContextAsync(); @@ -76,7 +82,7 @@ public class MongoEntityTagRepository : MongoDbRepository s.entityTag.EntityId); - + return await AsyncExecuter.ToListAsync(resultQueryable, GetCancellationToken(cancellationToken)); } } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs index 42161f884c..a6462d937c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Blogs/IBlogPostPublicAppService.cs @@ -1,18 +1,18 @@ -using System.Collections.Generic; -using JetBrains.Annotations; +using System; using System.Threading.Tasks; +using JetBrains.Annotations; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; +using Volo.CmsKit.Contents; using Volo.CmsKit.Users; -using System; namespace Volo.CmsKit.Public.Blogs; public interface IBlogPostPublicAppService : IApplicationService { - Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input); + Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input); - Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); + Task GetAsync([NotNull] string blogSlug, [NotNull] string blogPostSlug); Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs index 0b33a91236..230b8ded97 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Pages/IPagePublicAppService.cs @@ -1,6 +1,7 @@ using JetBrains.Annotations; using System.Threading.Tasks; using Volo.Abp.Application.Services; +using Volo.CmsKit.Contents; namespace Volo.CmsKit.Public.Pages; diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs index ebdda3d293..87e851431d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Blogs/BlogPostPublicAppService.cs @@ -1,16 +1,19 @@ -using JetBrains.Annotations; -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; +using JetBrains.Annotations; using Volo.Abp.Application.Dtos; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Blogs; using Volo.CmsKit.Contents; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Blogs; +[RequiresFeature(CmsKitFeatures.BlogEnable)] [RequiresGlobalFeature(typeof(BlogsFeature))] public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPublicAppService { @@ -29,20 +32,20 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub ContentParser = contentParser; } - public virtual async Task GetAsync( + public virtual async Task GetAsync( [NotNull] string blogSlug, [NotNull] string blogPostSlug) { var blog = await BlogRepository.GetBySlugAsync(blogSlug); var blogPost = await BlogPostRepository.GetBySlugAsync(blog.Id, blogPostSlug); - var blogPostDto = ObjectMapper.Map(blogPost); + var blogPostDto = ObjectMapper.Map(blogPost); blogPostDto.ContentFragments = await ContentParser.ParseAsync(blogPost.Content); - + return blogPostDto; } - public virtual async Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input) + public virtual async Task> GetListAsync([NotNull] string blogSlug, BlogPostGetListInput input) { var blog = await BlogRepository.GetBySlugAsync(blogSlug); @@ -50,10 +53,10 @@ public class BlogPostPublicAppService : CmsKitPublicAppServiceBase, IBlogPostPub BlogPostStatus.Published, input.MaxResultCount, input.SkipCount, input.Sorting); - return new PagedResultDto( + return new PagedResultDto( await BlogPostRepository.GetCountAsync(blogId: blog.Id, tagId: input.TagId, statusFilter: BlogPostStatus.Published, authorId: input.AuthorId), - ObjectMapper.Map, List>(blogPosts)); + ObjectMapper.Map, List>(blogPosts)); } public virtual async Task> GetAuthorsHasBlogPostsAsync(BlogPostFilteredPagedAndSortedResultRequestDto input) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs index b1fae564d2..ef7e6be9fd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Comments/CommentPublicAppService.cs @@ -1,20 +1,23 @@ -using Microsoft.AspNetCore.Authorization; -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; using Volo.Abp.Authorization; using Volo.Abp.Data; using Volo.Abp.EventBus.Distributed; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; using Volo.Abp.Users; using Volo.CmsKit.Comments; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Comments; +[RequiresFeature(CmsKitFeatures.CommentEnable)] [RequiresGlobalFeature(typeof(CommentsFeature))] public class CommentPublicAppService : CmsKitPublicAppServiceBase, ICommentPublicAppService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicAppService.cs index 2debf10ed5..af0d1fbf39 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicAppService.cs @@ -1,11 +1,14 @@ using System.Threading.Tasks; using Volo.Abp.Application.Services; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.GlobalResources; namespace Volo.CmsKit.Public.GlobalResources; +[RequiresFeature(CmsKitFeatures.GlobalResourceEnable)] [RequiresGlobalFeature(typeof(GlobalResourcesFeature))] public class GlobalResourcePublicAppService : ApplicationService, IGlobalResourcePublicAppService { @@ -15,18 +18,18 @@ public class GlobalResourcePublicAppService : ApplicationService, IGlobalResourc { GlobalResourceManager = globalResourceManager; } - + public async Task GetGlobalScriptAsync() { var globalScript = await GlobalResourceManager.GetGlobalScriptAsync(); - + return ObjectMapper.Map(globalScript); } - + public async Task GetGlobalStyleAsync() { var globalStyle = await GlobalResourceManager.GetGlobalStyleAsync(); - + return ObjectMapper.Map(globalStyle); } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs index 11a58d5935..0e9062d9af 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Menus/MenuItemPublicAppService.cs @@ -1,12 +1,15 @@ using System.Collections.Generic; using System.Threading.Tasks; using Volo.Abp.Caching; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Menus; namespace Volo.CmsKit.Public.Menus; +[RequiresFeature(CmsKitFeatures.MenuEnable)] [RequiresGlobalFeature(typeof(MenuFeature))] public class MenuItemPublicAppService : CmsKitPublicAppServiceBase, IMenuItemPublicAppService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PagePublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PagePublicAppService.cs index 2bae7c350f..f20a181e9b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PagePublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Pages/PagePublicAppService.cs @@ -1,11 +1,14 @@ using System.Threading.Tasks; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Contents; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Pages; namespace Volo.CmsKit.Public.Pages; +[RequiresFeature(CmsKitFeatures.PageEnable)] [RequiresGlobalFeature(typeof(PagesFeature))] public class PagePublicAppService : CmsKitPublicAppServiceBase, IPagePublicAppService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs index 704a03778c..bd0c6d5e6c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/PublicApplicationAutoMapperProfile.cs @@ -2,13 +2,13 @@ using Volo.Abp.AutoMapper; using Volo.CmsKit.Blogs; using Volo.CmsKit.Comments; +using Volo.CmsKit.Contents; 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; using Volo.CmsKit.Users; @@ -33,7 +33,7 @@ public class PublicApplicationAutoMapperProfile : Profile CreateMap() .Ignore(x => x.ContentFragments); - CreateMap() + CreateMap() .Ignore(x => x.ContentFragments); CreateMap(); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Ratings/RatingPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Ratings/RatingPublicAppService.cs index 87ea0531db..f3b46c518b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Ratings/RatingPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Ratings/RatingPublicAppService.cs @@ -1,15 +1,18 @@ -using Microsoft.AspNetCore.Authorization; -using System.Collections.Generic; +using System.Collections.Generic; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; using Volo.Abp.Authorization; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; using Volo.Abp.Users; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Ratings; using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Ratings; +[RequiresFeature(CmsKitFeatures.RatingEnable)] [RequiresGlobalFeature(typeof(RatingsFeature))] public class RatingPublicAppService : CmsKitPublicAppServiceBase, IRatingPublicAppService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Reactions/ReactionPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Reactions/ReactionPublicAppService.cs index b12f659d23..1151578d57 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Reactions/ReactionPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Reactions/ReactionPublicAppService.cs @@ -1,17 +1,19 @@ -using Microsoft.AspNetCore.Authorization; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; -using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; using Volo.Abp.Users; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Reactions; namespace Volo.CmsKit.Public.Reactions; +[RequiresFeature(CmsKitFeatures.ReactionEnable)] [RequiresGlobalFeature(typeof(ReactionsFeature))] public class ReactionPublicAppService : CmsKitPublicAppServiceBase, IReactionPublicAppService { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs index b1bbf6be07..f26816e88d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/BlogPostPublicClientProxy.Generated.cs @@ -2,11 +2,9 @@ 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.Public.Blogs; +using Volo.CmsKit.Contents; using Volo.CmsKit.Users; // ReSharper disable once CheckNamespace @@ -16,18 +14,18 @@ namespace Volo.CmsKit.Public.Blogs.ClientProxies; [ExposeServices(typeof(IBlogPostPublicAppService), typeof(BlogPostPublicClientProxy))] public partial class BlogPostPublicClientProxy : ClientProxyBase, IBlogPostPublicAppService { - public virtual async Task GetAsync(string blogSlug, string blogPostSlug) + public virtual async Task GetAsync(string blogSlug, string blogPostSlug) { - return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue + return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue { { typeof(string), blogSlug }, { typeof(string), blogPostSlug } }); } - public virtual async Task> GetListAsync(string blogSlug, BlogPostGetListInput input) + public virtual async Task> GetListAsync(string blogSlug, BlogPostGetListInput input) { - return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue + return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue { { typeof(string), blogSlug }, { typeof(BlogPostGetListInput), input } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/PagesPublicClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/PagesPublicClientProxy.Generated.cs index 9ecf6cb387..f992bb3dbf 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/PagesPublicClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/PagesPublicClientProxy.Generated.cs @@ -1,12 +1,8 @@ // 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.Public.Pages; +using Volo.CmsKit.Contents; // ReSharper disable once CheckNamespace namespace Volo.CmsKit.Public.Pages.ClientProxies; diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json index 626dce7ff2..e3b3802ee9 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi.Client/ClientProxies/cms-kit-generate-proxy.json @@ -505,57 +505,6 @@ } } }, - "Volo.CmsKit.Public.Polls.PollViewComponentController": { - "controllerName": "PollViewComponent", - "controllerGroupName": "PollViewComponent", - "isRemoteService": true, - "apiVersion": null, - "type": "Volo.CmsKit.Public.Polls.PollViewComponentController", - "interfaces": [ - { - "type": "Volo.CmsKit.Public.Polls.IPollViewComponentAppService" - } - ], - "actions": { - "ParseAsyncByContent": { - "uniqueName": "ParseAsyncByContent", - "name": "ParseAsync", - "httpMethod": "GET", - "url": "api/cms-kit-public/polls/{content}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "content", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "content", - "name": "content", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.CmsKit.Polls.ContentFragment]" - }, - "allowAnonymous": null, - "implementFrom": "Volo.CmsKit.Public.Polls.IPollViewComponentAppService" - } - } - }, "Volo.CmsKit.Public.Pages.PagesPublicController": { "controllerName": "PagesPublic", "controllerGroupName": "PagesPublic", @@ -599,8 +548,8 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Public.Pages.PageDto", - "typeSimple": "Volo.CmsKit.Public.Pages.PageDto" + "type": "Volo.CmsKit.Contents.PageDto", + "typeSimple": "Volo.CmsKit.Contents.PageDto" }, "allowAnonymous": null, "implementFrom": "Volo.CmsKit.Public.Pages.IPagePublicAppService" @@ -985,8 +934,8 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Public.Blogs.BlogPostPublicDto", - "typeSimple": "Volo.CmsKit.Public.Blogs.BlogPostPublicDto" + "type": "Volo.CmsKit.Contents.BlogPostCommonDto", + "typeSimple": "Volo.CmsKit.Contents.BlogPostCommonDto" }, "allowAnonymous": null, "implementFrom": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" @@ -1090,8 +1039,8 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" }, "allowAnonymous": null, "implementFrom": "Volo.CmsKit.Public.Blogs.IBlogPostPublicAppService" diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs index 9f43d65766..e5d2570e21 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Blogs/BlogPostPublicController.cs @@ -1,16 +1,18 @@ -using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; +using System; using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; -using Volo.Abp.Content; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Contents; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Users; namespace Volo.CmsKit.Public.Blogs; +[RequiresFeature(CmsKitFeatures.BlogEnable)] [RequiresGlobalFeature(typeof(BlogsFeature))] [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitPublicRemoteServiceConsts.ModuleName)] @@ -26,14 +28,14 @@ public class BlogPostPublicController : CmsKitPublicControllerBase, IBlogPostPub [HttpGet] [Route("{blogSlug}/{blogPostSlug}")] - public virtual Task GetAsync(string blogSlug, string blogPostSlug) + public virtual Task GetAsync(string blogSlug, string blogPostSlug) { return BlogPostPublicAppService.GetAsync(blogSlug, blogPostSlug); } [HttpGet] [Route("{blogSlug}")] - public virtual Task> GetListAsync(string blogSlug, BlogPostGetListInput input) + public virtual Task> GetListAsync(string blogSlug, BlogPostGetListInput input) { return BlogPostPublicAppService.GetListAsync(blogSlug, input); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Comments/CommentPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Comments/CommentPublicController.cs index afbf11e843..f77444431e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Comments/CommentPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Comments/CommentPublicController.cs @@ -3,11 +3,14 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; namespace Volo.CmsKit.Public.Comments; +[RequiresFeature(CmsKitFeatures.CommentEnable)] [RequiresGlobalFeature(typeof(CommentsFeature))] [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitPublicRemoteServiceConsts.ModuleName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicController.cs index 8b58a00f9a..635e228e0b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/GlobalResources/GlobalResourcePublicController.cs @@ -1,16 +1,19 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; namespace Volo.CmsKit.Public.GlobalResources; +[RequiresFeature(CmsKitFeatures.GlobalResourceEnable)] [RequiresGlobalFeature(typeof(GlobalResourcesFeature))] [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitPublicRemoteServiceConsts.ModuleName)] [Route("api/cms-kit-public/global-resources")] -public class GlobalResourcePublicController: CmsKitPublicControllerBase, IGlobalResourcePublicAppService +public class GlobalResourcePublicController : CmsKitPublicControllerBase, IGlobalResourcePublicAppService { private readonly IGlobalResourcePublicAppService _globalResourcePublicAppService; @@ -18,14 +21,14 @@ public class GlobalResourcePublicController: CmsKitPublicControllerBase, IGlobal { _globalResourcePublicAppService = globalResourcePublicAppService; } - + [HttpGet] [Route("script")] public Task GetGlobalScriptAsync() { return _globalResourcePublicAppService.GetGlobalScriptAsync(); } - + [HttpGet] [Route("style")] public Task GetGlobalStyleAsync() diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuItemPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuItemPublicController.cs index fc8820c1b2..3eb00439fb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuItemPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Menus/MenuItemPublicController.cs @@ -2,13 +2,16 @@ using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Menus; namespace Volo.CmsKit.Public.Menus; -[RequiresGlobalFeature(typeof(BlogsFeature))] +[RequiresFeature(CmsKitFeatures.MenuEnable)] +[RequiresGlobalFeature(typeof(MenuFeature))] [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitPublicRemoteServiceConsts.ModuleName)] [Route("api/cms-kit-public/menu-items")] diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs index 763fe7522d..22f2bd75bd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Pages/PagesPublicController.cs @@ -1,11 +1,15 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Contents; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; namespace Volo.CmsKit.Public.Pages; +[RequiresFeature(CmsKitFeatures.PageEnable)] [RequiresGlobalFeature(typeof(PagesFeature))] [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitPublicRemoteServiceConsts.ModuleName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Ratings/RatingPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Ratings/RatingPublicController.cs index 11e8d22a69..f793aaefc4 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Ratings/RatingPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Ratings/RatingPublicController.cs @@ -2,11 +2,14 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Volo.Abp; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; namespace Volo.CmsKit.Public.Ratings; +[RequiresFeature(CmsKitFeatures.RatingEnable)] [RequiresGlobalFeature(typeof(RatingsFeature))] [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitPublicRemoteServiceConsts.ModuleName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Reactions/ReactionPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Reactions/ReactionPublicController.cs index 4a9df74df7..6242e253a2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Reactions/ReactionPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Reactions/ReactionPublicController.cs @@ -2,11 +2,14 @@ using Microsoft.AspNetCore.Mvc; using Volo.Abp; using Volo.Abp.Application.Dtos; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; namespace Volo.CmsKit.Public.Reactions; +[RequiresFeature(CmsKitFeatures.ReactionEnable)] [RequiresGlobalFeature(typeof(ReactionsFeature))] [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitPublicRemoteServiceConsts.ModuleName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagPublicController.cs index ec45901118..1620f136da 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Tags/TagPublicController.cs @@ -1,13 +1,16 @@ -using Microsoft.AspNetCore.Mvc; -using System.Collections.Generic; +using System.Collections.Generic; using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; using Volo.Abp; +using Volo.Abp.Features; using Volo.Abp.GlobalFeatures; +using Volo.CmsKit.Features; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Tags; namespace Volo.CmsKit.Public.Tags; +[RequiresFeature(CmsKitFeatures.TagEnable)] [RequiresGlobalFeature(typeof(TagsFeature))] [RemoteService(Name = CmsKitPublicRemoteServiceConsts.RemoteServiceName)] [Area(CmsKitPublicRemoteServiceConsts.ModuleName)] diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs index 8c307e390e..81fd94406d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/CmsKit/Shared/Components/Commenting/CommentingViewComponent.cs @@ -8,7 +8,7 @@ using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.UI; using Volo.Abp.AspNetCore.Mvc.UI.Widgets; using Volo.CmsKit.Public.Comments; -using Volo.CmsKit.Public.Web.Renderers; +using Volo.CmsKit.Web.Renderers; namespace Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Commenting; diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml index d9f7ce7953..fe9227f194 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml @@ -9,9 +9,9 @@ @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.ReactionSelection @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Rating @using Volo.CmsKit.Public.Web.Pages.CmsKit.Shared.Components.Tags -@using Volo.CmsKit.Public.Web.Renderers @using Volo.Abp.AspNetCore.Mvc.UI.Packages.HighlightJs @using Volo.CmsKit.Contents +@using Volo.CmsKit.Web.Renderers @inherits CmsKitPublicPageBase @@ -32,13 +32,14 @@ } + } - @section scripts{ +@section scripts{ @if (isScrollIndexEnabled) { @@ -54,51 +55,41 @@ } -
-
- - - - -
-

@Model.BlogPost.Title

-

- - @@@Model.BlogPost.Author?.UserName - - @Model.BlogPost.CreationTime -

- @foreach (var contentFragment in Model.BlogPost.ContentFragments) +
+
+ + + + +
+

@Model.BlogPost.Title

+

+ + @@@Model.BlogPost.Author?.UserName + + @Model.BlogPost.CreationTime +

+ @await Component.InvokeAsync("ContentFragment", new { contentDto = Model.BlogPost }) +

+ @if (Model.BlogPost.LastModificationTime != null) { - if (contentFragment.Type == ContentConsts.Markdown) - { - @Html.Raw(await MarkdownRenderer.RenderAsync(contentFragment.GetProperty("Content"), allowHtmlTags: true, preventXSS: true)) - } - else if (contentFragment.Type == ContentConsts.Widget) - { - @await Component.InvokeAsync(contentFragment.GetProperty("Type"), contentFragment.ExtraProperties.ConvertToDynamicObject()) - } + @L["LastModification"].Value : @Model.BlogPost.LastModificationTime } -

- @if (Model.BlogPost.LastModificationTime != null) - { - @L["LastModification"].Value : @Model.BlogPost.LastModificationTime - } -

-
+

+
- @if (GlobalFeatureManager.Instance.IsEnabled()) + @if (GlobalFeatureManager.Instance.IsEnabled()) + { + if (Model.TagsFeature?.IsEnabled == true) { - if (Model.TagsFeature?.IsEnabled == true) + @await Component.InvokeAsync(typeof(TagViewComponent), new { - @await Component.InvokeAsync(typeof(TagViewComponent), new - { - entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, - entityId = Model.BlogPost.Id.ToString(), - urlFormat = $"/blogs/{Model.BlogSlug}?tagId={{TagId}}" - }) - } + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString(), + urlFormat = $"/blogs/{Model.BlogSlug}?tagId={{TagId}}" + }) } + }
@@ -109,10 +100,10 @@ if (Model.ReactionsFeature?.IsEnabled == true) { @await Component.InvokeAsync(typeof(ReactionSelectionViewComponent), new - { - entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, - entityId = Model.BlogPost.Id.ToString() - }) + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) } } @@ -122,10 +113,10 @@ if (Model.RatingsFeature?.IsEnabled == true) { @await Component.InvokeAsync(typeof(RatingViewComponent), new - { - entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, - entityId = Model.BlogPost.Id.ToString() - }) + { + entityType = Volo.CmsKit.Blogs.BlogPostConsts.EntityType, + entityId = Model.BlogPost.Id.ToString() + }) } } @@ -133,6 +124,7 @@
+ @if (isScrollIndexEnabled) {
@@ -140,7 +132,7 @@
@L["InThisDocument"]
- +
diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs index 6227190ab8..e1d9a3b0f7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/BlogPost.cshtml.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Mvc; using Volo.Abp.GlobalFeatures; using Volo.CmsKit.Blogs; +using Volo.CmsKit.Contents; using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Public.Blogs; @@ -15,7 +16,7 @@ public class BlogPostModel : CmsKitPublicPageModelBase [BindProperty(SupportsGet = true)] public string BlogPostSlug { get; set; } - public BlogPostPublicDto BlogPost { get; private set; } + public BlogPostCommonDto BlogPost { get; private set; } public BlogFeatureDto CommentsFeature { get; private set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs index f5f2cc2f7a..736fba5e9e 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml.cs @@ -1,11 +1,9 @@ -using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; +using System; using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; using Volo.Abp.Application.Dtos; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination; +using Volo.CmsKit.Contents; using Volo.CmsKit.Public.Blogs; using Volo.CmsKit.Users; @@ -27,7 +25,7 @@ public class IndexModel : CmsKitPublicPageModelBase [BindProperty(SupportsGet = true)] public Guid? TagId { get; set; } - public PagedResultDto Blogs { get; private set; } + public PagedResultDto Blogs { get; private set; } public PagerModel PagerModel => new PagerModel(Blogs.TotalCount, Blogs.Items.Count, CurrentPage, PageSize, Request.Path.ToString()); diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml index 4ecfa480d0..250303177b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml @@ -2,17 +2,12 @@ @addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap @using Volo.CmsKit.Contents @using System.Dynamic -@using Volo.CmsKit.Public.Web.Renderers @using Volo.Abp.Data @using Volo.Abp.AspNetCore.Mvc.UI.Packages.HighlightJs; @using Volo.Abp.AspNetCore.Mvc.UI.Widgets; -@inject IMarkdownToHtmlRenderer MarkdownRenderer - - @model Volo.CmsKit.Public.Web.Pages.Public.CmsKit.Pages.IndexModel - @section styles{ @@ -30,18 +25,7 @@ - @foreach (ContentFragment contentFragment in Model.PageDto.ContentFragments) - { - if (contentFragment.Type == ContentConsts.Markdown) - { - @Html.Raw(await MarkdownRenderer.RenderAsync(contentFragment.GetProperty("Content"), allowHtmlTags: true, preventXSS: true)) - } - else if (contentFragment.Type == ContentConsts.Widget) - { - @await Component.InvokeAsync(contentFragment.GetProperty("Type"), contentFragment.ExtraProperties.ConvertToDynamicObject()) - } - - } + @await Component.InvokeAsync("ContentFragment", new { contentDto = Model.PageDto }) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs index 1434eccb4b..7ae92d7016 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Pages/Index.cshtml.cs @@ -1,5 +1,6 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; +using Volo.CmsKit.Contents; using Volo.CmsKit.Public.Pages; using Volo.CmsKit.Web.Pages; @@ -12,9 +13,9 @@ public class IndexModel : CommonPageModel protected IPagePublicAppService PagePublicAppService { get; } - public PageDto PageDto{ get; private set; } + public PageDto PageDto { get; private set; } -public IndexModel(IPagePublicAppService pagePublicAppService) + public IndexModel(IPagePublicAppService pagePublicAppService) { PagePublicAppService = pagePublicAppService; } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/EntityTagRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/EntityTagRepository_Test.cs index c200fd01f3..a895f4a949 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/EntityTagRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Tags/EntityTagRepository_Test.cs @@ -9,11 +9,11 @@ namespace Volo.CmsKit.Tags; public abstract class EntityTagRepository_Test : CmsKitTestBase where TStartupModule : IAbpModule { - private CmsKitTestData _cmsKitTestData; - private IEntityTagRepository _entityTagRepository; - private ITagRepository _tagRepository; + private readonly CmsKitTestData _cmsKitTestData; + private readonly IEntityTagRepository _entityTagRepository; + private readonly ITagRepository _tagRepository; - public EntityTagRepository_Test() + protected EntityTagRepository_Test() { _cmsKitTestData = GetRequiredService(); _entityTagRepository = GetRequiredService(); @@ -25,7 +25,7 @@ public abstract class EntityTagRepository_Test : CmsKitTestBase< { var relatedTags = await _tagRepository.GetAllRelatedTagsAsync(_cmsKitTestData.Content_1_EntityType, _cmsKitTestData.Content_1_EntityId); - await _entityTagRepository.DeleteManyAsync(relatedTags.Select(s => s.Id).ToArray()); + await _entityTagRepository.DeleteManyAsync(relatedTags.Select(s => s.Id).ToArray(), _cmsKitTestData.Content_1_EntityId); relatedTags = await _tagRepository.GetAllRelatedTagsAsync(_cmsKitTestData.Content_1_EntityType, _cmsKitTestData.Content_1_EntityId); @@ -35,7 +35,7 @@ public abstract class EntityTagRepository_Test : CmsKitTestBase< [Fact] public async Task GetEntityIdsFilteredByTagNameAsync_ShouldWorkProperly() { - var entityIds = await _entityTagRepository.GetEntityIdsFilteredByTagNameAsync(_cmsKitTestData.TagName_1, _cmsKitTestData.EntityType1); + var entityIds = await _entityTagRepository.GetEntityIdsFilteredByTagNameAsync(_cmsKitTestData.TagName_1, _cmsKitTestData.EntityType1); entityIds.ShouldNotBeNull(); entityIds.ShouldNotBeEmpty(); diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ar.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ar.json index 4849da66e5..ada739b4d7 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ar.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ar.json @@ -54,6 +54,7 @@ "Version": "إصدار", "LanguageCode": "رمز اللغة", "FileName": "اسم الملف", - "LastCachedTime": "وقت ذاكرة التخزين" + "LastCachedTime": "وقت ذاكرة التخزين", + "Project": "مشروع " } } diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json index 57dd3c75d5..c593147804 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json @@ -54,6 +54,7 @@ "Version": "Verze", "LanguageCode": "Kód jazyka", "FileName": "Název souboru", - "LastCachedTime": "Čas uložení v mezipaměti" + "LastCachedTime": "Čas uložení v mezipaměti", + "Project": "Projekt" } } diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json index 28d5f53f47..4d92840132 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json @@ -54,6 +54,7 @@ "Version": "Version", "LanguageCode": "Sprachcode", "FileName": "Dateiname", - "LastCachedTime": "Cache-Zeit" + "LastCachedTime": "Cache-Zeit", + "Project": "Projekt" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json index 2eccecb715..7939e4a8f1 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json @@ -32,6 +32,7 @@ "DisplayName:GitHubUserAgent": "GitHub-Benutzer-Agent", "DisplayName:All": "Pull all", "DisplayName:LanguageCode": "Sprachcode", - "DisplayName:Version": "Version" + "DisplayName:Version": "Version", + "Project": "Projekt" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/el.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/el.json index d44ba001db..bacdfd56de 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/el.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/el.json @@ -54,6 +54,7 @@ "Version": "Εκδοχή", "LanguageCode": "Κωδικός γλώσσας", "FileName": "Όνομα αρχείου", - "LastCachedTime": "Χρόνος προσωρινής αποθήκευσης" + "LastCachedTime": "Χρόνος προσωρινής αποθήκευσης", + "Project": "Εργο" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en-GB.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en-GB.json index 1e3339963a..d72c523ef5 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en-GB.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en-GB.json @@ -54,6 +54,8 @@ "Version": "Version", "LanguageCode": "Language code", "FileName": "File name", - "LastCachedTime": "Cache time" + "LastCachedTime": "Cache time", + "Project": "Project", + "AdvancedFilters": "Advanced Filters" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json index d19bef7adf..86142ceb44 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json @@ -54,6 +54,8 @@ "Version": "Version", "LanguageCode": "Language code", "FileName": "File name", - "LastCachedTime": "Cache time" + "LastCachedTime": "Cache time", + "Project": "Project", + "AdvancedFilters": "Advanced Filters" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/es.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/es.json index f09eb5386b..9858f9d94a 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/es.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/es.json @@ -54,6 +54,7 @@ "Version": "Versión", "LanguageCode": "Código de idioma", "FileName": "Nombre de fichero", - "LastCachedTime": "Última actualización de caché" + "LastCachedTime": "Última actualización de caché", + "Project": "Proyecto" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fi.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fi.json index 0d0f7de507..58befd658c 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fi.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fi.json @@ -54,6 +54,7 @@ "Version": "Versio", "LanguageCode": "Kielikoodi", "FileName": "Tiedoston nimi", - "LastCachedTime": "Välimuistin aika" + "LastCachedTime": "Välimuistin aika", + "Project": "Projekti" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fr.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fr.json index f00ce0a5c9..7a6d6a89cf 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fr.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fr.json @@ -54,6 +54,7 @@ "Version": "Version", "LanguageCode": "Code de langue", "FileName": "Nom de fichier", - "LastCachedTime": "Temps de cache" + "LastCachedTime": "Temps de cache", + "Project": "Projet" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hi.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hi.json index d2a0e11876..a7d357e83e 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hi.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hi.json @@ -54,6 +54,7 @@ "Version": "संस्करण", "LanguageCode": "भाषा कोड", "FileName": "फ़ाइल का नाम", - "LastCachedTime": "कैश समय" + "LastCachedTime": "कैश समय", + "Project": "परियोजना" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hu.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hu.json index 10d1611838..b10e721550 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hu.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hu.json @@ -1,61 +1,61 @@ { - "culture": "hu", - "texts": { - "Permission:DocumentManagement": "Dokumentum kezelés", - "Permission:Projects": "Projektek", - "Permission:Edit": "Szerkesztés", - "Permission:Delete": "Törlés", - "Permission:Create": "Létrehozás", - "Permission:Documents": "Dokumentumok", - "Menu:Documents": "Dokumentumok", - "Menu:DocumentManagement": "Dokumentumok", - "Menu:ProjectManagement": "Projektek", - "CreateANewProject": "Új projekt létrehozása", - "Edit": "Szerkesztés", - "Create": "Létrehozás", - "Pull": "Pull", - "Projects": "Projektek", - "Name": "Név", - "ShortName": "Rövid név", - "DocumentStoreType": "Dokumentumtároló típus", - "Format": "Formátum", - "ShortNameInfoText": "Használjon egyedi URL-t.", - "DisplayName:Name": "Név", - "DisplayName:ShortName": "Rövid név", - "DisplayName:Format": "Formátum", - "DisplayName:DefaultDocumentName": "Alapértlemezett dokumentum név", - "DisplayName:NavigationDocumentName": "Navigációs dokumentum neve", - "DisplayName:MinimumVersion": "Minimális verzió", - "DisplayName:MainWebsiteUrl": "A fő webhely URL-je", - "DisplayName:LatestVersionBranchName": "Az utolsó verzió branch neve", - "DisplayName:GitHubRootUrl": "GitHub root URL", - "DisplayName:GitHubAccessToken": "GitHub access token", - "DisplayName:GitHubUserAgent": "GitHub user agent", - "DisplayName:GithubVersionProviderSource": "GitHub version provider source", - "DisplayName:VersionBranchPrefix": "Version branch prefix", - "DisplayName:All": "Pull all", - "DisplayName:LanguageCode": "Nyelv kódja", - "DisplayName:Version": "Verzió", - "Documents": "Dokumentumok", - "RemoveFromCache": "Távolítsa el a gyorsítótárból", - "Reindex": "Újraindexálás", - "ReindexCompleted": "Újraindexálás teljes.", - "RemovedFromCache": "Távolítsa el a gyorsítótárból", - "RemoveFromCacheConfirmation": "Biztosan eltávolítja ezt az elemet a gyorsítótárból?", - "ReIndexDocumentConfirmation": "Biztosan újraindexeli ezt az elemet?", - "DeleteDocumentFromDbConfirmation": "Biztosan törli ezt az elemet az adatbázisból?", - "DeleteFromDatabase": "Törlés az adatbázisból", - "Deleted": "Törölt", - "Search": "Keresés", - "StartDate": "Indulási dátum", - "EndDate": "Befejezés dátuma", - "CreationTime": "Létrehozás ideje", - "LastUpdateTime": "Utolsó módosítás ideje", - "LastSignificantUpdateTime": "Utolsó jelentős frissítés", - "Version": "Verzió", - "LanguageCode": "Nyelv kódja", - "FileName": "Filenév", - "LastCachedTime": "Cache idő" - } + "culture": "hu", + "texts": { + "Permission:DocumentManagement": "Dokumentum kezelés", + "Permission:Projects": "Projektek", + "Permission:Edit": "Szerkesztés", + "Permission:Delete": "Törlés", + "Permission:Create": "Létrehozás", + "Permission:Documents": "Dokumentumok", + "Menu:Documents": "Dokumentumok", + "Menu:DocumentManagement": "Dokumentumok", + "Menu:ProjectManagement": "Projektek", + "CreateANewProject": "Új projekt létrehozása", + "Edit": "Szerkesztés", + "Create": "Létrehozás", + "Pull": "Pull", + "Projects": "Projektek", + "Name": "Név", + "ShortName": "Rövid név", + "DocumentStoreType": "Dokumentumtároló típus", + "Format": "Formátum", + "ShortNameInfoText": "Használjon egyedi URL-t.", + "DisplayName:Name": "Név", + "DisplayName:ShortName": "Rövid név", + "DisplayName:Format": "Formátum", + "DisplayName:DefaultDocumentName": "Alapértlemezett dokumentum név", + "DisplayName:NavigationDocumentName": "Navigációs dokumentum neve", + "DisplayName:MinimumVersion": "Minimális verzió", + "DisplayName:MainWebsiteUrl": "A fő webhely URL-je", + "DisplayName:LatestVersionBranchName": "Az utolsó verzió branch neve", + "DisplayName:GitHubRootUrl": "GitHub root URL", + "DisplayName:GitHubAccessToken": "GitHub access token", + "DisplayName:GitHubUserAgent": "GitHub user agent", + "DisplayName:GithubVersionProviderSource": "GitHub version provider source", + "DisplayName:VersionBranchPrefix": "Version branch prefix", + "DisplayName:All": "Pull all", + "DisplayName:LanguageCode": "Nyelv kódja", + "DisplayName:Version": "Verzió", + "Documents": "Dokumentumok", + "RemoveFromCache": "Távolítsa el a gyorsítótárból", + "Reindex": "Újraindexálás", + "ReindexCompleted": "Újraindexálás teljes.", + "RemovedFromCache": "Távolítsa el a gyorsítótárból", + "RemoveFromCacheConfirmation": "Biztosan eltávolítja ezt az elemet a gyorsítótárból?", + "ReIndexDocumentConfirmation": "Biztosan újraindexeli ezt az elemet?", + "DeleteDocumentFromDbConfirmation": "Biztosan törli ezt az elemet az adatbázisból?", + "DeleteFromDatabase": "Törlés az adatbázisból", + "Deleted": "Törölt", + "Search": "Keresés", + "StartDate": "Indulási dátum", + "EndDate": "Befejezés dátuma", + "CreationTime": "Létrehozás ideje", + "LastUpdateTime": "Utolsó módosítás ideje", + "LastSignificantUpdateTime": "Utolsó jelentős frissítés", + "Version": "Verzió", + "LanguageCode": "Nyelv kódja", + "FileName": "File név", + "LastCachedTime": "Cache idő", + "Project": "Projekt" } - \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/is.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/is.json index 101aab8182..c7d13791d0 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/is.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/is.json @@ -54,6 +54,7 @@ "Version": "Útgáfa", "LanguageCode": "Túngumála kóði", "FileName": "Skráar nafn", - "LastCachedTime": "Tími geymt í skyndiminni" + "LastCachedTime": "Tími geymt í skyndiminni", + "Project": "Verkefni" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json index 1a4d8e3f4c..b6c95e5b58 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json @@ -54,6 +54,7 @@ "Version": "Versione", "LanguageCode": "Codice della lingua", "FileName": "Nome del file", - "LastCachedTime": "Tempo di cache" + "LastCachedTime": "Tempo di cache", + "Project": "Progetto" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json index 6451eed41e..e8cd5d730a 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json @@ -54,6 +54,7 @@ "Version": "Versie", "LanguageCode": "Taalcode", "FileName": "Bestandsnaam", - "LastCachedTime": "Cache tijd" + "LastCachedTime": "Cache tijd", + "Project": "Project" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pl-PL.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pl-PL.json index 26e4b8bc7f..5f1025a9a6 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pl-PL.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pl-PL.json @@ -54,6 +54,7 @@ "Version": "Wersja", "LanguageCode": "Kod języka", "FileName": "Nazwa pliku", - "LastCachedTime": "Czas w pamięci podręcznej" + "LastCachedTime": "Czas w pamięci podręcznej", + "Project": "Projekt" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pt-BR.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pt-BR.json index 7daa4964b3..06ee0a6dfc 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pt-BR.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pt-BR.json @@ -54,6 +54,7 @@ "Version": "Versão", "LanguageCode": "Código de idioma", "FileName": "Nome do arquivo", - "LastCachedTime": "Tempo de cache" + "LastCachedTime": "Tempo de cache", + "Project": "Projeto" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json index 02198cb96c..b236915665 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json @@ -54,6 +54,7 @@ "Version": "Versiune", "LanguageCode": "Codul limbii", "FileName": "Nume fişier", - "LastCachedTime": "Durată cache" + "LastCachedTime": "Durată cache", + "Project": "Proiect" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ru.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ru.json index 1b7082d189..16102717c2 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ru.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ru.json @@ -54,6 +54,7 @@ "Version": "Версия", "LanguageCode": "Код языка", "FileName": "Имя файла", - "LastCachedTime": "Время кеширования" + "LastCachedTime": "Время кеширования", + "Project": "Проект" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sk.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sk.json index ab0bc3e008..8041e796f0 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sk.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sk.json @@ -54,6 +54,7 @@ "Version": "Verzia", "LanguageCode": "Kód jazyka", "FileName": "Názov súboru", - "LastCachedTime": "Čas vyrovnávacej pamäte" + "LastCachedTime": "Čas vyrovnávacej pamäte", + "Project": "Projekt" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json index f2061a9fd5..a3445dc87b 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json @@ -54,6 +54,7 @@ "Version": "Različica", "LanguageCode": "Jezikovna koda", "FileName": "Ime datoteke", - "LastCachedTime": "Čas predpomnilnika" + "LastCachedTime": "Čas pred pomnilnika", + "Project": "Projekt" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json index 57c72b6db5..cfd58936d7 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json @@ -51,9 +51,11 @@ "CreationTime": "oluşturma zamanı", "LastUpdateTime": "Son Güncelleme", "LastSignificantUpdateTime": "Son önemli güncelleme", - "Version": "sürüm", + "Version": "Sürüm", "LanguageCode": "Dil kodu", "FileName": "Dosya adı", - "LastCachedTime": "Önbellek süresi" + "LastCachedTime": "Önbellek süresi", + "Project": "Proje", + "AdvancedFilters": "Gelişmiş Filtre" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/vi.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/vi.json index 350d995cfe..c44d2feb8f 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/vi.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/vi.json @@ -54,6 +54,7 @@ "Version": "Phiên bản", "LanguageCode": "Mật ngữ", "FileName": "Tên tệp", - "LastCachedTime": "Thời gian lưu vào bộ nhớ đệm" + "LastCachedTime": "Thời gian lưu vào bộ nhớ đệm", + "Project": "Dự án" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json index c0985f956a..f81333d38e 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json @@ -54,6 +54,7 @@ "Version": "版本", "LanguageCode": "语言代码", "FileName": "文件名称", - "LastCachedTime": "缓存项" + "LastCachedTime": "缓存项", + "Project": "项目" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json index cc76f54510..54d86eca33 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json @@ -54,6 +54,7 @@ "Version": "版本", "LanguageCode": "語言代碼", "FileName": "文檔名稱", - "LastCachedTime": "緩存時間" + "LastCachedTime": "緩存時間", + "Project": "项目" } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml index 5873afc279..738327def9 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml @@ -32,147 +32,150 @@
-
-
-
-
@L["Name"].Value
- - -
-
+ -
+
-
@L["Version"].Value
+
@L["Project"].Value
+ id="ProjectId" + name="ProjectId" + class="form-control">
-
+ -
+
-
@L["LanguageCode"].Value
+
@L["Name"].Value
+ id="Name" + name="Name" + class="form-control">
-
- + -
+
-
@L["FileName"].Value
+
@L["Version"].Value
+ id="Version" + name="Version" + class="form-control">
-
- -
+ + +
-
@L["Format"].Value
+
@L["LanguageCode"].Value
+ id="LanguageCode" + name="LanguageCode" + class="form-control">
-
+ + + +
@L["AdvancedFilters"] + + +
-
+
@@ -186,7 +189,7 @@ @L["FileName"] @L["Format"] @L["CreationTime"] - @L["LastUpdatedTime"] + @L["LastUpdateTime"] @L["LastSignificantUpdateTime"] @L["LastCachedTime"] diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml.cs index 559eaab5eb..5c45d1a9a7 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/Index.cshtml.cs @@ -1,18 +1,14 @@ -using System; -using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using Volo.Docs.Documents; -namespace Volo.Docs.Admin.Pages.Docs.Admin.Documents +namespace Volo.Docs.Admin.Pages.Docs.Admin.Documents; + +[Authorize(DocsAdminPermissions.Projects.Default)] +public class IndexModel : DocsAdminPageModel { - [Authorize(DocsAdminPermissions.Projects.Default)] - public class IndexModel : DocsAdminPageModel + public virtual Task OnGet() { - public virtual Task OnGet() - { - return Task.FromResult(Page()); - } + return Task.FromResult(Page()); } } \ No newline at end of file diff --git a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js index 928990e160..5f4dc9b8d7 100644 --- a/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js +++ b/modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Documents/index.js @@ -12,7 +12,6 @@ $(function () { name: $('#Name').val(), version: $('#Version').val(), languageCode: $('#LanguageCode').val(), - fileName: $('#FileName').val(), format: $('#Format').val(), creationTimeMin: getFormattedDate($('#CreationTimeMin')), creationTimeMax: getFormattedDate($('#CreationTimeMax')), @@ -158,4 +157,8 @@ $(function () { e.preventDefault(); dataTable.ajax.reload(); }); + + $("#AdvancedFilterSectionToggler").click(function (e) { + $("#AdvancedFilterSection").toggle(); + }); }); diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/DocsDbProperties.cs b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/AbpDocsDbProperties.cs similarity index 83% rename from modules/docs/src/Volo.Docs.Domain/Volo/Docs/DocsDbProperties.cs rename to modules/docs/src/Volo.Docs.Domain/Volo/Docs/AbpDocsDbProperties.cs index 7f534d4305..093bf477a6 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/DocsDbProperties.cs +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/AbpDocsDbProperties.cs @@ -1,6 +1,6 @@ namespace Volo.Docs { - public static class DocsDbProperties + public static class AbpDocsDbProperties { public static string DbTablePrefix { get; set; } = "Docs"; diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en-GB.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en-GB.json index 02026775d7..a8cf1c6627 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en-GB.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en-GB.json @@ -19,7 +19,7 @@ "SuccessfullyReIndexAllProject": "Successfully reindexed all projects", "InThisDocument": "In this document", "GoToTop": "Go to top", - "Projects": "Project(s)", + "Projects": "Projects", "NoProjectWarning": "There are no Projects yet!", "DocumentNotFound": "Oops, the requested document was not found!", "ProjectNotFound": "Oops, the requested project was not found!", @@ -36,4 +36,4 @@ "Volo.Docs.Domain:010002": "ShortName {ShortName} already exists.", "Preview": "preview" } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json index bc5c7cf826..236589ee3c 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/en.json @@ -19,7 +19,7 @@ "SuccessfullyReIndexAllProject": "Successfully reindexed all projects", "InThisDocument": "In this document", "GoToTop": "Go to top", - "Projects": "Project(s)", + "Projects": "Projects", "NoProjectWarning": "There are no projects yet!", "DocumentNotFound": "Oops, the requested document was not found!", "ProjectNotFound": "Oops, the requested project was not found!", @@ -38,4 +38,4 @@ "Search": "Search", "SearchResults": "Search Results" } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json index ca6128638f..384fe5fcd3 100644 --- a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/tr.json @@ -19,7 +19,7 @@ "SuccessfullyReIndexAllProject": "Tüm projeler başarıyla yeniden indekslendi", "InThisDocument": "Bu dökümanda", "GoToTop": "En üste çık", - "Projects": "Proje(ler)", + "Projects": "Projeler", "NoProjectWarning": "Hiç proje yok!", "DocumentNotFound": "Aradığınız döküman bulunamadı!", "ProjectNotFound": "Talep edilen proje bulunamadı!", @@ -38,4 +38,4 @@ "Search": "Arama", "SearchResults": "Arama Sonuçları" } -} \ No newline at end of file +} diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContext.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContext.cs index 911db81a15..9ce0c59dc3 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContext.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContext.cs @@ -8,7 +8,7 @@ using Volo.Docs.Projects; namespace Volo.Docs.EntityFrameworkCore { [IgnoreMultiTenancy] - [ConnectionStringName(DocsDbProperties.ConnectionStringName)] + [ConnectionStringName(AbpDocsDbProperties.ConnectionStringName)] public class DocsDbContext: AbpDbContext, IDocsDbContext { public DbSet Projects { get; set; } diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs index f3a5997048..745b822f17 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/DocsDbContextModelBuilderExtensions.cs @@ -21,7 +21,7 @@ namespace Volo.Docs.EntityFrameworkCore builder.Entity(b => { - b.ToTable(DocsDbProperties.DbTablePrefix + "Projects", DocsDbProperties.DbSchema); + b.ToTable(AbpDocsDbProperties.DbTablePrefix + "Projects", AbpDocsDbProperties.DbSchema); b.ConfigureByConvention(); @@ -37,7 +37,7 @@ namespace Volo.Docs.EntityFrameworkCore builder.Entity(b => { - b.ToTable(DocsDbProperties.DbTablePrefix + "Documents", DocsDbProperties.DbSchema); + b.ToTable(AbpDocsDbProperties.DbTablePrefix + "Documents", AbpDocsDbProperties.DbSchema); b.ConfigureByConvention(); @@ -61,7 +61,7 @@ namespace Volo.Docs.EntityFrameworkCore builder.Entity(b => { - b.ToTable(DocsDbProperties.DbTablePrefix + "DocumentContributors", DocsDbProperties.DbSchema); + b.ToTable(AbpDocsDbProperties.DbTablePrefix + "DocumentContributors", AbpDocsDbProperties.DbSchema); b.ConfigureByConvention(); diff --git a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/IDocsDbContext.cs b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/IDocsDbContext.cs index 4d79609718..e85f9b4aa5 100644 --- a/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/IDocsDbContext.cs +++ b/modules/docs/src/Volo.Docs.EntityFrameworkCore/Volo/Docs/EntityFrameworkCore/IDocsDbContext.cs @@ -8,7 +8,7 @@ using Volo.Docs.Projects; namespace Volo.Docs.EntityFrameworkCore { [IgnoreMultiTenancy] - [ConnectionStringName(DocsDbProperties.ConnectionStringName)] + [ConnectionStringName(AbpDocsDbProperties.ConnectionStringName)] public interface IDocsDbContext : IEfCoreDbContext { DbSet Projects { get; } diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContext.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContext.cs index 3bfb5df491..b566801631 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContext.cs +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContext.cs @@ -8,7 +8,7 @@ using Volo.Docs.Documents; namespace Volo.Docs.MongoDB { [IgnoreMultiTenancy] - [ConnectionStringName(DocsDbProperties.ConnectionStringName)] + [ConnectionStringName(AbpDocsDbProperties.ConnectionStringName)] public class DocsMongoDbContext : AbpMongoDbContext, IDocsMongoDbContext { public IMongoCollection Projects => Collection(); diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContextExtensions.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContextExtensions.cs index 56d367c651..436fb1b527 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContextExtensions.cs +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/DocsMongoDbContextExtensions.cs @@ -14,12 +14,12 @@ namespace Volo.Docs.MongoDB builder.Entity(b => { - b.CollectionName = DocsDbProperties.DbTablePrefix + "Projects"; + b.CollectionName = AbpDocsDbProperties.DbTablePrefix + "Projects"; }); builder.Entity(b => { - b.CollectionName = DocsDbProperties.DbTablePrefix + "DocumentS"; + b.CollectionName = AbpDocsDbProperties.DbTablePrefix + "DocumentS"; }); } } diff --git a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/IDocsMongoDbContext.cs b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/IDocsMongoDbContext.cs index f6b748611c..ecc8267fd8 100644 --- a/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/IDocsMongoDbContext.cs +++ b/modules/docs/src/Volo.Docs.MongoDB/Volo/Docs/MongoDB/IDocsMongoDbContext.cs @@ -8,7 +8,7 @@ using Volo.Docs.Projects; namespace Volo.Docs.MongoDB { [IgnoreMultiTenancy] - [ConnectionStringName(DocsDbProperties.ConnectionStringName)] + [ConnectionStringName(AbpDocsDbProperties.ConnectionStringName)] public interface IDocsMongoDbContext : IAbpMongoDbContext { IMongoCollection Projects { get; } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/AbpFeatureManagementBlazorModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/AbpFeatureManagementBlazorModule.cs index 8bfee863b1..87882015fc 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/AbpFeatureManagementBlazorModule.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/AbpFeatureManagementBlazorModule.cs @@ -1,15 +1,24 @@ using Volo.Abp.AspNetCore.Components.Web.Theming; +using Volo.Abp.FeatureManagement.Blazor.Settings; using Volo.Abp.Features; using Volo.Abp.Modularity; +using Volo.Abp.SettingManagement.Blazor; namespace Volo.Abp.FeatureManagement.Blazor; [DependsOn( typeof(AbpAspNetCoreComponentsWebThemingModule), typeof(AbpFeatureManagementApplicationContractsModule), - typeof(AbpFeaturesModule) + typeof(AbpFeaturesModule), + typeof(AbpSettingManagementBlazorModule) )] public class AbpFeatureManagementBlazorModule : AbpModule { - + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Contributors.Add(new FeatureSettingManagementComponentContributor()); + }); + } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureSettingGroup/FeatureSettingManagementComponent.razor b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureSettingGroup/FeatureSettingManagementComponent.razor new file mode 100644 index 0000000000..341d405e4e --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureSettingGroup/FeatureSettingManagementComponent.razor @@ -0,0 +1,12 @@ +@inherits Volo.Abp.AspNetCore.Components.AbpComponentBase + +@if (Settings != null && Settings.HasManageHostFeaturesPermission) +{ +
+ +
+ + +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureSettingGroup/FeatureSettingManagementComponent.razor.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureSettingGroup/FeatureSettingManagementComponent.razor.cs new file mode 100644 index 0000000000..09b31b9609 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureSettingGroup/FeatureSettingManagementComponent.razor.cs @@ -0,0 +1,40 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using Volo.Abp.AspNetCore.Components; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.FeatureManagement.Localization; +using Volo.Abp.Features; + +namespace Volo.Abp.FeatureManagement.Blazor.Components.FeatureSettingGroup; + +public partial class FeatureSettingManagementComponent : AbpComponentBase +{ + [Inject] + protected IStringLocalizer L { get; set; } + + [Inject] + protected PermissionChecker PermissionChecker { get; set; } + + protected FeatureManagementModal FeatureManagementModal; + + protected FeatureSettingViewModel Settings; + + protected async override Task OnInitializedAsync() + { + Settings = new FeatureSettingViewModel + { + HasManageHostFeaturesPermission = await PermissionChecker.IsGrantedAsync(FeatureManagementPermissions.ManageHostFeatures) + }; + } + + protected virtual async Task OnManageHostFeaturesClicked() + { + await FeatureManagementModal.OpenAsync(TenantFeatureValueProvider.ProviderName); + } +} + +public class FeatureSettingViewModel +{ + public bool HasManageHostFeaturesPermission { get; set; } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Settings/FeatureSettingManagementComponentContributor.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Settings/FeatureSettingManagementComponentContributor.cs new file mode 100644 index 0000000000..caeb17de26 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Settings/FeatureSettingManagementComponentContributor.cs @@ -0,0 +1,41 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; +using Volo.Abp.FeatureManagement.Blazor.Components.FeatureSettingGroup; +using Volo.Abp.FeatureManagement.Localization; +using Volo.Abp.SettingManagement.Blazor; + +namespace Volo.Abp.FeatureManagement.Blazor.Settings; + +public class FeatureSettingManagementComponentContributor: ISettingComponentContributor +{ + public virtual async Task ConfigureAsync(SettingComponentCreationContext context) + { + if (!await CheckPermissionsInternalAsync(context)) + { + return; + } + + var l = context.ServiceProvider.GetRequiredService>(); + context.Groups.Add( + new SettingComponentGroup( + "Volo.Abp.Feature", + l["Permission:FeatureManagement"], + typeof(FeatureSettingManagementComponent) + ) + ); + } + + public virtual async Task CheckPermissionsAsync(SettingComponentCreationContext context) + { + return await CheckPermissionsInternalAsync(context); + } + + protected virtual async Task CheckPermissionsInternalAsync(SettingComponentCreationContext context) + { + var authorizationService = context.ServiceProvider.GetRequiredService(); + + return await authorizationService.IsGrantedAsync(FeatureManagementPermissions.ManageHostFeatures); + } +} diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Volo.Abp.FeatureManagement.Blazor.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Volo.Abp.FeatureManagement.Blazor.csproj index 22dab36cff..49d7ffd6c6 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Volo.Abp.FeatureManagement.Blazor.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Volo.Abp.FeatureManagement.Blazor.csproj @@ -14,6 +14,7 @@ + diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ar.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ar.json index 5fff0f6d8a..c482493f88 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ar.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ar.json @@ -3,6 +3,7 @@ "texts": { "Features": "المميزات", "NoFeatureFoundMessage": "لا توجد أي ميزة متاحة.", + "ManageHostFeatures": "إدارة ميزات المضيف", "Permission:FeatureManagement": "إدارة الميزات", "Permission:FeatureManagement.ManageHostFeatures": "إدارة ميزات المضيف", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} قيمة الميزة غير صالحة!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/cs.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/cs.json index 36bc77b789..2e8b78a947 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/cs.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/cs.json @@ -3,6 +3,7 @@ "texts": { "Features": "Funkce", "NoFeatureFoundMessage": "Nejsou zde dostupné žádné funkce.", + "ManageHostFeatures": "Správa funkcí hostitele", "Permission:FeatureManagement": "Správa funkcí", "Permission:FeatureManagement.ManageHostFeatures": "Správa funkcí hostitele", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "Hodnota funkce {0} není platná!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de-DE.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de-DE.json index af3a7601af..0c7d1a40eb 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de-DE.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de-DE.json @@ -3,6 +3,7 @@ "texts": { "Features": "Features", "NoFeatureFoundMessage": "Es ist kein Feature verfügbar.", + "ManageHostFeatures": "Host-Features verwalten", "Permission:FeatureManagement": "Feature-Verwaltung", "Permission:FeatureManagement.ManageHostFeatures": "Host-Features verwalten", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} Feature-Wert ist ungültig!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/el.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/el.json index 6e5529f2cd..744b94a2c5 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/el.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/el.json @@ -3,6 +3,7 @@ "texts": { "Features": "Χαρακτηριστικά", "NoFeatureFoundMessage": "Δεν διατίθεται καποιο χαρακτηριστικο.", + "ManageHostFeatures": "Διαχείριση δυνατοτήτων του Οικοδεσπότη", "Permission:FeatureManagement": "Διαχείριση χαρακτηριστικών", "Permission:FeatureManagement.ManageHostFeatures": "Διαχείριση Χαρακτηριστικών Εξυπηρετήτη", "Volo.Abp.FeatureManagement:InvalidFeatureValue" : "Η τιμή χαρακτηριστικού {0} δεν ειναι έγκυρη!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en-GB.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en-GB.json index 09b4b306b7..0c61bfbbb5 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en-GB.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en-GB.json @@ -3,6 +3,7 @@ "texts": { "Features": "Features", "NoFeatureFoundMessage": "There isn't any available feature.", + "ManageHostFeatures": "Manage Host features", "Permission:FeatureManagement": "Feature management", "Permission:FeatureManagement.ManageHostFeatures": "Manage Host features", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} feature value is not valid!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json index c5194de6c7..8033d2c6a0 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/en.json @@ -3,6 +3,7 @@ "texts": { "Features": "Features", "NoFeatureFoundMessage": "There isn't any available feature.", + "ManageHostFeatures": "Manage Host features", "Permission:FeatureManagement": "Feature management", "Permission:FeatureManagement.ManageHostFeatures": "Manage Host features", "Volo.Abp.FeatureManagement:InvalidFeatureValue" : "{0} feature value is not valid!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/es.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/es.json index 74e51eb9d4..7f4ae2055c 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/es.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/es.json @@ -3,6 +3,7 @@ "texts": { "Features": "Características", "NoFeatureFoundMessage": "No hay ninguna característica disponible.", + "ManageHostFeatures": "Administrar funciones de host", "Permission:FeatureManagement": "Gestión de características", "Permission:FeatureManagement.ManageHostFeatures": "Gestionar características del Host", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} valor de característica no es valido!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fa.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fa.json index af7a5ff5a0..fd1af964fa 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fa.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fa.json @@ -3,6 +3,7 @@ "texts": { "Features": "ویژگی ها", "NoFeatureFoundMessage": "هیچ ویژگی ای در دسترس نمی باشد.", + "ManageHostFeatures": "مدیریت ویژگی های میزبان", "Permission:FeatureManagement": "مدیریت ویژگی ها", "Permission:FeatureManagement.ManageHostFeatures": "مدیریت ویژگی های میزبان", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} مقدار ویژگی صحیح نمی باشد!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fi.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fi.json index 73c352c5b2..43c3ede121 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fi.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fi.json @@ -3,6 +3,7 @@ "texts": { "Features": "ominaisuudet", "NoFeatureFoundMessage": "Ei ole mitään käytettävissä olevaa ominaisuutta.", + "ManageHostFeatures": "Hallinnoi isäntäominaisuuksia", "Permission:FeatureManagement": "Ominaisuuden hallinta", "Permission:FeatureManagement.ManageHostFeatures": "Hallinnoi isäntäominaisuuksia", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "Ominaisuuden {0} arvo ei kelpaa!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fr.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fr.json index 5983edf8a3..44a6a59a14 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fr.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/fr.json @@ -3,6 +3,7 @@ "texts": { "Features": "Fonctionnalités", "NoFeatureFoundMessage": "Il n'y a aucune fonctionnalité disponible.", + "ManageHostFeatures": "Gérer les fonctionnalités de l’hôte", "Permission:FeatureManagement": "Gestion des fonctionnalités", "Permission:FeatureManagement.ManageHostFeatures": "Gérer les fonctionnalités de l'hôte", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "La valeur de la fonctionnalité {0} n'est pas valide!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/hi.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/hi.json index 51fe35a788..303b2ff84d 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/hi.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/hi.json @@ -3,6 +3,7 @@ "texts": { "Features": "विशेषताएं", "NoFeatureFoundMessage": "कोई भी उपलब्ध सुविधा नहीं है।", + "ManageHostFeatures": "होस्ट सुविधाएँ प्रबंधित करें", "Permission:FeatureManagement": "सुविधा प्रबंधन", "Permission:FeatureManagement.ManageHostFeatures": "होस्ट सुविधाएँ प्रबंधित करें", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} सुविधा मान मान्य नहीं है!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/hu.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/hu.json index a7e1b8378e..db82d25610 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/hu.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/hu.json @@ -3,6 +3,7 @@ "texts": { "Features": "Funkciók", "NoFeatureFoundMessage": "Nincs elérhető funkció.", + "ManageHostFeatures": "Host funkciók kezelése", "Permission:FeatureManagement": "Funkciókezelés", "Permission:FeatureManagement.ManageHostFeatures": "Host funkciók kezelése", "Volo.Abp.FeatureManagement:InvalidFeatureValue" : "A (z) {0} szolgáltatás értéke érvénytelen!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/is.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/is.json index e245bf5a54..1aac3eb952 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/is.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/is.json @@ -3,6 +3,7 @@ "texts": { "Features": "Eiginleikar", "NoFeatureFoundMessage": "Enginn eiginleiki í boði.", + "ManageHostFeatures": "Stjórna Gestgjafa Eiginleikum", "Permission:FeatureManagement": "Eiginleika stjórnun", "Permission:FeatureManagement.ManageHostFeatures": "Stjórna Gestgjafa Eiginleikum", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "eiginleikagildið {0} er ekki gilt" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/it.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/it.json index ba77671388..ee08666365 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/it.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/it.json @@ -3,6 +3,7 @@ "texts": { "Features": "Funzionalità", "NoFeatureFoundMessage": "Non ci sono funzioni disponibili.", + "ManageHostFeatures": "Gestisci le funzionalità dell'host", "Permission:FeatureManagement": "Gestione funzionalità", "Permission:FeatureManagement.ManageHostFeatures": "Gestisci le funzionalità dell'host", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "Il valore dell'elemento {0} non è valido!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/nl.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/nl.json index c34ae5cc93..f34188e0a6 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/nl.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/nl.json @@ -3,6 +3,7 @@ "texts": { "Features": "Functies", "NoFeatureFoundMessage": "Er is geen functie beschikbaar.", + "ManageHostFeatures": "Beheer host functies", "Permission:FeatureManagement": "Functiebeheer", "Permission:FeatureManagement.ManageHostFeatures": "Beheer host functies", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} functie-waarde is niet geldig!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/pl-PL.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/pl-PL.json index 6eff64c1b0..5be57e6198 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/pl-PL.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/pl-PL.json @@ -3,6 +3,7 @@ "texts": { "Features": "Funkcje", "NoFeatureFoundMessage": "Brak dostępnej funkcji.", + "ManageHostFeatures": "Zarządzaj funkcjami hosta", "Permission:FeatureManagement": "Zarządzanie funkcjami", "Permission:FeatureManagement.ManageHostFeatures": "Zarządzaj funkcjami hosta", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} wartość funkcji jest nieprawidłowa!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/pt-BR.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/pt-BR.json index a50ec6d471..570b9a40d5 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/pt-BR.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/pt-BR.json @@ -3,6 +3,7 @@ "texts": { "Features": "Funcionalidades", "NoFeatureFoundMessage": "Não há nenhuma funcionalidade disponivel.", + "ManageHostFeatures": "Gerenciar recursos do Host", "Permission:FeatureManagement": "Gerenciamento de recursos", "Permission:FeatureManagement.ManageHostFeatures": "Gerenciar recursos do Host", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "O valor do recurso {0} não é válido!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ro-RO.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ro-RO.json index 824d789291..8e42f19123 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ro-RO.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ro-RO.json @@ -3,6 +3,7 @@ "texts": { "Features": "Caracteristici", "NoFeatureFoundMessage": "Nu există nicio caracteristică disponibilă.", + "ManageHostFeatures": "Administraţi caracteristicile de host", "Permission:FeatureManagement": "Administrare caracteristici", "Permission:FeatureManagement.ManageHostFeatures": "Gestionare caracteristici gazdă", "Volo.Abp.FeatureManagement:InvalidFeatureValue" : "Valoarea {0} a caracteristicii nu este validă!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ru.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ru.json index bdcb53005d..e72a87388a 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ru.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/ru.json @@ -3,6 +3,7 @@ "texts": { "Features": "Функциональные возможности", "NoFeatureFoundMessage": "Нет доступных функциональных возможностей.", + "ManageHostFeatures": "Управление функциями хоста", "Permission:FeatureManagement": "Управление функциями", "Permission:FeatureManagement.ManageHostFeatures": "Управление функциями хоста", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "Недопустимое значение функции {0}!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sk.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sk.json index 817d1ba801..fe7772a5b1 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sk.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sk.json @@ -3,6 +3,7 @@ "texts": { "Features": "Funkcie", "NoFeatureFoundMessage": "Nie je k dispozícii žiadna funkcia.", + "ManageHostFeatures": "Spravovať funkcie poskytovateľa", "Permission:FeatureManagement": "Správa funkcií", "Permission:FeatureManagement.ManageHostFeatures": "Správa funkcií poskytovateľa", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "Hodnota funkcie {0} nie je platná!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sl.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sl.json index 2cec7a09c0..29987fa094 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sl.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/sl.json @@ -3,6 +3,7 @@ "texts": { "Features": "Funkcionalnosti", "NoFeatureFoundMessage": "Na voljo ni nobene funkcionalnosti.", + "ManageHostFeatures": "Upravljajte funkcije gostitelja", "Permission:FeatureManagement": "Upravljanje funkcij", "Permission:FeatureManagement.ManageHostFeatures": "Upravljajte funkcije gostitelja", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "Vrednost funkcije {0} ni veljavna!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json index 421b66824d..7f7ca999e6 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/tr.json @@ -3,6 +3,7 @@ "texts": { "Features": "Özellikler", "NoFeatureFoundMessage": "Hiç özellik yok.", + "ManageHostFeatures": "Host özelliklerini yönetin", "Permission:FeatureManagement": "Özellik yönetimi", "Permission:FeatureManagement.ManageHostFeatures": "Host özelliklerini düzenle", "Volo.Abp.FeatureManagement:InvalidFeatureValue" : "{0} özellik değeri geçerli değil!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/vi.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/vi.json index a87f6f719d..36195a8ce4 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/vi.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/vi.json @@ -3,6 +3,7 @@ "texts": { "Features": "Tính năng", "NoFeatureFoundMessage": "Không có bất kỳ tính năng khả dụng nào.", + "ManageHostFeatures": "Quản lý các tính năng của Máy chủ lưu trữ", "Permission:FeatureManagement": "Quản lý tính năng", "Permission:FeatureManagement.ManageHostFeatures": "Quản lý các tính năng của Máy chủ lưu trữ", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "Giá trị tính năng {0} không hợp lệ!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hans.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hans.json index 473f581b34..41ac0eb5b5 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hans.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hans.json @@ -3,6 +3,7 @@ "texts": { "Features": "功能", "NoFeatureFoundMessage": "没有可用的功能.", + "ManageHostFeatures": "管理Host特性", "Permission:FeatureManagement": "特性管理", "Permission:FeatureManagement.ManageHostFeatures": "管理Host特性", "Volo.Abp.FeatureManagement:InvalidFeatureValue" : "{0}功能的值无效!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hant.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hant.json index dc84e7c104..41f625352f 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hant.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/zh-Hant.json @@ -3,6 +3,7 @@ "texts": { "Features": "功能", "NoFeatureFoundMessage": "沒有可用的功能.", + "ManageHostFeatures": "管理Host功能", "Permission:FeatureManagement": "功能管理", "Permission:FeatureManagement.ManageHostFeatures": "管理Host功能", "Volo.Abp.FeatureManagement:InvalidFeatureValue" : "{0}功能的值無效!" diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementDbProperties.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDbProperties.cs similarity index 85% rename from modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementDbProperties.cs rename to modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDbProperties.cs index 6b7418351a..ee34d0523f 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManagementDbProperties.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/AbpFeatureManagementDbProperties.cs @@ -2,7 +2,7 @@ namespace Volo.Abp.FeatureManagement; -public static class FeatureManagementDbProperties +public static class AbpFeatureManagementDbProperties { public static string DbTablePrefix { get; set; } = AbpCommonDbProperties.DbTablePrefix; diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs index 06c293219b..36800a9a33 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain/Volo/Abp/FeatureManagement/FeatureManager.cs @@ -29,7 +29,7 @@ public class FeatureManager : IFeatureManager, ISingletonDependency StringLocalizerFactory = stringLocalizerFactory; Options = options.Value; - //TODO: Instead, use IHybridServiceScopeFactory and create a scope..? + //TODO: Instead, use IServiceScopeFactory and create a scope..? _lazyProviders = new Lazy>( () => Options diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/FeatureManagementDbContext.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/FeatureManagementDbContext.cs index 28c2ebe49f..1999a11984 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/FeatureManagementDbContext.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/FeatureManagementDbContext.cs @@ -6,7 +6,7 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.FeatureManagement.EntityFrameworkCore; [IgnoreMultiTenancy] -[ConnectionStringName(FeatureManagementDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpFeatureManagementDbProperties.ConnectionStringName)] public class FeatureManagementDbContext : AbpDbContext, IFeatureManagementDbContext { public DbSet FeatureValues { get; set; } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/FeatureManagementDbContextModelCreatingExtensions.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/FeatureManagementDbContextModelCreatingExtensions.cs index 1994d670aa..97a9ba83d7 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/FeatureManagementDbContextModelCreatingExtensions.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/FeatureManagementDbContextModelCreatingExtensions.cs @@ -17,7 +17,7 @@ public static class FeatureManagementDbContextModelCreatingExtensions builder.Entity(b => { - b.ToTable(FeatureManagementDbProperties.DbTablePrefix + "FeatureValues", FeatureManagementDbProperties.DbSchema); + b.ToTable(AbpFeatureManagementDbProperties.DbTablePrefix + "FeatureValues", AbpFeatureManagementDbProperties.DbSchema); b.ConfigureByConvention(); diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/IFeatureManagementDbContext.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/IFeatureManagementDbContext.cs index 47c600330c..7848f56cab 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/IFeatureManagementDbContext.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.EntityFrameworkCore/Volo/Abp/FeatureManagement/EntityFrameworkCore/IFeatureManagementDbContext.cs @@ -6,7 +6,7 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.FeatureManagement.EntityFrameworkCore; [IgnoreMultiTenancy] -[ConnectionStringName(FeatureManagementDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpFeatureManagementDbProperties.ConnectionStringName)] public interface IFeatureManagementDbContext : IEfCoreDbContext { DbSet FeatureValues { get; } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/FeatureManagementMongoDbContext.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/FeatureManagementMongoDbContext.cs index 466c412cfc..37273a3dcc 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/FeatureManagementMongoDbContext.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/FeatureManagementMongoDbContext.cs @@ -6,7 +6,7 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.FeatureManagement.MongoDB; [IgnoreMultiTenancy] -[ConnectionStringName(FeatureManagementDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpFeatureManagementDbProperties.ConnectionStringName)] public class FeatureManagementMongoDbContext : AbpMongoDbContext, IFeatureManagementMongoDbContext { public IMongoCollection FeatureValues => Collection(); diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/FeatureManagementMongoDbContextExtensions.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/FeatureManagementMongoDbContextExtensions.cs index 9922aa220b..8d263bb71e 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/FeatureManagementMongoDbContextExtensions.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/FeatureManagementMongoDbContextExtensions.cs @@ -11,7 +11,7 @@ public static class FeatureManagementMongoDbContextExtensions builder.Entity(b => { - b.CollectionName = FeatureManagementDbProperties.DbTablePrefix + "FeatureValues"; + b.CollectionName = AbpFeatureManagementDbProperties.DbTablePrefix + "FeatureValues"; }); } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/IFeatureManagementMongoDbContext.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/IFeatureManagementMongoDbContext.cs index fc1e848c08..1fefaf67cf 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/IFeatureManagementMongoDbContext.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.MongoDB/Volo/Abp/FeatureManagement/MongoDB/IFeatureManagementMongoDbContext.cs @@ -6,7 +6,7 @@ using Volo.Abp.MultiTenancy; namespace Volo.Abp.FeatureManagement.MongoDB; [IgnoreMultiTenancy] -[ConnectionStringName(FeatureManagementDbProperties.ConnectionStringName)] +[ConnectionStringName(AbpFeatureManagementDbProperties.ConnectionStringName)] public interface IFeatureManagementMongoDbContext : IAbpMongoDbContext { IMongoCollection FeatureValues { get; } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/AbpFeatureManagementWebModule.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/AbpFeatureManagementWebModule.cs index 752e966ef2..78959e7d22 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/AbpFeatureManagementWebModule.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/AbpFeatureManagementWebModule.cs @@ -3,15 +3,19 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Mvc.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.FeatureManagement.Localization; +using Volo.Abp.FeatureManagement.Settings; using Volo.Abp.Http.ProxyScripting.Generators.JQuery; using Volo.Abp.Modularity; +using Volo.Abp.SettingManagement.Web; +using Volo.Abp.SettingManagement.Web.Pages.SettingManagement; using Volo.Abp.VirtualFileSystem; namespace Volo.Abp.FeatureManagement; [DependsOn( typeof(AbpFeatureManagementApplicationContractsModule), - typeof(AbpAspNetCoreMvcUiThemeSharedModule) + typeof(AbpAspNetCoreMvcUiThemeSharedModule), + typeof(AbpSettingManagementWebModule) )] public class AbpFeatureManagementWebModule : AbpModule { @@ -44,5 +48,10 @@ public class AbpFeatureManagementWebModule : AbpModule { options.DisableModule(FeatureManagementRemoteServiceConsts.ModuleName); }); + + Configure(options => + { + options.Contributors.Add(new FeatureSettingManagementPageContributor()); + }); } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/Components/FeatureSettingGroup/Default.cshtml b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/Components/FeatureSettingGroup/Default.cshtml new file mode 100644 index 0000000000..0af011ee8b --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/Components/FeatureSettingGroup/Default.cshtml @@ -0,0 +1,13 @@ +@inject IHtmlLocalizer L +@using Microsoft.AspNetCore.Mvc.Localization +@using Volo.Abp.FeatureManagement.Localization +@model Volo.Abp.FeatureManagement.Pages.FeatureManagement.Components.FeatureSettingGroup.FeatureSettingGroupViewComponent.FeatureSettingViewModel + + + +
+ @if (Model.HasManageHostFeaturesPermission) + { + + } + \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/Components/FeatureSettingGroup/Default.js b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/Components/FeatureSettingGroup/Default.js new file mode 100644 index 0000000000..3e6842928e --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/Components/FeatureSettingGroup/Default.js @@ -0,0 +1,16 @@ +(function($){ + + $(function(){ + var _featuresModal = new abp.ModalManager( + abp.appPath + 'FeatureManagement/FeatureManagementModal' + ); + + $("#ManageHostFeatures").click(function (e) { + e.preventDefault(); + _featuresModal.open({ + providerName: 'T' + }); + }); + }) + +})(jQuery); \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/Components/FeatureSettingGroup/FeatureSettingGroupViewComponent.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/Components/FeatureSettingGroup/FeatureSettingGroupViewComponent.cs new file mode 100644 index 0000000000..fc6aee9c55 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Pages/FeatureManagement/Components/FeatureSettingGroup/FeatureSettingGroupViewComponent.cs @@ -0,0 +1,31 @@ +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Features; + +namespace Volo.Abp.FeatureManagement.Pages.FeatureManagement.Components.FeatureSettingGroup; + +public class FeatureSettingGroupViewComponent: AbpViewComponent +{ + protected IPermissionChecker PermissionChecker { get; } + + public FeatureSettingGroupViewComponent(IPermissionChecker permissionChecker) + { + PermissionChecker = permissionChecker; + } + + public virtual async Task InvokeAsync() + { + var model = new FeatureSettingViewModel + { + HasManageHostFeaturesPermission = await PermissionChecker.IsGrantedAsync(FeatureManagementPermissions.ManageHostFeatures) + }; + return View("~/Pages/FeatureManagement/Components/FeatureSettingGroup/Default.cshtml", model); + } + + public class FeatureSettingViewModel + { + public bool HasManageHostFeaturesPermission { get; set; } + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Settings/FeatureSettingManagementPageContributor.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Settings/FeatureSettingManagementPageContributor.cs new file mode 100644 index 0000000000..259c440166 --- /dev/null +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Settings/FeatureSettingManagementPageContributor.cs @@ -0,0 +1,29 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; +using Volo.Abp.FeatureManagement.Localization; +using Volo.Abp.FeatureManagement.Pages.FeatureManagement.Components.FeatureSettingGroup; +using Volo.Abp.SettingManagement.Web.Pages.SettingManagement; + +namespace Volo.Abp.FeatureManagement.Settings; + +public class FeatureSettingManagementPageContributor : SettingPageContributorBase +{ + public FeatureSettingManagementPageContributor() + { + RequiredPermissions(FeatureManagementPermissions.ManageHostFeatures); + } + + public override Task ConfigureAsync(SettingPageCreationContext context) + { + var l = context.ServiceProvider.GetRequiredService>(); + context.Groups.Add( + new SettingPageGroup( + "Volo.Abp.FeatureManagement", + l["Permission:FeatureManagement"], + typeof(FeatureSettingGroupViewComponent) + ) + ); + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj index e5c8b3ba52..f9e1bdb16e 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Web/Volo.Abp.FeatureManagement.Web.csproj @@ -33,6 +33,7 @@ + diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json index d08702a356..f9c49a7d42 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/ro-RO.json @@ -21,7 +21,7 @@ "DisplayName:RoleName": "Nume rol", "DisplayName:UserName": "Nume de utilizator", "DisplayName:Name": "Nume", - "DisplayName:Surname": "Nume", + "DisplayName:Surname": "Nume de familie", "DisplayName:Password": "Parola", "DisplayName:Email": "Adresa de email", "DisplayName:PhoneNumber": "Număr de telefon", @@ -110,4 +110,4 @@ "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "Dacă numele de utilizator poate fi actualizat de către utilizator.", "Description:Abp.Identity.User.IsEmailUpdateEnabled": "Dacă emailul poate fi actualizat de către utilizator." } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpCorsPolicyService.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpCorsPolicyService.cs index ac6c9d9edf..bc711254f1 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpCorsPolicyService.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpCorsPolicyService.cs @@ -17,13 +17,13 @@ namespace Volo.Abp.IdentityServer; public class AbpCorsPolicyService : ICorsPolicyService { public ILogger Logger { get; set; } - protected IHybridServiceScopeFactory HybridServiceScopeFactory { get; } + protected IServiceScopeFactory HybridServiceScopeFactory { get; } protected IDistributedCache Cache { get; } protected IdentityServerOptions Options { get; } public AbpCorsPolicyService( IDistributedCache cache, - IHybridServiceScopeFactory hybridServiceScopeFactory, + IServiceScopeFactory hybridServiceScopeFactory, IOptions options) { Cache = cache; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerBuilderOptions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerBuilderOptions.cs index 1927c21746..66a15fd051 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerBuilderOptions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerBuilderOptions.cs @@ -27,4 +27,10 @@ public class AbpIdentityServerBuilderOptions /// Set false to suppress AddDeveloperSigningCredential() call on the IIdentityServerBuilder. ///
public bool AddDeveloperSigningCredential { get; set; } = true; + + /// + /// Adds the default cookie handlers and corresponding configuration + /// Default: true, Set false to suppress AddCookieAuthentication() call on the IIdentityServerBuilder. + /// + public bool AddIdentityServerCookieAuthentication { get; set; } = true; } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs index 96ab4abd89..9b9dde5c96 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpIdentityServerDomainModule.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using IdentityServer4.Configuration; using IdentityServer4.Services; using IdentityServer4.Stores; using Microsoft.Extensions.DependencyInjection; @@ -71,13 +72,7 @@ public class AbpIdentityServerDomainModule : AbpModule var configuration = services.GetConfiguration(); var builderOptions = services.ExecutePreConfiguredActions(); - var identityServerBuilder = services.AddIdentityServer(options => - { - options.Events.RaiseErrorEvents = true; - options.Events.RaiseInformationEvents = true; - options.Events.RaiseFailureEvents = true; - options.Events.RaiseSuccessEvents = true; - }); + var identityServerBuilder = AddIdentityServer(services, builderOptions); if (builderOptions.AddDeveloperSigningCredential) { @@ -110,6 +105,37 @@ public class AbpIdentityServerDomainModule : AbpModule } } + private static IIdentityServerBuilder AddIdentityServer(IServiceCollection services, AbpIdentityServerBuilderOptions abpIdentityServerBuilderOptions) + { + services.Configure(options => + { + options.Events.RaiseErrorEvents = true; + options.Events.RaiseInformationEvents = true; + options.Events.RaiseFailureEvents = true; + options.Events.RaiseSuccessEvents = true; + }); + + var identityServerBuilder = services.AddIdentityServerBuilder() + .AddRequiredPlatformServices() + .AddCoreServices() + .AddDefaultEndpoints() + .AddPluggableServices() + .AddValidators() + .AddResponseGenerators() + .AddDefaultSecretParsers() + .AddDefaultSecretValidators(); + + if (abpIdentityServerBuilderOptions.AddIdentityServerCookieAuthentication) + { + identityServerBuilder.AddCookieAuthentication(); + } + + // provide default in-memory implementation, not suitable for most production scenarios + identityServerBuilder.AddInMemoryPersistedGrants(); + + return identityServerBuilder; + } + public override void PostConfigureServices(ServiceConfigurationContext context) { OneTimeRunner.Run(() => diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpWildcardSubdomainCorsPolicyService.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpWildcardSubdomainCorsPolicyService.cs index 82658ceccd..32d2d1eb73 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpWildcardSubdomainCorsPolicyService.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpWildcardSubdomainCorsPolicyService.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Threading.Tasks; using IdentityServer4.Configuration; using Microsoft.Extensions.Options; +using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; using Volo.Abp.Text.Formatting; @@ -13,7 +14,7 @@ public class AbpWildcardSubdomainCorsPolicyService : AbpCorsPolicyService { public AbpWildcardSubdomainCorsPolicyService( IDistributedCache cache, - IHybridServiceScopeFactory hybridServiceScopeFactory, + IServiceScopeFactory hybridServiceScopeFactory, IOptions options) : base(cache, hybridServiceScopeFactory, options) { diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs index 77181a8b8b..cf69fda91a 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs @@ -32,7 +32,7 @@ public class AbpResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator protected IdentitySecurityLogManager IdentitySecurityLogManager { get; } protected ILogger> Logger { get; } protected IStringLocalizer Localizer { get; } - protected IHybridServiceScopeFactory ServiceScopeFactory { get; } + protected IServiceScopeFactory ServiceScopeFactory { get; } protected AbpIdentityOptions AbpIdentityOptions { get; } protected IOptions IdentityOptions { get; } @@ -43,7 +43,7 @@ public class AbpResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator ILogger> logger, IStringLocalizer localizer, IOptions abpIdentityOptions, - IHybridServiceScopeFactory serviceScopeFactory, + IServiceScopeFactory serviceScopeFactory, IOptions identityOptions) { UserManager = userManager; diff --git a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Controllers/TokenController.Password.cs b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Controllers/TokenController.Password.cs index 49d415c927..1484ea4b52 100644 --- a/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Controllers/TokenController.Password.cs +++ b/modules/openiddict/src/Volo.Abp.OpenIddict.AspNetCore/Volo/Abp/OpenIddict/Controllers/TokenController.Password.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.OpenIddict.Controllers; public partial class TokenController { - protected IHybridServiceScopeFactory ServiceScopeFactory => LazyServiceProvider.LazyGetRequiredService(); + protected IServiceScopeFactory ServiceScopeFactory => LazyServiceProvider.LazyGetRequiredService(); protected ITenantConfigurationProvider TenantConfigurationProvider=> LazyServiceProvider.LazyGetRequiredService(); protected IOptions AbpIdentityOptions => LazyServiceProvider.LazyGetRequiredService>(); protected IOptions IdentityOptions => LazyServiceProvider.LazyGetRequiredService>(); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs index 14629b988e..570c99925b 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManager.cs @@ -27,7 +27,7 @@ public class SettingManager : ISettingManager, ISingletonDependency SettingEncryptionService = settingEncryptionService; Options = options.Value; - //TODO: Instead, use IHybridServiceScopeFactory and create a scope..? + //TODO: Instead, use IServiceScopeFactory and create a scope..? _lazyProviders = new Lazy>( () => Options diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs index 0f0e689f2f..6fe3005a98 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -54,11 +54,6 @@ public partial class TenantManagement protected override ValueTask SetToolbarItemsAsync() { - Toolbar.AddButton(L["ManageHostFeatures"], - async () => await FeatureManagementModal.OpenAsync(FeatureProviderName), - "fa fa-cog", - requiredPolicyName: FeatureManagementPermissions.ManageHostFeatures); - Toolbar.AddButton(L["NewTenant"], OpenCreateModalAsync, IconName.Add, diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ar.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ar.json index 829a326d24..8146974400 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ar.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ar.json @@ -11,7 +11,6 @@ "ConnectionStrings": "Connection Strings", "DisplayName:DefaultConnectionString": "Default Connection String", "DisplayName:UseSharedDatabase": "استخدام قاعدة البيانات المشتركة", - "ManageHostFeatures": "إدارة ميزات المضيف", "Permission:TenantManagement": "إدارة المستأجر", "Permission:Create": "إنشاء", "Permission:Edit": "تحرير", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/cs.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/cs.json index 754b66d081..001d5d71fb 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/cs.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/cs.json @@ -10,7 +10,6 @@ "ConnectionStrings": "Connection stringy", "DisplayName:DefaultConnectionString": "Výchozí connection string", "DisplayName:UseSharedDatabase": "Použít sdílenou databázi", - "ManageHostFeatures": "Správa funkcí hostitele", "Permission:TenantManagement": "Správa tenantů", "Permission:Create": "Vytvořit", "Permission:Edit": "Upravit", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de-DE.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de-DE.json index 2033fdf1ed..58d71c9252 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de-DE.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/de-DE.json @@ -11,7 +11,6 @@ "ConnectionStrings": "Connection Strings", "DisplayName:DefaultConnectionString": "Standard-Connection String", "DisplayName:UseSharedDatabase": "Verwenden Sie die freigegebene Datenbank", - "ManageHostFeatures": "Host-Features verwalten", "Permission:TenantManagement": "Mandantenverwaltung", "Permission:Create": "Erstellen", "Permission:Edit": "Bearbeiten", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/el.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/el.json index 026bcb0b76..bc75c34e03 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/el.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/el.json @@ -10,7 +10,6 @@ "ConnectionStrings": "Συμβολοσειρές σύνδεσης", "DisplayName:DefaultConnectionString": "Προεπιλεγμένη συμβολοσειρά σύνδεσης", "DisplayName:UseSharedDatabase": "Χρησιμοποιήστε την Κοινόχρηστη βάση δεδομένων", - "ManageHostFeatures": "Διαχείριση δυνατοτήτων του Οικοδεσπότη", "Permission:TenantManagement": "Διαχείριση ενοικιαστών", "Permission:Create": "Δημιουργία", "Permission:Edit": "Επεξεργασία", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en-GB.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en-GB.json index 4d6075ff74..8b4e4c185b 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en-GB.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en-GB.json @@ -10,7 +10,6 @@ "ConnectionStrings": "Connection Strings", "DisplayName:DefaultConnectionString": "Default Connection String", "DisplayName:UseSharedDatabase": "Use the Shared Database", - "ManageHostFeatures": "Manage Host features", "Permission:TenantManagement": "Tenant management", "Permission:Create": "Create", "Permission:Edit": "Edit", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json index 1a10c5b77a..e639feb5f3 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/en.json @@ -11,7 +11,6 @@ "ConnectionStrings": "Connection Strings", "DisplayName:DefaultConnectionString": "Default Connection String", "DisplayName:UseSharedDatabase": "Use the Shared Database", - "ManageHostFeatures": "Manage Host features", "Permission:TenantManagement": "Tenant management", "Permission:Create": "Create", "Permission:Edit": "Edit", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/es.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/es.json index 774201178b..bcbfc98852 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/es.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/es.json @@ -11,7 +11,6 @@ "ConnectionStrings": "Connection Strings", "DisplayName:DefaultConnectionString": "Connection String predeterminado", "DisplayName:UseSharedDatabase": "Usar la base de datos compartida", - "ManageHostFeatures": "Administrar funciones de host", "Permission:TenantManagement": "Gestión de tenants", "Permission:Create": "Crear", "Permission:Edit": "Editar", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fa.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fa.json index f0a804c073..c67a9c070b 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fa.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fa.json @@ -10,7 +10,6 @@ "ConnectionStrings": "کانکشن استرینگها", "DisplayName:DefaultConnectionString": "کانکشن استرینگ پیش فرض", "DisplayName:UseSharedDatabase": "استفاده از پایگاه داده مشترک", - "ManageHostFeatures": "مدیریت ویژگی های میزبان", "Permission:TenantManagement": "مدیریت تننت", "Permission:Create": "ایجاد", "Permission:Edit": "ویرایش", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fi.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fi.json index b24d67135e..179ec3c1d6 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fi.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fi.json @@ -11,7 +11,6 @@ "ConnectionStrings": "Yhteysjonot", "DisplayName:DefaultConnectionString": "Oletusyhteysmerkkijono", "DisplayName:UseSharedDatabase": "Käytä jaettua tietokantaa", - "ManageHostFeatures": "Hallinnoi isäntäominaisuuksia", "Permission:TenantManagement": "Vuokralaisten hallinta", "Permission:Create": "Luoda", "Permission:Edit": "Muokata", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fr.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fr.json index 4d6ccd76b0..3537ca8ca6 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fr.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/fr.json @@ -11,7 +11,6 @@ "ConnectionStrings": "Chaînes de connexion", "DisplayName:DefaultConnectionString": "Chaîne de connexion par défaut", "DisplayName:UseSharedDatabase": "Utiliser la base de données partagée", - "ManageHostFeatures": "Gérer les fonctionnalités de l’hôte", "Permission:TenantManagement": "Gestion des locataires", "Permission:Create": "Créer", "Permission:Edit": "Modifier", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/hi.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/hi.json index 93f4a1a1ad..70367305a9 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/hi.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/hi.json @@ -11,7 +11,6 @@ "ConnectionStrings": "कनेक्शन स्ट्रिंग्स", "DisplayName:DefaultConnectionString": "डिफ़ॉल्ट कनेक्शन स्ट्रिंग", "DisplayName:UseSharedDatabase": "साझा डेटाबेस का उपयोग करें", - "ManageHostFeatures": "होस्ट सुविधाएँ प्रबंधित करें", "Permission:TenantManagement": "किरायेदार प्रबंधन", "Permission:Create": "सृजन करना", "Permission:Edit": "संपादित करें", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/hu.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/hu.json index 60c61c15cf..f4ccb64b0a 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/hu.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/hu.json @@ -10,7 +10,6 @@ "ConnectionStrings": "Kapcsolat beállítás", "DisplayName:DefaultConnectionString": "Alapértelmezettt kapcsolati beállítás", "DisplayName:UseSharedDatabase": "Használjon megosztott adatbázist", - "ManageHostFeatures": "Host funkciók kezelése", "Permission:TenantManagement": "Bérlő menedzsment", "Permission:Create": "Létrehozás", "Permission:Edit": "Szerkesztés", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/is.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/is.json index 25c6a86ca3..ca2a8cb7a9 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/is.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/is.json @@ -10,7 +10,6 @@ "ConnectionStrings": "Tengi strengir", "DisplayName:DefaultConnectionString": "Sjálfgefin tengistrengur", "DisplayName:UseSharedDatabase": "Notaðu samnýttan gagnagrunn", - "ManageHostFeatures": "Stjórna Gestgjafa Eiginleikum", "Permission:TenantManagement": "Tenant umsjá", "Permission:Create": "Búa til", "Permission:Edit": "Breyta", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/it.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/it.json index 6deff1bd54..5d95e2039c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/it.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/it.json @@ -11,7 +11,6 @@ "ConnectionStrings": "Stringhe di connessione", "DisplayName:DefaultConnectionString": "Stringa di connessione predefinita", "DisplayName:UseSharedDatabase": "Usa il database condiviso", - "ManageHostFeatures": "Gestisci le funzionalità dell'host", "Permission:TenantManagement": "Gestione Tenant", "Permission:Create": "Crea", "Permission:Edit": "Modifica", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/nl.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/nl.json index d4c45b8aad..1aeb208560 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/nl.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/nl.json @@ -10,7 +10,6 @@ "ConnectionStrings": "Connection Strings", "DisplayName:DefaultConnectionString": "Standaard Connection String", "DisplayName:UseSharedDatabase": "Gebruik de gedeelde database", - "ManageHostFeatures": "Beheer host functies", "Permission:TenantManagement": "Klanten beheer", "Permission:Create": "Maak aan", "Permission:Edit": "Bewerk", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pl-PL.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pl-PL.json index c62c67123e..6ec40c7310 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pl-PL.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pl-PL.json @@ -10,7 +10,6 @@ "ConnectionStrings": "Connection Strings", "DisplayName:DefaultConnectionString": "Domyślny Connection String", "DisplayName:UseSharedDatabase": "Użyj współdzielonej bazy danych", - "ManageHostFeatures": "Zarządzaj funkcjami hosta", "Permission:TenantManagement": "Zarządzanie tenantami", "Permission:Create": "Utwórz", "Permission:Edit": "Edytuj", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pt-BR.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pt-BR.json index d2c3ceecf1..d9f6b14a69 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pt-BR.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/pt-BR.json @@ -11,7 +11,6 @@ "ConnectionStrings": "Cadeia de Conexão", "DisplayName:DefaultConnectionString": "Cadeia de Conexão Padrão", "DisplayName:UseSharedDatabase": "Use o banco de dados compartilhado", - "ManageHostFeatures": "Gerenciar recursos do Host", "Permission:TenantManagement": "Inquilinos", "Permission:Create": "Criar", "Permission:Edit": "Editar", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ro-RO.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ro-RO.json index 70147d9921..18bf9fb74e 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ro-RO.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ro-RO.json @@ -10,7 +10,6 @@ "ConnectionStrings": "Connection Strings", "DisplayName:DefaultConnectionString": "Connection String implicit", "DisplayName:UseSharedDatabase": "Folosiţi baza de date partajată", - "ManageHostFeatures": "Administraţi caracteristicile de host", "Permission:TenantManagement": "Administrarea clienţilor", "Permission:Create": "Creează", "Permission:Edit": "Editează", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ru.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ru.json index b3585c20a4..2204cf35cf 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ru.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/ru.json @@ -11,7 +11,6 @@ "ConnectionStrings": "Строки подключения", "DisplayName:DefaultConnectionString": "Строка подключения по умолчанию", "DisplayName:UseSharedDatabase": "Использование общей базы данных", - "ManageHostFeatures": "Управление функциями хоста", "Permission:TenantManagement": "Управление арендаторами", "Permission:Create": "Создать", "Permission:Edit": "Редактировать", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sk.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sk.json index e37d605d16..1aff65e71c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sk.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sk.json @@ -11,7 +11,6 @@ "ConnectionStrings": "Connection stringy", "DisplayName:DefaultConnectionString": "Predvolený connection string", "DisplayName:UseSharedDatabase": "Použiť zdieľanú databázu", - "ManageHostFeatures": "Spravovať funkcie poskytovateľa", "Permission:TenantManagement": "Správa tenantov", "Permission:Create": "Vytvoriť", "Permission:Edit": "Upraviť", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sl.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sl.json index 9e5d1c215a..a21cfa702a 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sl.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/sl.json @@ -11,7 +11,6 @@ "ConnectionStrings": "Connection Strings", "DisplayName:DefaultConnectionString": "Privzeti Connection String", "DisplayName:UseSharedDatabase": "Uporabi skupno bazo", - "ManageHostFeatures": "Upravljajte funkcije gostitelja", "Permission:TenantManagement": "Upravljanje najemnikov", "Permission:Create": "Ustvarjanje", "Permission:Edit": "Urejanje", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json index ffbab818f2..409aa40795 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/tr.json @@ -11,7 +11,6 @@ "ConnectionStrings": "Bağlantı cümlesi", "DisplayName:DefaultConnectionString": "Varsayılan bağlantı cümlesi", "DisplayName:UseSharedDatabase": "Paylaşılan veritabanını kullan", - "ManageHostFeatures": "Host özelliklerini yönetin", "Permission:TenantManagement": "Müşteri yönetimi", "Permission:Create": "Oluşturma", "Permission:Edit": "Düzenleme", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/vi.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/vi.json index 025ec04eb6..4fafa9cc72 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/vi.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/vi.json @@ -10,7 +10,6 @@ "ConnectionStrings": "Chuỗi kết nối", "DisplayName:DefaultConnectionString": "Chuỗi kết nối mặc định", "DisplayName:UseSharedDatabase": "Sử dụng cơ sở dữ liệu dùng chung", - "ManageHostFeatures": "Quản lý các tính năng của Máy chủ lưu trữ", "Permission:TenantManagement": "Quản lý khách thuê", "Permission:Create": "Tạo", "Permission:Edit": "Sửa", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hans.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hans.json index 94ef8abba1..0367489a5a 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hans.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hans.json @@ -11,7 +11,6 @@ "ConnectionStrings": "连接字符串", "DisplayName:DefaultConnectionString": "默认连接字符串", "DisplayName:UseSharedDatabase": "使用共享数据库", - "ManageHostFeatures": "管理Host特性", "Permission:TenantManagement": "租户管理", "Permission:Create": "创建", "Permission:Edit": "编辑", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hant.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hant.json index 1403cb79d5..59519aff67 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hant.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/zh-Hant.json @@ -11,7 +11,6 @@ "ConnectionStrings": "資料庫連線字串", "DisplayName:DefaultConnectionString": "預設資料庫連線字串", "DisplayName:UseSharedDatabase": "使用共用資料庫", - "ManageHostFeatures": "管理Host功能", "Permission:TenantManagement": "租戶管理", "Permission:Create": "新增", "Permission:Edit": "編輯", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs index 1ac62db5e2..b3a63fb8ae 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebModule.cs @@ -69,13 +69,6 @@ public class AbpTenantManagementWebModule : AbpModule options.Configure( toolbar => { - toolbar.AddButton( - LocalizableString.Create("ManageHostFeatures"), - icon: "cog", - name: "ManageHostFeatures", - requiredPolicyName: FeatureManagementPermissions.ManageHostFeatures - ); - toolbar.AddButton( LocalizableString.Create("NewTenant"), icon: "plus", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js index e990b8fc37..a9cf094c6c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.js @@ -113,12 +113,5 @@ e.preventDefault(); _createModal.open(); }); - - _$wrapper.find('button[name=ManageHostFeatures]').click(function (e) { - e.preventDefault(); - _featuresModal.open({ - providerName: 'T' - }); - }); }); })(); diff --git a/npm/scripts/yarn.lock b/npm/scripts/yarn.lock index bae2201646..2feefc9b8a 100644 --- a/npm/scripts/yarn.lock +++ b/npm/scripts/yarn.lock @@ -1144,9 +1144,9 @@ locate-path@^6.0.0: p-locate "^5.0.0" lodash@^4.17.20: - version "4.17.20" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Localization/MyProjectName/ar.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Localization/MyProjectName/ar.json index 1ee94530fb..153f571276 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Localization/MyProjectName/ar.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server.Mongo/Localization/MyProjectName/ar.json @@ -3,6 +3,6 @@ "texts": { "Welcome_Title": "مرحبا", "Welcome_Text": "هذا هو قالب بدء تشغيل تطبيق ذو طبقة واحدة مبسط لإطار عمل ABP.", - "Menu:Home": "الرئيسية" + "Menu:Home": "الصفحة الرئيسية" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Localization/MyProjectName/ar.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Localization/MyProjectName/ar.json index 1ee94530fb..153f571276 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Localization/MyProjectName/ar.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Blazor.Server/Localization/MyProjectName/ar.json @@ -3,6 +3,6 @@ "texts": { "Welcome_Title": "مرحبا", "Welcome_Text": "هذا هو قالب بدء تشغيل تطبيق ذو طبقة واحدة مبسط لإطار عمل ABP.", - "Menu:Home": "الرئيسية" + "Menu:Home": "الصفحة الرئيسية" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Localization/MyProjectName/ar.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Localization/MyProjectName/ar.json index 1ee94530fb..153f571276 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Localization/MyProjectName/ar.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host.Mongo/Localization/MyProjectName/ar.json @@ -3,6 +3,6 @@ "texts": { "Welcome_Title": "مرحبا", "Welcome_Text": "هذا هو قالب بدء تشغيل تطبيق ذو طبقة واحدة مبسط لإطار عمل ABP.", - "Menu:Home": "الرئيسية" + "Menu:Home": "الصفحة الرئيسية" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Localization/MyProjectName/ar.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Localization/MyProjectName/ar.json index 1ee94530fb..153f571276 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Localization/MyProjectName/ar.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Host/Localization/MyProjectName/ar.json @@ -3,6 +3,6 @@ "texts": { "Welcome_Title": "مرحبا", "Welcome_Text": "هذا هو قالب بدء تشغيل تطبيق ذو طبقة واحدة مبسط لإطار عمل ABP.", - "Menu:Home": "الرئيسية" + "Menu:Home": "الصفحة الرئيسية" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Localization/MyProjectName/ar.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Localization/MyProjectName/ar.json index 1ee94530fb..153f571276 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Localization/MyProjectName/ar.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc.Mongo/Localization/MyProjectName/ar.json @@ -3,6 +3,6 @@ "texts": { "Welcome_Title": "مرحبا", "Welcome_Text": "هذا هو قالب بدء تشغيل تطبيق ذو طبقة واحدة مبسط لإطار عمل ABP.", - "Menu:Home": "الرئيسية" + "Menu:Home": "الصفحة الرئيسية" } } diff --git a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Localization/MyProjectName/ar.json b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Localization/MyProjectName/ar.json index 1ee94530fb..153f571276 100644 --- a/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Localization/MyProjectName/ar.json +++ b/templates/app-nolayers/aspnet-core/MyCompanyName.MyProjectName.Mvc/Localization/MyProjectName/ar.json @@ -3,6 +3,6 @@ "texts": { "Welcome_Title": "مرحبا", "Welcome_Text": "هذا هو قالب بدء تشغيل تطبيق ذو طبقة واحدة مبسط لإطار عمل ABP.", - "Menu:Home": "الرئيسية" + "Menu:Home": "الصفحة الرئيسية" } } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json index 3e5227a915..96bbf80b40 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain.Shared/Localization/MyProjectName/ar.json @@ -2,7 +2,7 @@ "culture": "ar", "texts": { "Menu:Home": "الرئيسية", - "Welcome": "مرحبا", + "Menu:Home": "الصفحة الرئيسية", "LongWelcomeMessage": "مرحبا بكم في التطبيق. هذا مشروع بدء تشغيل يعتمد على إطار عمل ABP. لمزيد من المعلومات ، يرجى زيارة abp.io." } -} \ No newline at end of file +}