Merge pull request #2782 from sbwalker/dev

fix #2763 - prevent module definitions from having duplicate names
This commit is contained in:
Shaun Walker 2023-05-03 12:46:44 -04:00 committed by GitHub
commit f06063d7eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 109 additions and 98 deletions

View File

@ -192,113 +192,121 @@
} }
@code { @code {
private bool _initialized = false; private bool _initialized = false;
private ElementReference form; private ElementReference form;
private bool validated = false; private bool validated = false;
private int _moduleDefinitionId; private int _moduleDefinitionId;
private string _name; private string _name;
private string _description = ""; private string _description = "";
private string _categories; private string _categories;
private string _moduledefinitionname = ""; private string _moduledefinitionname = "";
private string _version; private string _version;
private string _packagename = ""; private string _packagename = "";
private string _owner = ""; private string _owner = "";
private string _url = ""; private string _url = "";
private string _contact = ""; private string _contact = "";
private string _license = ""; private string _license = "";
private string _runtimes = ""; private string _runtimes = "";
private List<Permission> _permissions = null; private List<Permission> _permissions = null;
private string _createdby; private string _createdby;
private DateTime _createdon; private DateTime _createdon;
private string _modifiedby; private string _modifiedby;
private DateTime _modifiedon; private DateTime _modifiedon;
#pragma warning disable 649 #pragma warning disable 649
private PermissionGrid _permissionGrid; private PermissionGrid _permissionGrid;
#pragma warning restore 649 #pragma warning restore 649
private List<Package> _packages; private List<Package> _packages;
private List<Language> _languages; private List<Language> _languages;
private Package _package; private Package _package;
public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin;
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
try try
{ {
_moduleDefinitionId = Int32.Parse(PageState.QueryString["id"]); _moduleDefinitionId = Int32.Parse(PageState.QueryString["id"]);
var moduleDefinition = await ModuleDefinitionService.GetModuleDefinitionAsync(_moduleDefinitionId, ModuleState.SiteId); var moduleDefinition = await ModuleDefinitionService.GetModuleDefinitionAsync(_moduleDefinitionId, ModuleState.SiteId);
if (moduleDefinition != null) if (moduleDefinition != null)
{ {
_name = moduleDefinition.Name; _name = moduleDefinition.Name;
_description = moduleDefinition.Description; _description = moduleDefinition.Description;
_categories = moduleDefinition.Categories; _categories = moduleDefinition.Categories;
_moduledefinitionname = moduleDefinition.ModuleDefinitionName; _moduledefinitionname = moduleDefinition.ModuleDefinitionName;
_version = moduleDefinition.Version; _version = moduleDefinition.Version;
_packagename = moduleDefinition.PackageName; _packagename = moduleDefinition.PackageName;
_owner = moduleDefinition.Owner; _owner = moduleDefinition.Owner;
_url = moduleDefinition.Url; _url = moduleDefinition.Url;
_contact = moduleDefinition.Contact; _contact = moduleDefinition.Contact;
_license = moduleDefinition.License; _license = moduleDefinition.License;
_runtimes = moduleDefinition.Runtimes; _runtimes = moduleDefinition.Runtimes;
_permissions = moduleDefinition.PermissionList; _permissions = moduleDefinition.PermissionList;
_createdby = moduleDefinition.CreatedBy; _createdby = moduleDefinition.CreatedBy;
_createdon = moduleDefinition.CreatedOn; _createdon = moduleDefinition.CreatedOn;
_modifiedby = moduleDefinition.ModifiedBy; _modifiedby = moduleDefinition.ModifiedBy;
_modifiedon = moduleDefinition.ModifiedOn; _modifiedon = moduleDefinition.ModifiedOn;
if (!string.IsNullOrEmpty(_packagename)) if (!string.IsNullOrEmpty(_packagename))
{ {
_packages = await PackageService.GetPackagesAsync("translation", "", "", _packagename); _packages = await PackageService.GetPackagesAsync("translation", "", "", _packagename);
_languages = await LanguageService.GetLanguagesAsync(-1, _packagename); _languages = await LanguageService.GetLanguagesAsync(-1, _packagename);
foreach (var package in _packages) foreach (var package in _packages)
{ {
var code = package.PackageId.Split('.').Last(); var code = package.PackageId.Split('.').Last();
if (!_languages.Any(item => item.Code == code)) if (!_languages.Any(item => item.Code == code))
{ {
_languages.Add(new Language { Code = code, Name = CultureInfo.GetCultureInfo(code).DisplayName, Version = package.Version, IsDefault = true }); _languages.Add(new Language { Code = code, Name = CultureInfo.GetCultureInfo(code).DisplayName, Version = package.Version, IsDefault = true });
} }
} }
_languages = _languages.OrderBy(item => item.Name).ToList(); _languages = _languages.OrderBy(item => item.Name).ToList();
} }
_initialized = true; _initialized = true;
} }
} }
catch (Exception ex) catch (Exception ex)
{ {
await logger.LogError(ex, "Error Loading ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message); await logger.LogError(ex, "Error Loading ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message);
AddModuleMessage(Localizer["Error.Module.Load"], MessageType.Error); AddModuleMessage(Localizer["Error.Module.Load"], MessageType.Error);
} }
} }
private async Task SaveModuleDefinition() private async Task SaveModuleDefinition()
{ {
validated = true; validated = true;
var interop = new Interop(JSRuntime); var interop = new Interop(JSRuntime);
if (await interop.FormValid(form)) if (await interop.FormValid(form))
{ {
try try
{ {
var moduledefinition = await ModuleDefinitionService.GetModuleDefinitionAsync(_moduleDefinitionId, ModuleState.SiteId); var moduleDefinitions = await ModuleDefinitionService.GetModuleDefinitionsAsync(PageState.Site.SiteId);
if (moduledefinition.Name != _name) if (!moduleDefinitions.Any(item => item.Name.ToLower() == _name.ToLower() && item.ModuleDefinitionId != _moduleDefinitionId))
{ {
moduledefinition.Name = _name; var moduledefinition = await ModuleDefinitionService.GetModuleDefinitionAsync(_moduleDefinitionId, ModuleState.SiteId);
} if (moduledefinition.Name != _name)
if (moduledefinition.Description != _description) {
{ moduledefinition.Name = _name;
moduledefinition.Description = _description; }
} if (moduledefinition.Description != _description)
if (moduledefinition.Categories != _categories) {
{ moduledefinition.Description = _description;
moduledefinition.Categories = _categories; }
} if (moduledefinition.Categories != _categories)
moduledefinition.PermissionList = _permissionGrid.GetPermissionList(); {
await ModuleDefinitionService.UpdateModuleDefinitionAsync(moduledefinition); moduledefinition.Categories = _categories;
await logger.LogInformation("ModuleDefinition Saved {ModuleDefinition}", moduledefinition); }
NavigationManager.NavigateTo(NavigateUrl()); 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) catch (Exception ex)
{ {
await logger.LogError(ex, "Error Saving ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message); await logger.LogError(ex, "Error Saving ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message);

View File

@ -216,4 +216,7 @@
<data name="Translations.Heading" xml:space="preserve"> <data name="Translations.Heading" xml:space="preserve">
<value>Translations</value> <value>Translations</value>
</data> </data>
<data name="Message.DuplicateName" xml:space="preserve">
<value>A Module With The Name Specified Already Exists</value>
</data>
</root> </root>