diff --git a/Oqtane.Client/Modules/Admin/Languages/Index.razor b/Oqtane.Client/Modules/Admin/Languages/Index.razor index 9fffea60..b9b3d3f7 100644 --- a/Oqtane.Client/Modules/Admin/Languages/Index.razor +++ b/Oqtane.Client/Modules/Admin/Languages/Index.razor @@ -22,7 +22,7 @@ else @Localizer["Default"] @if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { - @Localizer["Translation"] + @Localizer["Translation"]   } @@ -33,7 +33,7 @@ else @if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { - @((string.IsNullOrEmpty(context.Version)) ? "---" : context.Version) + @((string.IsNullOrEmpty(context.Version)) ? "---" : context.Version) @{ var translation = TranslationAvailable(context.Code, context.Version); @@ -114,8 +114,8 @@ else _packages = await PackageService.GetPackagesAsync("translation"); } } - - private async Task GetLanguages() + + private async Task GetLanguages() { _languages = await LanguageService.GetLanguagesAsync(PageState.Site.SiteId, Constants.ClientId); } diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor index ff9a96cc..57380333 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor @@ -45,6 +45,7 @@ else @SharedLocalizer["Version"] @Localizer["Enabled"] @Localizer["InUse"] + @SharedLocalizer["Support"] @SharedLocalizer["Expires"]   @@ -78,6 +79,9 @@ else @SharedLocalizer["No"] } + + @((MarkupString)SupportLink(context.PackageName)) + @((MarkupString)PurchaseLink(context.PackageName)) @@ -130,7 +134,7 @@ else { if (package.ExpiryDate != null && package.ExpiryDate.Value.Date != DateTime.MaxValue.Date) { - link += "" + package.ExpiryDate.Value.Date.ToString("MMM dd, yyyy") + ""; + link += "" + package.ExpiryDate.Value.Date.ToString("MMM dd, yyyy") + "
"; if (!string.IsNullOrEmpty(package.PaymentUrl)) { link += "  " + SharedLocalizer["Extend"] + ""; @@ -141,6 +145,20 @@ else return link; } + private string SupportLink(string packagename) + { + string link = ""; + if (!string.IsNullOrEmpty(packagename) && _packages != null) + { + var package = _packages.Where(item => item.PackageId == packagename).FirstOrDefault(); + if (package != null && !string.IsNullOrEmpty(package.SupportUrl)) + { + link += "" + SharedLocalizer["Help"] + ""; + } + } + return link; + } + private string UpgradeAvailable(string packagename, string version) { if (!string.IsNullOrEmpty(packagename) && _packages != null) diff --git a/Oqtane.Client/Modules/Admin/Themes/Index.razor b/Oqtane.Client/Modules/Admin/Themes/Index.razor index 08895c8f..4113ded9 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Index.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Index.razor @@ -24,6 +24,7 @@ else @SharedLocalizer["Name"] @SharedLocalizer["Version"] @Localizer["Enabled"] + @SharedLocalizer["Support"] @SharedLocalizer["Expires"]   @@ -47,6 +48,9 @@ else @SharedLocalizer["No"] } + + @((MarkupString)SupportLink(context.PackageName)) + @((MarkupString)PurchaseLink(context.PackageName)) @@ -97,7 +101,7 @@ else { if (package.ExpiryDate != null && package.ExpiryDate.Value.Date != DateTime.MaxValue.Date) { - link += "" + package.ExpiryDate.Value.Date.ToString("MMM dd, yyyy") + ""; + link += "" + package.ExpiryDate.Value.Date.ToString("MMM dd, yyyy") + "
"; if (!string.IsNullOrEmpty(package.PaymentUrl)) { link += "  " + SharedLocalizer["Extend"] + ""; @@ -108,6 +112,20 @@ else return link; } + private string SupportLink(string packagename) + { + string link = ""; + if (!string.IsNullOrEmpty(packagename) && _packages != null) + { + var package = _packages.Where(item => item.PackageId == packagename).FirstOrDefault(); + if (package != null && !string.IsNullOrEmpty(package.SupportUrl)) + { + link += "" + SharedLocalizer["Help"] + ""; + } + } + return link; + } + private string UpgradeAvailable(string packagename, string version) { if (!string.IsNullOrEmpty(packagename) && _packages != null) diff --git a/Oqtane.Client/Modules/Controls/FileManager.razor b/Oqtane.Client/Modules/Controls/FileManager.razor index 2146ead7..6a1f4aa0 100644 --- a/Oqtane.Client/Modules/Controls/FileManager.razor +++ b/Oqtane.Client/Modules/Controls/FileManager.razor @@ -177,7 +177,6 @@ if (file != null) { FolderId = file.FolderId; - await OnSelect.InvokeAsync(FileId); } else { diff --git a/Oqtane.Client/Resources/SharedResources.resx b/Oqtane.Client/Resources/SharedResources.resx index b73cbdac..89823584 100644 --- a/Oqtane.Client/Resources/SharedResources.resx +++ b/Oqtane.Client/Resources/SharedResources.resx @@ -343,7 +343,7 @@ Please note that third party extensions are registered in the <a href="https://www.oqtane.net" target="_new">Oqtane Marketplace</a> which enables them to be seamlessly downloaded and installed into the framework. - Home + Home Close @@ -384,4 +384,10 @@ Confirm - + + Help + + + Support + + \ No newline at end of file diff --git a/Oqtane.Server/Controllers/PackageController.cs b/Oqtane.Server/Controllers/PackageController.cs index fe2ad700..66eaa8fd 100644 --- a/Oqtane.Server/Controllers/PackageController.cs +++ b/Oqtane.Server/Controllers/PackageController.cs @@ -45,6 +45,15 @@ namespace Oqtane.Controllers client.DefaultRequestHeaders.Add("Referer", HttpContext.Request.Scheme + "://" + HttpContext.Request.Host.Value); client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(Constants.PackageId, Constants.Version)); packages = await GetJson>(client, Constants.PackageRegistryUrl + $"/api/registry/packages/?id={_configManager.GetInstallationId()}&type={type.ToLower()}&version={Constants.Version}&search={search}&price={price}&package={package}&sort={sort}"); + if (packages != null) + { + var installationid = _configManager.GetInstallationId(); + foreach (var _package in packages) + { + _package.PaymentUrl = _package.PaymentUrl.Replace("{InstallationId}", installationid); + _package.SupportUrl = _package.SupportUrl.Replace("{InstallationId}", installationid); + } + } } } return packages; @@ -64,6 +73,13 @@ namespace Oqtane.Controllers client.DefaultRequestHeaders.Add("Referer", HttpContext.Request.Scheme + "://" + HttpContext.Request.Host.Value); client.DefaultRequestHeaders.UserAgent.Add(new ProductInfoHeaderValue(Constants.PackageId, Constants.Version)); package = await GetJson(client, Constants.PackageRegistryUrl + $"/api/registry/package/?id={_configManager.GetInstallationId()}&package={packageid}&version={version}&download={download}"); + if (package != null) + { + var installationid = _configManager.GetInstallationId(); + package.PaymentUrl = package.PaymentUrl.Replace("{InstallationId}", installationid); + package.SupportUrl = package.SupportUrl.Replace("{InstallationId}", installationid); + + } } if (package != null) diff --git a/Oqtane.Server/Controllers/UserController.cs b/Oqtane.Server/Controllers/UserController.cs index 915fd44d..d6ef858b 100644 --- a/Oqtane.Server/Controllers/UserController.cs +++ b/Oqtane.Server/Controllers/UserController.cs @@ -14,6 +14,7 @@ using Oqtane.Infrastructure; using Oqtane.Repository; using Oqtane.Security; using Oqtane.Extensions; +using Oqtane.Managers; namespace Oqtane.Controllers { diff --git a/Oqtane.Server/Extensions/OqtaneServiceCollectionExtensions.cs b/Oqtane.Server/Extensions/OqtaneServiceCollectionExtensions.cs index e8daf17b..73c5d9dd 100644 --- a/Oqtane.Server/Extensions/OqtaneServiceCollectionExtensions.cs +++ b/Oqtane.Server/Extensions/OqtaneServiceCollectionExtensions.cs @@ -19,6 +19,7 @@ using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; using Microsoft.OpenApi.Models; using Oqtane.Infrastructure; +using Oqtane.Managers; using Oqtane.Models; using Oqtane.Modules; using Oqtane.Repository; diff --git a/Oqtane.Server/Infrastructure/Interfaces/IUserManager.cs b/Oqtane.Server/Managers/Interfaces/IUserManager.cs similarity index 96% rename from Oqtane.Server/Infrastructure/Interfaces/IUserManager.cs rename to Oqtane.Server/Managers/Interfaces/IUserManager.cs index ff932a8f..ec58c091 100644 --- a/Oqtane.Server/Infrastructure/Interfaces/IUserManager.cs +++ b/Oqtane.Server/Managers/Interfaces/IUserManager.cs @@ -1,7 +1,7 @@ using System.Threading.Tasks; using Oqtane.Models; -namespace Oqtane.Infrastructure +namespace Oqtane.Managers { public interface IUserManager { diff --git a/Oqtane.Server/Infrastructure/UserManager.cs b/Oqtane.Server/Managers/UserManager.cs similarity index 99% rename from Oqtane.Server/Infrastructure/UserManager.cs rename to Oqtane.Server/Managers/UserManager.cs index e23cd12d..92677c78 100644 --- a/Oqtane.Server/Infrastructure/UserManager.cs +++ b/Oqtane.Server/Managers/UserManager.cs @@ -4,16 +4,14 @@ using System.IO; using System.Linq; using System.Net; using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Mvc; using Oqtane.Enums; +using Oqtane.Infrastructure; using Oqtane.Models; -using Oqtane.Modules.Admin.Roles; using Oqtane.Repository; using Oqtane.Shared; -namespace Oqtane.Infrastructure +namespace Oqtane.Managers { public class UserManager : IUserManager {