diff --git a/Oqtane.Client/Modules/Admin/ModuleCreator/Index.razor b/Oqtane.Client/Modules/Admin/ModuleCreator/Index.razor index 28b1c6e0..6ca85d5d 100644 --- a/Oqtane.Client/Modules/Admin/ModuleCreator/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleCreator/Index.razor @@ -4,79 +4,87 @@ @inject IModuleDefinitionService ModuleDefinitionService @inject IModuleService ModuleService @inject ISystemService SystemService +@inject ISettingService SettingService @inject IStringLocalizer Localizer @using System.Text.RegularExpressions - - - - - - - - - - - - - - - - - - - - - - @if (!string.IsNullOrEmpty(_location)) - { +@if (string.IsNullOrEmpty(_moduledefinitionname)) +{ +
- - - -
- - - -
- - - -
- - - -
- - - -
- } -
- + - +
- - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @if (!string.IsNullOrEmpty(_location)) + { + + + + + + + + + } + + +} +else +{ + +} @code { + private string _moduledefinitionname = ""; private string _owner = string.Empty; private string _module = string.Empty; private string _description = string.Empty; @@ -86,6 +94,21 @@ public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; + protected override void OnInitialized() + { + _moduledefinitionname = SettingService.GetSetting(ModuleState.Settings, "ModuleDefinitionName", ""); + if (string.IsNullOrEmpty(_moduledefinitionname)) + { + _owner = ModuleState.Title; + _module = ModuleState.Title; + _description = ModuleState.Title; + } + else + { + AddModuleMessage("Once You Have Compiled The Module And Restarted The Application You Can Activate The Module Below", MessageType.Info); + } + } + private async Task CreateModule() { try @@ -93,8 +116,13 @@ if (IsValid(_owner) && IsValid(_module) && _template != "-") { var moduleDefinition = new ModuleDefinition { Owner = _owner, Name = _module, Description = _description, Template = _template, Version = _reference }; - await ModuleDefinitionService.CreateModuleDefinitionAsync(moduleDefinition, ModuleState.ModuleId); - AddModuleMessage("The Source Code For Your Module Has Been Created And Must Be Compiled In Order To Make It Functional. Once It Has Been Compiled You Must Restart Your Application.", MessageType.Success); + moduleDefinition = await ModuleDefinitionService.CreateModuleDefinitionAsync(moduleDefinition); + + var settings = ModuleState.Settings; + SettingService.SetSetting(settings, "ModuleDefinitionName", moduleDefinition.ModuleDefinitionName); + await SettingService.UpdateModuleSettingsAsync(settings, ModuleState.ModuleId); + + AddModuleMessage("The Source Code For Your Module Has Been Created At The Location Specified Below And Must Be Compiled In Order To Make It Functional. Once It Has Been Compiled You Must Restart Your Application To Apply These Changes.", MessageType.Success); } else { @@ -107,6 +135,25 @@ } } + private async Task ActivateModule() + { + try + { + if (!string.IsNullOrEmpty(_moduledefinitionname)) + { + Module module = await ModuleService.GetModuleAsync(ModuleState.ModuleId); + module.ModuleDefinitionName = _moduledefinitionname; + await ModuleService.UpdateModuleAsync(module); + StateHasChanged(); + NavigationManager.NavigateTo(NavigateUrl()); + } + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Activating Module"); + } + } + private bool IsValid(string name) { // must contain letters, underscores and digits and first character must be letter or underscore diff --git a/Oqtane.Client/Services/Interfaces/IModuleDefinitionService.cs b/Oqtane.Client/Services/Interfaces/IModuleDefinitionService.cs index cca5e642..e4b8ce64 100644 --- a/Oqtane.Client/Services/Interfaces/IModuleDefinitionService.cs +++ b/Oqtane.Client/Services/Interfaces/IModuleDefinitionService.cs @@ -1,4 +1,4 @@ -using Oqtane.Models; +using Oqtane.Models; using Oqtane.UI; using System.Collections.Generic; using System.Threading.Tasks; @@ -12,6 +12,6 @@ namespace Oqtane.Services Task UpdateModuleDefinitionAsync(ModuleDefinition moduleDefinition); Task InstallModuleDefinitionsAsync(); Task DeleteModuleDefinitionAsync(int moduleDefinitionId, int siteId); - Task CreateModuleDefinitionAsync(ModuleDefinition moduleDefinition, int moduleId); + Task CreateModuleDefinitionAsync(ModuleDefinition moduleDefinition); } } diff --git a/Oqtane.Client/Services/ModuleDefinitionService.cs b/Oqtane.Client/Services/ModuleDefinitionService.cs index 8486e417..87ae7e09 100644 --- a/Oqtane.Client/Services/ModuleDefinitionService.cs +++ b/Oqtane.Client/Services/ModuleDefinitionService.cs @@ -1,4 +1,4 @@ -using Oqtane.Models; +using Oqtane.Models; using System.Collections.Generic; using System.Linq; using System.Net.Http; @@ -49,9 +49,9 @@ namespace Oqtane.Services await DeleteAsync($"{Apiurl}/{moduleDefinitionId}?siteid={siteId}"); } - public async Task CreateModuleDefinitionAsync(ModuleDefinition moduleDefinition, int moduleId) + public async Task CreateModuleDefinitionAsync(ModuleDefinition moduleDefinition) { - await PostJsonAsync($"{Apiurl}?moduleid={moduleId}", moduleDefinition); + return await PostJsonAsync($"{Apiurl}", moduleDefinition); } } } diff --git a/Oqtane.Server/Controllers/ModuleDefinitionController.cs b/Oqtane.Server/Controllers/ModuleDefinitionController.cs index e30fffee..299ad601 100644 --- a/Oqtane.Server/Controllers/ModuleDefinitionController.cs +++ b/Oqtane.Server/Controllers/ModuleDefinitionController.cs @@ -23,26 +23,22 @@ namespace Oqtane.Controllers public class ModuleDefinitionController : Controller { private readonly IModuleDefinitionRepository _moduleDefinitions; - private readonly IModuleRepository _modules; private readonly ITenantRepository _tenants; private readonly ISqlRepository _sql; private readonly IUserPermissions _userPermissions; private readonly IInstallationManager _installationManager; private readonly IWebHostEnvironment _environment; - private readonly IConfigurationRoot _config; private readonly IServiceProvider _serviceProvider; private readonly ILogManager _logger; - public ModuleDefinitionController(IModuleDefinitionRepository moduleDefinitions, IModuleRepository modules,ITenantRepository tenants, ISqlRepository sql, IUserPermissions userPermissions, IInstallationManager installationManager, IWebHostEnvironment environment, IConfigurationRoot config, IServiceProvider serviceProvider, ILogManager logger) + public ModuleDefinitionController(IModuleDefinitionRepository moduleDefinitions, ITenantRepository tenants, ISqlRepository sql, IUserPermissions userPermissions, IInstallationManager installationManager, IWebHostEnvironment environment, IServiceProvider serviceProvider, ILogManager logger) { _moduleDefinitions = moduleDefinitions; - _modules = modules; _tenants = tenants; _sql = sql; _userPermissions = userPermissions; _installationManager = installationManager; _environment = environment; - _config = config; _serviceProvider = serviceProvider; _logger = logger; } @@ -166,7 +162,7 @@ namespace Oqtane.Controllers // POST api/?moduleid=x [HttpPost] [Authorize(Roles = RoleNames.Host)] - public void Post([FromBody] ModuleDefinition moduleDefinition, string moduleid) + public ModuleDefinition Post([FromBody] ModuleDefinition moduleDefinition) { if (ModelState.IsValid) { @@ -190,19 +186,17 @@ namespace Oqtane.Controllers ProcessTemplatesRecursively(new DirectoryInfo(templatePath), rootPath, rootFolder.Name, templatePath, moduleDefinition); _logger.Log(LogLevel.Information, this, LogFunction.Create, "Module Definition Created {ModuleDefinition}", moduleDefinition); - Models.Module module = _modules.GetModule(int.Parse(moduleid)); - module.ModuleDefinitionName = moduleDefinition.ModuleDefinitionName; - _modules.UpdateModule(module); - if (moduleDefinition.Template == "internal") { - // add embedded resources to project + // add embedded resources to project file List resources = new List(); resources.Add(Utilities.PathCombine("Modules", moduleDefinition.Owner + "." + moduleDefinition.Name, "Scripts", moduleDefinition.Owner + "." + moduleDefinition.Name + ".1.0.0.sql")); resources.Add(Utilities.PathCombine("Modules", moduleDefinition.Owner + "." + moduleDefinition.Name, "Scripts", moduleDefinition.Owner + "." + moduleDefinition.Name + ".Uninstall.sql")); EmbedResourceFiles(Utilities.PathCombine(rootPath, "Oqtane.Server", "Oqtane.Server.csproj"), resources); } } + + return moduleDefinition; } private void ProcessTemplatesRecursively(DirectoryInfo current, string rootPath, string rootFolder, string templatePath, ModuleDefinition moduleDefinition)