diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor
index ae722343..b5bfa662 100644
--- a/Oqtane.Client/Modules/Admin/Pages/Add.razor
+++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor
@@ -85,6 +85,15 @@
+
+
+
+
+
+
@@ -96,9 +105,9 @@
@@ -125,21 +134,12 @@
-
+
-
+
-
-
-
-
-
-
-
+
}
@@ -170,7 +170,6 @@
private List _containers = new List();
private string _name;
private string _title;
- private string _meta;
private string _path = string.Empty;
private string _parentid = "-1";
private string _insert = ">>";
@@ -182,7 +181,8 @@
private string _ispersonalizable = "False";
private string _themetype = string.Empty;
private string _containertype = string.Empty;
- private string _icon = string.Empty;
+ private string _headcontent;
+ private string _icon = string.Empty;
private string _permissions = null;
private PermissionGrid _permissionGrid;
private Type _themeSettingsType;
@@ -376,11 +376,11 @@
{
page.DefaultContainerType = string.Empty;
}
- page.Icon = (_icon == null ? string.Empty : _icon);
+ page.HeadContent = _headcontent;
+ page.Icon = (_icon == null ? string.Empty : _icon);
page.PermissionList = _permissionGrid.GetPermissionList();
page.IsPersonalizable = (_ispersonalizable == null ? false : Boolean.Parse(_ispersonalizable));
page.UserId = null;
- page.Meta = _meta;
page = await PageService.AddPageAsync(page);
await PageService.UpdatePageOrderAsync(page.SiteId, page.PageId, page.ParentId);
diff --git a/Oqtane.Client/Modules/Admin/Pages/Edit.razor b/Oqtane.Client/Modules/Admin/Pages/Edit.razor
index 4f0c1166..77920ad7 100644
--- a/Oqtane.Client/Modules/Admin/Pages/Edit.razor
+++ b/Oqtane.Client/Modules/Admin/Pages/Edit.razor
@@ -93,6 +93,15 @@
+
+
+
+
+
+
@@ -103,9 +112,9 @@
@@ -132,18 +141,9 @@
-
+
-
-
-
-
-
-
-
+
@@ -207,8 +207,7 @@
private int _pageId;
private string _name;
private string _title;
- private string _meta;
- private string _path;
+ private string _path;
private string _currentparentid;
private string _parentid = "-1";
private string _insert = "=";
@@ -220,7 +219,8 @@
private string _ispersonalizable;
private string _themetype;
private string _containertype = "-";
- private string _icon;
+ private string _headcontent;
+ private string _icon;
private List _permissions = null;
private string _createdby;
private DateTime _createdon;
@@ -250,7 +250,6 @@
{
_name = page.Name;
_title = page.Title;
- _meta = page.Meta;
_path = page.Path;
_pageModules = PageState.Modules.Where(m => m.PageId == page.PageId).ToList();
@@ -291,7 +290,8 @@
{
_containertype = PageState.Site.DefaultContainerType;
}
- _icon = page.Icon;
+ _headcontent = page.HeadContent;
+ _icon = page.Icon;
_permissions = page.PermissionList;
_createdby = page.CreatedBy;
_createdon = page.CreatedOn;
@@ -508,11 +508,11 @@
{
page.DefaultContainerType = string.Empty;
}
- page.Icon = _icon ?? string.Empty;
+ page.HeadContent = _headcontent;
+ page.Icon = _icon ?? string.Empty;
page.PermissionList = _permissionGrid.GetPermissionList();
page.IsPersonalizable = (_ispersonalizable != null && Boolean.Parse(_ispersonalizable));
page.UserId = null;
- page.Meta = _meta;
page = await PageService.UpdatePageAsync(page);
await PageService.UpdatePageOrderAsync(page.SiteId, page.PageId, page.ParentId);
diff --git a/Oqtane.Client/Modules/Admin/Site/Index.razor b/Oqtane.Client/Modules/Admin/Site/Index.razor
index bc7a68e2..52ac9445 100644
--- a/Oqtane.Client/Modules/Admin/Site/Index.razor
+++ b/Oqtane.Client/Modules/Admin/Site/Index.razor
@@ -22,6 +22,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -72,36 +105,12 @@
-
+
-
+
-
-
-
-
-
-
-
-
+
@@ -306,221 +315,224 @@
}
@code {
- private ElementReference form;
- private bool validated = false;
- private bool _initialized = false;
- private List
_themeList;
- private List _themes = new List();
- private List _containers = new List();
- private string _name = string.Empty;
- private List _aliases;
- private int _aliasid = -1;
- private string _aliasname;
- private string _defaultalias;
- private string _runtime = "";
- private string _prerender = "";
- private int _logofileid = -1;
- private FileManager _logofilemanager;
- private int _faviconfileid = -1;
- private FileManager _faviconfilemanager;
- private string _themetype = "-";
- private string _containertype = "-";
- private string _admincontainertype = "-";
- private string _homepageid = "-";
- private string _sitemap = "";
- private string _smtphost = string.Empty;
- private string _smtpport = string.Empty;
- private string _smtpssl = "False";
- private string _smtpusername = string.Empty;
- private string _smtppassword = string.Empty;
- private string _smtppasswordtype = "password";
- private string _togglesmtppassword = string.Empty;
- private string _smtpsender = string.Empty;
- private string _smtprelay = "False";
- private string _retention = string.Empty;
- private string _pwaisenabled;
- private int _pwaappiconfileid = -1;
- private FileManager _pwaappiconfilemanager;
- private int _pwasplashiconfileid = -1;
- private FileManager _pwasplashiconfilemanager;
- private string _tenant = string.Empty;
- private string _database = string.Empty;
- private string _connectionstring = string.Empty;
- private string _createdby;
- private DateTime _createdon;
- private string _modifiedby;
- private DateTime _modifiedon;
- private string _deletedby;
- private DateTime? _deletedon;
- private string _isdeleted;
+ private ElementReference form;
+ private bool validated = false;
+ private bool _initialized = false;
+ private List _themeList;
+ private List _themes = new List();
+ private List _containers = new List();
+ private string _name = string.Empty;
+ private List _aliases;
+ private int _aliasid = -1;
+ private string _aliasname;
+ private string _defaultalias;
+ private string _runtime = "";
+ private string _prerender = "";
+ private int _logofileid = -1;
+ private FileManager _logofilemanager;
+ private int _faviconfileid = -1;
+ private FileManager _faviconfilemanager;
+ private string _themetype = "-";
+ private string _containertype = "-";
+ private string _admincontainertype = "-";
+ private string _headcontent = string.Empty;
+ private string _homepageid = "-";
+ private string _sitemap = "";
+ private string _smtphost = string.Empty;
+ private string _smtpport = string.Empty;
+ private string _smtpssl = "False";
+ private string _smtpusername = string.Empty;
+ private string _smtppassword = string.Empty;
+ private string _smtppasswordtype = "password";
+ private string _togglesmtppassword = string.Empty;
+ private string _smtpsender = string.Empty;
+ private string _smtprelay = "False";
+ private string _retention = string.Empty;
+ private string _pwaisenabled;
+ private int _pwaappiconfileid = -1;
+ private FileManager _pwaappiconfilemanager;
+ private int _pwasplashiconfileid = -1;
+ private FileManager _pwasplashiconfilemanager;
+ private string _tenant = string.Empty;
+ private string _database = string.Empty;
+ private string _connectionstring = string.Empty;
+ private string _createdby;
+ private DateTime _createdon;
+ private string _modifiedby;
+ private DateTime _modifiedon;
+ private string _deletedby;
+ private DateTime? _deletedon;
+ private string _isdeleted;
- public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin;
+ public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin;
- protected override async Task OnInitializedAsync()
- {
- try
- {
- _themeList = await ThemeService.GetThemesAsync();
- Site site = await SiteService.GetSiteAsync(PageState.Site.SiteId);
- if (site != null)
- {
- _name = site.Name;
- _runtime = site.Runtime;
- _prerender = site.RenderMode.Replace(_runtime, "");
- _isdeleted = site.IsDeleted.ToString();
- _sitemap = PageState.Alias.Protocol + PageState.Alias.Name + "/pages/sitemap.xml";
+ protected override async Task OnInitializedAsync()
+ {
+ try
+ {
+ _themeList = await ThemeService.GetThemesAsync();
+ Site site = await SiteService.GetSiteAsync(PageState.Site.SiteId);
+ if (site != null)
+ {
+ _name = site.Name;
+ _runtime = site.Runtime;
+ _prerender = site.RenderMode.Replace(_runtime, "");
+ _isdeleted = site.IsDeleted.ToString();
+ _sitemap = PageState.Alias.Protocol + PageState.Alias.Name + "/pages/sitemap.xml";
- await GetAliases();
+ await GetAliases();
- if (site.LogoFileId != null)
- {
- _logofileid = site.LogoFileId.Value;
- }
+ if (site.LogoFileId != null)
+ {
+ _logofileid = site.LogoFileId.Value;
+ }
- if (site.FaviconFileId != null)
- {
- _faviconfileid = site.FaviconFileId.Value;
- }
+ if (site.FaviconFileId != null)
+ {
+ _faviconfileid = site.FaviconFileId.Value;
+ }
- _themes = ThemeService.GetThemeControls(_themeList);
- _themetype = (!string.IsNullOrEmpty(site.DefaultThemeType)) ? site.DefaultThemeType : Constants.DefaultTheme;
- _containers = ThemeService.GetContainerControls(_themeList, _themetype);
- _containertype = (!string.IsNullOrEmpty(site.DefaultContainerType)) ? site.DefaultContainerType : Constants.DefaultContainer;
- _admincontainertype = (!string.IsNullOrEmpty(site.AdminContainerType)) ? site.AdminContainerType : Constants.DefaultAdminContainer;
+ _themes = ThemeService.GetThemeControls(_themeList);
+ _themetype = (!string.IsNullOrEmpty(site.DefaultThemeType)) ? site.DefaultThemeType : Constants.DefaultTheme;
+ _containers = ThemeService.GetContainerControls(_themeList, _themetype);
+ _containertype = (!string.IsNullOrEmpty(site.DefaultContainerType)) ? site.DefaultContainerType : Constants.DefaultContainer;
+ _admincontainertype = (!string.IsNullOrEmpty(site.AdminContainerType)) ? site.AdminContainerType : Constants.DefaultAdminContainer;
+ _headcontent = site.HeadContent;
- if (site.HomePageId != null)
- {
- _homepageid = site.HomePageId.Value.ToString();
- }
+ if (site.HomePageId != null)
+ {
+ _homepageid = site.HomePageId.Value.ToString();
+ }
- _pwaisenabled = site.PwaIsEnabled.ToString();
- if (site.PwaAppIconFileId != null)
- {
- _pwaappiconfileid = site.PwaAppIconFileId.Value;
- }
- if (site.PwaSplashIconFileId != null)
- {
- _pwasplashiconfileid = site.PwaSplashIconFileId.Value;
- }
+ _pwaisenabled = site.PwaIsEnabled.ToString();
+ if (site.PwaAppIconFileId != null)
+ {
+ _pwaappiconfileid = site.PwaAppIconFileId.Value;
+ }
+ if (site.PwaSplashIconFileId != null)
+ {
+ _pwasplashiconfileid = site.PwaSplashIconFileId.Value;
+ }
- var settings = await SettingService.GetSiteSettingsAsync(site.SiteId);
- _smtphost = SettingService.GetSetting(settings, "SMTPHost", string.Empty);
- _smtpport = SettingService.GetSetting(settings, "SMTPPort", string.Empty);
- _smtpssl = SettingService.GetSetting(settings, "SMTPSSL", "False");
- _smtpusername = SettingService.GetSetting(settings, "SMTPUsername", string.Empty);
- _smtppassword = SettingService.GetSetting(settings, "SMTPPassword", string.Empty);
- _togglesmtppassword = SharedLocalizer["ShowPassword"];
- _smtpsender = SettingService.GetSetting(settings, "SMTPSender", string.Empty);
- _smtprelay = SettingService.GetSetting(settings, "SMTPRelay", "False");
- _retention = SettingService.GetSetting(settings, "NotificationRetention", "30");
+ var settings = await SettingService.GetSiteSettingsAsync(site.SiteId);
+ _smtphost = SettingService.GetSetting(settings, "SMTPHost", string.Empty);
+ _smtpport = SettingService.GetSetting(settings, "SMTPPort", string.Empty);
+ _smtpssl = SettingService.GetSetting(settings, "SMTPSSL", "False");
+ _smtpusername = SettingService.GetSetting(settings, "SMTPUsername", string.Empty);
+ _smtppassword = SettingService.GetSetting(settings, "SMTPPassword", string.Empty);
+ _togglesmtppassword = SharedLocalizer["ShowPassword"];
+ _smtpsender = SettingService.GetSetting(settings, "SMTPSender", string.Empty);
+ _smtprelay = SettingService.GetSetting(settings, "SMTPRelay", "False");
+ _retention = SettingService.GetSetting(settings, "NotificationRetention", "30");
- if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
- {
- var tenants = await TenantService.GetTenantsAsync();
- var _databases = await DatabaseService.GetDatabasesAsync();
- var tenant = tenants.Find(item => item.TenantId == site.TenantId);
- if (tenant != null)
- {
- _tenant = tenant.Name;
- _database = _databases.Find(item => item.DBType == tenant.DBType)?.Name;
- _connectionstring = tenant.DBConnectionString;
- }
- }
+ if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
+ {
+ var tenants = await TenantService.GetTenantsAsync();
+ var _databases = await DatabaseService.GetDatabasesAsync();
+ var tenant = tenants.Find(item => item.TenantId == site.TenantId);
+ if (tenant != null)
+ {
+ _tenant = tenant.Name;
+ _database = _databases.Find(item => item.DBType == tenant.DBType)?.Name;
+ _connectionstring = tenant.DBConnectionString;
+ }
+ }
- _createdby = site.CreatedBy;
- _createdon = site.CreatedOn;
- _modifiedby = site.ModifiedBy;
- _modifiedon = site.ModifiedOn;
- _deletedby = site.DeletedBy;
- _deletedon = site.DeletedOn;
+ _createdby = site.CreatedBy;
+ _createdon = site.CreatedOn;
+ _modifiedby = site.ModifiedBy;
+ _modifiedon = site.ModifiedOn;
+ _deletedby = site.DeletedBy;
+ _deletedon = site.DeletedOn;
- _initialized = true;
- }
- }
- catch (Exception ex)
- {
- await logger.LogError(ex, "Error Loading Site {SiteId} {Error}", PageState.Site.SiteId, ex.Message);
- AddModuleMessage(ex.Message, MessageType.Error);
- }
- }
+ _initialized = true;
+ }
+ }
+ catch (Exception ex)
+ {
+ await logger.LogError(ex, "Error Loading Site {SiteId} {Error}", PageState.Site.SiteId, ex.Message);
+ AddModuleMessage(ex.Message, MessageType.Error);
+ }
+ }
- private async void ThemeChanged(ChangeEventArgs e)
- {
- try
- {
- _themetype = (string)e.Value;
- if (_themetype != "-")
- {
- _containers = ThemeService.GetContainerControls(_themeList, _themetype);
- }
- else
- {
- _containers = new List();
- }
- _containertype = "-";
- _admincontainertype = Constants.DefaultAdminContainer;
- StateHasChanged();
- }
- catch (Exception ex)
- {
- await logger.LogError(ex, "Error Loading Containers For Theme {ThemeType} {Error}", _themetype, ex.Message);
- AddModuleMessage(Localizer["Error.Theme.LoadPane"], MessageType.Error);
- }
- }
+ private async void ThemeChanged(ChangeEventArgs e)
+ {
+ try
+ {
+ _themetype = (string)e.Value;
+ if (_themetype != "-")
+ {
+ _containers = ThemeService.GetContainerControls(_themeList, _themetype);
+ }
+ else
+ {
+ _containers = new List();
+ }
+ _containertype = "-";
+ _admincontainertype = Constants.DefaultAdminContainer;
+ StateHasChanged();
+ }
+ catch (Exception ex)
+ {
+ await logger.LogError(ex, "Error Loading Containers For Theme {ThemeType} {Error}", _themetype, ex.Message);
+ AddModuleMessage(Localizer["Error.Theme.LoadPane"], MessageType.Error);
+ }
+ }
- private async Task SaveSite()
- {
- validated = true;
- var interop = new Interop(JSRuntime);
- if (await interop.FormValid(form))
- {
- try
- {
- if (_name != string.Empty && _themetype != "-" && _containertype != "-")
- {
- var site = await SiteService.GetSiteAsync(PageState.Site.SiteId);
- if (site != null)
- {
- bool refresh = false;
- bool reload = false;
+ private async Task SaveSite()
+ {
+ validated = true;
+ var interop = new Interop(JSRuntime);
+ if (await interop.FormValid(form))
+ {
+ try
+ {
+ if (_name != string.Empty && _themetype != "-" && _containertype != "-")
+ {
+ var site = await SiteService.GetSiteAsync(PageState.Site.SiteId);
+ if (site != null)
+ {
+ bool refresh = false;
+ bool reload = false;
- site.Name = _name;
- if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
- {
- if (site.Runtime != _runtime || site.RenderMode != _runtime + _prerender)
- {
- site.Runtime = _runtime;
- site.RenderMode = _runtime + _prerender;
- reload = true; // needs to be reloaded on server
- }
- }
- site.IsDeleted = (_isdeleted == null ? true : Boolean.Parse(_isdeleted));
+ site.Name = _name;
+ if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host))
+ {
+ if (site.Runtime != _runtime || site.RenderMode != _runtime + _prerender)
+ {
+ site.Runtime = _runtime;
+ site.RenderMode = _runtime + _prerender;
+ reload = true; // needs to be reloaded on server
+ }
+ }
+ site.IsDeleted = (_isdeleted == null ? true : Boolean.Parse(_isdeleted));
- site.LogoFileId = null;
- var logofileid = _logofilemanager.GetFileId();
- if (logofileid != -1)
- {
- site.LogoFileId = logofileid;
- }
- int? faviconFieldId = _faviconfilemanager.GetFileId();
- if (faviconFieldId == -1) faviconFieldId = null;
- if (site.FaviconFileId != faviconFieldId)
- {
- site.FaviconFileId = faviconFieldId;
- reload = true; // needs to be reloaded on server
- }
- if (site.DefaultThemeType != _themetype)
- {
- site.DefaultThemeType = _themetype;
- refresh = true; // needs to be refreshed on client
- }
- if (site.DefaultContainerType != _containertype)
- {
- site.DefaultContainerType = _containertype;
- refresh = true; // needs to be refreshed on client
- }
- site.AdminContainerType = _admincontainertype;
- site.HomePageId = (_homepageid != "-" ? int.Parse(_homepageid) : null);
+ site.LogoFileId = null;
+ var logofileid = _logofilemanager.GetFileId();
+ if (logofileid != -1)
+ {
+ site.LogoFileId = logofileid;
+ }
+ int? faviconFieldId = _faviconfilemanager.GetFileId();
+ if (faviconFieldId == -1) faviconFieldId = null;
+ if (site.FaviconFileId != faviconFieldId)
+ {
+ site.FaviconFileId = faviconFieldId;
+ reload = true; // needs to be reloaded on server
+ }
+ if (site.DefaultThemeType != _themetype)
+ {
+ site.DefaultThemeType = _themetype;
+ refresh = true; // needs to be refreshed on client
+ }
+ if (site.DefaultContainerType != _containertype)
+ {
+ site.DefaultContainerType = _containertype;
+ refresh = true; // needs to be refreshed on client
+ }
+ site.AdminContainerType = _admincontainertype;
+ site.HeadContent = _headcontent;
+ site.HomePageId = (_homepageid != "-" ? int.Parse(_homepageid) : null);
if (site.PwaIsEnabled.ToString() != _pwaisenabled)
{
diff --git a/Oqtane.Client/Resources/Modules/Admin/Pages/Add.resx b/Oqtane.Client/Resources/Modules/Admin/Pages/Add.resx
index 3b2128c2..85b92768 100644
--- a/Oqtane.Client/Resources/Modules/Admin/Pages/Add.resx
+++ b/Oqtane.Client/Resources/Modules/Admin/Pages/Add.resx
@@ -228,11 +228,11 @@
Appearance
-
- Optionally enter meta tags (in exactly the form you want them to be included in the page output).
+
+ Optionally enter content to be included in the page head (ie. meta and link tags are valid, script tags are not).
-
- Meta:
+
+ Head Content:
The page name {0} is reserved. Please enter a different name for your page.
diff --git a/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx b/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx
index 32ffa56e..184b4af4 100644
--- a/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx
+++ b/Oqtane.Client/Resources/Modules/Admin/Pages/Edit.resx
@@ -264,11 +264,11 @@
Clickable?
-
- Optionally enter meta tags (in exactly the form you want them to be included in the page output).
+
+ Optionally enter content to be included in the page head (ie. meta and link tags are valid, script tags are not).
-
- Meta:
+
+ Head Content:
The page name {0} is reserved. Please enter a different name for your page.
diff --git a/Oqtane.Client/Resources/Modules/Admin/Site/Index.resx b/Oqtane.Client/Resources/Modules/Admin/Site/Index.resx
index 16b840c1..5b5df55c 100644
--- a/Oqtane.Client/Resources/Modules/Admin/Site/Index.resx
+++ b/Oqtane.Client/Resources/Modules/Admin/Site/Index.resx
@@ -351,4 +351,13 @@
Site Map:
+
+ Appearance
+
+
+ Optionally enter content to be included in the page head (ie. meta and link tags are valid, script tags are not).
+
+
+ Head Content:
+
\ No newline at end of file
diff --git a/Oqtane.Client/UI/ThemeBuilder.razor b/Oqtane.Client/UI/ThemeBuilder.razor
index ec2a05bf..69625df5 100644
--- a/Oqtane.Client/UI/ThemeBuilder.razor
+++ b/Oqtane.Client/UI/ThemeBuilder.razor
@@ -38,15 +38,14 @@
favicon = Utilities.FileUrl(PageState.Alias, PageState.Site.FaviconFileId.Value);
}
headcontent += $"\n";
- // PWA manifest
- if (PageState.Site.PwaIsEnabled && PageState.Site.PwaAppIconFileId != null && PageState.Site.PwaSplashIconFileId != null)
+ // head content
+ if (!string.IsNullOrEmpty(PageState.Site.HeadContent))
{
- headcontent += "\n";
+ headcontent += PageState.Site.HeadContent + "\n";
}
- // meta
- if (!string.IsNullOrEmpty(PageState.Page.Meta))
+ if (!string.IsNullOrEmpty(PageState.Page.HeadContent))
{
- headcontent += PageState.Page.Meta + "\n";
+ headcontent += PageState.Page.HeadContent + "\n";
}
// stylesheets
foreach (Resource resource in PageState.Page.Resources.Where(item => item.ResourceType == ResourceType.Stylesheet))
@@ -54,6 +53,11 @@
var url = (resource.Url.Contains("://")) ? resource.Url : PageState.Alias.BaseUrl + resource.Url;
headcontent += CreateLink(url, resource.Integrity, resource.CrossOrigin) + "\n";
}
+ // PWA manifest
+ if (PageState.Site.PwaIsEnabled && PageState.Site.PwaAppIconFileId != null && PageState.Site.PwaSplashIconFileId != null)
+ {
+ headcontent += "\n";
+ }
SiteState.Properties.HeadContent = headcontent;
// set page body content
diff --git a/Oqtane.Server/Migrations/Tenant/04000001_AddHeadContent.cs b/Oqtane.Server/Migrations/Tenant/04000001_AddHeadContent.cs
new file mode 100644
index 00000000..fcb4bd1a
--- /dev/null
+++ b/Oqtane.Server/Migrations/Tenant/04000001_AddHeadContent.cs
@@ -0,0 +1,35 @@
+using Microsoft.AspNetCore.Components.Web;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Oqtane.Databases.Interfaces;
+using Oqtane.Migrations.EntityBuilders;
+using Oqtane.Repository;
+
+namespace Oqtane.Migrations.Tenant
+{
+ [DbContext(typeof(TenantDBContext))]
+ [Migration("Tenant.04.00.00.01")]
+ public class AddHeaderContent : MultiDatabaseMigration
+ {
+ public AddHeaderContent(IDatabase database) : base(database)
+ {
+ }
+
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ var siteEntityBuilder = new SiteEntityBuilder(migrationBuilder, ActiveDatabase);
+ siteEntityBuilder.AddStringColumn("HeadContent", 4000, true);
+
+ var pageEntityBuilder = new PageEntityBuilder(migrationBuilder, ActiveDatabase);
+ pageEntityBuilder.AddStringColumn("HeadContent", 4000, true);
+
+ pageEntityBuilder.UpdateColumn("HeadContent", "Meta");
+ pageEntityBuilder.DropColumn("Meta");
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ // not implemented
+ }
+ }
+}
diff --git a/Oqtane.Shared/Models/Page.cs b/Oqtane.Shared/Models/Page.cs
index 9298f46b..fd8191b3 100644
--- a/Oqtane.Shared/Models/Page.cs
+++ b/Oqtane.Shared/Models/Page.cs
@@ -65,9 +65,9 @@ namespace Oqtane.Models
public string DefaultContainerType { get; set; }
///
- /// Meta tags to be included in the head of the page
+ /// Content to be included in the head of the page
///
- public string Meta { get; set; }
+ public string HeadContent { get; set; }
///
/// Icon file for this page.
diff --git a/Oqtane.Shared/Models/Site.cs b/Oqtane.Shared/Models/Site.cs
index 3becda88..383b5668 100644
--- a/Oqtane.Shared/Models/Site.cs
+++ b/Oqtane.Shared/Models/Site.cs
@@ -79,7 +79,7 @@ namespace Oqtane.Models
public string RenderMode { get; set; }
///
- /// Keeps track of site configuration changes and is used by the IUpgradeable interface
+ /// Keeps track of site configuration changes and is used by the ISiteMigration interface
///
public string Version { get; set; }
@@ -88,6 +88,11 @@ namespace Oqtane.Models
///
public int? HomePageId { get; set; }
+ ///
+ /// Content to be included in the head of the page
+ ///
+ public string HeadContent { get; set; }
+
[NotMapped]
public Dictionary Settings { get; set; }