From 1c72ce1a3a361999dfd4bb9613f6b7cbf75bff2d Mon Sep 17 00:00:00 2001 From: Salih Date: Sat, 23 Dec 2023 20:05:54 +0300 Subject: [PATCH 01/52] add localizations --- .../Admin/Localization/Resources/en.json | 25 ++++++++++++++++++- .../Commercial/Localization/Resources/en.json | 18 ++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index e2563fe684..e88dc12207 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -562,6 +562,29 @@ "SponsorLogo": "Sponsor Logo", "RegistrationUrl": "Registration Url", "AllowAbpStudioBetaAccess": "Allow ABP Studio Beta Access", - "TotalQuestionCanNotBeNullMessage": "Total Question can not be null" + "TotalQuestionCanNotBeNullMessage": "Total Question can not be null", + "Permission:OrganizationAutoRenewalPayments": "Organization Auto Renewal Payments", + "Permission:RetryFailedPayments": "Retry Failed Payments", + "AutoRenewalIsNotEnabled": "Auto Renewal is not enabled!", + "LicenseIsNotExpired": "License is not expired!", + "PaymentNotFound": "Payment not found!", + "PaymentAlreadyTried": "Payment already tried!", + "PaymentIsNotFailed": "Payment is not failed!", + "OrganizationIdIsNull": "OrganizationId is null!", + "Menu:OrganizationAutoRenewalPayments": "Organization Auto Renewal Payments", + "OrganizationAutoRenewalPayments": "Organization Auto Renewal Payments", + "PaymentDate": "Payment Date", + "TryCount": "Try Count", + "ErrorMessage": "Error Message", + "ErrorCode": "Error Code", + "CreditCard": "Credit Card", + "BuyerName": "Buyer Name", + "BuyerSurname": "Buyer Surname", + "BuyerEmail": "Buyer Email", + "AutoRenewalStartTime": "Auto Renewal Start Time", + "AutoRenewalEndTime": "Auto Renewal End Time", + "AutoRenewalEnabled": "Auto Renewal Enabled", + "LastAutoRenewalPaymentTime": "Last Auto Renewal Payment Time", + "OrganizationDoesNotHaveACreditCard": "Organization does not have a credit card!", } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 23e81238cd..217ca0fb34 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1089,6 +1089,22 @@ "MultipleOrganizationInfo": "See All Your Organizations", "AbpStudioBetaAccessInfoTitle": "ABP Studio Beta Access", "AbpStudioBetaAccessInfoText": "We're thrilled to share with you the beta version of ABP Studio! This release marks a significant milestone in our development journey, and we're eager to gather your feedback to make the application even better.", - "YouAreNotAuthorizedToDownloadStudio": "You are not authorized to download ABP Studio." + "YouAreNotAuthorizedToDownloadStudio": "You are not authorized to download ABP Studio.", + "OrganizationHasNoDefaultCreditCard": "Your organization has no default credit card. Please add a credit card to your organization.", + "YouAreNotAuthorizedToPayThisPaymentRequest": "You are not authorized to pay this payment request.", + "YouAreNotAuthorizedToCreateBillingInfoForThisPaymentRequest": "You are not authorized to create billing info for this payment request.", + "OrganizationNotFound": "Organization not found.", + "CannotDeleteDefaultCardBecauseAutoRenewalEnabled": "You cannot delete this card because it is your default card and you have auto renewal enabled. Please disable auto renewal first.", + "AreYouSureWantToDeleteThisCard": "Are you sure you want to delete this card?", + "AreYouSureWantToSetThisCardAsDefault": "Are you sure you want to set this card as default?", + "OrganizationBillingInfoIsNotSuitableForIyzicoPayment": "Your organization's billing info is not suitable for iyzico payment.", + "AutomaticRenewal": "Automatic Renewal", + "AutomaticRenewal_Description": "Renewing a license before it expires lets you get a discount of up to %40. The auto-renewal process lets you renew your license without losing this discount, and your development will never interrupt. Auto-renewal is only available for credit cards. You can disable auto-renewal at any time by accessing your Organization Management page. ABP.io does not save your credit card information, but our global payment gateways do secure savings.", + "CardNotFoundMessage": "Do you want to add a new card?", + "CardNotFoundTitle": "Card Not Found", + "AutoRenewalEnabled": "Auto Renewal Enabled", + "AutoRenewalDisabled": "Auto Renewal Disabled", + "PaymentRequestIdIsNotProvided": "Payment request id is not provided.", + } } From a1570af6a7043dcc5e4b67762470b6dc598d1178 Mon Sep 17 00:00:00 2001 From: Salih Date: Tue, 2 Jan 2024 14:28:45 +0300 Subject: [PATCH 02/52] update localizations --- .../Commercial/Localization/Resources/ar.json | 4 ++-- .../Commercial/Localization/Resources/en.json | 4 ++-- .../Commercial/Localization/Resources/fi.json | 4 ++-- .../Commercial/Localization/Resources/hr.json | 4 ++-- .../Commercial/Localization/Resources/hu.json | 4 ++-- .../Commercial/Localization/Resources/ru.json | 4 ++-- .../Commercial/Localization/Resources/tr.json | 4 ++-- .../Commercial/Localization/Resources/zh-Hans.json | 4 ++-- .../Commercial/Localization/Resources/zh-Hant.json | 2 +- 9 files changed, 17 insertions(+), 17 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json index 2953d946a0..ec8b0a752d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json @@ -531,8 +531,8 @@ "MyOrganizations_Detail_LicenseStartAndExpiryDate": "تاريخ بدء الترخيص - تاريخ انتهاء الصلاحية", "MyOrganizations_Detail_OwnerRightInfo": "أنت تستخدم {0} من {1} حقوق المالك.", "MyOrganizations_Detail_CopyApiKey": "انسخ المفتاح", - "MyOrganizations_Detail_ApiKeyDescription": "مفتاح API هو الرمز المميز لحزم PRO المستضافة على {1}.", - "MyOrganizations_Detail_YourPrivateNugetSource": "مصدر NuGet الخاص بك هو {0}", + "MyOrganizations_Detail_ApiKeyDescription": "مفتاح API هو الرمز المميز لحزم PRO المستضافة على {1}.", + "MyOrganizations_Detail_YourPrivateNugetSource": "مصدر NuGet الخاص بك هو {0}", "MyOrganizations_Detail_PrivateNugetSourceWarning": "تتم إضافة هذا تلقائيًا كوجز إلى NuGet.Config في حل ABP الخاص بك. لا تشارك مفتاحك الخاص مع مستخدمين غير مصرح لهم!", "MyOrganizations_Detail_DeveloperSeatInfo": "أنت تستخدم {0} من {1} مقاعد مطوري البرامج.", "NeedMoreSeatsForYourTeam": "هل تحتاج إلى المزيد من المقاعد لفريقك؟", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 95ffe6f855..b5ad4b58fb 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -556,8 +556,8 @@ "MyOrganizations_Detail_LicenseStartAndExpiryDate": "License Start Date - Expiry Date", "MyOrganizations_Detail_OwnerRightInfo": "You are using {0} of your {1} owners rights.", "MyOrganizations_Detail_CopyApiKey": "Copy the Key", - "MyOrganizations_Detail_ApiKeyDescription": "The API Key is the token of PRO packages hosted on {1}.", - "MyOrganizations_Detail_YourPrivateNugetSource": "Your private NuGet source is {0}", + "MyOrganizations_Detail_ApiKeyDescription": "The API Key is the token of PRO packages hosted on {1}.", + "MyOrganizations_Detail_YourPrivateNugetSource": "Your private NuGet source is {0}", "MyOrganizations_Detail_PrivateNugetSourceWarning": "This is automatically added as a feed to your NuGet.Config in your ABP solution. Do not share your private key with unauthorized users!", "MyOrganizations_Detail_DeveloperSeatInfo": "You are using {0} of your {1} developer seats.", "NeedMoreSeatsForYourTeam": "Need more seats for your team?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json index 22226ba956..eebf13cc0d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json @@ -553,8 +553,8 @@ "MyOrganizations_Detail_LicenseStartAndExpiryDate": "Lisenssin alkamispäivä - viimeinen voimassaolopäivä", "MyOrganizations_Detail_OwnerRightInfo": "Käytät {0} {1} omistajan oikeuksistasi.", "MyOrganizations_Detail_CopyApiKey": "Kopioi avain", - "MyOrganizations_Detail_ApiKeyDescription": "API-avain on {1}-palvelussa isännöivien PRO-pakettien tunnus.", - "MyOrganizations_Detail_YourPrivateNugetSource": "Yksityinen NuGet-lähteesi on {0}", + "MyOrganizations_Detail_ApiKeyDescription": "API-avain on {1}-palvelussa isännöivien PRO-pakettien tunnus.", + "MyOrganizations_Detail_YourPrivateNugetSource": "Yksityinen NuGet-lähteesi on {0}", "MyOrganizations_Detail_PrivateNugetSourceWarning": "Tämä lisätään automaattisesti syötteeksi NuGet.Configiin ABP-ratkaisussasi. Älä jaa yksityistä avaintasi luvattomien käyttäjien kanssa!", "MyOrganizations_Detail_DeveloperSeatInfo": "Käytät {0} {1} kehittäjäpaikastasi.", "NeedMoreSeatsForYourTeam": "Tarvitsetko lisää paikkoja tiimillesi?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json index 6cacd8f01d..a7fc0c4965 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json @@ -556,8 +556,8 @@ "MyOrganizations_Detail_LicenseStartAndExpiryDate": "Datum početka licence - Datum isteka", "MyOrganizations_Detail_OwnerRightInfo": "Koristite {0} od svojih {1} vlasničkih prava.", "MyOrganizations_Detail_CopyApiKey": "Kopirajte ključ", - "MyOrganizations_Detail_ApiKeyDescription": "API ključ je token PRO paketa hostiranih na {1}.", - "MyOrganizations_Detail_YourPrivateNugetSource": "Vaš privatni NuGet izvor je {0}", + "MyOrganizations_Detail_ApiKeyDescription": "API ključ je token PRO paketa hostiranih na {1}.", + "MyOrganizations_Detail_YourPrivateNugetSource": "Vaš privatni NuGet izvor je {0}", "MyOrganizations_Detail_PrivateNugetSourceWarning": "Ovo se automatski dodaje kao feed u vaš NuGet.Config u vašem ABP rješenju. Ne dijelite svoj privatni ključ s neovlaštenim korisnicima!", "MyOrganizations_Detail_DeveloperSeatInfo": "Koristite {0} od svojih {1} razvojnih mjesta.", "NeedMoreSeatsForYourTeam": "Trebate više mjesta za svoj tim?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json index 58169ed73c..514a1b3a9f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json @@ -554,8 +554,8 @@ "MyOrganizations_Detail_LicenseStartAndExpiryDate": "licensz kezdő dátuma – lejárati dátum", "MyOrganizations_Detail_OwnerRightInfo": "Ön {1} tulajdonosi jogának {0}-át használja.", "MyOrganizations_Detail_CopyApiKey": "Másolja ki a kulcsot", - "MyOrganizations_Detail_ApiKeyDescription": "Az API-kulcs a(z) {1} webhelyen tárolt PRO-csomagok tokenje.", - "MyOrganizations_Detail_YourPrivateNugetSource": "Az Ön privát NuGet-forrása {0}", + "MyOrganizations_Detail_ApiKeyDescription": "Az API-kulcs a(z) {1} webhelyen tárolt PRO-csomagok tokenje.", + "MyOrganizations_Detail_YourPrivateNugetSource": "Az Ön privát NuGet-forrása {0}", "MyOrganizations_Detail_PrivateNugetSourceWarning": "Ez automatikusan hozzáadódik feedként a NuGet.Config-hoz az ABP-megoldásban. Ne ossza meg privát kulcsát illetéktelen felhasználókkal!", "MyOrganizations_Detail_DeveloperSeatInfo": "Ön {1} fejlesztői helyéből {0}-ot használ.", "NeedMoreSeatsForYourTeam": "Több hozzáférésre van szüksége a csapatának?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json index 9fc25da395..917b32033a 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json @@ -557,8 +557,8 @@ "MyOrganizations_Detail_LicenseStartAndExpiryDate": "Дата начала действия лицензии – дата истечения срока действия", "MyOrganizations_Detail_OwnerRightInfo": "Вы используете {0} ваших прав владельца {1}.", "MyOrganizations_Detail_CopyApiKey": "Скопируйте ключ", - "MyOrganizations_Detail_ApiKeyDescription": "Ключ API — это токен PRO-пакетов, размещенных на {1}.", - "MyOrganizations_Detail_YourPrivateNugetSource": "Ваш личный источник NuGet: {0}", + "MyOrganizations_Detail_ApiKeyDescription": "Ключ API — это токен PRO-пакетов, размещенных на {1}.", + "MyOrganizations_Detail_YourPrivateNugetSource": "Ваш личный источник NuGet: {0}", "MyOrganizations_Detail_PrivateNugetSourceWarning": "Он автоматически добавляется в качестве канала в ваш NuGet.Config в вашем решении ABP. ", "MyOrganizations_Detail_DeveloperSeatInfo": "Вы используете {0} из {1} мест разработчика.", "NeedMoreSeatsForYourTeam": "Вам нужно больше мест для вашей команды?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json index 0ea5c73e71..fa8fce1bcc 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json @@ -563,8 +563,8 @@ "MyOrganizations_Detail_LicenseStartAndExpiryDate": "Lisans Başlangıç Tarihi - Sona Erme Tarihi", "MyOrganizations_Detail_OwnerRightInfo": "{1} sahiplik hakkınızın {0}'ını kullanıyorsunuz.", "MyOrganizations_Detail_CopyApiKey": "Anahtarı Kopyala", - "MyOrganizations_Detail_ApiKeyDescription": "API Anahtarı, {1} üzerinde barındırılan PRO paketlerinin belirtecidir.", - "MyOrganizations_Detail_YourPrivateNugetSource": "Özel NuGet kaynağınız {0}", + "MyOrganizations_Detail_ApiKeyDescription": "API Anahtarı, {1} üzerinde barındırılan PRO paketlerinin belirtecidir.", + "MyOrganizations_Detail_YourPrivateNugetSource": "Özel NuGet kaynağınız {0}", "MyOrganizations_Detail_PrivateNugetSourceWarning": "Bu, ABP çözümünüzdeki NuGet.Config'inize otomatik olarak bir besleme olarak eklenir. Özel anahtarınızı yetkisiz kullanıcılarla paylaşmayın!", "MyOrganizations_Detail_DeveloperSeatInfo": "{1} geliştirici koltuğunuzun {0} tanesini kullanıyorsunuz.", "NeedMoreSeatsForYourTeam": "Takımınız için daha fazla geliştirici koltuğu gerekiyor mu?", 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 db53fde072..5dd86061de 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json @@ -556,8 +556,8 @@ "MyOrganizations_Detail_LicenseStartAndExpiryDate": "许可证开始日期 - 到期日期", "MyOrganizations_Detail_OwnerRightInfo": "您正在使用{1}所有者权利中的{0}项权利。", "MyOrganizations_Detail_CopyApiKey": "复制密钥", - "MyOrganizations_Detail_ApiKeyDescription": "API 密钥是 {1}. 上托管的 PRO 包的标记。", - "MyOrganizations_Detail_YourPrivateNugetSource": "您的 NuGet 私有源是 {0}", + "MyOrganizations_Detail_ApiKeyDescription": "API 密钥是 {1}. 上托管的 PRO 包的标记。", + "MyOrganizations_Detail_YourPrivateNugetSource": "您的 NuGet 私有源是 {0}", "MyOrganizations_Detail_PrivateNugetSourceWarning": "此密钥会自动添加到 ABP 解决方案中的 NuGet.Config 中。请勿与未经授权的用户共享您的私人密钥!", "MyOrganizations_Detail_DeveloperSeatInfo": "您正在使用{1}个开发人员席位中的{0}个。", "NeedMoreSeatsForYourTeam": "您的团队需要更多座位?", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json index ade3b387d5..613ff1e4e5 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json @@ -545,7 +545,7 @@ "MyOrganizations_Detail_OwnerRightInfo": "您正在使用您的 {1} 項所有者權利中的 {0} 項。", "MyOrganizations_Detail_CopyApiKey": "複製密鑰", "MyOrganizations_Detail_ApiKeyDescription": "API 金鑰是{1} 上託管的 PRO 包的令牌。", - "MyOrganizations_Detail_YourPrivateNugetSource": "您的私有 NuGet 來源是{0}", + "MyOrganizations_Detail_YourPrivateNugetSource": "您的私有 NuGet 來源是{0}", "MyOrganizations_Detail_PrivateNugetSourceWarning": "這會作為 feed 自動添加到 ABP 解決方案中的 NuGet.Config 中。不要與未經授權的用戶分享您的私鑰!", "MyOrganizations_Detail_DeveloperSeatInfo": "您正在使用 {1} 個開發者席位中的 {0} 個。", "NeedMoreSeatsForYourTeam": "您的團隊需要更多座位嗎?", From 9402ea300933f41add1fcc8e304ae2f2a99f0d9f Mon Sep 17 00:00:00 2001 From: Salih Date: Wed, 3 Jan 2024 15:26:58 +0300 Subject: [PATCH 03/52] Update en.json --- .../Commercial/Localization/Resources/en.json | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index b5ad4b58fb..3bb59e500f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -838,7 +838,7 @@ "ModulesPageTitle": "ABP Pre-Built Application Modules", "Volo.AbpIo.Commercial:040001": "API Access Key is incorrect.", "GetLepton": "Get Lepton Now", - "MyOrganizations_Detail_LicenseStartDate": "License Start Date", + "MyOrganizations_Detail_LicenseStartDate": "Start Date", "MyOrganizations_Detail_LicenseExpiryDate": "Expiry Date", "BlazoriseSupport": "How do I get the Blazorise license key and support from the Blazorise team?", "BlazoriseSupportExplanation": "Follow the steps below to get support from the Blazorise team and get your Blazorise license key:", @@ -1106,6 +1106,15 @@ "AutoRenewalDisabled": "Auto Renewal Disabled", "PaymentRequestIdIsNotProvided": "Payment request id is not provided.", "PaymentFailedInfo": "Sorry, payment failed! This could be due to insufficient funds, invalid credit card numbers or invalid pin", - "UsedPayment": "This payment has been already used" + "UsedPayment": "This payment has been already used", + "ABPStudioBetaAccess": "ABP Studio Beta Access", + "VisitABPStudio": "Visit ABP Studio", + "EditBillingInformation": "Edit Billing Information", + "Organization": "Organization", + "E-Book": "E-Book", + "CreditCards": "Credit Cards", + "BillingInformation": "Billing Information", + "AddNewCreditCard": "Add New Credit Card", + "MyOrganizations_LearnMorePlan": "Learn more about plans on the pricing page" } } From 9595b64d404bc0b38d2b260902024f64f0d5de00 Mon Sep 17 00:00:00 2001 From: Salih Date: Thu, 4 Jan 2024 13:09:36 +0300 Subject: [PATCH 04/52] add text-white --- .../Commercial/Localization/Resources/ar.json | 2 +- .../Commercial/Localization/Resources/en.json | 6 ++++-- .../Commercial/Localization/Resources/fi.json | 2 +- .../Commercial/Localization/Resources/hr.json | 2 +- .../Commercial/Localization/Resources/hu.json | 2 +- .../Commercial/Localization/Resources/ru.json | 2 +- .../Commercial/Localization/Resources/tr.json | 2 +- .../Commercial/Localization/Resources/zh-Hans.json | 2 +- .../Commercial/Localization/Resources/zh-Hant.json | 2 +- 9 files changed, 12 insertions(+), 10 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json index ec8b0a752d..b5103b8b4f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ar.json @@ -615,7 +615,7 @@ "Tools_Page_Description": "يوفر ABP التجاري أدوات تطوير سريعة للتطبيقات لزيادة إنتاجية المطورين. يتيح لك ABP Suite إنشاء صفحات CRUD بسهولة.", "DeveloperPrice": "سعر المطور", "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} مطورين", - "LicenseRemainingDays": "لمدة {0} يوم", + "LicenseRemainingDays": "لمدة {0} يوم", "ExtendPaymentInfoSection_Description": "من خلال تمديد / تجديد رخصتك، ستستمر في الحصول على الدعم المتميز. ستتمكن أيضًا من الحصول على تحديثات رئيسية أو ثانوية للوحدات والسمات. ستتمكن من الاستمرار في إنشاء مشاريع جديدة. وستظل قادرًا على استخدام ABP Suite مما يسرع من تطويرك.", "LicenseRenewalPrice": "سعر تجديد الرخصة", "LicensePrice": "سعر الرخصة", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 3bb59e500f..e8b8f4df76 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -641,7 +641,7 @@ "Tools_Page_Description": "ABP Commercial provides rapid application development tooling to increase developer productivity. ABP Suite allows you to create CRUD pages easily.", "DeveloperPrice": "Developer Price", "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} developers", - "LicenseRemainingDays": "for {0} days", + "LicenseRemainingDays": "for {0} days", "ExtendPaymentInfoSection_Description": "By extending/renewing your license, you will continue to get premium support. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. And you will still be able to use ABP Suite which speeds up your development.", "LicenseRenewalPrice": "License renewal price", "LicensePrice": "License Price", @@ -1115,6 +1115,8 @@ "CreditCards": "Credit Cards", "BillingInformation": "Billing Information", "AddNewCreditCard": "Add New Credit Card", - "MyOrganizations_LearnMorePlan": "Learn more about plans on the pricing page" + "MyOrganizations_LearnMorePlan": "Learn more about plans on the pricing page", + "AutoLicenseRenewalIsNotEnabled": "Auto license renewal is not enabled.", + "SetAsDefaultPaymentMethod": "Set as default payment method" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json index eebf13cc0d..5d5aa90c75 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/fi.json @@ -639,7 +639,7 @@ "Tools_Page_Description": "ABP Commercial tarjoaa nopeat sovelluskehitystyökalut kehittäjien tuottavuuden lisäämiseksi. ABP Suiten avulla voit luoda CRUD-sivuja helposti.", "DeveloperPrice": "Kehittäjän hinta", "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} kehittäjät", - "LicenseRemainingDays": " {0} päivän ajan", + "LicenseRemainingDays": " {0} päivän ajan", "ExtendPaymentInfoSection_Description": "Pidentämällä/uusimalla käyttölupaasi saat edelleen premium-tuen. Voit myös saada suurempia tai pieniä päivityksiä moduuleille ja teemoille. Voit jatkaa uusien projektien luomista. Voit silti käyttää ABP Suitea, joka nopeuttaa kehitystäsi.", "LicenseRenewalPrice": "Lisenssin uusimisen hinta", "LicensePrice": "Lisenssin hinta", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json index a7fc0c4965..d671367ec5 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hr.json @@ -641,7 +641,7 @@ "Tools_Page_Description": "ABP Commercial pruža alate za brzi razvoj aplikacija za povećanje produktivnosti programera. ABP Suite vam omogućuje jednostavno stvaranje CRUD stranica.", "DeveloperPrice": "Cijena programera", "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} programeri", - "LicenseRemainingDays": "za {0} dana", + "LicenseRemainingDays": "za {0} dana", "ExtendPaymentInfoSection_Description": "Produljenjem/obnavljanjem licence i dalje ćete dobivati premium podršku . Također ćete moći dobiti veća ili manja ažuriranja za module i teme. Moći ćete nastaviti stvarati nove projekte. I dalje ćete moći koristiti ABP Suite koji ubrzava vaš razvoj.", "LicenseRenewalPrice": "Cijena obnove licence", "LicensePrice": "Cijena licence", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json index 514a1b3a9f..77eafe8df7 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/hu.json @@ -639,7 +639,7 @@ "Tools_Page_Description": "Az ABP Commercial gyors alkalmazásfejlesztési eszközöket biztosít a fejlesztők termelékenységének növelése érdekében. Az ABP Suite segítségével könnyedén hozhat létre CRUD oldalakat.", "DeveloperPrice": "Fejlesztői ár", "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} fejlesztő", - "LicenseRemainingDays": "{0} napig", + "LicenseRemainingDays": "{0} napig", "ExtendPaymentInfoSection_Description": "A licensz meghosszabbításával/megújításával továbbra is prémium támogatást kap. Emellett kisebb-nagyobb frissítéseket is kaphat a modulokhoz és témákhoz. Folytathatja új projektek létrehozását. És továbbra is használhatja az ABP Suite -ot, amely felgyorsítja a fejlesztést.", "LicenseRenewalPrice": "Licensz megújítási ára", "LicensePrice": "Licensz ára", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json index 917b32033a..43963ac972 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/ru.json @@ -642,7 +642,7 @@ "Tools_Page_Description": "ABP Commercial предоставляет инструменты для быстрой разработки приложений, позволяющие повысить продуктивность разработчиков. ", "DeveloperPrice": "Цена застройщика", "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} Разработчики", - "LicenseRemainingDays": "для {0} дни", + "LicenseRemainingDays": "для {0} дни", "ExtendPaymentInfoSection_Description": "Продлив/продлив лицензию, вы продолжите получать премиум-поддержка. ABP Люкс что ускоряет ваше развитие.", "LicenseRenewalPrice": "Стоимость продления лицензии", "LicensePrice": "Цена лицензии", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json index fa8fce1bcc..1a679ff5d1 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/tr.json @@ -648,7 +648,7 @@ "Tools_Page_Description": "ABP Commercial, geliştirici verimliliğini artırmak için hızlı uygulama geliştirme araçları sağlar. ABP Suite, CRUD sayfalarını kolayca oluşturmanızı sağlar.", "DeveloperPrice": "Geliştirici Fiyatı", "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0} geliştiriciler", - "LicenseRemainingDays": " {0} gün boyunca", + "LicenseRemainingDays": " {0} gün boyunca", "ExtendPaymentInfoSection_Description": "Lisansınızı uzatarak/yenileyerek premium destek almaya devam edeceksiniz. You will also be able to get major or minor updates for modules and themes. You will be able to continue creating new projects. Ve gelişiminizi hızlandıran ABP Suite'i kullanmaya devam edebileceksiniz.", "LicenseRenewalPrice": "Lisans yenileme fiyatı", "LicensePrice": "Lisans fiyatı", 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 5dd86061de..37d63cf826 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hans.json @@ -641,7 +641,7 @@ "Tools_Page_Description": "ABP 商业版提供快速应用程序开发工具,以提高开发人员的工作效率。ABP Suite 可让您轻松创建 CRUD 页面。", "DeveloperPrice": "开发者价格", "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0}<小>开发人员 {0} 天", + "LicenseRemainingDays": "为 {0} 天", "ExtendPaymentInfoSection_Description": "延长/续订许可证后,您将继续获得高级支持。您还可以获得模块和主题的主要或次要更新。您还可以继续创建新项目。您还可以使用 ABP Suite 来加快开发速度。", "LicenseRenewalPrice": "许可证续期价格", "LicensePrice": "许可证价格", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json index 613ff1e4e5..312a19994c 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/zh-Hant.json @@ -628,7 +628,7 @@ "Tools_Page_Description": "ABP Commercial 提供快速應用程式開發工具來提高開發人員的工作效率。 ABP Suite 讓您輕鬆建立 CRUD 頁面。", "DeveloperPrice": "開發商價格", "AdditionalDeveloperPaymentInfoSection_AdditionalDevelopers": "{0}開發者", - "LicenseRemainingDays": "{0}天", + "LicenseRemainingDays": "{0}天", "ExtendPaymentInfoSection_Description": "透過延長/更新您的許可證,您將繼續獲得高級支援。您還可以獲得模組和主題的主要或次要更新。您將能夠繼續建立新專案。而且您仍然可以使用ABP Suite來加快您的開發速度。", "LicenseRenewalPrice": "許可證更新價格", "LicensePrice": "許可價格", From b7aeb4c7c7dad08998a0c2b548cbc164fee308b4 Mon Sep 17 00:00:00 2001 From: Salih Date: Thu, 4 Jan 2024 13:31:19 +0300 Subject: [PATCH 05/52] Update en.json --- .../Commercial/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index e8b8f4df76..ebc989c12e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1117,6 +1117,7 @@ "AddNewCreditCard": "Add New Credit Card", "MyOrganizations_LearnMorePlan": "Learn more about plans on the pricing page", "AutoLicenseRenewalIsNotEnabled": "Auto license renewal is not enabled.", - "SetAsDefaultPaymentMethod": "Set as default payment method" + "SetAsDefaultPaymentMethod": "Set as default payment method", + "{0}PerAdditionalDeveloper": "{0} per additional developer" } } From 717053c28dc7282de0e71510ab626e706866e94b Mon Sep 17 00:00:00 2001 From: Salih Date: Thu, 4 Jan 2024 15:17:38 +0300 Subject: [PATCH 06/52] Update en.json --- .../Commercial/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index ebc989c12e..de30a6f8b2 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1118,6 +1118,7 @@ "MyOrganizations_LearnMorePlan": "Learn more about plans on the pricing page", "AutoLicenseRenewalIsNotEnabled": "Auto license renewal is not enabled.", "SetAsDefaultPaymentMethod": "Set as default payment method", - "{0}PerAdditionalDeveloper": "{0} per additional developer" + "{0}PerAdditionalDeveloper": "{0} per additional developer", + "CardAlias": "Card Alias" } } From b3f919a4cd3f114257aa965be754631d403e0ef6 Mon Sep 17 00:00:00 2001 From: Salih Date: Mon, 8 Jan 2024 09:49:21 +0300 Subject: [PATCH 07/52] commit --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 6 ++++-- .../Commercial/Localization/Resources/en.json | 4 ++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index d428ff0480..eeb0c83547 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -571,7 +571,7 @@ "PaymentAlreadyTried": "Payment already tried!", "PaymentIsNotFailed": "Payment is not failed!", "OrganizationIdIsNull": "OrganizationId is null!", - "Menu:OrganizationAutoRenewalPayments": "Organization Auto Renewal Payments", + "Menu:AutoRenewals": "Auto Renewals", "OrganizationAutoRenewalPayments": "Organization Auto Renewal Payments", "PaymentDate": "Payment Date", "TryCount": "Try Count", @@ -587,6 +587,8 @@ "LastAutoRenewalPaymentTime": "Last Auto Renewal Payment Time", "OrganizationDoesNotHaveACreditCard": "Organization does not have a credit card!", "Permission:EditWinners": "Edit Winners", - "Permission:ChangeDrawingStatus": "Change Drawing Status" + "Permission:ChangeDrawingStatus": "Change Drawing Status", + "Menu:Licenses": "Licenses", + "OrganizationId": "Organization Id" } } diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index de30a6f8b2..795434ad89 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1094,12 +1094,12 @@ "YouAreNotAuthorizedToPayThisPaymentRequest": "You are not authorized to pay this payment request.", "YouAreNotAuthorizedToCreateBillingInfoForThisPaymentRequest": "You are not authorized to create billing info for this payment request.", "OrganizationNotFound": "Organization not found.", - "CannotDeleteDefaultCardBecauseAutoRenewalEnabled": "You cannot delete this card because it is your default card and you have auto renewal enabled. Please disable auto renewal first.", + "CannotDeleteDefaultCardBecauseAutoRenewalEnabled": "You cannot delete this card at the moment because the Auto-Renewal feature is enabled. To delete the card, first disable Auto-Renewal.", "AreYouSureWantToDeleteThisCard": "Are you sure you want to delete this card?", "AreYouSureWantToSetThisCardAsDefault": "Are you sure you want to set this card as default?", "OrganizationBillingInfoIsNotSuitableForIyzicoPayment": "Your organization's billing info is not suitable for iyzico payment.", "AutomaticRenewal": "Automatic Renewal", - "AutomaticRenewal_Description": "Renewing a license before it expires lets you get a discount of up to %40. The auto-renewal process lets you renew your license without losing this discount, and your development will never interrupt. Auto-renewal is only available for credit cards. You can disable auto-renewal at any time by accessing your Organization Management page. ABP.io does not save your credit card information, but our global payment gateways do secure savings.", + "AutomaticRenewal_Description": "Renewing a license before it expires lets you get a discount of up to %40. The auto-renewal process lets you renew your license without losing this discount, and your development will never interrupt. Auto-renewal is only available for credit card payment. You can disable auto-renewal at any time by accessing your Organization Management page. ABP does not save your credit card information, but our global payment gateways do secure savings.", "CardNotFoundMessage": "Do you want to add a new card?", "CardNotFoundTitle": "Card Not Found", "AutoRenewalEnabled": "Auto Renewal Enabled", From c79e401a66f9b9b6f19818cb0215ffd9883e3b76 Mon Sep 17 00:00:00 2001 From: Salih Date: Mon, 8 Jan 2024 18:17:51 +0300 Subject: [PATCH 08/52] Update en.json --- .../Commercial/Localization/Resources/en.json | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 9ce2577985..ce9db0d46e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1119,6 +1119,13 @@ "AutoLicenseRenewalIsNotEnabled": "Auto license renewal is not enabled.", "SetAsDefaultPaymentMethod": "Set as default payment method", "{0}PerAdditionalDeveloper": "{0} per additional developer", - "CardAlias": "Card Alias" + "CardAlias": "Card Alias", + "AbpDoesNotSaveYourPaymentDetails_Description": "The payment data will be saved in {2} security vaults and you can remove stored data anytime. Enabling auto-renewal ensures that your ABP subscription will automatically renew prior to expiration, providing a valid credit card. Disabling auto-renewal means you will have to renew your subscription manually. To continue your project development without interruption, we suggest you enable the Auto-Renewal option.", + "AddBillingInformation": "Add Billing Information", + "YouHaveNoCardsSaved": "You have no cards saved.", + "CreateCreditCardModal_BillingDetails_Description": "You must save your billing details to be able to add your credit card.", + "TaxNo": "Tax No", + "CardNumber": "Card Number", + "NameOnCard": "Name on Card", } } From 0d1fcd91d335d2c81332e75fd08af0c2ed04090b Mon Sep 17 00:00:00 2001 From: Salih Date: Tue, 9 Jan 2024 14:32:45 +0300 Subject: [PATCH 09/52] Update en.json --- .../AbpIoLocalization/Commercial/Localization/Resources/en.json | 1 + 1 file changed, 1 insertion(+) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index ce9db0d46e..510c62ca7e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1127,5 +1127,6 @@ "TaxNo": "Tax No", "CardNumber": "Card Number", "NameOnCard": "Name on Card", + "BillingDetails": "Billing Details" } } From 1a3f35e085168cbd9ed565a8106b3981a485ea2a Mon Sep 17 00:00:00 2001 From: Salih Date: Wed, 10 Jan 2024 10:57:25 +0300 Subject: [PATCH 10/52] Update en.json --- .../Commercial/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 510c62ca7e..797756e54d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1127,6 +1127,7 @@ "TaxNo": "Tax No", "CardNumber": "Card Number", "NameOnCard": "Name on Card", - "BillingDetails": "Billing Details" + "BillingDetails": "Billing Details", + "ThereIsNoDeveloper": "There is no developer." } } From b2dae320054ac75a9aab70d8a144eaf524d4b10a Mon Sep 17 00:00:00 2001 From: Salih Date: Mon, 15 Jan 2024 16:20:11 +0300 Subject: [PATCH 11/52] Update en.json --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 8e55766ff2..29211d4d8e 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -590,6 +590,7 @@ "Permission:ChangeDrawingStatus": "Change Drawing Status", "Menu:Licenses": "Licenses", "OrganizationId": "Organization Id", - "RemoveAllWinnersConfirmationMessage": "Are you sure you want to remove all winners?" + "RemoveAllWinnersConfirmationMessage": "Are you sure you want to remove all winners?", + "AutoRenewals": "Auto Renewals" } } From df87ea49c79da8696baa62b5636782f8f46a554a Mon Sep 17 00:00:00 2001 From: Salih Date: Tue, 16 Jan 2024 10:31:17 +0300 Subject: [PATCH 12/52] Update en.json --- .../Commercial/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json index 797756e54d..082438272d 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/en.json @@ -1128,6 +1128,7 @@ "CardNumber": "Card Number", "NameOnCard": "Name on Card", "BillingDetails": "Billing Details", - "ThereIsNoDeveloper": "There is no developer." + "ThereIsNoDeveloper": "There is no developer.", + "CardDetails": "Card Details" } } From ed3ada88ba1b8fa813508e54ff3af1c2f368be0d Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Tue, 16 Jan 2024 16:22:54 +0300 Subject: [PATCH 13/52] Add an empty view for blog posts --- .../CmsKit/Localization/Resources/en.json | 5 +- .../Pages/Public/CmsKit/Blogs/Index.cshtml | 78 +++++++++++-------- 2 files changed, 47 insertions(+), 36 deletions(-) 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 3bba4fc599..0a4a99fc30 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 @@ -1,5 +1,5 @@ { - "culture": "en", + "culture": "en", "texts": { "AddSubMenuItem": "Add Sub Menu Item", "AreYouSure": "Are You Sure?", @@ -227,6 +227,7 @@ "CssClass": "CSS Class", "TagsHelpText": "Tags should be comma-separated (e.g.: tag1, tag2, tag3)", "ThisPartOfContentCouldntBeLoaded": "This part of content couldn't be loaded.", - "DuplicateCommentAttemptMessage": "Duplicate comment post attempt detected. Your comment has already been submitted." + "DuplicateCommentAttemptMessage": "Duplicate comment post attempt detected. Your comment has already been submitted.", + "NoBlogPostYet": "No blog post yet!" } } \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml index 6f2a82e220..f935e734dc 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Web/Pages/Public/CmsKit/Blogs/Index.cshtml @@ -59,38 +59,48 @@
} - - @foreach (var blog in Model.Blogs.Items) - { - - - @if (blog.CoverImageMediaId != null) - { - - } - else - { - - } - -
@blog.Title
-

- @@@blog.Author?.UserName - @blog.CreationTime -

-

@blog.ShortDescription

- -
-
+@if (Model.Blogs.TotalCount > 0) +{ + + @foreach (var blog in Model.Blogs.Items) + { + + + @if (blog.CoverImageMediaId != null) + { + + } + else + { + + } + +
@blog.Title
+

+ @@@blog.Author?.UserName + @blog.CreationTime +

+

@blog.ShortDescription

+ +
+
+
+ } +
+ + + - } - - - - - - +
+} +else +{ +
+

+

@L["NoBlogPostYet"]

+
+} From 0e4fccaee8ee8eac7c6fd81f849a24bdbbd402e2 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 11:22:29 +0300 Subject: [PATCH 14/52] Add FindTitleAsync to IPageRepository --- .../Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs | 2 ++ .../Volo/CmsKit/Pages/EfCorePageRepository.cs | 5 +++++ .../Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs | 6 ++++++ 3 files changed, 13 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs index 0b75c32d6b..2add03f1fd 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Pages/IPageRepository.cs @@ -24,4 +24,6 @@ public interface IPageRepository : IBasicRepository Task ExistsAsync(string slug, CancellationToken cancellationToken = default); Task> GetListOfHomePagesAsync(CancellationToken cancellationToken = default); + + Task FindTitleAsync(Guid pageId, CancellationToken cancellationToken = default); } diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs index aefd834013..4af6bf18f3 100644 --- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Pages/EfCorePageRepository.cs @@ -68,4 +68,9 @@ public class EfCorePageRepository : EfCoreRepository x.IsHomePage, cancellationToken: GetCancellationToken(cancellationToken)); } + + public async Task FindTitleAsync(Guid pageId, CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()).Where(x => x.Id == pageId).Select(x => x.Title).FirstOrDefaultAsync(cancellationToken); + } } diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs index 601aad0570..565530fcb7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs @@ -76,4 +76,10 @@ public class MongoPageRepository : MongoDbRepository x.IsHomePage, cancellationToken: GetCancellationToken(cancellationToken)); } + + public async Task FindTitleAsync(Guid pageId, CancellationToken cancellationToken = default) + { + return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Id == pageId).Select(x => x.Title) + .FirstOrDefaultAsync(cancellationToken); + } } From 673adf14921c04db72b6e42b3101fe3d431c3bcb Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 11:22:45 +0300 Subject: [PATCH 15/52] Add tests for FindTitleAsync to IPageRepository --- .../Pages/PageRepository_Test.cs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs index dcdcef5ad3..6c4c57cc47 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/Pages/PageRepository_Test.cs @@ -1,4 +1,5 @@ -using System.Linq; +using System; +using System.Linq; using System.Threading.Tasks; using Shouldly; using Volo.Abp.Modularity; @@ -99,4 +100,20 @@ public abstract class PageRepository_Test : CmsKitTestBase Date: Wed, 17 Jan 2024 11:23:23 +0300 Subject: [PATCH 16/52] Add MenuItemWithDetailsDto to IMenuItemAdminAppService --- .../CmsKit/Admin/Menus/IMenuItemAdminAppService.cs | 2 +- .../CmsKit/Admin/Menus/MenuItemWithDetailsDto.cs | 10 ++++++++++ .../CmsKitAdminApplicationAutoMapperProfile.cs | 3 +++ .../CmsKit/Admin/Menus/MenuItemAdminAppService.cs | 13 ++++++++++--- .../CmsKit/Admin/Menus/MenuItemAdminController.cs | 2 +- 5 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemWithDetailsDto.cs diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs index 74aac7b814..a8908129d2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/IMenuItemAdminAppService.cs @@ -10,7 +10,7 @@ public interface IMenuItemAdminAppService : IApplicationService { Task> GetListAsync(); - Task GetAsync(Guid id); + Task GetAsync(Guid id); Task CreateAsync(MenuItemCreateInput input); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemWithDetailsDto.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemWithDetailsDto.cs new file mode 100644 index 0000000000..a6d9906157 --- /dev/null +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemWithDetailsDto.cs @@ -0,0 +1,10 @@ +using System; +using Volo.CmsKit.Menus; + +namespace Volo.CmsKit.Admin.Menus; + +[Serializable] +public class MenuItemWithDetailsDto : MenuItemDto +{ + public string? PageTitle { get; set; } +} diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs index 56f58f8078..1394b608c7 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs @@ -46,5 +46,8 @@ public class CmsKitAdminApplicationAutoMapperProfile : Profile CreateMap().MapExtraProperties(); CreateMap().MapExtraProperties(); + CreateMap() + .Ignore(x => x.PageTitle) + .MapExtraProperties(); } } 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 8eac471a22..3a323efb13 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 @@ -43,10 +43,17 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin ); } - public virtual async Task GetAsync(Guid id) + public virtual async Task GetAsync(Guid id) { - var menu = await MenuItemRepository.GetAsync(id); - return ObjectMapper.Map(menu); + var menuItem = await MenuItemRepository.GetAsync(id); + var dto = ObjectMapper.Map(menuItem); + + if (menuItem.PageId.HasValue) + { + dto.PageTitle = await PageRepository.FindTitleAsync(menuItem.PageId.Value); + } + + return dto; } [Authorize(CmsKitAdminPermissions.Menus.Create)] 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 a0325f4f27..8540e5306e 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 @@ -36,7 +36,7 @@ public class MenuItemAdminController : CmsKitAdminController, IMenuItemAdminAppS [HttpGet] [Route("{id}")] - public virtual Task GetAsync(Guid id) + public virtual Task GetAsync(Guid id) { return MenuItemAdminAppService.GetAsync(id); } From fe86d1a7ba5a6b3db26ef7d58575c787b48decf5 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 11:25:11 +0300 Subject: [PATCH 17/52] Update client-proxies --- .../MenuItemAdminClientProxy.Generated.cs | 4 +- .../cms-kit-admin-generate-proxy.json | 3104 ++++++++--------- 2 files changed, 1554 insertions(+), 1554 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Admin/Menus/MenuItemAdminClientProxy.Generated.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Admin/Menus/MenuItemAdminClientProxy.Generated.cs index 461ae877bd..70daab4da0 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Admin/Menus/MenuItemAdminClientProxy.Generated.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/Volo/CmsKit/Admin/Menus/MenuItemAdminClientProxy.Generated.cs @@ -23,9 +23,9 @@ public partial class MenuItemAdminClientProxy : ClientProxyBase>(nameof(GetListAsync)); } - public virtual async Task GetAsync(Guid id) + public virtual async Task GetAsync(Guid id) { - return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue + return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue { { typeof(Guid), id } }); diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json index cbb5992ebd..b8d0738fac 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.HttpApi.Client/ClientProxies/cms-kit-admin-generate-proxy.json @@ -4,60 +4,102 @@ "rootPath": "cms-kit-admin", "remoteServiceName": "CmsKitAdmin", "controllers": { - "Volo.CmsKit.Admin.Tags.EntityTagAdminController": { - "controllerName": "EntityTagAdmin", - "controllerGroupName": "EntityTagAdmin", + "Volo.CmsKit.Admin.Blogs.BlogAdminController": { + "controllerName": "BlogAdmin", + "controllerGroupName": "BlogAdmin", "isRemoteService": true, "isIntegrationService": false, "apiVersion": null, - "type": "Volo.CmsKit.Admin.Tags.EntityTagAdminController", + "type": "Volo.CmsKit.Admin.Blogs.BlogAdminController", "interfaces": [ { - "type": "Volo.CmsKit.Admin.Tags.IEntityTagAdminAppService", - "name": "IEntityTagAdminAppService", + "type": "Volo.CmsKit.Admin.Blogs.IBlogAdminAppService", + "name": "IBlogAdminAppService", "methods": [ { - "name": "AddTagToEntityAsync", + "name": "GetAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" + } + }, + { + "name": "GetListAsync", "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogGetListInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.BlogGetListInput", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogGetListInput", "isOptional": false, "defaultValue": null } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, { - "name": "RemoveTagFromEntityAsync", + "name": "CreateAsync", "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", "isOptional": false, "defaultValue": null } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.CmsKit.Admin.Blogs.BlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" } }, { - "name": "SetEntityTagsAsync", + "name": "UpdateAsync", "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagSetDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" + } + }, + { + "name": "DeleteAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null } @@ -71,55 +113,55 @@ } ], "actions": { - "AddTagToEntityAsyncByInput": { - "uniqueName": "AddTagToEntityAsyncByInput", - "name": "AddTagToEntityAsync", - "httpMethod": "POST", - "url": "api/cms-kit-admin/entity-tags", + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/blogs/{id}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "input", + "nameOnMethod": "id", + "name": "id", "jsonName": null, - "type": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.CmsKit.Admin.Blogs.BlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" }, - "allowAnonymous": null, - "implementFrom": "Volo.CmsKit.Admin.Tags.IEntityTagAdminAppService" + "allowAnonymous": false, + "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" }, - "RemoveTagFromEntityAsyncByInput": { - "uniqueName": "RemoveTagFromEntityAsyncByInput", - "name": "RemoveTagFromEntityAsync", - "httpMethod": "DELETE", - "url": "api/cms-kit-admin/entity-tags", + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/blogs", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogGetListInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.BlogGetListInput", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogGetListInput", "isOptional": false, "defaultValue": null } @@ -127,9 +169,9 @@ "parameters": [ { "nameOnMethod": "input", - "name": "TagId", + "name": "Filter", "jsonName": null, - "type": "System.Guid", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, @@ -139,7 +181,7 @@ }, { "nameOnMethod": "input", - "name": "EntityType", + "name": "Sorting", "jsonName": null, "type": "System.String", "typeSimple": "string", @@ -151,10 +193,22 @@ }, { "nameOnMethod": "input", - "name": "EntityId", + "name": "SkipCount", "jsonName": null, - "type": "System.String", - "typeSimple": "string", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -163,24 +217,24 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" }, - "allowAnonymous": null, - "implementFrom": "Volo.CmsKit.Admin.Tags.IEntityTagAdminAppService" + "allowAnonymous": false, + "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" }, - "SetEntityTagsAsyncByInput": { - "uniqueName": "SetEntityTagsAsyncByInput", - "name": "SetEntityTagsAsync", - "httpMethod": "PUT", - "url": "api/cms-kit-admin/entity-tags", + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagSetDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", "isOptional": false, "defaultValue": null } @@ -190,8 +244,8 @@ "nameOnMethod": "input", "name": "input", "jsonName": null, - "type": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -200,154 +254,55 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.CmsKit.Admin.Blogs.BlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" }, - "allowAnonymous": null, - "implementFrom": "Volo.CmsKit.Admin.Tags.IEntityTagAdminAppService" - } - } - }, - "Volo.CmsKit.Admin.Tags.TagAdminController": { - "controllerName": "TagAdmin", - "controllerGroupName": "TagAdmin", - "isRemoteService": true, - "isIntegrationService": false, - "apiVersion": null, - "type": "Volo.CmsKit.Admin.Tags.TagAdminController", - "interfaces": [ - { - "type": "Volo.CmsKit.Admin.Tags.ITagAdminAppService", - "name": "ITagAdminAppService", - "methods": [ - { - "name": "GetTagDefinitionsAsync", - "parametersOnMethod": [], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.CmsKit.Admin.Tags.TagDefinitionDto]" - } - }, + "allowAnonymous": false, + "implementFrom": "Volo.Abp.Application.Services.ICreateAppService" + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-admin/blogs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ { - "name": "GetAsync", - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.CmsKit.Tags.TagDto", - "typeSimple": "Volo.CmsKit.Tags.TagDto" - } + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null }, - { - "name": "GetListAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Tags.TagGetListInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Tags.TagGetListInput", - "typeSimple": "Volo.CmsKit.Admin.Tags.TagGetListInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - } - }, - { - "name": "CreateAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Tags.TagCreateDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Tags.TagCreateDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.TagCreateDto", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.CmsKit.Tags.TagDto", - "typeSimple": "Volo.CmsKit.Tags.TagDto" - } - }, - { - "name": "UpdateAsync", - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Tags.TagUpdateDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Tags.TagUpdateDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.TagUpdateDto", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.CmsKit.Tags.TagDto", - "typeSimple": "Volo.CmsKit.Tags.TagDto" - } - }, - { - "name": "DeleteAsync", - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - } - ] - } - ], - "actions": { - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/cms-kit-admin/tags", - "supportedVersions": [], - "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Tags.TagCreateDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Tags.TagCreateDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.TagCreateDto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", "isOptional": false, "defaultValue": null } ], "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, { "nameOnMethod": "input", "name": "input", "jsonName": null, - "type": "Volo.CmsKit.Admin.Tags.TagCreateDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.TagCreateDto", + "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -356,17 +311,17 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Tags.TagDto", - "typeSimple": "Volo.CmsKit.Tags.TagDto" + "type": "Volo.CmsKit.Admin.Blogs.BlogDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" }, "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.ICreateAppService" + "implementFrom": "Volo.Abp.Application.Services.IUpdateAppService" }, "DeleteAsyncById": { "uniqueName": "DeleteAsyncById", "name": "DeleteAsync", "httpMethod": "DELETE", - "url": "api/cms-kit-admin/tags/{id}", + "url": "api/cms-kit-admin/blogs/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -398,16 +353,76 @@ }, "allowAnonymous": false, "implementFrom": "Volo.Abp.Application.Services.IDeleteAppService" - }, - "GetAsyncById": { - "uniqueName": "GetAsyncById", - "name": "GetAsync", + } + } + }, + "Volo.CmsKit.Admin.Blogs.BlogFeatureAdminController": { + "controllerName": "BlogFeatureAdmin", + "controllerGroupName": "BlogFeatureAdmin", + "isRemoteService": true, + "isIntegrationService": false, + "apiVersion": null, + "type": "Volo.CmsKit.Admin.Blogs.BlogFeatureAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.Blogs.IBlogFeatureAdminAppService", + "name": "IBlogFeatureAdminAppService", + "methods": [ + { + "name": "SetAsync", + "parametersOnMethod": [ + { + "name": "blogId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "dto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + { + "name": "GetListAsync", + "parametersOnMethod": [ + { + "name": "blogId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.CmsKit.Blogs.BlogFeatureDto]" + } + } + ] + } + ], + "actions": { + "GetListAsyncByBlogId": { + "uniqueName": "GetListAsyncByBlogId", + "name": "GetListAsync", "httpMethod": "GET", - "url": "api/cms-kit-admin/tags/{id}", + "url": "api/cms-kit-admin/blogs/{blogId}/features", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", + "name": "blogId", "typeAsString": "System.Guid, System.Private.CoreLib", "type": "System.Guid", "typeSimple": "string", @@ -417,8 +432,8 @@ ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", + "nameOnMethod": "blogId", + "name": "blogId", "jsonName": null, "type": "System.Guid", "typeSimple": "string", @@ -430,128 +445,55 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Tags.TagDto", - "typeSimple": "Volo.CmsKit.Tags.TagDto" + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.CmsKit.Blogs.BlogFeatureDto]" }, "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogFeatureAdminAppService" }, - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/cms-kit-admin/tags", + "SetAsyncByBlogIdAndDto": { + "uniqueName": "SetAsyncByBlogIdAndDto", + "name": "SetAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-admin/blogs/{blogId}/features", "supportedVersions": [], "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Tags.TagGetListInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Tags.TagGetListInput", - "typeSimple": "Volo.CmsKit.Admin.Tags.TagGetListInput", + "name": "blogId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "dto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Sorting", + "nameOnMethod": "blogId", + "name": "blogId", "jsonName": null, - "type": "System.String", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" }, { - "nameOnMethod": "input", - "name": "SkipCount", + "nameOnMethod": "dto", + "name": "dto", "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - }, - "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" - }, - "UpdateAsyncByIdAndInput": { - "uniqueName": "UpdateAsyncByIdAndInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/cms-kit-admin/tags/{id}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Tags.TagUpdateDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Tags.TagUpdateDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.TagUpdateDto", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - }, - { - "nameOnMethod": "input", - "name": "input", - "jsonName": null, - "type": "Volo.CmsKit.Admin.Tags.TagUpdateDto", - "typeSimple": "Volo.CmsKit.Admin.Tags.TagUpdateDto", + "type": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -560,43 +502,79 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Tags.TagDto", - "typeSimple": "Volo.CmsKit.Tags.TagDto" - }, - "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IUpdateAppService" - }, - "GetTagDefinitionsAsync": { - "uniqueName": "GetTagDefinitionsAsync", - "name": "GetTagDefinitionsAsync", - "httpMethod": "GET", - "url": "api/cms-kit-admin/tags/tag-definitions", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.CmsKit.Admin.Tags.TagDefinitionDto]" + "type": "System.Void", + "typeSimple": "System.Void" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Tags.ITagAdminAppService" + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogFeatureAdminAppService" } } }, - "Volo.CmsKit.Admin.Pages.PageAdminController": { - "controllerName": "PageAdmin", - "controllerGroupName": "PageAdmin", + "Volo.CmsKit.Admin.Blogs.BlogPostAdminController": { + "controllerName": "BlogPostAdmin", + "controllerGroupName": "BlogPostAdmin", "isRemoteService": true, "isIntegrationService": false, "apiVersion": null, - "type": "Volo.CmsKit.Admin.Pages.PageAdminController", + "type": "Volo.CmsKit.Admin.Blogs.BlogPostAdminController", "interfaces": [ { - "type": "Volo.CmsKit.Admin.Pages.IPageAdminAppService", - "name": "IPageAdminAppService", + "type": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService", + "name": "IBlogPostAdminAppService", "methods": [ { - "name": "SetAsHomePageAsync", + "name": "PublishAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + { + "name": "DraftAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + { + "name": "CreateAndPublishAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + } + }, + { + "name": "SendToReviewAsync", "parametersOnMethod": [ { "name": "id", @@ -612,6 +590,31 @@ "typeSimple": "System.Void" } }, + { + "name": "CreateAndSendToReviewAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + } + }, + { + "name": "HasBlogPostWaitingForReviewAsync", + "parametersOnMethod": [], + "returnValue": { + "type": "System.Boolean", + "typeSimple": "boolean" + } + }, { "name": "GetAsync", "parametersOnMethod": [ @@ -625,8 +628,8 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Pages.PageDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" } }, { @@ -634,16 +637,16 @@ "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Pages.GetPagesInputDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Pages.GetPagesInputDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.GetPagesInputDto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput", "isOptional": false, "defaultValue": null } ], "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" } }, { @@ -651,16 +654,16 @@ "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Pages.CreatePageInputDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", "isOptional": false, "defaultValue": null } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Pages.PageDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" } }, { @@ -676,16 +679,16 @@ }, { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", "isOptional": false, "defaultValue": null } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Pages.PageDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" } }, { @@ -709,55 +712,131 @@ } ], "actions": { - "GetAsyncById": { - "uniqueName": "GetAsyncById", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/cms-kit-admin/pages/{id}", + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs/blog-posts", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", + "nameOnMethod": "input", + "name": "input", "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "Body", "descriptorName": "" } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Pages.PageDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" }, "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" + "implementFrom": "Volo.Abp.Application.Services.ICreateAppService" }, - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/cms-kit-admin/pages", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Pages.GetPagesInputDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Pages.GetPagesInputDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.GetPagesInputDto", + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-admin/blogs/blog-posts/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": false, + "implementFrom": "Volo.Abp.Application.Services.IDeleteAppService" + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/blogs/blog-posts/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [ + "GuidRouteConstraint" + ], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + }, + "allowAnonymous": false, + "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/blogs/blog-posts", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput", "isOptional": false, "defaultValue": null } @@ -777,7 +856,43 @@ }, { "nameOnMethod": "input", - "name": "Sorting", + "name": "BlogId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "AuthorId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "TagId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Status", "jsonName": null, "type": "System.String", "typeSimple": "string", @@ -789,10 +904,10 @@ }, { "nameOnMethod": "input", - "name": "SkipCount", + "name": "Sorting", "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -801,7 +916,7 @@ }, { "nameOnMethod": "input", - "name": "MaxResultCount", + "name": "SkipCount", "jsonName": null, "type": "System.Int32", "typeSimple": "number", @@ -810,57 +925,32 @@ "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - }, - "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" - }, - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/cms-kit-admin/pages", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Pages.CreatePageInputDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + }, { "nameOnMethod": "input", - "name": "input", + "name": "MaxResultCount", "jsonName": null, - "type": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Pages.PageDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" }, "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.ICreateAppService" + "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" }, "UpdateAsyncByIdAndInput": { "uniqueName": "UpdateAsyncByIdAndInput", "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/cms-kit-admin/pages/{id}", + "url": "api/cms-kit-admin/blogs/blog-posts/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -873,9 +963,9 @@ }, { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", + "typeAsString": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", "isOptional": false, "defaultValue": null } @@ -897,8 +987,8 @@ "nameOnMethod": "input", "name": "input", "jsonName": null, - "type": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", + "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -907,17 +997,17 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Pages.PageDto", - "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" }, "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IUpdateAppService" + "implementFrom": "Volo.Abp.Application.Services.IUpdateAppService" }, - "DeleteAsyncById": { - "uniqueName": "DeleteAsyncById", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/cms-kit-admin/pages/{id}", + "PublishAsyncById": { + "uniqueName": "PublishAsyncById", + "name": "PublishAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs/blog-posts/{id}/publish", "supportedVersions": [], "parametersOnMethod": [ { @@ -948,13 +1038,13 @@ "typeSimple": "System.Void" }, "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IDeleteAppService" + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" }, - "SetAsHomePageAsyncById": { - "uniqueName": "SetAsHomePageAsyncById", - "name": "SetAsHomePageAsync", - "httpMethod": "PUT", - "url": "api/cms-kit-admin/pages/setashomepage/{id}", + "DraftAsyncById": { + "uniqueName": "DraftAsyncById", + "name": "DraftAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs/blog-posts/{id}/draft", "supportedVersions": [], "parametersOnMethod": [ { @@ -985,91 +1075,167 @@ "typeSimple": "System.Void" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Pages.IPageAdminAppService" - } - } - }, - "Volo.CmsKit.Admin.Menus.MenuItemAdminController": { - "controllerName": "MenuItemAdmin", - "controllerGroupName": "MenuItemAdmin", - "isRemoteService": true, - "isIntegrationService": false, - "apiVersion": null, - "type": "Volo.CmsKit.Admin.Menus.MenuItemAdminController", - "interfaces": [ - { - "type": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService", - "name": "IMenuItemAdminAppService", - "methods": [ - { - "name": "GetListAsync", - "parametersOnMethod": [], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - } - }, + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + }, + "CreateAndPublishAsyncByInput": { + "uniqueName": "CreateAndPublishAsyncByInput", + "name": "CreateAndPublishAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs/blog-posts/create-and-publish", + "supportedVersions": [], + "parametersOnMethod": [ { - "name": "GetAsync", - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.CmsKit.Menus.MenuItemDto", - "typeSimple": "Volo.CmsKit.Menus.MenuItemDto" - } - }, + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ { - "name": "CreateAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput", - "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.CmsKit.Menus.MenuItemDto", - "typeSimple": "Volo.CmsKit.Menus.MenuItemDto" - } - }, + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + }, + "SendToReviewAsyncById": { + "uniqueName": "SendToReviewAsyncById", + "name": "SendToReviewAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs/blog-posts/{id}/send-to-review", + "supportedVersions": [], + "parametersOnMethod": [ { - "name": "UpdateAsync", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + }, + "CreateAndSendToReviewAsyncByInput": { + "uniqueName": "CreateAndSendToReviewAsyncByInput", + "name": "CreateAndSendToReviewAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/blogs/blog-posts/create-and-send-to-review", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", + "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + }, + "HasBlogPostWaitingForReviewAsync": { + "uniqueName": "HasBlogPostWaitingForReviewAsync", + "name": "HasBlogPostWaitingForReviewAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/blogs/blog-posts/has-blogpost-waiting-for-review", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Boolean", + "typeSimple": "boolean" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + } + } + }, + "Volo.CmsKit.Admin.Comments.CommentAdminController": { + "controllerName": "CommentAdmin", + "controllerGroupName": "CommentAdmin", + "isRemoteService": true, + "isIntegrationService": false, + "apiVersion": null, + "type": "Volo.CmsKit.Admin.Comments.CommentAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.Comments.ICommentAdminAppService", + "name": "ICommentAdminAppService", + "methods": [ + { + "name": "GetListAsync", "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput", - "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput", + "typeAsString": "Volo.CmsKit.Admin.Comments.CommentGetListInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Comments.CommentGetListInput", + "typeSimple": "Volo.CmsKit.Admin.Comments.CommentGetListInput", "isOptional": false, "defaultValue": null } ], "returnValue": { - "type": "Volo.CmsKit.Menus.MenuItemDto", - "typeSimple": "Volo.CmsKit.Menus.MenuItemDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, { - "name": "DeleteAsync", + "name": "GetAsync", "parametersOnMethod": [ { "name": "id", @@ -1081,12 +1247,12 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.CmsKit.Admin.Comments.CommentWithAuthorDto", + "typeSimple": "Volo.CmsKit.Admin.Comments.CommentWithAuthorDto" } }, { - "name": "MoveMenuItemAsync", + "name": "DeleteAsync", "parametersOnMethod": [ { "name": "id", @@ -1095,193 +1261,155 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null - }, - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput", - "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput", - "isOptional": false, - "defaultValue": null } ], "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } - }, - { - "name": "GetPageLookupAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Menus.PageLookupInputDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Menus.PageLookupInputDto", - "typeSimple": "Volo.CmsKit.Admin.Menus.PageLookupInputDto", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - } } ] } ], "actions": { - "GetListAsync": { - "uniqueName": "GetListAsync", + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", "name": "GetListAsync", "httpMethod": "GET", - "url": "api/cms-kit-admin/menu-items", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - }, - "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" - }, - "GetAsyncById": { - "uniqueName": "GetAsyncById", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/cms-kit-admin/menu-items/{id}", + "url": "api/cms-kit-admin/comments", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Comments.CommentGetListInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Comments.CommentGetListInput", + "typeSimple": "Volo.CmsKit.Admin.Comments.CommentGetListInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", + "nameOnMethod": "input", + "name": "EntityType", "jsonName": null, - "type": "System.Guid", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.CmsKit.Menus.MenuItemDto", - "typeSimple": "Volo.CmsKit.Menus.MenuItemDto" - }, - "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" - }, - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/cms-kit-admin/menu-items", - "supportedVersions": [], - "parametersOnMethod": [ + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput", - "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "nameOnMethod": "input", + "name": "Text", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { "nameOnMethod": "input", - "name": "input", + "name": "RepliedCommentId", "jsonName": null, - "type": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput", - "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput", + "type": "System.Guid?", + "typeSimple": "string?", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.CmsKit.Menus.MenuItemDto", - "typeSimple": "Volo.CmsKit.Menus.MenuItemDto" - }, - "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" - }, - "UpdateAsyncByIdAndInput": { - "uniqueName": "UpdateAsyncByIdAndInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/cms-kit-admin/menu-items/{id}", - "supportedVersions": [], - "parametersOnMethod": [ + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", + "nameOnMethod": "input", + "name": "Author", + "jsonName": null, + "type": "System.String", "typeSimple": "string", "isOptional": false, - "defaultValue": null + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" }, { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput", - "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput", + "nameOnMethod": "input", + "name": "CreationStartDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "nameOnMethod": "id", - "name": "id", + "nameOnMethod": "input", + "name": "CreationEndDate", "jsonName": null, - "type": "System.Guid", + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" }, { "nameOnMethod": "input", - "name": "input", + "name": "SkipCount", "jsonName": null, - "type": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput", - "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "Volo.CmsKit.Menus.MenuItemDto", - "typeSimple": "Volo.CmsKit.Menus.MenuItemDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" + "implementFrom": "Volo.CmsKit.Admin.Comments.ICommentAdminAppService" }, - "DeleteAsyncById": { - "uniqueName": "DeleteAsyncById", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/cms-kit-admin/menu-items/{id}", + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/comments/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -1308,17 +1436,17 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.CmsKit.Admin.Comments.CommentWithAuthorDto", + "typeSimple": "Volo.CmsKit.Admin.Comments.CommentWithAuthorDto" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" + "implementFrom": "Volo.CmsKit.Admin.Comments.ICommentAdminAppService" }, - "MoveMenuItemAsyncByIdAndInput": { - "uniqueName": "MoveMenuItemAsyncByIdAndInput", - "name": "MoveMenuItemAsync", - "httpMethod": "PUT", - "url": "api/cms-kit-admin/menu-items/{id}/move", + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-admin/comments/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -1328,14 +1456,6 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null - }, - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput", - "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput", - "isOptional": false, - "defaultValue": null } ], "parameters": [ @@ -1350,18 +1470,6 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - }, - { - "nameOnMethod": "input", - "name": "input", - "jsonName": null, - "type": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput", - "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" } ], "returnValue": { @@ -1369,80 +1477,102 @@ "typeSimple": "System.Void" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" - }, - "GetPageLookupAsyncByInput": { - "uniqueName": "GetPageLookupAsyncByInput", - "name": "GetPageLookupAsync", - "httpMethod": "GET", - "url": "api/cms-kit-admin/menu-items/lookup/pages", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Menus.PageLookupInputDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Menus.PageLookupInputDto", - "typeSimple": "Volo.CmsKit.Admin.Menus.PageLookupInputDto", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "implementFrom": "Volo.CmsKit.Admin.Comments.ICommentAdminAppService" + } + } + }, + "Volo.CmsKit.Admin.GlobalResources.GlobalResourceAdminController": { + "controllerName": "GlobalResourceAdmin", + "controllerGroupName": "GlobalResourceAdmin", + "isRemoteService": true, + "isIntegrationService": false, + "apiVersion": null, + "type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourceAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.GlobalResources.IGlobalResourceAdminAppService", + "name": "IGlobalResourceAdminAppService", + "methods": [ { - "nameOnMethod": "input", - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "name": "GetAsync", + "parametersOnMethod": [], + "returnValue": { + "type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesDto", + "typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesDto" + } }, { - "nameOnMethod": "input", - "name": "Sorting", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "name": "SetGlobalResourcesAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto", + "typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + ] + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/global-resources", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesDto", + "typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesDto" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.GlobalResources.IGlobalResourceAdminAppService" + }, + "SetGlobalResourcesAsyncByInput": { + "uniqueName": "SetGlobalResourcesAsyncByInput", + "name": "SetGlobalResourcesAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/global-resources", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "SkipCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto", + "typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto", "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "defaultValue": null + } + ], + "parameters": [ { "nameOnMethod": "input", - "name": "MaxResultCount", + "name": "input", "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", + "type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto", + "typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "bindingSourceId": "Body", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "System.Void", + "typeSimple": "System.Void" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" + "implementFrom": "Volo.CmsKit.Admin.GlobalResources.IGlobalResourceAdminAppService" } } }, @@ -1612,132 +1742,62 @@ } } }, - "Volo.CmsKit.Admin.GlobalResources.GlobalResourceAdminController": { - "controllerName": "GlobalResourceAdmin", - "controllerGroupName": "GlobalResourceAdmin", + "Volo.CmsKit.Admin.Menus.MenuItemAdminController": { + "controllerName": "MenuItemAdmin", + "controllerGroupName": "MenuItemAdmin", "isRemoteService": true, "isIntegrationService": false, "apiVersion": null, - "type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourceAdminController", + "type": "Volo.CmsKit.Admin.Menus.MenuItemAdminController", "interfaces": [ { - "type": "Volo.CmsKit.Admin.GlobalResources.IGlobalResourceAdminAppService", - "name": "IGlobalResourceAdminAppService", + "type": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService", + "name": "IMenuItemAdminAppService", "methods": [ { - "name": "GetAsync", + "name": "GetListAsync", "parametersOnMethod": [], "returnValue": { - "type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesDto", - "typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesDto" + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" } }, { - "name": "SetGlobalResourcesAsync", + "name": "GetAsync", "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto", - "typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.CmsKit.Admin.Menus.MenuItemWithDetailsDto", + "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemWithDetailsDto" } - } - ] - } - ], - "actions": { - "GetAsync": { - "uniqueName": "GetAsync", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/cms-kit-admin/global-resources", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesDto", - "typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesDto" - }, - "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.GlobalResources.IGlobalResourceAdminAppService" - }, - "SetGlobalResourcesAsyncByInput": { - "uniqueName": "SetGlobalResourcesAsyncByInput", - "name": "SetGlobalResourcesAsync", - "httpMethod": "POST", - "url": "api/cms-kit-admin/global-resources", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto", - "typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "input", - "jsonName": null, - "type": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto", - "typeSimple": "Volo.CmsKit.Admin.GlobalResources.GlobalResourcesUpdateDto", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - }, - "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.GlobalResources.IGlobalResourceAdminAppService" - } - } - }, - "Volo.CmsKit.Admin.Comments.CommentAdminController": { - "controllerName": "CommentAdmin", - "controllerGroupName": "CommentAdmin", - "isRemoteService": true, - "isIntegrationService": false, - "apiVersion": null, - "type": "Volo.CmsKit.Admin.Comments.CommentAdminController", - "interfaces": [ - { - "type": "Volo.CmsKit.Admin.Comments.ICommentAdminAppService", - "name": "ICommentAdminAppService", - "methods": [ + }, { - "name": "GetListAsync", + "name": "CreateAsync", "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Comments.CommentGetListInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Comments.CommentGetListInput", - "typeSimple": "Volo.CmsKit.Admin.Comments.CommentGetListInput", + "typeAsString": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput", + "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput", "isOptional": false, "defaultValue": null } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.CmsKit.Menus.MenuItemDto", + "typeSimple": "Volo.CmsKit.Menus.MenuItemDto" } }, { - "name": "GetAsync", + "name": "UpdateAsync", "parametersOnMethod": [ { "name": "id", @@ -1746,11 +1806,19 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput", + "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput", + "isOptional": false, + "defaultValue": null } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Comments.CommentWithAuthorDto", - "typeSimple": "Volo.CmsKit.Admin.Comments.CommentWithAuthorDto" + "type": "Volo.CmsKit.Menus.MenuItemDto", + "typeSimple": "Volo.CmsKit.Menus.MenuItemDto" } }, { @@ -1769,23 +1837,117 @@ "type": "System.Void", "typeSimple": "System.Void" } + }, + { + "name": "MoveMenuItemAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput", + "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + { + "name": "GetPageLookupAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Menus.PageLookupInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Menus.PageLookupInputDto", + "typeSimple": "Volo.CmsKit.Admin.Menus.PageLookupInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } } ] } ], "actions": { - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", + "GetListAsync": { + "uniqueName": "GetListAsync", "name": "GetListAsync", "httpMethod": "GET", - "url": "api/cms-kit-admin/comments", + "url": "api/cms-kit-admin/menu-items", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/menu-items/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Admin.Menus.MenuItemWithDetailsDto", + "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemWithDetailsDto" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/menu-items", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Comments.CommentGetListInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Comments.CommentGetListInput", - "typeSimple": "Volo.CmsKit.Admin.Comments.CommentGetListInput", + "typeAsString": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput", + "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput", "isOptional": false, "defaultValue": null } @@ -1793,125 +1955,123 @@ "parameters": [ { "nameOnMethod": "input", - "name": "EntityType", + "name": "input", "jsonName": null, - "type": "System.String", - "typeSimple": "string", + "type": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput", + "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemCreateInput", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Menus.MenuItemDto", + "typeSimple": "Volo.CmsKit.Menus.MenuItemDto" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-admin/menu-items/{id}", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "Text", - "jsonName": null, - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "defaultValue": null }, { - "nameOnMethod": "input", - "name": "RepliedCommentId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput", + "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput", "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "defaultValue": null + } + ], + "parameters": [ { - "nameOnMethod": "input", - "name": "Author", + "nameOnMethod": "id", + "name": "id", "jsonName": null, - "type": "System.String", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "CreationStartDate", - "jsonName": null, - "type": "System.DateTime?", - "typeSimple": "string?", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" }, { "nameOnMethod": "input", - "name": "CreationEndDate", + "name": "input", "jsonName": null, - "type": "System.DateTime?", - "typeSimple": "string?", + "type": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput", + "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemUpdateInput", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.CmsKit.Menus.MenuItemDto", + "typeSimple": "Volo.CmsKit.Menus.MenuItemDto" + }, + "allowAnonymous": false, + "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-admin/menu-items/{id}", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "Sorting", - "jsonName": null, - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "SkipCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "defaultValue": null + } + ], + "parameters": [ { - "nameOnMethod": "input", - "name": "MaxResultCount", + "nameOnMethod": "id", + "name": "id", "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "System.Void", + "typeSimple": "System.Void" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Comments.ICommentAdminAppService" + "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" }, - "GetAsyncById": { - "uniqueName": "GetAsyncById", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/cms-kit-admin/comments/{id}", + "MoveMenuItemAsyncByIdAndInput": { + "uniqueName": "MoveMenuItemAsyncByIdAndInput", + "name": "MoveMenuItemAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-admin/menu-items/{id}/move", "supportedVersions": [], "parametersOnMethod": [ { @@ -1921,6 +2081,14 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput", + "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput", + "isOptional": false, + "defaultValue": null } ], "parameters": [ @@ -1935,66 +2103,131 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput", + "typeSimple": "Volo.CmsKit.Admin.Menus.MenuItemMoveInput", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Comments.CommentWithAuthorDto", - "typeSimple": "Volo.CmsKit.Admin.Comments.CommentWithAuthorDto" + "type": "System.Void", + "typeSimple": "System.Void" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Comments.ICommentAdminAppService" + "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" }, - "DeleteAsyncById": { - "uniqueName": "DeleteAsyncById", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/cms-kit-admin/comments/{id}", + "GetPageLookupAsyncByInput": { + "uniqueName": "GetPageLookupAsyncByInput", + "name": "GetPageLookupAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/menu-items/lookup/pages", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Menus.PageLookupInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Menus.PageLookupInputDto", + "typeSimple": "Volo.CmsKit.Admin.Menus.PageLookupInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", "typeSimple": "string", "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "nameOnMethod": "id", - "name": "id", + "nameOnMethod": "input", + "name": "MaxResultCount", "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Comments.ICommentAdminAppService" + "implementFrom": "Volo.CmsKit.Admin.Menus.IMenuItemAdminAppService" } } }, - "Volo.CmsKit.Admin.Blogs.BlogAdminController": { - "controllerName": "BlogAdmin", - "controllerGroupName": "BlogAdmin", + "Volo.CmsKit.Admin.Pages.PageAdminController": { + "controllerName": "PageAdmin", + "controllerGroupName": "PageAdmin", "isRemoteService": true, "isIntegrationService": false, "apiVersion": null, - "type": "Volo.CmsKit.Admin.Blogs.BlogAdminController", + "type": "Volo.CmsKit.Admin.Pages.PageAdminController", "interfaces": [ { - "type": "Volo.CmsKit.Admin.Blogs.IBlogAdminAppService", - "name": "IBlogAdminAppService", + "type": "Volo.CmsKit.Admin.Pages.IPageAdminAppService", + "name": "IPageAdminAppService", "methods": [ + { + "name": "SetAsHomePageAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, { "name": "GetAsync", "parametersOnMethod": [ @@ -2008,8 +2241,8 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" + "type": "Volo.CmsKit.Admin.Pages.PageDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" } }, { @@ -2017,16 +2250,16 @@ "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogGetListInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.BlogGetListInput", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogGetListInput", + "typeAsString": "Volo.CmsKit.Admin.Pages.GetPagesInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Pages.GetPagesInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.GetPagesInputDto", "isOptional": false, "defaultValue": null } ], "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" } }, { @@ -2034,16 +2267,16 @@ "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", + "typeAsString": "Volo.CmsKit.Admin.Pages.CreatePageInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", "isOptional": false, "defaultValue": null } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" + "type": "Volo.CmsKit.Admin.Pages.PageDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" } }, { @@ -2059,16 +2292,16 @@ }, { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", + "typeAsString": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", "isOptional": false, "defaultValue": null } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" + "type": "Volo.CmsKit.Admin.Pages.PageDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" } }, { @@ -2096,7 +2329,7 @@ "uniqueName": "GetAsyncById", "name": "GetAsync", "httpMethod": "GET", - "url": "api/cms-kit-admin/blogs/{id}", + "url": "api/cms-kit-admin/pages/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -2123,24 +2356,24 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" + "type": "Volo.CmsKit.Admin.Pages.PageDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" }, "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" + "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" }, "GetListAsyncByInput": { "uniqueName": "GetListAsyncByInput", "name": "GetListAsync", "httpMethod": "GET", - "url": "api/cms-kit-admin/blogs", + "url": "api/cms-kit-admin/pages", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogGetListInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.BlogGetListInput", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogGetListInput", + "typeAsString": "Volo.CmsKit.Admin.Pages.GetPagesInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Pages.GetPagesInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.GetPagesInputDto", "isOptional": false, "defaultValue": null } @@ -2196,24 +2429,24 @@ } ], "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": false, - "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" + "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" }, "CreateAsyncByInput": { "uniqueName": "CreateAsyncByInput", "name": "CreateAsync", "httpMethod": "POST", - "url": "api/cms-kit-admin/blogs", + "url": "api/cms-kit-admin/pages", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", + "typeAsString": "Volo.CmsKit.Admin.Pages.CreatePageInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", "isOptional": false, "defaultValue": null } @@ -2223,8 +2456,8 @@ "nameOnMethod": "input", "name": "input", "jsonName": null, - "type": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogDto", + "type": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.CreatePageInputDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -2233,17 +2466,17 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" + "type": "Volo.CmsKit.Admin.Pages.PageDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" }, "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.ICreateAppService" + "implementFrom": "Volo.Abp.Application.Services.ICreateAppService" }, "UpdateAsyncByIdAndInput": { "uniqueName": "UpdateAsyncByIdAndInput", "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/cms-kit-admin/blogs/{id}", + "url": "api/cms-kit-admin/pages/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -2256,9 +2489,9 @@ }, { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", + "typeAsString": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", "isOptional": false, "defaultValue": null } @@ -2280,8 +2513,8 @@ "nameOnMethod": "input", "name": "input", "jsonName": null, - "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogDto", + "type": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.UpdatePageInputDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -2290,17 +2523,17 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogDto" + "type": "Volo.CmsKit.Admin.Pages.PageDto", + "typeSimple": "Volo.CmsKit.Admin.Pages.PageDto" }, "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IUpdateAppService" + "implementFrom": "Volo.Abp.Application.Services.IUpdateAppService" }, "DeleteAsyncById": { "uniqueName": "DeleteAsyncById", "name": "DeleteAsync", "httpMethod": "DELETE", - "url": "api/cms-kit-admin/blogs/{id}", + "url": "api/cms-kit-admin/pages/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -2331,133 +2564,28 @@ "typeSimple": "System.Void" }, "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IDeleteAppService" - } - } - }, - "Volo.CmsKit.Admin.Blogs.BlogFeatureAdminController": { - "controllerName": "BlogFeatureAdmin", - "controllerGroupName": "BlogFeatureAdmin", - "isRemoteService": true, - "isIntegrationService": false, - "apiVersion": null, - "type": "Volo.CmsKit.Admin.Blogs.BlogFeatureAdminController", - "interfaces": [ - { - "type": "Volo.CmsKit.Admin.Blogs.IBlogFeatureAdminAppService", - "name": "IBlogFeatureAdminAppService", - "methods": [ - { - "name": "SetAsync", - "parametersOnMethod": [ - { - "name": "blogId", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "dto", - "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - }, - { - "name": "GetListAsync", - "parametersOnMethod": [ - { - "name": "blogId", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.CmsKit.Blogs.BlogFeatureDto]" - } - } - ] - } - ], - "actions": { - "GetListAsyncByBlogId": { - "uniqueName": "GetListAsyncByBlogId", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/cms-kit-admin/blogs/{blogId}/features", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "blogId", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "blogId", - "name": "blogId", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.CmsKit.Blogs.BlogFeatureDto]" - }, - "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogFeatureAdminAppService" + "implementFrom": "Volo.Abp.Application.Services.IDeleteAppService" }, - "SetAsyncByBlogIdAndDto": { - "uniqueName": "SetAsyncByBlogIdAndDto", - "name": "SetAsync", + "SetAsHomePageAsyncById": { + "uniqueName": "SetAsHomePageAsyncById", + "name": "SetAsHomePageAsync", "httpMethod": "PUT", - "url": "api/cms-kit-admin/blogs/{blogId}/features", + "url": "api/cms-kit-admin/pages/setashomepage/{id}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "blogId", + "name": "id", "typeAsString": "System.Guid, System.Private.CoreLib", "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null - }, - { - "name": "dto", - "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", - "isOptional": false, - "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "blogId", - "name": "blogId", + "nameOnMethod": "id", + "name": "id", "jsonName": null, "type": "System.Guid", "typeSimple": "string", @@ -2466,18 +2594,6 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - }, - { - "nameOnMethod": "dto", - "name": "dto", - "jsonName": null, - "type": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogFeatureInputDto", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" } ], "returnValue": { @@ -2485,47 +2601,30 @@ "typeSimple": "System.Void" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogFeatureAdminAppService" + "implementFrom": "Volo.CmsKit.Admin.Pages.IPageAdminAppService" } } }, - "Volo.CmsKit.Admin.Blogs.BlogPostAdminController": { - "controllerName": "BlogPostAdmin", - "controllerGroupName": "BlogPostAdmin", + "Volo.CmsKit.Admin.Tags.EntityTagAdminController": { + "controllerName": "EntityTagAdmin", + "controllerGroupName": "EntityTagAdmin", "isRemoteService": true, "isIntegrationService": false, "apiVersion": null, - "type": "Volo.CmsKit.Admin.Blogs.BlogPostAdminController", + "type": "Volo.CmsKit.Admin.Tags.EntityTagAdminController", "interfaces": [ { - "type": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService", - "name": "IBlogPostAdminAppService", + "type": "Volo.CmsKit.Admin.Tags.IEntityTagAdminAppService", + "name": "IEntityTagAdminAppService", "methods": [ { - "name": "PublishAsync", - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - }, - { - "name": "DraftAsync", + "name": "AddTagToEntityAsync", "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", "isOptional": false, "defaultValue": null } @@ -2536,30 +2635,13 @@ } }, { - "name": "CreateAndPublishAsync", + "name": "RemoveTagFromEntityAsync", "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" - } - }, - { - "name": "SendToReviewAsync", - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto", "isOptional": false, "defaultValue": null } @@ -2570,114 +2652,13 @@ } }, { - "name": "CreateAndSendToReviewAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" - } - }, - { - "name": "HasBlogPostWaitingForReviewAsync", - "parametersOnMethod": [], - "returnValue": { - "type": "System.Boolean", - "typeSimple": "boolean" - } - }, - { - "name": "GetAsync", - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" - } - }, - { - "name": "GetListAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - } - }, - { - "name": "CreateAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" - } - }, - { - "name": "UpdateAsync", + "name": "SetEntityTagsAsync", "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" - } - }, - { - "name": "DeleteAsync", - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagSetDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", "isOptional": false, "defaultValue": null } @@ -2691,70 +2672,33 @@ } ], "actions": { - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/cms-kit-admin/blogs/blog-posts", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "input", - "jsonName": null, - "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" - }, - "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.ICreateAppService" - }, - "DeleteAsyncById": { - "uniqueName": "DeleteAsyncById", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/cms-kit-admin/blogs/blog-posts/{id}", + "AddTagToEntityAsyncByInput": { + "uniqueName": "AddTagToEntityAsyncByInput", + "name": "AddTagToEntityAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/entity-tags", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", + "nameOnMethod": "input", + "name": "input", "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", + "type": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagCreateDto", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "Body", "descriptorName": "" } ], @@ -2762,60 +2706,21 @@ "type": "System.Void", "typeSimple": "System.Void" }, - "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IDeleteAppService" - }, - "GetAsyncById": { - "uniqueName": "GetAsyncById", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/cms-kit-admin/blogs/blog-posts/{id}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [ - "GuidRouteConstraint" - ], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" - }, - "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Admin.Tags.IEntityTagAdminAppService" }, - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/cms-kit-admin/blogs/blog-posts", + "RemoveTagFromEntityAsyncByInput": { + "uniqueName": "RemoveTagFromEntityAsyncByInput", + "name": "RemoveTagFromEntityAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-admin/entity-tags", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostGetListInput", + "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagRemoveDto", "isOptional": false, "defaultValue": null } @@ -2823,9 +2728,9 @@ "parameters": [ { "nameOnMethod": "input", - "name": "Filter", + "name": "TagId", "jsonName": null, - "type": "System.String", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, @@ -2835,10 +2740,10 @@ }, { "nameOnMethod": "input", - "name": "BlogId", + "name": "EntityType", "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -2847,127 +2752,203 @@ }, { "nameOnMethod": "input", - "name": "AuthorId", + "name": "EntityId", "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "input" - }, + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Admin.Tags.IEntityTagAdminAppService" + }, + "SetEntityTagsAsyncByInput": { + "uniqueName": "SetEntityTagsAsyncByInput", + "name": "SetEntityTagsAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-admin/entity-tags", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "TagId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.EntityTagSetDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "defaultValue": null + } + ], + "parameters": [ { "nameOnMethod": "input", - "name": "Status", + "name": "input", "jsonName": null, - "type": "System.String", - "typeSimple": "string", + "type": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.EntityTagSetDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null, + "implementFrom": "Volo.CmsKit.Admin.Tags.IEntityTagAdminAppService" + } + } + }, + "Volo.CmsKit.Admin.Tags.TagAdminController": { + "controllerName": "TagAdmin", + "controllerGroupName": "TagAdmin", + "isRemoteService": true, + "isIntegrationService": false, + "apiVersion": null, + "type": "Volo.CmsKit.Admin.Tags.TagAdminController", + "interfaces": [ + { + "type": "Volo.CmsKit.Admin.Tags.ITagAdminAppService", + "name": "ITagAdminAppService", + "methods": [ + { + "name": "GetTagDefinitionsAsync", + "parametersOnMethod": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.CmsKit.Admin.Tags.TagDefinitionDto]" + } }, { - "nameOnMethod": "input", - "name": "Sorting", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "name": "GetAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.CmsKit.Tags.TagDto", + "typeSimple": "Volo.CmsKit.Tags.TagDto" + } }, { - "nameOnMethod": "input", - "name": "SkipCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "name": "GetListAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.TagGetListInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.TagGetListInput", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagGetListInput", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + { + "name": "CreateAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.TagCreateDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.TagCreateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.CmsKit.Tags.TagDto", + "typeSimple": "Volo.CmsKit.Tags.TagDto" + } + }, + { + "name": "UpdateAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.TagUpdateDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.TagUpdateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagUpdateDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.CmsKit.Tags.TagDto", + "typeSimple": "Volo.CmsKit.Tags.TagDto" + } }, { - "nameOnMethod": "input", - "name": "MaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "name": "DeleteAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - }, - "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" - }, - "UpdateAsyncByIdAndInput": { - "uniqueName": "UpdateAsyncByIdAndInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/cms-kit-admin/blogs/blog-posts/{id}", + ] + } + ], + "actions": { + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/cms-kit-admin/tags", "supportedVersions": [], "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", + "typeAsString": "Volo.CmsKit.Admin.Tags.TagCreateDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.TagCreateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagCreateDto", "isOptional": false, "defaultValue": null } ], "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - }, { "nameOnMethod": "input", "name": "input", "jsonName": null, - "type": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.UpdateBlogPostDto", + "type": "Volo.CmsKit.Admin.Tags.TagCreateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagCreateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -2976,17 +2957,17 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + "type": "Volo.CmsKit.Tags.TagDto", + "typeSimple": "Volo.CmsKit.Tags.TagDto" }, "allowAnonymous": false, - "implementFrom": "Volo.Abp.Application.Services.IUpdateAppService" + "implementFrom": "Volo.Abp.Application.Services.ICreateAppService" }, - "PublishAsyncById": { - "uniqueName": "PublishAsyncById", - "name": "PublishAsync", - "httpMethod": "POST", - "url": "api/cms-kit-admin/blogs/blog-posts/{id}/publish", + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/cms-kit-admin/tags/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -3017,13 +2998,13 @@ "typeSimple": "System.Void" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + "implementFrom": "Volo.Abp.Application.Services.IDeleteAppService" }, - "DraftAsyncById": { - "uniqueName": "DraftAsyncById", - "name": "DraftAsync", - "httpMethod": "POST", - "url": "api/cms-kit-admin/blogs/blog-posts/{id}/draft", + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/tags/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -3050,24 +3031,24 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.CmsKit.Tags.TagDto", + "typeSimple": "Volo.CmsKit.Tags.TagDto" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" }, - "CreateAndPublishAsyncByInput": { - "uniqueName": "CreateAndPublishAsyncByInput", - "name": "CreateAndPublishAsync", - "httpMethod": "POST", - "url": "api/cms-kit-admin/blogs/blog-posts/create-and-publish", + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/cms-kit-admin/tags", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "typeAsString": "Volo.CmsKit.Admin.Tags.TagGetListInput, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.TagGetListInput", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagGetListInput", "isOptional": false, "defaultValue": null } @@ -3075,29 +3056,65 @@ "parameters": [ { "nameOnMethod": "input", - "name": "input", + "name": "Filter", "jsonName": null, - "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + "implementFrom": "Volo.Abp.Application.Services.IReadOnlyAppService" }, - "SendToReviewAsyncById": { - "uniqueName": "SendToReviewAsyncById", - "name": "SendToReviewAsync", - "httpMethod": "POST", - "url": "api/cms-kit-admin/blogs/blog-posts/{id}/send-to-review", + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/cms-kit-admin/tags/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -3107,6 +3124,14 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.CmsKit.Admin.Tags.TagUpdateDto, Volo.CmsKit.Admin.Application.Contracts", + "type": "Volo.CmsKit.Admin.Tags.TagUpdateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagUpdateDto", + "isOptional": false, + "defaultValue": null } ], "parameters": [ @@ -3121,38 +3146,13 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - }, - "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" - }, - "CreateAndSendToReviewAsyncByInput": { - "uniqueName": "CreateAndSendToReviewAsyncByInput", - "name": "CreateAndSendToReviewAsync", - "httpMethod": "POST", - "url": "api/cms-kit-admin/blogs/blog-posts/create-and-send-to-review", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto, Volo.CmsKit.Admin.Application.Contracts", - "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + }, { "nameOnMethod": "input", "name": "input", "jsonName": null, - "type": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.CreateBlogPostDto", + "type": "Volo.CmsKit.Admin.Tags.TagUpdateDto", + "typeSimple": "Volo.CmsKit.Admin.Tags.TagUpdateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -3161,26 +3161,26 @@ } ], "returnValue": { - "type": "Volo.CmsKit.Admin.Blogs.BlogPostDto", - "typeSimple": "Volo.CmsKit.Admin.Blogs.BlogPostDto" + "type": "Volo.CmsKit.Tags.TagDto", + "typeSimple": "Volo.CmsKit.Tags.TagDto" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + "implementFrom": "Volo.Abp.Application.Services.IUpdateAppService" }, - "HasBlogPostWaitingForReviewAsync": { - "uniqueName": "HasBlogPostWaitingForReviewAsync", - "name": "HasBlogPostWaitingForReviewAsync", + "GetTagDefinitionsAsync": { + "uniqueName": "GetTagDefinitionsAsync", + "name": "GetTagDefinitionsAsync", "httpMethod": "GET", - "url": "api/cms-kit-admin/blogs/blog-posts/has-blogpost-waiting-for-review", + "url": "api/cms-kit-admin/tags/tag-definitions", "supportedVersions": [], "parametersOnMethod": [], "parameters": [], "returnValue": { - "type": "System.Boolean", - "typeSimple": "boolean" + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.CmsKit.Admin.Tags.TagDefinitionDto]" }, "allowAnonymous": false, - "implementFrom": "Volo.CmsKit.Admin.Blogs.IBlogPostAdminAppService" + "implementFrom": "Volo.CmsKit.Admin.Tags.ITagAdminAppService" } } } From 1e9d537f13d4be66afd4f4cdad751ae40bcada85 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 11:26:02 +0300 Subject: [PATCH 18/52] Update CreateModal for MenuItem --- .../Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml | 10 +++++++++- .../Pages/CmsKit/Menus/MenuItems/createModal.js | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml index 52f9392d3d..594565539c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml @@ -34,7 +34,15 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js index 2818f48523..cbba0ea235 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js @@ -9,7 +9,7 @@ $(function () { var $displayName = $('#ViewModel_DisplayName'); var $pageIdClearButton = $('#url-tab'); - initSelectPageId(); + //initSelectPageId(); $pageId.on('change', function (params) { $url.prop('disabled', $pageId.val()); From 425333c308fd641b96e791a15f77e0a5bf85d8c1 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 11:42:53 +0300 Subject: [PATCH 19/52] Update mappings for MenuItem UpdateModal --- .../CmsKitAdminWebAutoMapperProfile.cs | 3 ++- .../Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebAutoMapperProfile.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebAutoMapperProfile.cs index b61b1842b5..655399109d 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebAutoMapperProfile.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/CmsKitAdminWebAutoMapperProfile.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Volo.Abp.AutoMapper; using Volo.CmsKit.Admin.Blogs; using Volo.CmsKit.Admin.Menus; using Volo.CmsKit.Admin.Pages; @@ -37,7 +38,7 @@ public class CmsKitAdminWebAutoMapperProfile : Profile { CreateMap().MapExtraProperties(); CreateMap().MapExtraProperties(); - CreateMap().MapExtraProperties(); + CreateMap().MapExtraProperties(); } protected virtual void CreatePageMappings() diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs index 9da2e135d9..aa52134a97 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs @@ -31,7 +31,7 @@ public class UpdateModalModel : CmsKitAdminPageModel { var menuItemDto = await MenuAdminAppService.GetAsync(Id); - ViewModel = ObjectMapper.Map(menuItemDto); + ViewModel = ObjectMapper.Map(menuItemDto); } public async Task OnPostAsync() @@ -43,8 +43,6 @@ public class UpdateModalModel : CmsKitAdminPageModel return new OkObjectResult(result); } - [AutoMap(typeof(MenuItemDto))] - [AutoMap(typeof(MenuItemUpdateInput), ReverseMap = true)] public class MenuItemUpdateViewModel : ExtensibleObject, IHasConcurrencyStamp { [Required] @@ -64,6 +62,8 @@ public class UpdateModalModel : CmsKitAdminPageModel public Guid? PageId { get; set; } + public string? PageTitle { get; set; } + [HiddenInput] public string ConcurrencyStamp { get; set; } } From f268bbf424904f256244d5d2d58c8ea0ca0379c2 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 11:43:08 +0300 Subject: [PATCH 20/52] Fix bug for unrelating menuitem with a page --- .../Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs | 1 + 1 file changed, 1 insertion(+) 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 3a323efb13..2436f92d95 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 @@ -94,6 +94,7 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin } else { + input.PageId = null; menuItem.SetUrl(input.Url); } From 3a7998f2bd231f6f11b61ae5e07c8f77543d43e7 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 11:43:28 +0300 Subject: [PATCH 21/52] Update logic in MenuItem UpdateModal --- .../CmsKit/Menus/MenuItems/UpdateModal.cshtml | 16 +++++++++++++++- .../CmsKit/Menus/MenuItems/updateModal.js | 19 ------------------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml index 72780b33d8..47278209f1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml @@ -35,7 +35,21 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js index d8ded357bb..6ece96b41a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js @@ -7,9 +7,6 @@ $(function () { var $pageId = $('#ViewModel_PageId'); var $url = $('#ViewModel_Url'); var $displayName = $('#ViewModel_DisplayName'); - var $pageIdClearButton = $('#url-tab'); - - initSelectPageId(); $pageId.on('change', function (params) { $url.prop('disabled', $pageId.val()); @@ -22,22 +19,6 @@ $(function () { }) $pageId.trigger('change'); - - $pageIdClearButton.click(function () { - $pageId.val(''); - $pageId.trigger('change'); - }); - - function initSelectPageId() { - $pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/menu-items/lookup/pages'); - $pageId.data('autocompleteDisplayProperty', 'title'); - $pageId.data('autocompleteValueProperty', 'id'); - $pageId.data('autocompleteItemsProperty', 'items'); - $pageId.data('autocompleteFilterParamName', 'filter'); - $pageId.data('autocompleteParentSelector', '#menu-update-modal'); - - abp.dom.initializers.initializeAutocompleteSelects($pageId); - } }; return { From 6c54e01267e12335aaaa9431aa83bd79f901041e Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 11:59:03 +0300 Subject: [PATCH 22/52] Add validation for MenuItem URL --- .../CmsKit/Menus/MenuItems/CreateModal.cshtml | 4 +-- .../Menus/MenuItems/CreateModal.cshtml.cs | 1 + .../CmsKit/Menus/MenuItems/UpdateModal.cshtml | 2 +- .../Menus/MenuItems/UpdateModal.cshtml.cs | 1 + .../CmsKit/Menus/MenuItems/createModal.js | 26 +++++-------------- .../CmsKit/Menus/MenuItems/updateModal.js | 5 ++++ 6 files changed, 16 insertions(+), 23 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml index 594565539c..b73ac8b2d5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml @@ -19,7 +19,7 @@ Layout = null; } -
+ @@ -27,7 +27,7 @@ - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs index 21d4390bfc..03ca715d2a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs @@ -52,6 +52,7 @@ public class CreateModalModel : CmsKitAdminPageModel public bool IsActive { get; set; } = true; + [Required] public string Url { get; set; } public Guid? PageId { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml index 47278209f1..e440b3176a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml @@ -19,7 +19,7 @@ Layout = null; } - + diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs index aa52134a97..e071dc0230 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs @@ -50,6 +50,7 @@ public class UpdateModalModel : CmsKitAdminPageModel public bool IsActive { get; set; } + [Required] public string Url { get; set; } public string Icon { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js index cbba0ea235..0c4103c6f8 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/createModal.js @@ -7,36 +7,22 @@ $(function () { var $pageId = $('#ViewModel_PageId'); var $url = $('#ViewModel_Url'); var $displayName = $('#ViewModel_DisplayName'); - var $pageIdClearButton = $('#url-tab'); - - //initSelectPageId(); - + var $menuItemForm = $('#menu-item-form'); + $pageId.on('change', function (params) { $url.prop('disabled', $pageId.val()); if ($pageId.val()) { if (!$displayName.val()){ - $displayName.val($pageId.text()); + $displayName.val($pageId.text().trim()); } } }) - - $pageIdClearButton.click(function (){ - $pageId.val(''); - $pageId.trigger('change'); - }) - - function initSelectPageId() { - $pageId.data('autocompleteApiUrl', '/api/cms-kit-admin/menu-items/lookup/pages'); - $pageId.data('autocompleteDisplayProperty', 'title'); - $pageId.data('autocompleteValueProperty', 'id'); - $pageId.data('autocompleteItemsProperty', 'items'); - $pageId.data('autocompleteFilterParamName', 'filter'); - $pageId.data('autocompleteParentSelector', '#menu-create-modal'); - abp.dom.initializers.initializeAutocompleteSelects($pageId); - } + $menuItemForm.on('submit', function (e) { + $('[href="#url"]').tab('show'); + }); }; return { diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js index 6ece96b41a..173c6459e5 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/updateModal.js @@ -7,6 +7,7 @@ $(function () { var $pageId = $('#ViewModel_PageId'); var $url = $('#ViewModel_Url'); var $displayName = $('#ViewModel_DisplayName'); + var $menuItemForm = $('#menu-item-form'); $pageId.on('change', function (params) { $url.prop('disabled', $pageId.val()); @@ -19,6 +20,10 @@ $(function () { }) $pageId.trigger('change'); + + $menuItemForm.on('submit', function (e) { + $('[href="#url"]').tab('show'); + }); }; return { From 9115fb1e1d2a1586301d2cac39fd515e0a72120c Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 12:06:57 +0300 Subject: [PATCH 23/52] Handle CmsKit Page feature in Menu Items --- .../CmsKit/Menus/MenuItems/CreateModal.cshtml | 50 +++++++++-------- .../Menus/MenuItems/CreateModal.cshtml.cs | 25 +++++---- .../CmsKit/Menus/MenuItems/UpdateModal.cshtml | 54 ++++++++++--------- .../Menus/MenuItems/UpdateModal.cshtml.cs | 14 ++++- 4 files changed, 87 insertions(+), 56 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml index b73ac8b2d5..c4c2a1476a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml @@ -24,31 +24,39 @@ - - - - + @if (Model.IsPageFeatureEnabled) + { + + + + + + + + + - - + - + + - - - - + +
+ } + else + { + + } -
-
diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs index 03ca715d2a..eaab7e8903 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml.cs @@ -1,35 +1,40 @@ -using AutoMapper; -using Microsoft.AspNetCore.Mvc; -using System; -using System.Collections.Generic; +using System; using System.ComponentModel.DataAnnotations; -using System.Linq; -using System.Text; using System.Threading.Tasks; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form; +using AutoMapper; +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.Features; +using Volo.Abp.GlobalFeatures; using Volo.Abp.ObjectExtending; using Volo.CmsKit.Admin.Menus; +using Volo.CmsKit.Features; +using Volo.CmsKit.GlobalFeatures; namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems; public class CreateModalModel : CmsKitAdminPageModel { protected IMenuItemAdminAppService MenuAdminAppService { get; } + protected IFeatureChecker FeatureChecker { get; } [BindProperty] public MenuItemCreateViewModel ViewModel { get; set; } - public CreateModalModel(IMenuItemAdminAppService menuAdminAppService) + public bool IsPageFeatureEnabled { get; set; } + + public CreateModalModel(IMenuItemAdminAppService menuAdminAppService, IFeatureChecker featureChecker) { MenuAdminAppService = menuAdminAppService; + FeatureChecker = featureChecker; ViewModel = new MenuItemCreateViewModel(); } - public virtual Task OnGetAsync(Guid? parentId) + public virtual async Task OnGetAsync(Guid? parentId) { ViewModel.ParentId = parentId; - return Task.CompletedTask; + IsPageFeatureEnabled = GlobalFeatureManager.Instance.IsEnabled() + && await FeatureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable); } public virtual async Task OnPostAsync() diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml index e440b3176a..4659dbfe3b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml @@ -26,35 +26,41 @@ - - - - - - + @if (Model.IsPageFeatureEnabled) + { + + + + + - + - - - @if (Model.ViewModel.PageId.HasValue) - { - - } - - + + @if (Model.ViewModel.PageId.HasValue) + { + + } + + - + -
+
+ } + else + { + + } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs index e071dc0230..b64427e516 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml.cs @@ -5,8 +5,12 @@ using AutoMapper; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using Volo.Abp.Domain.Entities; +using Volo.Abp.Features; +using Volo.Abp.GlobalFeatures; using Volo.Abp.ObjectExtending; using Volo.CmsKit.Admin.Menus; +using Volo.CmsKit.Features; +using Volo.CmsKit.GlobalFeatures; using Volo.CmsKit.Menus; namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems; @@ -14,6 +18,7 @@ namespace Volo.CmsKit.Admin.Web.Pages.CmsKit.Menus.MenuItems; public class UpdateModalModel : CmsKitAdminPageModel { protected IMenuItemAdminAppService MenuAdminAppService { get; } + protected IFeatureChecker FeatureChecker { get; } [BindProperty] public MenuItemUpdateViewModel ViewModel { get; set; } @@ -22,15 +27,22 @@ public class UpdateModalModel : CmsKitAdminPageModel [BindProperty(SupportsGet = true)] public Guid Id { get; set; } - public UpdateModalModel(IMenuItemAdminAppService menuAdminAppService) + public bool IsPageFeatureEnabled { get; set; } + + public UpdateModalModel(IMenuItemAdminAppService menuAdminAppService, IFeatureChecker featureChecker) { MenuAdminAppService = menuAdminAppService; + FeatureChecker = featureChecker; + IsPageFeatureEnabled = GlobalFeatureManager.Instance.IsEnabled(); } public async Task OnGetAsync() { var menuItemDto = await MenuAdminAppService.GetAsync(Id); + IsPageFeatureEnabled = GlobalFeatureManager.Instance.IsEnabled() + && await FeatureChecker.IsEnabledAsync(CmsKitFeatures.PageEnable); + ViewModel = ObjectMapper.Map(menuItemDto); } From 47c64064938b3b5c4faeb6d4459d4322ca416e56 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 12:12:54 +0300 Subject: [PATCH 24/52] Update localization on update modal --- .../Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml index 4659dbfe3b..d9871aa749 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml @@ -21,7 +21,7 @@ - + From 73cac92edb08186502216a1620504b420d1d461b Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 12:16:01 +0300 Subject: [PATCH 25/52] Add parent selector for select2 --- .../Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml | 3 ++- .../Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml index c4c2a1476a..57d0dca5f1 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml @@ -43,7 +43,8 @@ data-autocomplete-value-property="id" data-autocomplete-items-property="items" data-autocomplete-filter-param-name="filter" - data-autocomplete-allow-clear="true"> + data-autocomplete-allow-clear="true" + data-autocomplete-parent-selector="#menu-create-modal'"> diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml index d9871aa749..a190808560 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/UpdateModal.cshtml @@ -43,7 +43,8 @@ data-autocomplete-value-property="id" data-autocomplete-items-property="items" data-autocomplete-filter-param-name="filter" - data-autocomplete-allow-clear="true"> + data-autocomplete-allow-clear="true" + data-autocomplete-parent-selector="#menu-update-modal"> @if (Model.ViewModel.PageId.HasValue) From 0989098a25401c31833eeb3b9057e43ac38c0e8b Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 13:08:45 +0300 Subject: [PATCH 26/52] Add test for unrelating Page from MenuItem --- .../Menus/MenuItemAdminAppService_Tests.cs | 23 +++++++++++++++++++ .../CmsKitDataSeedContributor.cs | 17 ++++++++++---- .../Volo.CmsKit.TestBase/CmsKitTestData.cs | 4 ++++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs index 509070fd7d..9812fe9597 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs @@ -77,6 +77,29 @@ public class MenuItemAdminAppService_Tests : CmsKitApplicationTestBase menu.Url.ShouldBe(newUrl); } + [Fact] + public async Task UpdateAsync_ShouldRemoveRelation_WithoutPageId() + { + var newUrl = "/my-new-url"; + await WithUnitOfWorkAsync(async () => + { + await MenuAdminAppService.UpdateAsync( + TestData.MenuItem_4_With_Page_1_Id, + new MenuItemUpdateInput + { + DisplayName = TestData.MenuItem_4_With_Page_1_Name, + Url = newUrl, + PageId = null + }); + }); + + var menu = await MenuRepository.FindAsync(TestData.MenuItem_4_With_Page_1_Id); + + menu.ShouldNotBeNull(); + menu.Url.ShouldBe(newUrl); + menu.PageId.ShouldBeNull(); + } + [Fact] public async Task DeleteAsync_ShouldWorkProperly_WithExistingId() { diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index f17a95ddba..a51741bdeb 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -1,8 +1,9 @@ -using Microsoft.Extensions.Options; +using System; using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; +using Microsoft.Extensions.Options; using Volo.Abp.BlobStoring; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; @@ -194,7 +195,8 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende "comment", null, _cmsKitTestData.User1Id - ){ IdempotencyToken = _cmsKitTestData.IdempotencyToken_1 }); + ) + { IdempotencyToken = _cmsKitTestData.IdempotencyToken_1 }); await _commentRepository.InsertAsync(new Comment(_guidGenerator.Create(), _cmsKitTestData.EntityType1, @@ -416,6 +418,13 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende private async Task SeedMenusAsync() { + var menuItem4 = await _menuItemRepository.InsertAsync(new MenuItem( + _cmsKitTestData.MenuItem_4_With_Page_1_Id, + _cmsKitTestData.MenuItem_4_With_Page_1_Name, + _cmsKitTestData.Page_1_Slug.EnsureStartsWith('/'))); + + menuItem4.SetPageId(_cmsKitTestData.Page_1_Id); + await _menuItemRepository.InsertManyAsync(new[] { new MenuItem( @@ -429,8 +438,8 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende new MenuItem( _cmsKitTestData.MenuItem_3_Id, _cmsKitTestData.MenuItem_3_Name, - _cmsKitTestData.MenuItem_3_Url) - + _cmsKitTestData.MenuItem_3_Url), + menuItem4 }); } } diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs index 8c4c07e283..b21e7aab08 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestData.cs @@ -128,6 +128,10 @@ public class CmsKitTestData : ISingletonDependency public string MenuItem_3_Url { get; } = "/products"; + public Guid MenuItem_4_With_Page_1_Id { get; } = Guid.NewGuid(); + + public string MenuItem_4_With_Page_1_Name { get; } = "Products"; + public string PollName { get; } = "Poll"; public string WidgetName { get; } = "CmsPollByCode"; From dccf2988ccd41a8b4f289c1da239098c78b249b5 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 13:13:47 +0300 Subject: [PATCH 27/52] Fix the broken test --- .../Volo/CmsKit/Menus/MenuItem.cs | 2 +- .../Volo/CmsKit/Menus/MenuItemManager.cs | 6 ++++++ .../Menus/MenuManager_Test.cs | 14 ++++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs index fa2505eecc..56cef52826 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItem.cs @@ -80,7 +80,7 @@ public class MenuItem : AuditedAggregateRoot, IMultiTenant Url = Check.NotNullOrEmpty(url, nameof(url), MenuItemConsts.MaxUrlLength); } - internal void SetPageId(Guid pageId) + internal void SetPageId(Guid? pageId) { PageId = pageId; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs index 76d95f175f..be83b455d2 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Menus/MenuItemManager.cs @@ -25,6 +25,12 @@ public class MenuItemManager : CmsKitDomainServiceBase menuItem.SetUrl(page.Slug.EnsureStartsWith('/')); } + public virtual void SetPageUrl(MenuItem menuItem, string url) + { + menuItem.SetPageId(null); + menuItem.SetUrl(url); + } + [UnitOfWork] public virtual async Task MoveAsync(Guid menuItemId, Guid? newParentMenuItemId, int position = 0) { diff --git a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs index bcc1612d41..36900219d4 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Menus/MenuManager_Test.cs @@ -35,6 +35,20 @@ public class MenuManager_Test : CmsKitDomainTestBase menuItem.Url.ShouldBe(page.Slug.EnsureStartsWith('/')); } + [Fact] + public async Task SetPageUrl_ShouldSetUrlSameWithPage_WithStringUrl() + { + var newUrl = "/my-new-url"; + + var menuItem = await menuItemRepository.GetAsync(testData.MenuItem_4_With_Page_1_Id); + + menuManager.SetPageUrl(menuItem, newUrl); + + menuItem.Url.ShouldNotBeNullOrEmpty(); + menuItem.Url.ShouldBe(newUrl); + menuItem.PageId.ShouldBeNull(); + } + [Fact] public async Task MoveAsync_ShouldMoveCorrectly_UnderAnotherMenu() { From 84bae26b79224ada679102f4d189962a1005f77b Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Wed, 17 Jan 2024 13:13:52 +0300 Subject: [PATCH 28/52] Update MenuItemAdminAppService.cs --- .../Volo/CmsKit/Admin/Menus/MenuItemAdminAppService.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 2436f92d95..65952c1a15 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 @@ -94,8 +94,7 @@ public class MenuItemAdminAppService : CmsKitAdminAppServiceBase, IMenuItemAdmin } else { - input.PageId = null; - menuItem.SetUrl(input.Url); + MenuManager.SetPageUrl(menuItem, input.Url); } menuItem.SetDisplayName(input.DisplayName); From 899910e9adb55eddbe3692be975fa8963b0b5909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sinan=20=C3=96zt=C3=BCrk?= Date: Wed, 17 Jan 2024 15:26:05 +0300 Subject: [PATCH 29/52] fix error handling, update documentation --- docs/en/UI/Angular/HTTP-Requests.md | 24 +++++++------- .../core/src/lib/services/rest.service.ts | 6 ++-- .../src/lib/handlers/error.handler.ts | 33 +++++++++---------- .../theme-shared/src/lib/models/common.ts | 4 +-- .../lib/providers/error-handlers.provider.ts | 2 +- .../src/lib/theme-shared.module.ts | 4 +-- 6 files changed, 36 insertions(+), 37 deletions(-) diff --git a/docs/en/UI/Angular/HTTP-Requests.md b/docs/en/UI/Angular/HTTP-Requests.md index a0e53df9c9..b524b4a8ee 100644 --- a/docs/en/UI/Angular/HTTP-Requests.md +++ b/docs/en/UI/Angular/HTTP-Requests.md @@ -219,23 +219,23 @@ import { ContentProjectionService, PROJECTION_STRATEGY } from '@abp/ng.core'; import { ToasterService } from '@abp/ng.theme.shared'; import { HttpErrorResponse } from '@angular/common/http'; import { Injector } from '@angular/core'; -import { throwError } from 'rxjs'; +import { of, EMPTY } from 'rxjs'; import { Error404Component } from './error404/error404.component'; export function handleHttpErrors(injector: Injector, httpError: HttpErrorResponse) { if (httpError.status === 400) { const toaster = injector.get(ToasterService); toaster.error(httpError.error?.error?.message || 'Bad request!', '400'); - return; + return EMPTY; } if (httpError.status === 404) { const contentProjection = injector.get(ContentProjectionService); contentProjection.projectContent(PROJECTION_STRATEGY.AppendComponentToBody(Error404Component)); - return; + return EMPTY; } - return throwError(httpError); + return of(httpError); } // app.module.ts @@ -267,22 +267,22 @@ In the example above: ![custom-error-handler-404-component](images/custom-error-handler-404-component.jpg) - - Since `throwError(httpError)` is returned at bottom of the `handleHttpErrors`, the `ErrorHandler` will handle the HTTP errors except 400 and 404 errors. + - Since `of(httpError)` is returned at bottom of the `handleHttpErrors`, the `ErrorHandler` will handle the HTTP errors except 400 and 404 errors. -**Note 1:** If you put `return` to next line of handling an error, default error handling will not work for that error. +**Note 1:** If you put `return EMPTY` to next line of handling an error, default error handling will not work for that error. `EMPTY` can be imported from `rxjs` ```js export function handleHttpErrors(injector: Injector, httpError: HttpErrorResponse) { if (httpError.status === 403) { // handle 403 errors here - return; // put return to skip default error handling + return EMPTY; // put return to skip default error handling } } ``` -**Note 2:** If you put `return throwError(httpError)`, default error handling will work. - - `throwError` is a function. It can be imported from `rxjs`. +**Note 2:** If you put `return of(httpError)`, default error handling will work. + - `of` is a function. It can be imported from `rxjs`. - `httpError` is the second parameter of the error handler function which is registered to the `HTTP_ERROR_HANDLER` provider. Type of the `httpError` is `HttpErrorResponse`. ```js @@ -291,11 +291,11 @@ import { throwError } from 'rxjs'; export function handleHttpErrors(injector: Injector, httpError: HttpErrorResponse) { if (httpError.status === 500) { // handle 500 errors here - return; + return EMPTY; } - // you can return the throwError(httpError) at bottom of the function to run the default handler of ABP for HTTP errors that you didn't handle above. - return throwError(httpError) + // you can return the of(httpError) at bottom of the function to run the default handler of ABP for HTTP errors that you didn't handle above. + return of(httpError) } ``` diff --git a/npm/ng-packs/packages/core/src/lib/services/rest.service.ts b/npm/ng-packs/packages/core/src/lib/services/rest.service.ts index a7ee7a491b..83f91777ca 100644 --- a/npm/ng-packs/packages/core/src/lib/services/rest.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/rest.service.ts @@ -20,7 +20,7 @@ export class RestService { protected externalHttp: ExternalHttpClient, protected environment: EnvironmentService, protected httpErrorReporter: HttpErrorReporterService, - ) {} + ) { } protected getApiFromStore(apiName: string | undefined): string { return this.environment.getApiUrl(apiName); @@ -28,7 +28,7 @@ export class RestService { handleError(err: any): Observable { this.httpErrorReporter.reportError(err); - return throwError(err); + return throwError(() => err); } request( @@ -51,7 +51,7 @@ export class RestService { }), ...options, } as any) - .pipe(catchError(err => (skipHandleError ? throwError(err) : this.handleError(err)))); + .pipe(catchError(err => (skipHandleError ? throwError(() => err) : this.handleError(err)))); } private getHttpClient(isExternal: boolean) { return isExternal ? this.externalHttp : this.http; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts index 480a647bbe..a3417900a2 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts @@ -1,11 +1,11 @@ import { inject, Injectable, Injector } from '@angular/core'; import { HttpErrorResponse } from '@angular/common/http'; -import { Observable, of, throwError } from 'rxjs'; -import { catchError, filter, switchMap } from 'rxjs/operators'; +import { Observable, of } from 'rxjs'; +import { filter, switchMap } from 'rxjs/operators'; import { HttpErrorReporterService } from '@abp/ng.core'; -import { CustomHttpErrorHandlerService } from '../models/common'; +import { CustomHttpErrorHandlerService, HttpErrorHandler } from '../models/common'; import { Confirmation } from '../models/confirmation'; import { CUSTOM_ERROR_HANDLERS, HTTP_ERROR_HANDLER } from '../tokens/http-error.token'; @@ -21,10 +21,8 @@ export class ErrorHandler { protected readonly confirmationService = inject(ConfirmationService); protected readonly routerErrorHandlerService = inject(RouterErrorHandlerService); protected readonly httpErrorConfig = inject(HTTP_ERROR_CONFIG); - protected readonly customErrorHandlers = inject(CUSTOM_ERROR_HANDLERS); - protected readonly defaultHttpErrorHandler = (_, err: HttpErrorResponse) => throwError(() => err); - protected readonly httpErrorHandler = - inject(HTTP_ERROR_HANDLER, { optional: true }) || this.defaultHttpErrorHandler; + protected readonly defaultErrorHandlers = inject(CUSTOM_ERROR_HANDLERS); + protected readonly httpErrorHandler = inject(HTTP_ERROR_HANDLER, { optional: true }); constructor(protected injector: Injector) { this.listenToRestError(); @@ -42,10 +40,11 @@ export class ErrorHandler { } protected executeErrorHandler = (error: HttpErrorResponse) => { - const errHandler = this.httpErrorHandler(this.injector, error); - const isObservable = errHandler instanceof Observable; - - return (isObservable ? errHandler : of(null)).pipe(catchError(err => of(err))); + if (this.httpErrorHandler) { + return this.httpErrorHandler(this.injector, error); + } + + return of(error); }; protected sortHttpErrorHandlers( @@ -56,17 +55,17 @@ export class ErrorHandler { } protected handleError(err: unknown) { - if (this.customErrorHandlers && this.customErrorHandlers.length) { - const canHandleService = this.customErrorHandlers + if (this.defaultErrorHandlers && this.defaultErrorHandlers.length) { + const errorHandlerService = this.defaultErrorHandlers .sort(this.sortHttpErrorHandlers) .find(service => service.canHandle(err)); - - if (canHandleService) { - canHandleService.execute(); + + if (errorHandlerService) { + errorHandlerService.execute(); return; } } - + this.showError().subscribe(); } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts b/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts index 82a14641ad..ac0e9ac120 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/models/common.ts @@ -1,5 +1,5 @@ import { HttpErrorResponse } from '@angular/common/http'; -import { Type } from '@angular/core'; +import { Injector, Type } from '@angular/core'; import { Validation } from '@ngx-validate/core'; import { Observable } from 'rxjs'; import { ConfirmationIcons } from '../tokens/confirmation-icons.token'; @@ -20,7 +20,7 @@ export interface HttpErrorConfig { hideCloseIcon?: boolean; }; } -export type HttpErrorHandler = (httpError: HttpErrorResponse) => Observable; +export type HttpErrorHandler = (injector: Injector, httpError: HttpErrorResponse) => Observable; export type LocaleDirection = 'ltr' | 'rtl'; export interface CustomHttpErrorHandlerService { diff --git a/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts b/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts index 0d177ec510..61a2a25fcd 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts @@ -5,7 +5,7 @@ import { AbpFormatErrorHandlerService } from '../services/abp-format-error-handl import { StatusCodeErrorHandlerService } from '../services/status-code-error-handler.service'; import { UnknownStatusCodeErrorHandlerService } from '../services/unknown-status-code-error-handler.service'; -export const ERROR_HANDLERS_PROVIDERS: Provider[] = [ +export const DEFAULT_HANDLERS_PROVIDERS: Provider[] = [ { provide: CUSTOM_ERROR_HANDLERS, multi: true, diff --git a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts index 53c2498f60..d2d294bfc5 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/theme-shared.module.ts @@ -29,7 +29,7 @@ import { NgxDatatableListDirective } from './directives/ngx-datatable-list.direc import { DocumentDirHandlerService } from './handlers/document-dir.handler'; import { ErrorHandler } from './handlers/error.handler'; import { RootParams } from './models/common'; -import { ERROR_HANDLERS_PROVIDERS, NG_BOOTSTRAP_CONFIG_PROVIDERS } from './providers'; +import { DEFAULT_HANDLERS_PROVIDERS, NG_BOOTSTRAP_CONFIG_PROVIDERS } from './providers'; import { THEME_SHARED_ROUTE_PROVIDERS } from './providers/route.provider'; import { THEME_SHARED_APPEND_CONTENT } from './tokens/append-content.token'; import { HTTP_ERROR_CONFIG, httpErrorConfigFactory } from './tokens/http-error.token'; @@ -149,7 +149,7 @@ export class ThemeSharedModule { }, }, tenantNotFoundProvider, - ERROR_HANDLERS_PROVIDERS, + DEFAULT_HANDLERS_PROVIDERS, ], }; } From f9c1342f6661f503c813f0396e2ecf95d815e693 Mon Sep 17 00:00:00 2001 From: Salih Date: Wed, 17 Jan 2024 17:57:09 +0300 Subject: [PATCH 30/52] Update en.json --- .../AbpIoLocalization/Base/Localization/Resources/en.json | 1 + 1 file changed, 1 insertion(+) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json index 0dae45eee8..46bd84d0df 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json @@ -29,6 +29,7 @@ "Volo.AbpIo.Domain:030012": "A user is entitled to have only 1 free trial period. You already used your trial license.", "Volo.AbpIo.Domain:030013": "A user with an active license cannot start a trial license.", "Volo.AbpIo.Domain:040000": "Telemetry already exists!.", + "Volo.AbpIo.Domain:050000": "Organization has credit card. You can not delete it!", "Volo.AbpIo.Domain:070000": "The organization name can only contain latin letters, numbers, dots and hyphens!", "Volo.AbpIo.Domain:070001": "The company name can only contain latin letters, numbers, dots, space and hyphens!", "WantToLearn?": "Want to learn?", From d8ba109ee13a2cb031bd95dac851cfd37c17c33f Mon Sep 17 00:00:00 2001 From: Salih Date: Wed, 17 Jan 2024 17:57:13 +0300 Subject: [PATCH 31/52] Update en.json --- .../AbpIoLocalization/Admin/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json index 29211d4d8e..aa16e3931c 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/en.json @@ -591,6 +591,7 @@ "Menu:Licenses": "Licenses", "OrganizationId": "Organization Id", "RemoveAllWinnersConfirmationMessage": "Are you sure you want to remove all winners?", - "AutoRenewals": "Auto Renewals" + "AutoRenewals": "Auto Renewals", + "OrganizationHasCreditCard": "Organization has credit card. Please remove credit card first!" } } From bf8c6cd9721eb8523bd70ec583980c156714f560 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Thu, 18 Jan 2024 11:14:42 +0300 Subject: [PATCH 32/52] Fix broken test --- .../Menus/MenuItemAdminAppService_Tests.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs index 9812fe9597..5ff1e85161 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs @@ -39,7 +39,7 @@ public class MenuItemAdminAppService_Tests : CmsKitApplicationTestBase result.ShouldNotBeNull(); result.Items.ShouldNotBeEmpty(); - result.Items.Count.ShouldBe(3); + result.Items.Count.ShouldBe(4); } [Fact] From 3e47be48f8baad3dbe40f0b2f1ab7babedf9f2a0 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Thu, 18 Jan 2024 12:51:38 +0300 Subject: [PATCH 33/52] Fix MongoDB tests --- .../test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs index a51741bdeb..19b51ccf7c 100644 --- a/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs +++ b/modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitDataSeedContributor.cs @@ -418,10 +418,10 @@ public class CmsKitDataSeedContributor : IDataSeedContributor, ITransientDepende private async Task SeedMenusAsync() { - var menuItem4 = await _menuItemRepository.InsertAsync(new MenuItem( + var menuItem4 = new MenuItem( _cmsKitTestData.MenuItem_4_With_Page_1_Id, _cmsKitTestData.MenuItem_4_With_Page_1_Name, - _cmsKitTestData.Page_1_Slug.EnsureStartsWith('/'))); + _cmsKitTestData.Page_1_Slug.EnsureStartsWith('/')); menuItem4.SetPageId(_cmsKitTestData.Page_1_Id); From 1c98a3bc3105ba96d427876eae5fd5113137f0a4 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Fri, 19 Jan 2024 16:09:31 +0300 Subject: [PATCH 34/52] Make Url of MenuItem as Required in DTOs --- .../Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs | 1 + .../Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs index f5ec9c6444..ebb312699a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs @@ -14,6 +14,7 @@ public class MenuItemCreateInput : ExtensibleObject public bool IsActive { get; set; } + [Required] public string Url { get; set; } public string Icon { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs index 8767a6192a..b51903359c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs @@ -13,6 +13,7 @@ public class MenuItemUpdateInput : ExtensibleObject, IHasConcurrencyStamp public bool IsActive { get; set; } + [Required] public string Url { get; set; } public string Icon { get; set; } From 2c37566528661e66fd814c837b47915cda4633ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sinan=20=C3=96zt=C3=BCrk?= Date: Fri, 19 Jan 2024 18:36:59 +0300 Subject: [PATCH 35/52] update documentation, deprecate HTTP_ERROR_HANDLER injection token --- docs/en/UI/Angular/HTTP-Error-Handling.md | 100 +++++++++++++ docs/en/UI/Angular/HTTP-Requests.md | 140 +----------------- docs/en/docs-nav.json | 15 +- .../src/lib/handlers/error.handler.ts | 12 +- .../lib/providers/error-handlers.provider.ts | 8 +- .../src/lib/tokens/http-error.token.ts | 3 + 6 files changed, 132 insertions(+), 146 deletions(-) create mode 100644 docs/en/UI/Angular/HTTP-Error-Handling.md diff --git a/docs/en/UI/Angular/HTTP-Error-Handling.md b/docs/en/UI/Angular/HTTP-Error-Handling.md new file mode 100644 index 0000000000..8bf2589204 --- /dev/null +++ b/docs/en/UI/Angular/HTTP-Error-Handling.md @@ -0,0 +1,100 @@ +# HTTP Error Handling + +When the `RestService` is used, all HTTP errors are reported to the [`HttpErrorReporterService`](./HTTP-Error-Reporter-Service), and then `ErrorHandler`, a service exposed by the `@abp/ng.theme.shared` package automatically handles the errors. + +## Custom HTTP Error Handler + +A custom HTTP error handler service can be registered to an injection token named **`CUSTOM_ERROR_HANDLERS`**. ABP has some default error handlers, you can see them [here](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts). + +### How ABP handles errors and How to add new one? + +- First of all it will be better to understand how ABP handles errors. +- ABP error handler services are implements the interface of **CustomHttpErrorHandlerService**. + +**Interface of `CUSTOM_ERROR_HANDLERS`** + +```ts +interface CustomHttpErrorHandlerService { + readonly priority: number; + canHandle(error: unknown): boolean; + execute(): void; +} +``` + +- **`priority`** ABP sorts the services according to the number of the priority variable. Higher priority will be checked first. You can think this as a z-index property in CSS. +- **`canHandle(error: unknown): boolean :`** Check if the service can handle the error. Returns boolean. +- **`execute(): void :`** If the service can handle the error, then run the execute method. + +**In Summarry** + +- Services are sorted by their priority number. +- Start from highest priority service and run canHandle() method. Pick the service if can handle the error, if not check next service. +- If the service found, run the execute method of a service. Done. + +See an example: + +```ts +// custom-error-handler.service.ts +import { inject, Injectable } from "@angular/core"; +import { HttpErrorResponse } from "@angular/common/http"; +import { CustomHttpErrorHandlerService } from "@abp/ng.theme.shared"; +import { CUSTOM_HTTP_ERROR_HANDLER_PRIORITY } from "@abp/ng.theme.shared"; +import { ToasterService } from "@abp/ng.theme.shared"; + +@Injectable({ providedIn: "root" }) +export class MyCustomErrorHandlerService + implements CustomHttpErrorHandlerService +{ + + // You can write any number here, ex: 9999 + readonly priority = CUSTOM_HTTP_ERROR_HANDLER_PRIORITY.veryHigh; + private toaster = inject(ToasterService); + private error: HttpErrorResponse | undefined = undefined; + + // What kind of error should be handled by this service? You can decide it in this method. If error is suitable to your case then return true; otherwise return false. + canHandle(error: unknown): boolean { + if (error instanceof HttpErrorResponse && error.status === 400) { + this.error = error; + return true; + } + return false; + } + + // If this service is picked from ErrorHandler, this execute method will be called. + execute() { + this.toaster.error( + this.error.error?.error?.message || "Bad request!", + "400" + ); + } +} +``` + +```ts + +// app.module.ts +import { CUSTOM_ERROR_HANDLERS, ... } from '@abp/ng.theme.shared'; +import { MyCustomErrorHandlerService } from './custom-error-handler.service'; + +@NgModule({ + // ... + providers: [ + // ... + { provide: CUSTOM_ERROR_HANDLERS, useExisting: MyCustomErrorHandlerService, multi: true } + ] +}) +export class AppModule {} +``` + +In the example above: + +- Created a service named `MyCustomErrorHandlerService`, and provided via `useExisting` key because we dont want another instance of it. And set `multi` key to true because ABP default error handlers are also provided with **CUSTOM_ERROR_HANDLERS** injection token. + +- 400 errors are handled from custom `MyCustomErrorHandlerService`. When a 400 error occurs, backend error message will be displayed as shown below: + +![custom-error-handler-toaster-message](images/custom-error-handler-toaster-message.jpg) + +**Note 1:** If your service cannot handle the error. Then ABP will check the next Error Service. +**Note 2:** If none of the service handle the error. Then basic confirmation message about the error will be shown to the user. +**Note 3:** You can provide more than one service, with CUSTOM_ERROR_HANDLER injection token. +**Note 4:** If you want your custom service to be evaluated (checked) earlier, set the priority variable high. diff --git a/docs/en/UI/Angular/HTTP-Requests.md b/docs/en/UI/Angular/HTTP-Requests.md index b524b4a8ee..c58e35fc51 100644 --- a/docs/en/UI/Angular/HTTP-Requests.md +++ b/docs/en/UI/Angular/HTTP-Requests.md @@ -1,7 +1,5 @@ # How to Make HTTP Requests - - ## About HttpClient Angular has the amazing [HttpClient](https://angular.io/guide/http) for communication with backend services. It is a layer on top and a simplified representation of [XMLHttpRequest Web API](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest). It also is the recommended agent by Angular for any HTTP request. There is nothing wrong with using the `HttpClient` in your ABP project. @@ -23,14 +21,10 @@ Although clear and flexible, handling errors this way is repetitive work, even w An `HttpInterceptor` is able to catch `HttpErrorResponse` and can be used for a centralized error handling. Nevertheless, cases where default error handler, therefore the interceptor, must be disabled require additional work and comprehension of Angular internals. Check [this issue](https://github.com/angular/angular/issues/20203) for details. - - ## RestService ABP core module has a utility service for HTTP requests: `RestService`. Unless explicitly configured otherwise, it catches HTTP errors and dispatches a `RestOccurError` action. This action is then captured by the `ErrorHandler` introduced by the `ThemeSharedModule`. Since you should already import this module in your app, when the `RestService` is used, all HTTP errors get automatically handled by default. - - ### Getting Started with RestService In order to use the `RestService`, you must inject it in your class as a dependency. @@ -48,11 +42,9 @@ class DemoService { You do not have to provide the `RestService` at module or component/directive level, because it is already **provided in root**. - - ### How to Make a Request with RestService -You can use the `request` method of the `RestService` is for HTTP requests. Here is an example: +You can use the `request` method of the `RestService` is for HTTP requests. Here is an example: ```js getFoo(id: number) { @@ -65,8 +57,6 @@ getFoo(id: number) { } ``` - - The `request` method always returns an `Observable`. Therefore you can do the following wherever you use `getFoo` method: ```js @@ -79,12 +69,8 @@ doSomethingWithFoo(id: number) { } ``` - - **You do not have to worry about unsubscription.** The `RestService` uses `HttpClient` behind the scenes, so every observable it returns is a finite observable, i.e. it closes subscriptions automatically upon success or error. - - As you see, `request` method gets a request options object with `Rest.Request` type. This generic type expects the interface of the request body. You may pass `null` when there is no body, like in a `GET` or a `DELETE` request. Here is an example where there is one: ```js @@ -99,11 +85,7 @@ postFoo(body: Foo) { } ``` - - -You may [check here](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/core/src/lib/models/rest.ts#L23) for complete `Rest.Request` type, which has only a few changes compared to [HttpRequest](https://angular.io/api/common/http/HttpRequest) class in Angular. - - +You may [check here](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/core/src/lib/models/rest.ts#L23) for complete `Rest.Request` type, which has only a few changes compared to [HttpRequest](https://angular.io/api/common/http/HttpRequest) class in Angular. ### How to Disable Default Error Handler of RestService @@ -120,8 +102,6 @@ deleteFoo(id: number) { } ``` - - `skipHandleError` config option, when set to `true`, disables the error handler and the returned observable starts throwing an error that you can catch in your subscription. ```js @@ -137,14 +117,10 @@ removeFooFromList(id: number) { } ``` - - ### How to Get a Specific API Endpoint From Application Config Another nice config option that `request` method receives is `apiName` (available as of v2.4), which can be used to get a specific module endpoint from application configuration. - - ```js putFoo(body: Foo, id: string) { const request: Rest.Request = { @@ -157,8 +133,6 @@ putFoo(body: Foo, id: string) { } ``` - - `putFoo` above will request `https://localhost:44305/api/some/path/to/foo/{id}` as long as the environment variables are as follows: ```js @@ -167,19 +141,17 @@ putFoo(body: Foo, id: string) { export const environment = { apis: { default: { - url: 'https://localhost:44305', + url: "https://localhost:44305", }, foo: { - url: 'https://localhost:44305/api/some/path/to/foo', + url: "https://localhost:44305/api/some/path/to/foo", }, }, - + /* rest of the environment variables here */ -} +}; ``` - - ### How to Observe Response Object or HTTP Events Instead of Body `RestService` assumes you are generally interested in the body of a response and, by default, sets `observe` property as `'body'`. However, there may be times you are rather interested in something else, such as a custom proprietary header. For that, the `request` method receives `observe` property in its config object. @@ -202,104 +174,6 @@ getSomeCustomHeaderValue() { You may find `Rest.Observe` enum [here](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/core/src/lib/models/rest.ts#L10). - -## HTTP Error Handling - -When the `RestService` is used, all HTTP errors are reported to the [`HttpErrorReporterService`](./HTTP-Error-Reporter-Service), and then `ErrorHandler`, a service exposed by the `@abp/ng.theme.shared` package automatically handles the errors. - -### Custom HTTP Error Handler - -A custom HTTP error handler can be registered to an injection token named `HTTP_ERROR_HANDLER`. If a custom handler function is registered, the `ErrorHandler` executes that function. - -See an example: - -```js -// http-error-handler.ts -import { ContentProjectionService, PROJECTION_STRATEGY } from '@abp/ng.core'; -import { ToasterService } from '@abp/ng.theme.shared'; -import { HttpErrorResponse } from '@angular/common/http'; -import { Injector } from '@angular/core'; -import { of, EMPTY } from 'rxjs'; -import { Error404Component } from './error404/error404.component'; - -export function handleHttpErrors(injector: Injector, httpError: HttpErrorResponse) { - if (httpError.status === 400) { - const toaster = injector.get(ToasterService); - toaster.error(httpError.error?.error?.message || 'Bad request!', '400'); - return EMPTY; - } - - if (httpError.status === 404) { - const contentProjection = injector.get(ContentProjectionService); - contentProjection.projectContent(PROJECTION_STRATEGY.AppendComponentToBody(Error404Component)); - return EMPTY; - } - - return of(httpError); -} - -// app.module.ts -import { Error404Component } from './error404/error404.component'; -import { handleHttpErrors } from './http-error-handling'; -import { HTTP_ERROR_HANDLER, ... } from '@abp/ng.theme.shared'; - -@NgModule({ - // ... - providers: [ - // ... - { provide: HTTP_ERROR_HANDLER, useValue: handleHttpErrors } - ], - declarations: [ - //... - Error404Component], -}) -export class AppModule {} -``` - -In the example above: - - - Created a function named `handleHttpErrors` and defined as value of the `HTTP_ERROR_HANDLER` provider in app.module. After this, the function executes when an HTTP error occurs. - - 400 bad request errors is handled. When a 400 error occurs, backend error message will be displayed as shown below: - - ![custom-error-handler-toaster-message](images/custom-error-handler-toaster-message.jpg) - - - 404 not found errors is handled. When a 404 error occurs, `Error404Component` will be appended to the `` as shown below: - -![custom-error-handler-404-component](images/custom-error-handler-404-component.jpg) - - - Since `of(httpError)` is returned at bottom of the `handleHttpErrors`, the `ErrorHandler` will handle the HTTP errors except 400 and 404 errors. - - -**Note 1:** If you put `return EMPTY` to next line of handling an error, default error handling will not work for that error. `EMPTY` can be imported from `rxjs` - -```js -export function handleHttpErrors(injector: Injector, httpError: HttpErrorResponse) { - if (httpError.status === 403) { - // handle 403 errors here - return EMPTY; // put return to skip default error handling - } -} -``` - -**Note 2:** If you put `return of(httpError)`, default error handling will work. - - `of` is a function. It can be imported from `rxjs`. - - `httpError` is the second parameter of the error handler function which is registered to the `HTTP_ERROR_HANDLER` provider. Type of the `httpError` is `HttpErrorResponse`. - -```js -import { throwError } from 'rxjs'; - -export function handleHttpErrors(injector: Injector, httpError: HttpErrorResponse) { - if (httpError.status === 500) { - // handle 500 errors here - return EMPTY; - } - - // you can return the of(httpError) at bottom of the function to run the default handler of ABP for HTTP errors that you didn't handle above. - return of(httpError) -} -``` - - ### How to Skip HTTP interceptors and ABP headers The ABP Framework adds several HTTP headers to the HttpClient, such as the "Auth token" or "tenant Id". @@ -309,4 +183,4 @@ The ABP Http interceptors check the value of the `IS_EXTERNAL_REQUEST` token. If The `ExternalHttpClient` extends from `HTTPClient` and sets the `IS_EXTERNAL_REQUEST` context token to true. When you are using `ExternalHttpClient` as HttpClient in your components, it does not add ABP-specific headers. -Note: With `IS_EXTERNAL_REQUEST` or without it, ABP loading service works. +Note: With `IS_EXTERNAL_REQUEST` or without it, ABP loading service works. diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 8e766c7430..be988b795c 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -1053,7 +1053,16 @@ }, { "text": "HTTP Requests", - "path": "UI/Angular/HTTP-Requests.md" + "items": [ + { + "text": "How to Make HTTP Requests", + "path": "UI/Angular/HTTP-Requests.md" + }, + { + "text": "HTTP Error Handling / Customization", + "path": "UI/Angular/HTTP-Error-Handling.md" + } + ] }, { "text": "Localization", @@ -1173,8 +1182,8 @@ "path": "UI/Angular/Content-Security-Strategy.md" }, { - "text":"Abp Window Service", - "path":"UI/Angular/Abp-Window-Service.md" + "text": "Abp Window Service", + "path": "UI/Angular/Abp-Window-Service.md" } ] }, diff --git a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts index a3417900a2..168fef1f53 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts @@ -21,7 +21,7 @@ export class ErrorHandler { protected readonly confirmationService = inject(ConfirmationService); protected readonly routerErrorHandlerService = inject(RouterErrorHandlerService); protected readonly httpErrorConfig = inject(HTTP_ERROR_CONFIG); - protected readonly defaultErrorHandlers = inject(CUSTOM_ERROR_HANDLERS); + protected readonly customErrorHandlers = inject(CUSTOM_ERROR_HANDLERS); protected readonly httpErrorHandler = inject(HTTP_ERROR_HANDLER, { optional: true }); constructor(protected injector: Injector) { @@ -43,7 +43,7 @@ export class ErrorHandler { if (this.httpErrorHandler) { return this.httpErrorHandler(this.injector, error); } - + return of(error); }; @@ -55,17 +55,17 @@ export class ErrorHandler { } protected handleError(err: unknown) { - if (this.defaultErrorHandlers && this.defaultErrorHandlers.length) { - const errorHandlerService = this.defaultErrorHandlers + if (this.customErrorHandlers && this.customErrorHandlers.length) { + const errorHandlerService = this.customErrorHandlers .sort(this.sortHttpErrorHandlers) .find(service => service.canHandle(err)); - + if (errorHandlerService) { errorHandlerService.execute(); return; } } - + this.showError().subscribe(); } diff --git a/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts b/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts index 61a2a25fcd..d456c82912 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts @@ -9,21 +9,21 @@ export const DEFAULT_HANDLERS_PROVIDERS: Provider[] = [ { provide: CUSTOM_ERROR_HANDLERS, multi: true, - useClass: TenantResolveErrorHandlerService, + useExisting: TenantResolveErrorHandlerService, }, { provide: CUSTOM_ERROR_HANDLERS, multi: true, - useClass: AbpFormatErrorHandlerService, + useExisting: AbpFormatErrorHandlerService, }, { provide: CUSTOM_ERROR_HANDLERS, multi: true, - useClass: StatusCodeErrorHandlerService, + useExisting: StatusCodeErrorHandlerService, }, { provide: CUSTOM_ERROR_HANDLERS, multi: true, - useClass: UnknownStatusCodeErrorHandlerService, + useExisting: UnknownStatusCodeErrorHandlerService, }, ]; diff --git a/npm/ng-packs/packages/theme-shared/src/lib/tokens/http-error.token.ts b/npm/ng-packs/packages/theme-shared/src/lib/tokens/http-error.token.ts index a2784f4332..64245680db 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/tokens/http-error.token.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/tokens/http-error.token.ts @@ -15,6 +15,9 @@ export function httpErrorConfigFactory(config = {} as HttpErrorConfig) { export const HTTP_ERROR_CONFIG = new InjectionToken('HTTP_ERROR_CONFIG'); +/** + @deprecated use **`CUSTOM_ERROR_HANDLERS`** injection token instead of this, see more info https://docs.abp.io/en/abp/latest/UI/Angular/HTTP-Requests +*/ export const HTTP_ERROR_HANDLER = new InjectionToken('HTTP_ERROR_HANDLER'); export const CUSTOM_ERROR_HANDLERS = new InjectionToken( From 2d69007ea314348729ff6c422cddab1e6642d8f7 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 22 Jan 2024 09:48:57 +0300 Subject: [PATCH 36/52] Update MenuItemAdminAppService_Tests.cs --- .../Menus/MenuItemAdminAppService_Tests.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs index 5ff1e85161..7dd89ba9d0 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs @@ -48,7 +48,8 @@ public class MenuItemAdminAppService_Tests : CmsKitApplicationTestBase var name = "My Awesome Menu"; var menu = await MenuAdminAppService.CreateAsync(new MenuItemCreateInput { - DisplayName = name + DisplayName = name, + Url = "#" }); menu.ShouldNotBeNull(); From 64e19acd89ee090f5ae7aedf157e6cad5588143c Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 22 Jan 2024 13:49:04 +0300 Subject: [PATCH 37/52] Fix parent-selector in create modal --- .../Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml index 57d0dca5f1..a79912e51c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Web/Pages/CmsKit/Menus/MenuItems/CreateModal.cshtml @@ -44,7 +44,7 @@ data-autocomplete-items-property="items" data-autocomplete-filter-param-name="filter" data-autocomplete-allow-clear="true" - data-autocomplete-parent-selector="#menu-create-modal'"> + data-autocomplete-parent-selector="#menu-create-modal"> From 594b644089c07cc51c2807e603652f16f085bf03 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Mon, 22 Jan 2024 14:16:57 +0300 Subject: [PATCH 38/52] Remove [Required] attribute from MenuItem DTOs --- .../Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs | 1 - .../Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs | 1 - .../Menus/MenuItemAdminAppService_Tests.cs | 1 - 3 files changed, 3 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs index ebb312699a..f5ec9c6444 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemCreateInput.cs @@ -14,7 +14,6 @@ public class MenuItemCreateInput : ExtensibleObject public bool IsActive { get; set; } - [Required] public string Url { get; set; } public string Icon { get; set; } diff --git a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs index b51903359c..8767a6192a 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Menus/MenuItemUpdateInput.cs @@ -13,7 +13,6 @@ public class MenuItemUpdateInput : ExtensibleObject, IHasConcurrencyStamp public bool IsActive { get; set; } - [Required] public string Url { get; set; } public string Icon { get; set; } diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs index 7dd89ba9d0..d349623c2d 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs @@ -49,7 +49,6 @@ public class MenuItemAdminAppService_Tests : CmsKitApplicationTestBase var menu = await MenuAdminAppService.CreateAsync(new MenuItemCreateInput { DisplayName = name, - Url = "#" }); menu.ShouldNotBeNull(); From 9546cdf0d02a0308835d9def1b76a8bfb0de4d99 Mon Sep 17 00:00:00 2001 From: masumulu28 Date: Tue, 23 Jan 2024 11:26:35 +0300 Subject: [PATCH 39/52] remove unused import --- .../packages/theme-shared/src/lib/handlers/error.handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts index 168fef1f53..30f9f7b3cb 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/handlers/error.handler.ts @@ -5,7 +5,7 @@ import { filter, switchMap } from 'rxjs/operators'; import { HttpErrorReporterService } from '@abp/ng.core'; -import { CustomHttpErrorHandlerService, HttpErrorHandler } from '../models/common'; +import { CustomHttpErrorHandlerService } from '../models/common'; import { Confirmation } from '../models/confirmation'; import { CUSTOM_ERROR_HANDLERS, HTTP_ERROR_HANDLER } from '../tokens/http-error.token'; From e9b0932bb112b9c8c7151fb070b5a09f866da285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sinan=20=C3=96zt=C3=BCrk?= Date: Tue, 23 Jan 2024 13:21:43 +0300 Subject: [PATCH 40/52] update localizations --- .../Volo/Abp/FeatureManagement/Localization/Domain/cs.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/de-DE.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/de.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/en-GB.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/en.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/es.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/fi.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/fr.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/hr.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/hu.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/it.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/nl.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/pl-PL.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/pt-BR.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/ro-RO.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/sk.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/sl.json | 2 +- .../Volo/Abp/FeatureManagement/Localization/Domain/tr.json | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) 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 ffe5744826..480a67e42a 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,7 +3,7 @@ "texts": { "Features": "Funkce", "NoFeatureFoundMessage": "Nejsou zde dostupné žádné funkce.", - "ManageHostFeatures": "Správa funkcí hostitele", + "ManageHostFeatures": "Správa Funkcí Hostitele", "ManageHostFeaturesText": "Funkce na straně hostitele můžete spravovat kliknutím na následující tlačítko.", "Permission:FeatureManagement": "Správa Funkcí", "Permission:FeatureManagement.ManageHostFeatures": "Správa funkcí hostitele", 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 0b6d85af5f..5938622c4a 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,7 +3,7 @@ "texts": { "Features": "Features", "NoFeatureFoundMessage": "Es ist kein Feature verfügbar.", - "ManageHostFeatures": "Host-Features verwalten", + "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/de.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de.json index 9a9a5b2338..87d31ff00b 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/de.json @@ -3,7 +3,7 @@ "texts": { "Features": "Funktionen", "NoFeatureFoundMessage": "Es ist keine Funktion verfügbar.", - "ManageHostFeatures": "Hostfunktionen verwalten", + "ManageHostFeatures": "Hostfunktionen Verwalten", "ManageHostFeaturesText": "Sie können die hostseitigen Funktionen verwalten, indem Sie auf die folgende Schaltfläche klicken.", "Permission:FeatureManagement": "Funktionsverwaltung", "Permission:FeatureManagement.ManageHostFeatures": "Hostfunktionen verwalten", 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 7888423261..5259b2ef2d 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,8 +3,8 @@ "texts": { "Features": "Features", "NoFeatureFoundMessage": "There isn't any available feature.", - "ManageHostFeatures": "Manage Host features", "Permission:FeatureManagement": "Feature Management", + "ManageHostFeatures": "Manage Host Features", "Permission:FeatureManagement.ManageHostFeatures": "Manage Host features", "Volo.Abp.FeatureManagement:InvalidFeatureValue": "{0} feature value is not valid!", "Menu:FeatureManagement": "Feature Management", 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 29e6ec85a1..e222db62b8 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,7 +3,7 @@ "texts": { "Features": "Features", "NoFeatureFoundMessage": "There isn't any available feature.", - "ManageHostFeatures": "Manage Host features", + "ManageHostFeatures": "Manage Host Features", "ManageHostFeaturesText": "You can manage the host side features by clicking the following button.", "Permission:FeatureManagement": "Feature Management", "Permission:FeatureManagement.ManageHostFeatures": "Manage Host features", 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 618bd8b128..92e0ca98a7 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,7 +3,7 @@ "texts": { "Features": "Características", "NoFeatureFoundMessage": "No hay ninguna característica disponible.", - "ManageHostFeatures": "Administrar funciones de host", + "ManageHostFeatures": "Administrar Funciones de Host", "ManageHostFeaturesText": "Puede administrar las funciones del lado del host haciendo clic en el siguiente botón.", "Permission:FeatureManagement": "Gestión de Características", "Permission:FeatureManagement.ManageHostFeatures": "Gestionar características del Host", 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 ecf4da045a..c76042de73 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,7 +3,7 @@ "texts": { "Features": "Ominaisuudet", "NoFeatureFoundMessage": "Käytettävissä olevia ominaisuuksia ei löydy.", - "ManageHostFeatures": "Hallinnoi isäntäominaisuuksia", + "ManageHostFeatures": "Hallinnoi Isäntä Ominaisuuksia", "ManageHostFeaturesText": "Voit hallita isäntäpuolen ominaisuuksia napsauttamalla seuraavaa painiketta.", "Permission:FeatureManagement": "Ominaisuuden Hallinta", "Permission:FeatureManagement.ManageHostFeatures": "Hallinnoi isäntäominaisuuksia", 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 9cf4e60352..d381820f3e 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,7 +3,7 @@ "texts": { "Features": "Fonctionnalités", "NoFeatureFoundMessage": "Il n'y a aucune fonctionnalité disponible.", - "ManageHostFeatures": "Gérer les fonctionnalités de l’hôte", + "ManageHostFeatures": "Gérer les Fonctionnalités de l’hôte", "ManageHostFeaturesText": "Vous pouvez gérer les fonctionnalités côté hôte en cliquant sur le bouton suivant.", "Permission:FeatureManagement": "Gestion des Fonctionnalités", "Permission:FeatureManagement.ManageHostFeatures": "Gérer les fonctionnalités de l'hôte", diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/hr.json b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/hr.json index 5252d5dbd5..7fad950146 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/hr.json +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Domain.Shared/Volo/Abp/FeatureManagement/Localization/Domain/hr.json @@ -3,7 +3,7 @@ "texts": { "Features": "Značajke", "NoFeatureFoundMessage": "Ne postoji nijedna dostupna značajka.", - "ManageHostFeatures": "Upravljanje značajkama domaćina", + "ManageHostFeatures": "Upravljanje Značajkama Domaćina", "ManageHostFeaturesText": "Možete upravljati značajkama strane domaćina klikom na sljedeći gumb.", "Permission:FeatureManagement": "Upravljanje Značajkama", "Permission:FeatureManagement.ManageHostFeatures": "Upravljanje značajkama domaćina", 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 1a3ceb5fed..e787cf7ec4 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,7 +3,7 @@ "texts": { "Features": "Funkciók", "NoFeatureFoundMessage": "Nincs elérhető funkció.", - "ManageHostFeatures": "Host funkciók kezelése", + "ManageHostFeatures": "Host Funkciók Kezelése", "ManageHostFeaturesText": "A gazdaoldali funkciókat a következő gombra kattintva kezelheti.", "Permission:FeatureManagement": "Funkciókezelés", "Permission:FeatureManagement.ManageHostFeatures": "Host funkciók kezelése", 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 6ce7b79ec0..669c4d64e9 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,7 +3,7 @@ "texts": { "Features": "Funzionalità", "NoFeatureFoundMessage": "Non ci sono funzioni disponibili.", - "ManageHostFeatures": "Gestisci le funzionalità dell'host", + "ManageHostFeatures": "Gestisci le Funzionalità Dell'host", "ManageHostFeaturesText": "È possibile gestire le funzionalità lato host facendo clic sul pulsante seguente.", "Permission:FeatureManagement": "Gestione Funzionalità", "Permission:FeatureManagement.ManageHostFeatures": "Gestisci le funzionalità dell'host", 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 cb7643ca78..0db4130a7b 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,7 +3,7 @@ "texts": { "Features": "Functies", "NoFeatureFoundMessage": "Er is geen functie beschikbaar.", - "ManageHostFeatures": "Beheer host functies", + "ManageHostFeatures": "Beheer Host Functies", "ManageHostFeaturesText": "U kunt de functies aan de hostzijde beheren door op de volgende knop te klikken.", "Permission:FeatureManagement": "Functiebeheer", "Permission:FeatureManagement.ManageHostFeatures": "Beheer host functies", 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 84b546cc4e..2073ba01c1 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,7 +3,7 @@ "texts": { "Features": "Funkcje", "NoFeatureFoundMessage": "Brak dostępnej funkcji.", - "ManageHostFeatures": "Zarządzaj funkcjami hosta", + "ManageHostFeatures": "Zarządzaj Funkcjami Hosta", "ManageHostFeaturesText": "Możesz zarządzać funkcjami po stronie hosta, klikając poniższy przycisk.", "Permission:FeatureManagement": "Zarządzanie Funkcjami", "Permission:FeatureManagement.ManageHostFeatures": "Zarządzaj funkcjami hosta", 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 f9094d19f6..c2e90f0172 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,7 +3,7 @@ "texts": { "Features": "Funcionalidades", "NoFeatureFoundMessage": "Não há nenhuma funcionalidade disponivel.", - "ManageHostFeatures": "Gerenciar recursos do Host", + "ManageHostFeatures": "Gerenciar Recursos do Host", "ManageHostFeaturesText": "Você pode gerenciar os recursos do host clicando no botão a seguir.", "Permission:FeatureManagement": "Gerenciamento de Recursos", "Permission:FeatureManagement.ManageHostFeatures": "Gerenciar recursos do Host", 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 b4adea69db..41f9221fbf 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,7 +3,7 @@ "texts": { "Features": "Caracteristici", "NoFeatureFoundMessage": "Nu există nicio caracteristică disponibilă.", - "ManageHostFeatures": "Administraţi caracteristicile de host", + "ManageHostFeatures": "Administraţi Caracteristicile de Host", "ManageHostFeaturesText": "Puteți gestiona funcțiile din partea gazdă făcând clic pe următorul buton.", "Permission:FeatureManagement": "Administrare Caracteristici", "Permission:FeatureManagement.ManageHostFeatures": "Gestionare caracteristici gazdă", 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 e384bcba35..d5cc33428f 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,7 +3,7 @@ "texts": { "Features": "Funkcie", "NoFeatureFoundMessage": "Nie je k dispozícii žiadna funkcia.", - "ManageHostFeatures": "Spravovať funkcie poskytovateľa", + "ManageHostFeatures": "Spravovať Funkcie Poskytovateľa", "ManageHostFeaturesText": "Funkcie na strane hostiteľa môžete spravovať kliknutím na nasledujúce tlačidlo.", "Permission:FeatureManagement": "Správa Funkcií", "Permission:FeatureManagement.ManageHostFeatures": "Správa funkcií poskytovateľa", 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 4d6d037b2b..684a1f065c 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,7 +3,7 @@ "texts": { "Features": "Funkcionalnosti", "NoFeatureFoundMessage": "Na voljo ni nobene funkcionalnosti.", - "ManageHostFeatures": "Upravljajte funkcije gostitelja", + "ManageHostFeatures": "Upravljajte Funkcije Gostitelja", "ManageHostFeaturesText": "Funkcije gostiteljske strani lahko upravljate s klikom na naslednji gumb.", "Permission:FeatureManagement": "Upravljanje Funkcij", "Permission:FeatureManagement.ManageHostFeatures": "Upravljajte funkcije gostitelja", 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 936e999af4..44adad1dc3 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,7 +3,7 @@ "texts": { "Features": "Özellikler", "NoFeatureFoundMessage": "Hiç özellik yok.", - "ManageHostFeatures": "Host özelliklerini yönetin", + "ManageHostFeatures": "Host Özelliklerini Yönetin", "ManageHostFeaturesText": "Aşağıdaki butona tıklayarak host özelliklerini yönetebilirsiniz.", "Permission:FeatureManagement": "Özellik Yönetimi", "Permission:FeatureManagement.ManageHostFeatures": "Host özelliklerini düzenle", From af1cc0ffbae1a435c409bec1fe9259b39b02f5e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sinan=20=C3=96zt=C3=BCrk?= Date: Tue, 23 Jan 2024 14:39:54 +0300 Subject: [PATCH 41/52] update documentation --- docs/en/UI/Angular/HTTP-Error-Handling.md | 107 ++++++++++++++++++++-- docs/en/UI/Angular/HTTP-Requests.md | 4 + 2 files changed, 105 insertions(+), 6 deletions(-) diff --git a/docs/en/UI/Angular/HTTP-Error-Handling.md b/docs/en/UI/Angular/HTTP-Error-Handling.md index 8bf2589204..1b4de9c38a 100644 --- a/docs/en/UI/Angular/HTTP-Error-Handling.md +++ b/docs/en/UI/Angular/HTTP-Error-Handling.md @@ -4,11 +4,107 @@ When the `RestService` is used, all HTTP errors are reported to the [`HttpErrorR ## Custom HTTP Error Handler -A custom HTTP error handler service can be registered to an injection token named **`CUSTOM_ERROR_HANDLERS`**. ABP has some default error handlers, you can see them [here](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts). +### (Deprecated!) Function Method; -### How ABP handles errors and How to add new one? +A custom HTTP error handler can be registered to an injection token named `HTTP_ERROR_HANDLER`. If a custom handler function is registered, the `ErrorHandler` executes that function. + +See an example: + +```ts +// http-error-handler.ts +import { ContentProjectionService, PROJECTION_STRATEGY } from '@abp/ng.core'; +import { ToasterService } from '@abp/ng.theme.shared'; +import { HttpErrorResponse } from '@angular/common/http'; +import { Injector } from '@angular/core'; +import { of, EMPTY } from 'rxjs'; +import { Error404Component } from './error404/error404.component'; + +export function handleHttpErrors(injector: Injector, httpError: HttpErrorResponse) { + if (httpError.status === 400) { + const toaster = injector.get(ToasterService); + toaster.error(httpError.error?.error?.message || 'Bad request!', '400'); + return EMPTY; + } + + if (httpError.status === 404) { + const contentProjection = injector.get(ContentProjectionService); + contentProjection.projectContent(PROJECTION_STRATEGY.AppendComponentToBody(Error404Component)); + return EMPTY; + } + + return of(httpError); +} + +// app.module.ts +import { Error404Component } from './error404/error404.component'; +import { handleHttpErrors } from './http-error-handling'; +import { HTTP_ERROR_HANDLER, ... } from '@abp/ng.theme.shared'; + +@NgModule({ + // ... + providers: [ + // ... + { provide: HTTP_ERROR_HANDLER, useValue: handleHttpErrors } + ], + declarations: [ + //... + Error404Component], +}) +export class AppModule {} +``` + +In the example above: + +- Created a function named `handleHttpErrors` and defined as value of the `HTTP_ERROR_HANDLER` provider in app.module. After this, the function executes when an HTTP error occurs. +- 400 bad request errors is handled. When a 400 error occurs. + +- Since `of(httpError)` is returned at bottom of the `handleHttpErrors`, the `ErrorHandler` will handle the HTTP errors except 400 and 404 errors. + +**Note 1:** If you put `return EMPTY` to next line of handling an error, default error handling will not work for that error. [EMPTY](https://rxjs.dev/api/index/const/EMPTY) can be imported from `rxjs`. + +```ts +export function handleHttpErrors( + injector: Injector, + httpError: HttpErrorResponse +) { + if (httpError.status === 403) { + // handle 403 errors here + return EMPTY; // put return EMPTY to skip default error handling + } +} +``` + +**Note 2:** If you put `return of(httpError)`, default error handling will work. + +- `of` is a function. It can be imported from `rxjs`. +- `httpError` is the second parameter of the error handler function which is registered to the `HTTP_ERROR_HANDLER` provider. Type of the `httpError` is `HttpErrorResponse`. + +```ts +import { of } from "rxjs"; + +export function handleHttpErrors( + injector: Injector, + httpError: HttpErrorResponse +) { + if (httpError.status === 500) { + // handle 500 errors here + } + + // you can return the of(httpError) at bottom of the function to run the default handler of ABP for HTTP errors that you didn't handle above. + return of(httpError); +} +``` + +### Service Method; + +With Services you can provide **more than one handler**. + +A custom HTTP error handler service can be registered to an injection token named **`CUSTOM_ERROR_HANDLERS`**. + +ABP has some default error handlers, you can see them [here](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts). + +### How To Add New Handler Service? -- First of all it will be better to understand how ABP handles errors. - ABP error handler services are implements the interface of **CustomHttpErrorHandlerService**. **Interface of `CUSTOM_ERROR_HANDLERS`** @@ -25,7 +121,7 @@ interface CustomHttpErrorHandlerService { - **`canHandle(error: unknown): boolean :`** Check if the service can handle the error. Returns boolean. - **`execute(): void :`** If the service can handle the error, then run the execute method. -**In Summarry** +**In Summary** - Services are sorted by their priority number. - Start from highest priority service and run canHandle() method. Pick the service if can handle the error, if not check next service. @@ -45,9 +141,8 @@ import { ToasterService } from "@abp/ng.theme.shared"; export class MyCustomErrorHandlerService implements CustomHttpErrorHandlerService { - // You can write any number here, ex: 9999 - readonly priority = CUSTOM_HTTP_ERROR_HANDLER_PRIORITY.veryHigh; + readonly priority = CUSTOM_HTTP_ERROR_HANDLER_PRIORITY.veryHigh; private toaster = inject(ToasterService); private error: HttpErrorResponse | undefined = undefined; diff --git a/docs/en/UI/Angular/HTTP-Requests.md b/docs/en/UI/Angular/HTTP-Requests.md index c58e35fc51..9bef5cb8f2 100644 --- a/docs/en/UI/Angular/HTTP-Requests.md +++ b/docs/en/UI/Angular/HTTP-Requests.md @@ -184,3 +184,7 @@ The `ExternalHttpClient` extends from `HTTPClient` and sets the `IS_EXTERNAL_REQ When you are using `ExternalHttpClient` as HttpClient in your components, it does not add ABP-specific headers. Note: With `IS_EXTERNAL_REQUEST` or without it, ABP loading service works. + +## See Also + +- [HTTP Error Handling / Customization](./HTTP-Error-Handling) From 8b2c5693dedf06ec14822ed27656910ed7a248c3 Mon Sep 17 00:00:00 2001 From: Mark Cilia Vincenti Date: Tue, 23 Jan 2024 13:02:58 +0100 Subject: [PATCH 42/52] Bump AsyncKeyedLock to 6.3.4; performance improvement --- Directory.Packages.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 6842c542ce..3a2a7b5aaa 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -6,7 +6,7 @@ - + From d3d7e1bd761ebad3f2bae35108a45ef35669c321 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Tue, 23 Jan 2024 15:03:08 +0300 Subject: [PATCH 43/52] Add test-case for related page title --- .../Menus/MenuItemAdminAppService_Tests.cs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs index d349623c2d..28e2c8b087 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Menus/MenuItemAdminAppService_Tests.cs @@ -32,6 +32,15 @@ public class MenuItemAdminAppService_Tests : CmsKitApplicationTestBase menu.ShouldNotBeNull(); } + [Fact] + public async Task GetAsync_PageTitleShouldBeCorrect_WithRelatedPage() + { + var menu = await MenuAdminAppService.GetAsync(TestData.MenuItem_4_With_Page_1_Id); + + menu.ShouldNotBeNull(); + menu.PageTitle.ShouldBe(TestData.Page_1_Title); + } + [Fact] public async Task GetListAsync_ShouldWorkProperly() { From 2184b532c5881c48fd756a574d7f9aa29b8f8c73 Mon Sep 17 00:00:00 2001 From: Enis Necipoglu Date: Tue, 23 Jan 2024 15:03:29 +0300 Subject: [PATCH 44/52] Fix FindTitleAsync return type --- .../Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs index 565530fcb7..1b49ac48bb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Pages/MongoPageRepository.cs @@ -77,7 +77,7 @@ public class MongoPageRepository : MongoDbRepository x.IsHomePage, cancellationToken: GetCancellationToken(cancellationToken)); } - public async Task FindTitleAsync(Guid pageId, CancellationToken cancellationToken = default) + public async Task FindTitleAsync(Guid pageId, CancellationToken cancellationToken = default) { return await (await GetMongoQueryableAsync(cancellationToken)).Where(x => x.Id == pageId).Select(x => x.Title) .FirstOrDefaultAsync(cancellationToken); From 6d33639fec8f3540997142837afa5471992c3ace Mon Sep 17 00:00:00 2001 From: denizdemirkan Date: Tue, 23 Jan 2024 17:16:26 +0300 Subject: [PATCH 45/52] Update Getting-Started-Running-Solution.md --- docs/en/Getting-Started-Running-Solution.md | 33 +++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/docs/en/Getting-Started-Running-Solution.md b/docs/en/Getting-Started-Running-Solution.md index 921fb2b247..d71c0a64da 100644 --- a/docs/en/Getting-Started-Running-Solution.md +++ b/docs/en/Getting-Started-Running-Solution.md @@ -127,6 +127,29 @@ abp bundle > **Note**: Before starting the application, run `abp install-libs` command in your Web directory to restore the client-side libraries. This will populate the `libs` folder. +{{ if UI == "BlazorServer" }} + +> **Important:** The `.AuthServer` application serves as the **Authentication Server** for the `.Blazor` application. It is essential to have the `.AuthServer` application running in the background to ensure the proper functioning of the `.Blazor` application. + +To do this, open terminal in `.AuthServer` project folder and run the following command. + +````bash +dotnet run +```` + +Once the `.AuthServer`application has started, it is time to run `.HttpApi.Host` application. + +> **Important:** Prior to launching the `.Blazor` project, it is essential to execute the `.HttpApi.Host` application as well. + +To do this, open terminal in `.HttpApi.Host` project folder and run the following command. + +````bash +dotnet run +```` +Once the `.AuthServer` and `.HttpApi.Host` applications has started, you can proceed to run the `.Blazor` project. + +{{ end # UI }} + {{ if Tiered == "Yes" }} > Tiered solutions use **Redis** as the distributed cache. Ensure that it is installed and running in your local computer. If you are using a remote Redis Server, set the configuration in the `appsettings.json` files of the projects below. @@ -195,6 +218,16 @@ You can see the application APIs and test them here. Get [more info](https://swa ### Running the Blazor Application (Client Side) +> **Important:** The `.HttpApi.Host` application serves as the **Authentication Server** for the `.Blazor` application. It is essential to have the `.HttpApi.Host` application running in the background to ensure the proper functioning of the `.Blazor` application. + +To do this, you can open terminal in `.HttpApi.Host` project folder and run the following command. + +````bash +dotnet run +```` + +Once the `.HttpApi.Host` application has started, you can proceed to run the `.Blazor` application. + Ensure that the `.Blazor` project is the startup project and run the application. > Use Ctrl+F5 in Visual Studio (instead of F5) to run the application without debugging. If you don't have a debug purpose, this will be faster. From 08adcc5c8c441e3896c9d04caacbf64e819b7920 Mon Sep 17 00:00:00 2001 From: Masum ULU <49063256+masumulu28@users.noreply.github.com> Date: Wed, 24 Jan 2024 08:58:40 +0300 Subject: [PATCH 46/52] Update HTTP-Error-Handling.md --- docs/en/UI/Angular/HTTP-Error-Handling.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/en/UI/Angular/HTTP-Error-Handling.md b/docs/en/UI/Angular/HTTP-Error-Handling.md index 1b4de9c38a..e657f5c773 100644 --- a/docs/en/UI/Angular/HTTP-Error-Handling.md +++ b/docs/en/UI/Angular/HTTP-Error-Handling.md @@ -138,12 +138,11 @@ import { CUSTOM_HTTP_ERROR_HANDLER_PRIORITY } from "@abp/ng.theme.shared"; import { ToasterService } from "@abp/ng.theme.shared"; @Injectable({ providedIn: "root" }) -export class MyCustomErrorHandlerService - implements CustomHttpErrorHandlerService +export class MyCustomErrorHandlerService implements CustomHttpErrorHandlerService { // You can write any number here, ex: 9999 readonly priority = CUSTOM_HTTP_ERROR_HANDLER_PRIORITY.veryHigh; - private toaster = inject(ToasterService); + protected readonly toaster = inject(ToasterService); private error: HttpErrorResponse | undefined = undefined; // What kind of error should be handled by this service? You can decide it in this method. If error is suitable to your case then return true; otherwise return false. @@ -175,7 +174,11 @@ import { MyCustomErrorHandlerService } from './custom-error-handler.service'; // ... providers: [ // ... - { provide: CUSTOM_ERROR_HANDLERS, useExisting: MyCustomErrorHandlerService, multi: true } + { + provide: CUSTOM_ERROR_HANDLERS, + useExisting: MyCustomErrorHandlerService, + multi: true, + } ] }) export class AppModule {} From 9851f671b29da7fdbb7548e20f603c93a33a061b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sinan=20=C3=96zt=C3=BCrk?= Date: Wed, 24 Jan 2024 10:13:19 +0300 Subject: [PATCH 47/52] update document according to reviever comments --- docs/en/UI/Angular/HTTP-Error-Handling.md | 31 ++++++++++++----------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/docs/en/UI/Angular/HTTP-Error-Handling.md b/docs/en/UI/Angular/HTTP-Error-Handling.md index e657f5c773..d2e873aa63 100644 --- a/docs/en/UI/Angular/HTTP-Error-Handling.md +++ b/docs/en/UI/Angular/HTTP-Error-Handling.md @@ -4,7 +4,7 @@ When the `RestService` is used, all HTTP errors are reported to the [`HttpErrorR ## Custom HTTP Error Handler -### (Deprecated!) Function Method; +### Function Method `Deprecated` A custom HTTP error handler can be registered to an injection token named `HTTP_ERROR_HANDLER`. If a custom handler function is registered, the `ErrorHandler` executes that function. @@ -95,17 +95,15 @@ export function handleHttpErrors( } ``` -### Service Method; +### Service Method With Services you can provide **more than one handler**. -A custom HTTP error handler service can be registered to an injection token named **`CUSTOM_ERROR_HANDLERS`**. +A custom HTTP error handler service can be registered to an injection token named **`CUSTOM_ERROR_HANDLERS`**. ABP has some default [error handlers](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts). -ABP has some default error handlers, you can see them [here](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts). +### How To Add New Handler Service -### How To Add New Handler Service? - -- ABP error handler services are implements the interface of **CustomHttpErrorHandlerService**. +ABP error handler services are implements the interface of **CustomHttpErrorHandlerService**. **Interface of `CUSTOM_ERROR_HANDLERS`** @@ -117,9 +115,9 @@ interface CustomHttpErrorHandlerService { } ``` -- **`priority`** ABP sorts the services according to the number of the priority variable. Higher priority will be checked first. You can think this as a z-index property in CSS. -- **`canHandle(error: unknown): boolean :`** Check if the service can handle the error. Returns boolean. -- **`execute(): void :`** If the service can handle the error, then run the execute method. +- **`priority`** ABP sorts the services according to the number of the priority variable. Higher priority will be checked first. +- **`canHandle`** Check if the service can handle the error. Returns boolean. +- **`execute`** If the service can handle the error, then run the execute method. **In Summary** @@ -138,7 +136,8 @@ import { CUSTOM_HTTP_ERROR_HANDLER_PRIORITY } from "@abp/ng.theme.shared"; import { ToasterService } from "@abp/ng.theme.shared"; @Injectable({ providedIn: "root" }) -export class MyCustomErrorHandlerService implements CustomHttpErrorHandlerService +export class MyCustomErrorHandlerService + implements CustomHttpErrorHandlerService { // You can write any number here, ex: 9999 readonly priority = CUSTOM_HTTP_ERROR_HANDLER_PRIORITY.veryHigh; @@ -192,7 +191,9 @@ In the example above: ![custom-error-handler-toaster-message](images/custom-error-handler-toaster-message.jpg) -**Note 1:** If your service cannot handle the error. Then ABP will check the next Error Service. -**Note 2:** If none of the service handle the error. Then basic confirmation message about the error will be shown to the user. -**Note 3:** You can provide more than one service, with CUSTOM_ERROR_HANDLER injection token. -**Note 4:** If you want your custom service to be evaluated (checked) earlier, set the priority variable high. +### Notes + +- If your service cannot handle the error. Then ABP will check the next Error Service. +- If none of the service handle the error. Then basic confirmation message about the error will be shown to the user. +- You can provide more than one service, with CUSTOM_ERROR_HANDLER injection token. +- If you want your custom service to be evaluated (checked) earlier, set the priority variable high. From 20b7151d447e69aaa5944bddbc0842c5207fbd52 Mon Sep 17 00:00:00 2001 From: Masum ULU <49063256+masumulu28@users.noreply.github.com> Date: Wed, 24 Jan 2024 10:45:37 +0300 Subject: [PATCH 48/52] Minor changes applied --- docs/en/UI/Angular/HTTP-Error-Handling.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/en/UI/Angular/HTTP-Error-Handling.md b/docs/en/UI/Angular/HTTP-Error-Handling.md index d2e873aa63..606211bfeb 100644 --- a/docs/en/UI/Angular/HTTP-Error-Handling.md +++ b/docs/en/UI/Angular/HTTP-Error-Handling.md @@ -97,9 +97,7 @@ export function handleHttpErrors( ### Service Method -With Services you can provide **more than one handler**. - -A custom HTTP error handler service can be registered to an injection token named **`CUSTOM_ERROR_HANDLERS`**. ABP has some default [error handlers](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts). +You can provide **more than one handler** with services, a custom HTTP error handler service can be registered with injection token named **`CUSTOM_ERROR_HANDLERS`**. ABP has some default [error handlers](https://github.com/abpframework/abp/blob/dev/npm/ng-packs/packages/theme-shared/src/lib/providers/error-handlers.provider.ts). ### How To Add New Handler Service From c43adeadfc148952cb08a609daeb2510a2c6b3c5 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 24 Jan 2024 15:46:10 +0800 Subject: [PATCH 49/52] Update Devart.Data.Oracle.EFCore to 10.3.10.8 --- Directory.Packages.props | 2 +- docs/en/Migration-Guides/Abp-8_0.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 4b265264c4..6a76d2d8c7 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -26,7 +26,7 @@ - + diff --git a/docs/en/Migration-Guides/Abp-8_0.md b/docs/en/Migration-Guides/Abp-8_0.md index 8214dfef1a..09e44b7ec8 100644 --- a/docs/en/Migration-Guides/Abp-8_0.md +++ b/docs/en/Migration-Guides/Abp-8_0.md @@ -181,7 +181,7 @@ You can see the following list of NuGet libraries that have been upgraded with . | Dapper | 2.0.123 | 2.1.21 | | Dapr.AspNetCore | 1.9.0 | 1.12.0 | | Dapr.Client | 1.9.0 | 1.12.0 | -| Devart.Data.Oracle.EFCore | 10.1.134.7 | 10.1.151.7 | +| Devart.Data.Oracle.EFCore | 10.1.134.7 | 10.3.10.8 | | DistributedLock.Core | 1.0.4 | 1.0.5 | | DistributedLock.Redis | 1.0.1 | 1.0.2 | | EphemeralMongo.Core | 1.1.0 | 1.1.3 | From da59ccbeebc8022c2334283de59272fe4dbfb9df Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 24 Jan 2024 15:53:20 +0800 Subject: [PATCH 50/52] Update Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj --- .../Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj | 1 - 1 file changed, 1 deletion(-) diff --git a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj index 70d234cd20..bb46006ac9 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj +++ b/framework/src/Volo.Abp.EntityFrameworkCore.Oracle.Devart/Volo.Abp.EntityFrameworkCore.Oracle.Devart.csproj @@ -21,7 +21,6 @@ - From 5cd8f005de558671404c3d45bef125901d875a97 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 24 Jan 2024 16:31:50 +0800 Subject: [PATCH 51/52] Remove duplicate section from `README.md`. --- templates/app/aspnet-core/README.md | 7 ------- 1 file changed, 7 deletions(-) diff --git a/templates/app/aspnet-core/README.md b/templates/app/aspnet-core/README.md index 8327e5b59e..40d19c8303 100644 --- a/templates/app/aspnet-core/README.md +++ b/templates/app/aspnet-core/README.md @@ -64,13 +64,6 @@ abp install-libs > This command installs all NPM packages for MVC/Razor Pages and Blazor Server UIs and this command is already run by the ABP CLI, so most of the time you don't need to run this command manually. -### Deploying the Application - -Deploying an ABP application is not different than deploying any .NET or ASP.NET Core application. However, there are some topics that you should care about when you are deploying your applications. You can check ABP's [Deployment documentation](https://docs.abp.io/en/abp/latest/Deployment/Index) before deploying your application. - -* Run `abp install-libs` command on your solution folder to install client-side package dependencies. This step is automatically done when you create a new solution with ABP CLI. However, you should run it yourself if you have first cloned this solution from your source control, or added a new client-side package dependency to your solution. -* Run `MyCompanyName.MyProjectName.DbMigrator` to create the initial database. This should be done in the first run. It is also needed if a new database migration is added to the solution later. - ### Solution structure This is a layered monolith application that consists of the following applications: From 3af0609ad8f7b1862e25b3592dd5eaeb5c8c6a3b Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 24 Jan 2024 16:45:31 +0800 Subject: [PATCH 52/52] Update README.md --- templates/app/aspnet-core/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/templates/app/aspnet-core/README.md b/templates/app/aspnet-core/README.md index 40d19c8303..3ac1e6aa79 100644 --- a/templates/app/aspnet-core/README.md +++ b/templates/app/aspnet-core/README.md @@ -64,6 +64,10 @@ abp install-libs > This command installs all NPM packages for MVC/Razor Pages and Blazor Server UIs and this command is already run by the ABP CLI, so most of the time you don't need to run this command manually. +#### Create the Database + +Run `MyCompanyName.MyProjectName.DbMigrator` to create the initial database. This should be done in the first run. It is also needed if a new database migration is added to the solution later. + ### Solution structure This is a layered monolith application that consists of the following applications: