diff --git a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor index 0ad49710..1efa0630 100644 --- a/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleSettings/Index.razor @@ -105,9 +105,11 @@ await ModuleService.UpdateModuleAsync(module); PageModule pagemodule = await PageModuleService.GetPageModuleAsync(ModuleState.PageModuleId); + pagemodule.PageId = int.Parse(pageid); pagemodule.Title = title; pagemodule.ContainerType = containertype; await PageModuleService.UpdatePageModuleAsync(pagemodule); + await PageModuleService.UpdatePageModuleOrderAsync(pagemodule.PageId, pagemodule.Pane); Type moduleType = Type.GetType(ModuleState.ModuleType); if (moduleType != null) diff --git a/Oqtane.Client/Modules/HelloWorld/Index.razor b/Oqtane.Client/Modules/HelloWorld/Index.razor new file mode 100644 index 00000000..677dba61 --- /dev/null +++ b/Oqtane.Client/Modules/HelloWorld/Index.razor @@ -0,0 +1,50 @@ +@namespace YourCompany.Module.HelloWorld +@inherits ModuleBase +@inject ISettingService SettingService + +
+ @if (UserSecurity.IsAuthorized(PageState.User, "Edit", ModuleState.Permissions)) + { +
+ + + + +
+ } +
+ @if (!string.IsNullOrEmpty(url2)) + { +
+ } +
+
+
+ +@code { + string url1 = ""; // use https://www.oqtane.org/Portals/0/Images/helloworld.png + string url2 = ""; + + protected override async Task OnInitializedAsync() + { + Dictionary settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); + url2 = SettingService.GetSetting(settings, "url", ""); + } + + private async Task Save() + { + if (!string.IsNullOrEmpty(url1)) + { + Dictionary settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); + SettingService.SetSetting(settings, "url", url1); + await SettingService.UpdateModuleSettingsAsync(settings, ModuleState.ModuleId); + ModuleInstance.AddModuleMessage("Url Saved", MessageType.Success); + url2 = url1; + StateHasChanged(); + } + else + { + ModuleInstance.AddModuleMessage("You Must Enter A Url", MessageType.Warning); + } + } +} diff --git a/Oqtane.Client/Services/ModuleDefinitionService.cs b/Oqtane.Client/Services/ModuleDefinitionService.cs index e3a84994..4432d90a 100644 --- a/Oqtane.Client/Services/ModuleDefinitionService.cs +++ b/Oqtane.Client/Services/ModuleDefinitionService.cs @@ -47,7 +47,7 @@ namespace Oqtane.Services if (assemblies.Where(item => item.FullName.StartsWith(assemblyname + ",")).FirstOrDefault() == null) { // download assembly from server and load - var bytes = await http.GetByteArrayAsync("_framework/_bin/" + assemblyname + ".dll"); + var bytes = await http.GetByteArrayAsync(apiurl + "/" + assemblyname + ".dll"); Assembly.Load(bytes); } } @@ -56,7 +56,7 @@ namespace Oqtane.Services if (assemblies.Where(item => item.FullName.StartsWith(moduledefinition.AssemblyName + ",")).FirstOrDefault() == null) { // download assembly from server and load - var bytes = await http.GetByteArrayAsync("_framework/_bin/" + moduledefinition.AssemblyName + ".dll"); + var bytes = await http.GetByteArrayAsync(apiurl + "/" + moduledefinition.AssemblyName + ".dll"); Assembly.Load(bytes); } } diff --git a/Oqtane.Client/Services/ThemeService.cs b/Oqtane.Client/Services/ThemeService.cs index 670372f1..92aebdf6 100644 --- a/Oqtane.Client/Services/ThemeService.cs +++ b/Oqtane.Client/Services/ThemeService.cs @@ -45,7 +45,7 @@ namespace Oqtane.Services if (assemblies.Where(item => item.FullName.StartsWith(assemblyname + ",")).FirstOrDefault() == null) { // download assembly from server and load - var bytes = await http.GetByteArrayAsync("_framework/_bin/" + assemblyname + ".dll"); + var bytes = await http.GetByteArrayAsync(apiurl + "/" + assemblyname + ".dll"); Assembly.Load(bytes); } } @@ -53,7 +53,7 @@ namespace Oqtane.Services if (assemblies.Where(item => item.FullName.StartsWith(theme.AssemblyName + ",")).FirstOrDefault() == null) { // download assembly from server and load - var bytes = await http.GetByteArrayAsync("_framework/_bin/" + theme.AssemblyName + ".dll"); + var bytes = await http.GetByteArrayAsync(apiurl + "/" + theme.AssemblyName + ".dll"); Assembly.Load(bytes); } } diff --git a/Oqtane.Server/Controllers/ModuleDefinitionController.cs b/Oqtane.Server/Controllers/ModuleDefinitionController.cs index b7ebc057..900f7895 100644 --- a/Oqtane.Server/Controllers/ModuleDefinitionController.cs +++ b/Oqtane.Server/Controllers/ModuleDefinitionController.cs @@ -5,6 +5,8 @@ using Oqtane.Models; using Oqtane.Shared; using Microsoft.AspNetCore.Authorization; using Oqtane.Infrastructure; +using System.IO; +using System.Reflection; namespace Oqtane.Controllers { @@ -20,11 +22,20 @@ namespace Oqtane.Controllers this.InstallationManager = InstallationManager; } - // GET: api/ + // GET: api/?siteid=x [HttpGet] - public IEnumerable Get(string siteid) + public IEnumerable Get(int siteid) { - return ModuleDefinitions.GetModuleDefinitions(int.Parse(siteid)); + return ModuleDefinitions.GetModuleDefinitions(siteid); + } + + // GET api//filename + [HttpGet("{filename}")] + public IActionResult Get(string filename) + { + string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); + byte[] file = System.IO.File.ReadAllBytes(Path.Combine(binfolder, filename)); + return File(file, "application/octet-stream", filename); } // PUT api//5 diff --git a/Oqtane.Server/Controllers/ThemeController.cs b/Oqtane.Server/Controllers/ThemeController.cs index a99c4b2e..0cbfc711 100644 --- a/Oqtane.Server/Controllers/ThemeController.cs +++ b/Oqtane.Server/Controllers/ThemeController.cs @@ -5,6 +5,8 @@ using Oqtane.Models; using Microsoft.AspNetCore.Authorization; using Oqtane.Shared; using Oqtane.Infrastructure; +using System.IO; +using System.Reflection; namespace Oqtane.Controllers { @@ -27,6 +29,15 @@ namespace Oqtane.Controllers return Themes.GetThemes(); } + // GET api//filename + [HttpGet("{filename}")] + public IActionResult Get(string filename) + { + string binfolder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); + byte[] file = System.IO.File.ReadAllBytes(Path.Combine(binfolder, filename)); + return File(file, "application/octet-stream", filename); + } + [HttpGet("install")] [Authorize(Roles = Constants.HostRole)] public void InstallThemes() diff --git a/Oqtane.Server/Repository/Context/DBContextBase.cs b/Oqtane.Server/Repository/Context/DBContextBase.cs index 25956f19..e6d0081b 100644 --- a/Oqtane.Server/Repository/Context/DBContextBase.cs +++ b/Oqtane.Server/Repository/Context/DBContextBase.cs @@ -3,7 +3,6 @@ using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Oqtane.Models; -using Oqtane.Shared; using System; using System.Linq; diff --git a/Oqtane.Shared/Shared/IDeletable.cs b/Oqtane.Shared/Models/IDeletable.cs similarity index 88% rename from Oqtane.Shared/Shared/IDeletable.cs rename to Oqtane.Shared/Models/IDeletable.cs index 6198dcde..7880f8ff 100644 --- a/Oqtane.Shared/Shared/IDeletable.cs +++ b/Oqtane.Shared/Models/IDeletable.cs @@ -1,6 +1,6 @@ using System; -namespace Oqtane.Shared +namespace Oqtane.Models { public interface IDeletable {