-
-
-
-
+
-
+
-
+
+
+
-
- Localizer
+@inject IStringLocalizer SharedLocalizer
+ @attribute [OqtaneIgnore]
+
+
-
+
+
+ }
+ else
+ {
+
+ }
@code {
public override string Name => "Theme1";
- public override string Panes => PaneNames.Admin + ",Top Full Width,Top 100%,Left 50%,Right 50%,Left 33%,Center 33%,Right 33%,Left Outer 25%,Left Inner 25%,Right Inner 25%,Right Outer 25%,Left 25%,Center 50%,Right 25%,Left Sidebar 66%,Right Sidebar 33%,Left Sidebar 33%,Right Sidebar 66%,Bottom 100%,Bottom Full Width";
+ public override string Panes => PaneNames.Admin + ",Top Full Width,Top 100%,Left 50%,Right 50%,Left 33%,Center 33%,Right 33%,Left Outer 25%,Left Inner 25%,Right Inner 25%,Right Outer 25%,Left 25%,Center 50%,Right 25%,Left Sidebar 66%,Right Sidebar 33%,Left Sidebar 33%,Right Sidebar 66%,Bottom 100%,Bottom Full Width,Footer";
+
+ private bool _login = true;
+ private bool _register = true;
+ private bool _footer = false;
+
+ protected override void OnParametersSet()
+ {
+ try
+ {
+ var settings = SettingService.MergeSettings(PageState.Site.Settings, PageState.Page.Settings);
+ _login = bool.Parse(SettingService.GetSetting(settings, GetType().Namespace + ":Login", "true"));
+ _register = bool.Parse(SettingService.GetSetting(settings, GetType().Namespace + ":Register", "true"));
+ _footer = bool.Parse(SettingService.GetSetting(settings, GetType().Namespace + ":Footer", "false"));
+ }
+ catch
+ {
+ // error loading theme settings
+ }
+ }
}
diff --git a/Oqtane.Server/wwwroot/Themes/Templates/External/Client/Themes/ThemeSettings.razor b/Oqtane.Server/wwwroot/Themes/Templates/External/Client/Themes/ThemeSettings.razor
new file mode 100644
index 00000000..745463fd
--- /dev/null
+++ b/Oqtane.Server/wwwroot/Themes/Templates/External/Client/Themes/ThemeSettings.razor
@@ -0,0 +1,160 @@
+@namespace [Owner].Theme.[Theme]
+@inherits ModuleBase
+@implements Oqtane.Interfaces.ISettingsControl
+@inject ISettingService SettingService
+@inject IStringLocalizer
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+ @if (_footer)
+ {
+
+
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+ @code {
+ private int pageId = -1;
+ private string resourceType = "[Owner].Theme.[Theme].ThemeSettings, [Owner].Theme.[Theme].Client.Oqtane"; // for localization
+ private string _scope = "page";
+ private string _login = "-";
+ private string _register = "-";
+ private string _footer = "-";
+
+ protected override async Task OnInitializedAsync()
+ {
+ if (PageState.QueryString.ContainsKey("id"))
+ {
+ pageId = int.Parse(PageState.QueryString["id"]);
+ }
+
+ try
+ {
+ await LoadSettings();
+ }
+ catch (Exception ex)
+ {
+ await logger.LogError(ex, "Error Loading Settings {Error}", ex.Message);
+ AddModuleMessage("Error Loading Settings", MessageType.Error);
+ }
+ }
+
+ private async Task LoadSettings()
+ {
+ if (_scope == "site")
+ {
+ var settings = PageState.Site.Settings;
+ _login = SettingService.GetSetting(settings, GetType().Namespace + ":Login", "true");
+ _register = SettingService.GetSetting(settings, GetType().Namespace + ":Register", "true");
+ _footer = SettingService.GetSetting(settings, GetType().Namespace + ":Footer", "false");
+ }
+ else
+ {
+ var settings = await SettingService.GetPageSettingsAsync(pageId);
+ settings = SettingService.MergeSettings(PageState.Site.Settings, settings);
+ _login = SettingService.GetSetting(settings, GetType().Namespace + ":Login", "-");
+ _register = SettingService.GetSetting(settings, GetType().Namespace + ":Register", "-");
+ _footer = SettingService.GetSetting(settings, GetType().Namespace + ":Footer", "-");
+ }
+ await Task.Yield();
+ }
+
+ private async Task ScopeChanged(ChangeEventArgs eventArgs)
+ {
+ try
+ {
+ _scope = (string)eventArgs.Value;
+ await LoadSettings();
+ StateHasChanged();
+ }
+ catch (Exception ex)
+ {
+ await logger.LogError(ex, "Error Loading Settings {Error}", ex.Message);
+ AddModuleMessage("Error Loading Settings", MessageType.Error);
+ }
+ }
+
+ public async Task UpdateSettings()
+ {
+ try
+ {
+ if (_scope == "site")
+ {
+ var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId);
+ if (_login != "-")
+ {
+ settings = SettingService.SetSetting(settings, GetType().Namespace + ":Login", _login, true);
+ }
+ if (_register != "-")
+ {
+ settings = SettingService.SetSetting(settings, GetType().Namespace + ":Register", _register, true);
+ }
+ if (_footer != "-")
+ {
+ settings = SettingService.SetSetting(settings, GetType().Namespace + ":Footer", _footer, true);
+ }
+ await SettingService.UpdateSiteSettingsAsync(settings, PageState.Site.SiteId);
+ }
+ else
+ {
+ var settings = await SettingService.GetPageSettingsAsync(pageId);
+ if (_login != "-")
+ {
+ settings = SettingService.SetSetting(settings, GetType().Namespace + ":Login", _login);
+ }
+ if (_register != "-")
+ {
+ settings = SettingService.SetSetting(settings, GetType().Namespace + ":Register", _register);
+ }
+ if (_footer != "-")
+ {
+ settings = SettingService.SetSetting(settings, GetType().Namespace + ":Footer", _footer);
+ }
+ await SettingService.UpdatePageSettingsAsync(settings, pageId);
+ }
+ }
+ catch (Exception ex)
+ {
+ await logger.LogError(ex, "Error Saving Settings {Error}", ex.Message);
+ AddModuleMessage("Error Saving Settings", MessageType.Error);
+ }
+ }
+ }
diff --git a/Oqtane.Server/wwwroot/Themes/Templates/External/Client/_Imports.razor b/Oqtane.Server/wwwroot/Themes/Templates/External/Client/_Imports.razor
index d206b36e..9e4a6152 100644
--- a/Oqtane.Server/wwwroot/Themes/Templates/External/Client/_Imports.razor
+++ b/Oqtane.Server/wwwroot/Themes/Templates/External/Client/_Imports.razor
@@ -1,13 +1,17 @@
-@using System
+@using System
@using System.Linq
@using System.Collections.Generic
@using System.Net.Http
@using System.Net.Http.Json
+@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
+@using Microsoft.Extensions.Localization
@using Microsoft.JSInterop
+@using Oqtane
+@using Oqtane.Client
@using Oqtane.Models
@using Oqtane.Modules
@using Oqtane.Modules.Controls
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+