diff --git a/Oqtane.Client/Modules/Admin/Languages/Index.razor b/Oqtane.Client/Modules/Admin/Languages/Index.razor
index 069948a7..cb097355 100644
--- a/Oqtane.Client/Modules/Admin/Languages/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Languages/Index.razor
@@ -30,7 +30,7 @@ else
@context.Version |
|
- @if (UpgradeAvailable(context.Code))
+ @if (UpgradeAvailable(context.Code, context.Version))
{
}
@@ -40,21 +40,21 @@ else
}
@code {
- private List _languages;
- private List _packages;
+ private List _languages;
+ private List _packages;
- public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin;
+ public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin;
- protected override async Task OnParametersSetAsync()
- {
- _languages = await LanguageService.GetLanguagesAsync(PageState.Site.SiteId);
+ protected override async Task OnParametersSetAsync()
+ {
+ _languages = await LanguageService.GetLanguagesAsync(PageState.Site.SiteId, Constants.PackageId);
- var cultures = await LocalizationService.GetCulturesAsync();
+ var cultures = await LocalizationService.GetCulturesAsync();
var culture = cultures.First(c => c.Name.Equals(Constants.DefaultCulture));
if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
{
- _packages = await PackageService.GetPackagesAsync("translation");
+ _packages = await PackageService.GetPackagesAsync("translation");
}
}
@@ -75,15 +75,16 @@ else
}
}
- private bool UpgradeAvailable(string code)
+ private bool UpgradeAvailable(string code, string version)
{
var upgradeavailable = false;
if (_packages != null)
{
- var package = _packages.Where(item => item.PackageId == ("Oqtane.Client." + code)).FirstOrDefault();
- if (package != null)
+ var package = _packages.Where(item => item.PackageId == (Constants.PackageId + "." + code)).FirstOrDefault();
+ if (package != null)
{
- upgradeavailable = (Version.Parse(package.Version).CompareTo(Version.Parse(Constants.Version)) == 0);
+ upgradeavailable = (Version.Parse(package.Version).CompareTo(Version.Parse(Constants.Version)) == 0) &&
+ (Version.Parse(package.Version).CompareTo(Version.Parse(version)) > 0);
}
}
@@ -96,7 +97,7 @@ else
{
if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
{
- await PackageService.DownloadPackageAsync(Constants.PackageId + ".Client." + code, Constants.Version, Constants.PackagesFolder);
+ await PackageService.DownloadPackageAsync(Constants.PackageId + "." + code, Constants.Version, Constants.PackagesFolder);
await logger.LogInformation("Translation Downloaded {Code} {Version}", code, Constants.Version);
await PackageService.InstallPackagesAsync();
AddModuleMessage(string.Format(Localizer["Success.Language.Install"], NavigateUrl("admin/system")), MessageType.Success);
diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor
index e514c2ec..c0f8c951 100644
--- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor
+++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor
@@ -1,7 +1,10 @@
@namespace Oqtane.Modules.Admin.ModuleDefinitions
@inherits ModuleBase
+@using System.Globalization
+@using Microsoft.AspNetCore.Localization
@inject IModuleDefinitionService ModuleDefinitionService
@inject IPackageService PackageService
+@inject ILanguageService LanguageService
@inject NavigationManager NavigationManager
@inject IStringLocalizer Localizer
@inject IStringLocalizer SharedLocalizer
@@ -99,35 +102,32 @@
@SharedLocalizer["Cancel"]
- @if (_packages != null)
+ @if (_languages != null)
{
- if (_packages.Count > 0)
+ @if (_languages.Count > 0)
{
-
+
+
+ @SharedLocalizer["Name"] |
+ @Localizer["Code"] |
+ @Localizer["Version"] |
+ |
+
+ @context.Name |
+ @context.Code |
+ @context.Version |
- by: @context.Owner
- @(context.Description.Length > 400 ? (context.Description.Substring(0, 400) + "...") : context.Description)
- @(String.Format("{0:n0}", context.Downloads)) @SharedLocalizer["Search.Downloads"] |
- @SharedLocalizer["Search.Released"]: @context.ReleaseDate.ToString("MMM dd, yyyy") |
- @SharedLocalizer["Search.Version"]: @context.Version
- @((MarkupString)(!string.IsNullOrEmpty(context.PackageUrl) ? " | " + SharedLocalizer["Search.Source"] + ": " + new Uri(context.PackageUrl).Host + "" : ""))
- @((MarkupString)(context.TrialPeriod > 0 ? " | " + context.TrialPeriod + " " + @SharedLocalizer["Trial"] + "" : ""))
- |
-
- @if (context.Price != null && !string.IsNullOrEmpty(context.PackageUrl))
+ @if (context.IsDefault)
{
-
- }
- |
-
- @if (context.Price != null && !string.IsNullOrEmpty(context.PaymentUrl))
- {
- @context.Price.Value.ToString("$#,##0.00")
+
}
else
{
-
+ if (UpgradeAvailable(_packagename + "." + context.Code, context.Version))
+ {
+
+ }
}
|
@@ -140,6 +140,7 @@
@Localizer["Search.NoResults"]
+
}
}
@@ -169,7 +170,7 @@
@@ -179,110 +180,120 @@
}
@code {
- private ElementReference form;
- private bool validated = false;
- private int _moduleDefinitionId;
- private string _name;
+ private ElementReference form;
+ private bool validated = false;
+ private int _moduleDefinitionId;
+ private string _name;
private string _description = "";
private string _categories;
- private string _moduledefinitionname = "";
+ private string _moduledefinitionname = "";
private string _version;
private string _packagename = "";
private string _owner = "";
- private string _url = "";
- private string _contact = "";
- private string _license = "";
- private string _runtimes = "";
- private string _permissions;
- private string _createdby;
- private DateTime _createdon;
- private string _modifiedby;
- private DateTime _modifiedon;
+ private string _url = "";
+ private string _contact = "";
+ private string _license = "";
+ private string _runtimes = "";
+ private string _permissions;
+ private string _createdby;
+ private DateTime _createdon;
+ private string _modifiedby;
+ private DateTime _modifiedon;
#pragma warning disable 649
- private PermissionGrid _permissionGrid;
+ private PermissionGrid _permissionGrid;
#pragma warning restore 649
private List _packages;
+ private List _languages;
private string _productname = "";
- private string _packageid = "";
private string _packagelicense = "";
- private string _packageversion = "";
+ private string _packageid = "";
- public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin;
+ public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin;
- protected override async Task OnInitializedAsync()
- {
- try
- {
- _moduleDefinitionId = Int32.Parse(PageState.QueryString["id"]);
- var moduleDefinition = await ModuleDefinitionService.GetModuleDefinitionAsync(_moduleDefinitionId, ModuleState.SiteId);
- if (moduleDefinition != null)
- {
- _name = moduleDefinition.Name;
+ protected override async Task OnInitializedAsync()
+ {
+ try
+ {
+ _moduleDefinitionId = Int32.Parse(PageState.QueryString["id"]);
+ var moduleDefinition = await ModuleDefinitionService.GetModuleDefinitionAsync(_moduleDefinitionId, ModuleState.SiteId);
+ if (moduleDefinition != null)
+ {
+ _name = moduleDefinition.Name;
_description = moduleDefinition.Description;
- _categories = moduleDefinition.Categories;
- _moduledefinitionname = moduleDefinition.ModuleDefinitionName;
+ _categories = moduleDefinition.Categories;
+ _moduledefinitionname = moduleDefinition.ModuleDefinitionName;
_version = moduleDefinition.Version;
_packagename = moduleDefinition.PackageName;
_owner = moduleDefinition.Owner;
- _url = moduleDefinition.Url;
- _contact = moduleDefinition.Contact;
- _license = moduleDefinition.License;
- _runtimes = moduleDefinition.Runtimes;
- _permissions = moduleDefinition.Permissions;
- _createdby = moduleDefinition.CreatedBy;
- _createdon = moduleDefinition.CreatedOn;
- _modifiedby = moduleDefinition.ModifiedBy;
- _modifiedon = moduleDefinition.ModifiedOn;
+ _url = moduleDefinition.Url;
+ _contact = moduleDefinition.Contact;
+ _license = moduleDefinition.License;
+ _runtimes = moduleDefinition.Runtimes;
+ _permissions = moduleDefinition.Permissions;
+ _createdby = moduleDefinition.CreatedBy;
+ _createdon = moduleDefinition.CreatedOn;
+ _modifiedby = moduleDefinition.ModifiedBy;
+ _modifiedon = moduleDefinition.ModifiedOn;
- _packages = await PackageService.GetPackagesAsync("translation", "", "", moduleDefinition.PackageName);
+ _packages = await PackageService.GetPackagesAsync("translation", "", "", _packagename);
+ _languages = await LanguageService.GetLanguagesAsync(-1, _packagename);
+ foreach (var package in _packages)
+ {
+ var code = package.PackageId.Split('.').Last();
+ if (!_languages.Any(item => item.Code == code))
+ {
+ _languages.Add(new Language { Code = code, Name = CultureInfo.GetCultureInfo(code).DisplayName, Version = package.Version, IsDefault = true });
+ }
+ }
+ _languages = _languages.OrderBy(item => item.Name).ToList();
}
- }
- catch (Exception ex)
- {
- await logger.LogError(ex, "Error Loading ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message);
- AddModuleMessage(Localizer["Error.Module.Load"], MessageType.Error);
- }
- }
+ }
+ catch (Exception ex)
+ {
+ await logger.LogError(ex, "Error Loading ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message);
+ AddModuleMessage(Localizer["Error.Module.Load"], MessageType.Error);
+ }
+ }
- private async Task SaveModuleDefinition()
- {
- validated = true;
- var interop = new Interop(JSRuntime);
- if (await interop.FormValid(form))
- {
- try
- {
- var moduledefinition = await ModuleDefinitionService.GetModuleDefinitionAsync(_moduleDefinitionId, ModuleState.SiteId);
- if (moduledefinition.Name != _name)
- {
- moduledefinition.Name = _name;
- }
- if (moduledefinition.Description != _description)
- {
- moduledefinition.Description = _description;
- }
- if (moduledefinition.Categories != _categories)
- {
- moduledefinition.Categories = _categories;
- }
- moduledefinition.Permissions = _permissionGrid.GetPermissions();
- await ModuleDefinitionService.UpdateModuleDefinitionAsync(moduledefinition);
- await logger.LogInformation("ModuleDefinition Saved {ModuleDefinition}", moduledefinition);
- NavigationManager.NavigateTo(NavigateUrl());
- }
- catch (Exception ex)
- {
- await logger.LogError(ex, "Error Saving ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message);
- AddModuleMessage(Localizer["Error.Module.Save"], MessageType.Error);
- }
- }
- else
- {
- AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning);
- }
- }
+ private async Task SaveModuleDefinition()
+ {
+ validated = true;
+ var interop = new Interop(JSRuntime);
+ if (await interop.FormValid(form))
+ {
+ try
+ {
+ var moduledefinition = await ModuleDefinitionService.GetModuleDefinitionAsync(_moduleDefinitionId, ModuleState.SiteId);
+ if (moduledefinition.Name != _name)
+ {
+ moduledefinition.Name = _name;
+ }
+ if (moduledefinition.Description != _description)
+ {
+ moduledefinition.Description = _description;
+ }
+ if (moduledefinition.Categories != _categories)
+ {
+ moduledefinition.Categories = _categories;
+ }
+ moduledefinition.Permissions = _permissionGrid.GetPermissions();
+ await ModuleDefinitionService.UpdateModuleDefinitionAsync(moduledefinition);
+ await logger.LogInformation("ModuleDefinition Saved {ModuleDefinition}", moduledefinition);
+ NavigationManager.NavigateTo(NavigateUrl());
+ }
+ catch (Exception ex)
+ {
+ await logger.LogError(ex, "Error Saving ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message);
+ AddModuleMessage(Localizer["Error.Module.Save"], MessageType.Error);
+ }
+ }
+ else
+ {
+ AddModuleMessage(SharedLocalizer["Message.InfoRequired"], MessageType.Warning);
+ }
+ }
private void HideModal()
{
@@ -290,37 +301,53 @@
_packagelicense = "";
StateHasChanged();
}
-
- private async Task GetPackage(string packageid, string version)
+
+ private bool UpgradeAvailable(string packagename, string version)
{
+ var upgradeavailable = false;
+ if (_packages != null)
+ {
+ var package = _packages.Where(item => item.PackageId == packagename).FirstOrDefault();
+ if (package != null)
+ {
+ upgradeavailable = (Version.Parse(package.Version).CompareTo(Version.Parse(version)) > 0);
+ }
+
+ }
+ return upgradeavailable;
+ }
+
+ private async Task GetPackage(string packagename)
+ {
+ var version = _packages.Where(item => item.PackageId == packagename).FirstOrDefault().Version;
try
{
- var package = await PackageService.GetPackageAsync(packageid, version);
+ var package = await PackageService.GetPackageAsync(packagename, version);
if (package != null)
{
_productname = package.Name;
- _packageid = package.PackageId;
if (!string.IsNullOrEmpty(package.License))
{
_packagelicense = package.License.Replace("\n", " ");
}
- _packageversion = package.Version;
+ _packageid = package.PackageId;
}
StateHasChanged();
}
catch (Exception ex)
{
- await logger.LogError(ex, "Error Getting Package {PackageId} {Version}", packageid, version);
+ await logger.LogError(ex, "Error Getting Package {PackageId} {Version}", packagename, version);
AddModuleMessage(Localizer["Error.Translation.Download"], MessageType.Error);
}
}
- private async Task DownloadTranslation()
+ private async Task DownloadPackage(string packagename)
{
try
{
- await PackageService.DownloadPackageAsync(_packageid, _version, Constants.PackagesFolder);
- await logger.LogInformation("Package {PackageId} {Version} Downloaded Successfully", _packageid, _version);
+ var version = _packages.Where(item => item.PackageId == packagename).FirstOrDefault().Version;
+ await PackageService.DownloadPackageAsync(packagename, version, Constants.PackagesFolder);
+ await logger.LogInformation("Package {PackageId} {Version} Downloaded Successfully", packagename, version);
AddModuleMessage(Localizer["Success.Translation.Download"], MessageType.Success);
_productname = "";
_packagelicense = "";
@@ -328,7 +355,7 @@
}
catch (Exception ex)
{
- await logger.LogError(ex, "Error Downloading Package {PackageId} {Version}", _packageid, _version);
+ await logger.LogError(ex, "Error Downloading Package {PackageId} {Version}", _packagename, _version);
AddModuleMessage(Localizer["Error.Translation.Download"], MessageType.Error);
}
}
diff --git a/Oqtane.Server/Controllers/LanguageController.cs b/Oqtane.Server/Controllers/LanguageController.cs
index ef9b0aa1..7e33c2ee 100644
--- a/Oqtane.Server/Controllers/LanguageController.cs
+++ b/Oqtane.Server/Controllers/LanguageController.cs
@@ -36,23 +36,37 @@ namespace Oqtane.Controllers
public IEnumerable Get(string siteid, string packagename)
{
int SiteId;
- if (int.TryParse(siteid, out SiteId) && SiteId == _alias.SiteId)
+ if (int.TryParse(siteid, out SiteId) && (SiteId == _alias.SiteId || SiteId == -1))
{
- if (string.IsNullOrEmpty(packagename))
+ List languages = new List();
+ if (SiteId == -1)
{
- packagename = "Oqtane";
- }
- var languages = _languages.GetLanguages(SiteId).ToList();
- foreach (var file in Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), $"{packagename}.*{Constants.SatelliteAssemblyExtension}", SearchOption.AllDirectories))
- {
- var code = Path.GetFileName(Path.GetDirectoryName(file));
- if (languages.Any(item => item.Code == code))
+ if (!string.IsNullOrEmpty(packagename))
{
- languages.Single(item => item.Code == code).Version = FileVersionInfo.GetVersionInfo(file).FileVersion;
+ foreach (var file in Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), $"{packagename}.*{Constants.SatelliteAssemblyExtension}", SearchOption.AllDirectories))
+ {
+ var code = Path.GetFileName(Path.GetDirectoryName(file));
+ languages.Add(new Language { Code = code, Name = CultureInfo.GetCultureInfo(code).DisplayName, Version = FileVersionInfo.GetVersionInfo(file).FileVersion, IsDefault = false });
+ }
}
}
- var defaultCulture = CultureInfo.GetCultureInfo(Constants.DefaultCulture);
- languages.Add(new Language { Code = defaultCulture.Name, Name = defaultCulture.DisplayName, Version = Constants.Version, IsDefault = !languages.Any(l => l.IsDefault) });
+ else
+ {
+ languages = _languages.GetLanguages(SiteId).ToList();
+ if (!string.IsNullOrEmpty(packagename))
+ {
+ foreach (var file in Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), $"{packagename}.*{Constants.SatelliteAssemblyExtension}", SearchOption.AllDirectories))
+ {
+ var code = Path.GetFileName(Path.GetDirectoryName(file));
+ if (languages.Any(item => item.Code == code))
+ {
+ languages.Single(item => item.Code == code).Version = FileVersionInfo.GetVersionInfo(file).FileVersion;
+ }
+ }
+ }
+ var defaultCulture = CultureInfo.GetCultureInfo(Constants.DefaultCulture);
+ languages.Add(new Language { Code = defaultCulture.Name, Name = defaultCulture.DisplayName, Version = Constants.Version, IsDefault = !languages.Any(l => l.IsDefault) });
+ }
return languages.OrderBy(item => item.Name);
}
else
|