@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 @if (_initialized) {

@SharedLocalizer["Cancel"]


@SharedLocalizer["Cancel"]
@if (_languages != null && _languages.Count > 0) {
@SharedLocalizer["Name"] @Localizer["Code"] @Localizer["Version"]  
@context.Name @context.Code @((string.IsNullOrEmpty(context.Version)) ? "---" : context.Version) @switch (TranslationAvailable(_packagename + "." + context.Code, context.Version)) { case "install": break; case "upgrade": break; }
} else {
@if (string.IsNullOrEmpty(_packagename)) { @Localizer["Search.PackageNameMissing"] } else { @Localizer["Search.NoResults"] }

}
@if (_package != null) {
} } @code { private bool _initialized = false; private ElementReference form; private bool validated = false; private int _moduleDefinitionId; private string _name; private string _description = ""; private string _categories; private string _isenabled; 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 List _permissions = null; private string _createdby; private DateTime _createdon; private string _modifiedby; private DateTime _modifiedon; #pragma warning disable 649 private PermissionGrid _permissionGrid; #pragma warning restore 649 private List _packages; private List _languages; private Package _package; 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; _description = moduleDefinition.Description; _categories = moduleDefinition.Categories; _isenabled = moduleDefinition.IsEnabled.ToString(); _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.PermissionList; _createdby = moduleDefinition.CreatedBy; _createdon = moduleDefinition.CreatedOn; _modifiedby = moduleDefinition.ModifiedBy; _modifiedon = moduleDefinition.ModifiedOn; if (!string.IsNullOrEmpty(_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(); } _initialized = true; } } 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 moduleDefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId); if (!moduleDefinitions.Any(item => item.Name.ToLower() == _name.ToLower() && item.ModuleDefinitionId != _moduleDefinitionId)) { 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.IsEnabled = (_isenabled == null ? true : bool.Parse(_isenabled)); moduledefinition.PermissionList = _permissionGrid.GetPermissionList(); await ModuleDefinitionService.UpdateModuleDefinitionAsync(moduledefinition); await logger.LogInformation("ModuleDefinition Saved {ModuleDefinition}", moduledefinition); NavigationManager.NavigateTo(NavigateUrl()); } else { AddModuleMessage(Localizer["Message.DuplicateName"], MessageType.Warning); } } 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() { _package = null; StateHasChanged(); } private string TranslationAvailable(string packagename, string version) { if (_packages != null) { var package = _packages.Where(item => item.PackageId == packagename).FirstOrDefault(); if (package != null) { if (string.IsNullOrEmpty(version)) { return "install"; } else { if (Version.Parse(package.Version).CompareTo(Version.Parse(version)) > 0) { return "upgrade"; } } } } return ""; } private async Task GetPackage(string packagename) { var version = _packages.Where(item => item.PackageId == packagename).FirstOrDefault().Version; try { _package = await PackageService.GetPackageAsync(packagename, version); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Getting Package {PackageId} {Version}", packagename, version); AddModuleMessage(Localizer["Error.Translation.Download"], MessageType.Error); } } private async Task DownloadPackage() { try { await PackageService.DownloadPackageAsync(_package.PackageId, _package.Version, Constants.PackagesFolder); await logger.LogInformation("Package {PackageId} {Version} Downloaded Successfully", _package.PackageId, _package.Version); AddModuleMessage(string.Format(Localizer["Success.Translation.Download"], NavigateUrl("admin/system")), MessageType.Success); _package = null; StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Downloading Package {PackageId} {Version}", _packagename, _version); AddModuleMessage(Localizer["Error.Translation.Download"], MessageType.Error); } } }