@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 @inject IPageModuleService PageModuleService @inject IModuleService ModuleService @if (_initialized) {
@if (!string.IsNullOrEmpty(_packagename)) {
@if (string.IsNullOrEmpty(_packageurl)) { } else { @SharedLocalizer["Download"] }
} else { }
@if (_license.StartsWith("http") || _license.StartsWith("/") || _license.StartsWith("~")) { @Localizer["View License"] } else { }

@SharedLocalizer["Cancel"]


@SharedLocalizer["Cancel"]
  @SharedLocalizer["Name"]
@(string.IsNullOrEmpty(context.Title) ? @context.Name : @context.Title )
@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 _packageurl = ""; private string _owner = ""; private string _url = ""; private string _contact = ""; private string _license = ""; private List _permissions = null; private string _createdby; private DateTime _createdon; private string _modifiedby; private DateTime _modifiedon; private List _pagesWithModules; #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; _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(); } // Group modules by PageId // Get distinct PageIds where modules are present var distinctPageIds = PageState.Modules .Where(md => md.ModuleDefinition.ModuleDefinitionId == _moduleDefinitionId && md.IsDeleted == false) .Select(md => md.PageId) .Distinct(); // Filter and retrieve the corresponding pages _pagesWithModules = PageState.Pages .Where(pg => distinctPageIds.Contains(pg.PageId) && pg.IsDeleted == false) .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, false); if (_package != null) { StateHasChanged(); } else { await logger.LogError("Error Getting Package {PackageId} {Version}", packagename, version); AddModuleMessage(Localizer["Error.Translation.Download"], MessageType.Error); } } catch (Exception ex) { await logger.LogError(ex, "Error Getting Package {PackageId} {Version}", packagename, version); AddModuleMessage(Localizer["Error.Translation.Download"], MessageType.Error); } } private async Task DownloadTranslation() { try { await PackageService.DownloadPackageAsync(_package.PackageId, _package.Version); 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); } } private async Task ValidatePackage() { try { var package = await PackageService.GetPackageAsync(_packagename, _version, true); if (package == null || string.IsNullOrEmpty(package.PackageUrl)) { AddModuleMessage(Localizer["Message.Validate"], MessageType.Warning); } else { _packageurl = package.PackageUrl; AddModuleMessage(Localizer["Message.Download"], MessageType.Info); } StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Downloading Package {PackageId} {Version}", _packagename, _version); AddModuleMessage(Localizer["Error.Validate"], MessageType.Error); } } private string Browse(Page page) => string.IsNullOrEmpty(page.Url) ? NavigateUrl(page.Path) : page.Url; }