diff --git a/Oqtane.Client/Modules/HtmlText/Edit.razor b/Oqtane.Client/Modules/HtmlText/Edit.razor
index 63c4b2f3..099a9c21 100644
--- a/Oqtane.Client/Modules/HtmlText/Edit.razor
+++ b/Oqtane.Client/Modules/HtmlText/Edit.razor
@@ -57,6 +57,6 @@
htmltext.Content = content;
await htmltextservice.AddHtmlTextAsync(htmltext);
}
- UriHelper.NavigateTo(NavigateUrl(), true);
+ UriHelper.NavigateTo(NavigateUrl(true));
}
}
diff --git a/Oqtane.Client/Shared/SiteRouter.razor b/Oqtane.Client/Shared/SiteRouter.razor
index c61e3002..cde8bd28 100644
--- a/Oqtane.Client/Shared/SiteRouter.razor
+++ b/Oqtane.Client/Shared/SiteRouter.razor
@@ -109,14 +109,46 @@
}
if (site != null || reload == true)
{
+ // get Url path and querystring
string path = new Uri(_absoluteUri).PathAndQuery.Substring(1);
- if (path.EndsWith("/")) { path = path.Substring(0, path.Length - 1); }
+
+ // parse querystring and remove
+ Dictionary querystring = new Dictionary();
+ if (path.IndexOf("?") != -1)
+ {
+ querystring = ParseQueryString(path);
+ path = path.Substring(0, path.IndexOf("?"));
+ }
+
+ // format path and remove alias
+ path = path.Replace("//", "/");
+ if (!path.EndsWith("/")) { path += "/"; }
if (alias.Path != "")
{
- path = path.Replace(alias.Path, "");
- if (path.StartsWith("/")) { path = path.Substring(1); }
+ path = path.Replace(alias.Path + "/", "");
}
- Dictionary querystring = ParseQueryString(path);
+
+ // extract admin route elements from path
+ string[] segments = path.Split('/');
+ int result;
+ if (segments.Length >= 3 && int.TryParse(segments[segments.Length - 3], out result))
+ {
+ // path has moduleid and control specification ie. page/moduleid/control/
+ control = segments[segments.Length - 2];
+ moduleid = result;
+ path = path.Replace(moduleid.ToString() + "/" + control + "/", "");
+ }
+ else
+ {
+ if (segments.Length >= 2 && int.TryParse(segments[segments.Length - 2], out result))
+ {
+ // path has only moduleid specification ie. page/moduleid/
+ moduleid = result;
+ path = path.Replace(moduleid.ToString() + "/", "");
+ }
+ }
+ // remove trailing slash so it can be used as a key for Pages
+ if (path.EndsWith("/")) path = path.Substring(0, path.Length - 1);
if (querystring.ContainsKey("reload"))
{
@@ -146,31 +178,6 @@
pages = PageState.Pages;
}
- // format path so that it can be located in the pages collection
- if (path.IndexOf("?") != -1)
- {
- // remove querystring from path
- path = path.Substring(0, path.IndexOf("?"));
- }
- // remove admin route elements from path
- string[] segments = path.Split('/');
- int result;
- // admin routes are in the form of path/moduleid/control or path/moduleid
- if (segments.Length >= 2 && int.TryParse(segments[segments.Length - 2], out result))
- {
- control = segments[segments.Length - 1];
- moduleid = result;
- path = path.Replace("/" + moduleid.ToString() + "/" + control, "");
- }
- else
- {
- if (segments.Length >= 1 && int.TryParse(segments[segments.Length - 1], out result))
- {
- moduleid = result;
- path = path.Replace("/" + moduleid.ToString(), "");
- }
- }
-
if (PageState == null || reload == true)
{
page = pages.Where(item => item.Path == path).FirstOrDefault();
diff --git a/Oqtane.Server/Modules/HtmlText/Repository/HtmlTextContext.cs b/Oqtane.Server/Modules/HtmlText/Repository/HtmlTextContext.cs
index 3ec81ddd..6c32a49f 100644
--- a/Oqtane.Server/Modules/HtmlText/Repository/HtmlTextContext.cs
+++ b/Oqtane.Server/Modules/HtmlText/Repository/HtmlTextContext.cs
@@ -2,14 +2,15 @@
using Oqtane.Shared.Modules.HtmlText.Models;
using Oqtane.Repository;
using Oqtane.Modules;
+using Microsoft.AspNetCore.Http;
namespace Oqtane.Server.Modules.HtmlText.Repository
{
- public class HtmlTextContext : ContextBase, IService
+ public class HtmlTextContext : DBContextBase, IService
{
public virtual DbSet HtmlText { get; set; }
- public HtmlTextContext(ITenantResolver TenantResolver):base(TenantResolver)
+ public HtmlTextContext(ITenantResolver TenantResolver, IHttpContextAccessor accessor) : base(TenantResolver, accessor)
{
// ContextBase handles multi-tenant database connections
}
diff --git a/Oqtane.Server/Repository/AliasRepository.cs b/Oqtane.Server/Repository/AliasRepository.cs
index ca9f3059..8d512a59 100644
--- a/Oqtane.Server/Repository/AliasRepository.cs
+++ b/Oqtane.Server/Repository/AliasRepository.cs
@@ -9,10 +9,10 @@ namespace Oqtane.Repository
{
public class AliasRepository : IAliasRepository
{
- private MasterContext db;
+ private MasterDBContext db;
private readonly IMemoryCache _cache;
- public AliasRepository(MasterContext context, IMemoryCache cache)
+ public AliasRepository(MasterDBContext context, IMemoryCache cache)
{
db = context;
_cache = cache;
diff --git a/Oqtane.Server/Repository/ContextBase.cs b/Oqtane.Server/Repository/ContextBase.cs
deleted file mode 100644
index bc1f475f..00000000
--- a/Oqtane.Server/Repository/ContextBase.cs
+++ /dev/null
@@ -1,33 +0,0 @@
-using Microsoft.EntityFrameworkCore;
-using Oqtane.Models;
-using System;
-
-namespace Oqtane.Repository
-{
- public class ContextBase : DbContext
- {
- private Tenant tenant;
-
- public ContextBase(ITenantResolver TenantResolver)
- {
- tenant = TenantResolver.GetTenant();
- }
-
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- optionsBuilder.UseSqlServer(tenant.DBConnectionString
- .Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString())
- );
- base.OnConfiguring(optionsBuilder);
- }
-
- protected override void OnModelCreating(ModelBuilder modelBuilder)
- {
- if (tenant.DBSchema != "")
- {
- modelBuilder.HasDefaultSchema(tenant.DBSchema);
- }
- base.OnModelCreating(modelBuilder);
- }
- }
-}
diff --git a/Oqtane.Server/Repository/DBContextBase.cs b/Oqtane.Server/Repository/DBContextBase.cs
new file mode 100644
index 00000000..bb2c6d8a
--- /dev/null
+++ b/Oqtane.Server/Repository/DBContextBase.cs
@@ -0,0 +1,74 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Identity;
+using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore;
+using Oqtane.Models;
+using System;
+using System.Linq;
+
+namespace Oqtane.Repository
+{
+ public class DBContextBase : IdentityDbContext
+ {
+ private Tenant tenant;
+ private IHttpContextAccessor accessor;
+
+ public DBContextBase(ITenantResolver TenantResolver, IHttpContextAccessor accessor)
+ {
+ tenant = TenantResolver.GetTenant();
+ this.accessor = accessor;
+ }
+
+ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+ {
+ optionsBuilder.UseSqlServer(tenant.DBConnectionString
+ .Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString())
+ );
+ base.OnConfiguring(optionsBuilder);
+ }
+
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ base.OnModelCreating(modelBuilder);
+
+ if (tenant.DBSchema != "")
+ {
+ modelBuilder.HasDefaultSchema(tenant.DBSchema);
+ }
+ }
+
+ public override int SaveChanges()
+ {
+ ChangeTracker.DetectChanges();
+
+ string username = accessor.HttpContext.User.Identity.Name;
+ DateTime date = DateTime.Now;
+
+ var created = ChangeTracker.Entries()
+ .Where(x => x.State == EntityState.Added);
+
+ foreach(var item in created)
+ {
+ if (item.Entity is IAuditable entity)
+ {
+ item.CurrentValues[nameof(IAuditable.CreatedBy)] = username;
+ item.CurrentValues[nameof(IAuditable.CreatedOn)] = date;
+ }
+ }
+
+ var modified = ChangeTracker.Entries()
+ .Where(x => x.State == EntityState.Modified || x.State == EntityState.Added);
+
+ foreach (var item in modified)
+ {
+ if (item.Entity is IAuditable entity)
+ {
+ item.CurrentValues[nameof(IAuditable.ModifiedBy)] = username;
+ item.CurrentValues[nameof(IAuditable.ModifiedOn)] = date;
+ }
+ }
+
+ return base.SaveChanges();
+ }
+ }
+}
diff --git a/Oqtane.Server/Repository/MasterContext.cs b/Oqtane.Server/Repository/MasterDBContext.cs
similarity index 61%
rename from Oqtane.Server/Repository/MasterContext.cs
rename to Oqtane.Server/Repository/MasterDBContext.cs
index 21dca1dd..5e749fa8 100644
--- a/Oqtane.Server/Repository/MasterContext.cs
+++ b/Oqtane.Server/Repository/MasterDBContext.cs
@@ -3,9 +3,9 @@ using Oqtane.Models;
namespace Oqtane.Repository
{
- public class MasterContext : DbContext
+ public class MasterDBContext : DbContext
{
- public MasterContext(DbContextOptions options) : base(options) { }
+ public MasterDBContext(DbContextOptions options) : base(options) { }
public virtual DbSet Alias { get; set; }
public virtual DbSet Tenant { get; set; }
diff --git a/Oqtane.Server/Repository/ModuleRepository.cs b/Oqtane.Server/Repository/ModuleRepository.cs
index fbec388e..aef77fbb 100644
--- a/Oqtane.Server/Repository/ModuleRepository.cs
+++ b/Oqtane.Server/Repository/ModuleRepository.cs
@@ -7,9 +7,9 @@ namespace Oqtane.Repository
{
public class ModuleRepository : IModuleRepository
{
- private TenantContext db;
+ private TenantDBContext db;
- public ModuleRepository(TenantContext context)
+ public ModuleRepository(TenantDBContext context)
{
db = context;
}
diff --git a/Oqtane.Server/Repository/PageModuleRepository.cs b/Oqtane.Server/Repository/PageModuleRepository.cs
index 791dea65..130d56e9 100644
--- a/Oqtane.Server/Repository/PageModuleRepository.cs
+++ b/Oqtane.Server/Repository/PageModuleRepository.cs
@@ -7,9 +7,9 @@ namespace Oqtane.Repository
{
public class PageModuleRepository : IPageModuleRepository
{
- private TenantContext db;
+ private TenantDBContext db;
- public PageModuleRepository(TenantContext context)
+ public PageModuleRepository(TenantDBContext context)
{
db = context;
}
diff --git a/Oqtane.Server/Repository/PageRepository.cs b/Oqtane.Server/Repository/PageRepository.cs
index 8045e038..45a09d7c 100644
--- a/Oqtane.Server/Repository/PageRepository.cs
+++ b/Oqtane.Server/Repository/PageRepository.cs
@@ -7,9 +7,9 @@ namespace Oqtane.Repository
{
public class PageRepository : IPageRepository
{
- private TenantContext db;
+ private TenantDBContext db;
- public PageRepository(TenantContext context)
+ public PageRepository(TenantDBContext context)
{
db = context;
}
diff --git a/Oqtane.Server/Repository/SiteRepository.cs b/Oqtane.Server/Repository/SiteRepository.cs
index 7310266f..b382a214 100644
--- a/Oqtane.Server/Repository/SiteRepository.cs
+++ b/Oqtane.Server/Repository/SiteRepository.cs
@@ -7,9 +7,9 @@ namespace Oqtane.Repository
{
public class SiteRepository : ISiteRepository
{
- private TenantContext db;
+ private TenantDBContext db;
- public SiteRepository(TenantContext context)
+ public SiteRepository(TenantDBContext context)
{
db = context;
}
diff --git a/Oqtane.Server/Repository/TenantContext.cs b/Oqtane.Server/Repository/TenantContext.cs
deleted file mode 100644
index b74ce34d..00000000
--- a/Oqtane.Server/Repository/TenantContext.cs
+++ /dev/null
@@ -1,41 +0,0 @@
-using Microsoft.AspNetCore.Identity;
-using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore;
-using Oqtane.Models;
-using System;
-
-namespace Oqtane.Repository
-{
- public class TenantContext : IdentityDbContext
- {
- public virtual DbSet Site { get; set; }
- public virtual DbSet Page { get; set; }
- public virtual DbSet PageModule { get; set; }
- public virtual DbSet Module { get; set; }
- public virtual DbSet User { get; set; }
-
- private readonly Tenant tenant;
-
- public TenantContext(ITenantResolver TenantResolver)
- {
- tenant = TenantResolver.GetTenant();
- }
-
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- optionsBuilder.UseSqlServer(tenant.DBConnectionString
- .Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString())
- );
- base.OnConfiguring(optionsBuilder);
- }
-
- protected override void OnModelCreating(ModelBuilder modelBuilder)
- {
- if (tenant.DBSchema != "")
- {
- modelBuilder.HasDefaultSchema(tenant.DBSchema);
- }
- base.OnModelCreating(modelBuilder);
- }
- }
-}
diff --git a/Oqtane.Server/Repository/TenantDBContext.cs b/Oqtane.Server/Repository/TenantDBContext.cs
new file mode 100644
index 00000000..190fe9e0
--- /dev/null
+++ b/Oqtane.Server/Repository/TenantDBContext.cs
@@ -0,0 +1,21 @@
+using Microsoft.AspNetCore.Http;
+using Microsoft.EntityFrameworkCore;
+using Oqtane.Models;
+
+namespace Oqtane.Repository
+{
+ public class TenantDBContext : DBContextBase
+ {
+ public virtual DbSet Site { get; set; }
+ public virtual DbSet Page { get; set; }
+ public virtual DbSet PageModule { get; set; }
+ public virtual DbSet Module { get; set; }
+ public virtual DbSet User { get; set; }
+
+ public TenantDBContext(ITenantResolver TenantResolver, IHttpContextAccessor accessor) : base(TenantResolver, accessor)
+ {
+ // ContextBase handles multi-tenant database connections
+ }
+
+ }
+}
diff --git a/Oqtane.Server/Repository/TenantRepository.cs b/Oqtane.Server/Repository/TenantRepository.cs
index da7c6be9..42d2c00a 100644
--- a/Oqtane.Server/Repository/TenantRepository.cs
+++ b/Oqtane.Server/Repository/TenantRepository.cs
@@ -10,10 +10,10 @@ namespace Oqtane.Repository
{
public class TenantRepository : ITenantRepository
{
- private MasterContext db;
+ private MasterDBContext db;
private readonly IMemoryCache _cache;
- public TenantRepository(MasterContext context, IMemoryCache cache)
+ public TenantRepository(MasterDBContext context, IMemoryCache cache)
{
db = context;
_cache = cache;
diff --git a/Oqtane.Server/Repository/TenantResolver.cs b/Oqtane.Server/Repository/TenantResolver.cs
index bd78f450..08c553c2 100644
--- a/Oqtane.Server/Repository/TenantResolver.cs
+++ b/Oqtane.Server/Repository/TenantResolver.cs
@@ -7,12 +7,12 @@ namespace Oqtane.Repository
{
public class TenantResolver : ITenantResolver
{
- private MasterContext db;
+ private MasterDBContext db;
private readonly string aliasname;
private readonly IAliasRepository _aliasrepository;
private readonly ITenantRepository _tenantrepository;
- public TenantResolver(MasterContext context, IHttpContextAccessor accessor, IAliasRepository aliasrepository, ITenantRepository tenantrepository)
+ public TenantResolver(MasterDBContext context, IHttpContextAccessor accessor, IAliasRepository aliasrepository, ITenantRepository tenantrepository)
{
db = context;
_aliasrepository = aliasrepository;
diff --git a/Oqtane.Server/Repository/UserRepository.cs b/Oqtane.Server/Repository/UserRepository.cs
index a750a405..b296110e 100644
--- a/Oqtane.Server/Repository/UserRepository.cs
+++ b/Oqtane.Server/Repository/UserRepository.cs
@@ -7,9 +7,9 @@ namespace Oqtane.Repository
{
public class UserRepository : IUserRepository
{
- private TenantContext db;
+ private TenantDBContext db;
- public UserRepository(TenantContext context)
+ public UserRepository(TenantDBContext context)
{
db = context;
}
diff --git a/Oqtane.Server/Scripts/Tenant.sql b/Oqtane.Server/Scripts/Tenant.sql
index 5719f48f..38c866de 100644
--- a/Oqtane.Server/Scripts/Tenant.sql
+++ b/Oqtane.Server/Scripts/Tenant.sql
@@ -8,6 +8,10 @@ CREATE TABLE [dbo].[Site](
[SiteId] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](200) NOT NULL,
[Logo] [nvarchar](50) NOT NULL,
+ [CreatedBy] [nvarchar](256) NOT NULL,
+ [CreatedOn] [datetime] NOT NULL,
+ [ModifiedBy] [nvarchar](256) NOT NULL,
+ [ModifiedOn] [datetime] NOT NULL,
CONSTRAINT [PK_Site] PRIMARY KEY CLUSTERED
(
[SiteId] ASC
@@ -68,6 +72,10 @@ CREATE TABLE [dbo].[HtmlText](
[HtmlTextId] [int] IDENTITY(1,1) NOT NULL,
[ModuleId] [int] NOT NULL,
[Content] [nvarchar](max) NOT NULL,
+ [CreatedBy] [nvarchar](256) NOT NULL,
+ [CreatedOn] [datetime] NOT NULL,
+ [ModifiedBy] [nvarchar](256) NOT NULL,
+ [ModifiedOn] [datetime] NOT NULL,
CONSTRAINT [PK_HtmlText] PRIMARY KEY CLUSTERED
(
[HtmlTextId] ASC
@@ -77,7 +85,7 @@ GO
CREATE TABLE [dbo].[User](
[UserId] [int] IDENTITY(1,1) NOT NULL,
- [Username] [nvarchar](50) NOT NULL,
+ [Username] [nvarchar](256) NOT NULL,
[DisplayName] [nvarchar](50) NOT NULL,
[Roles] [nvarchar](50) NOT NULL,
[IsSuperUser] [bit] NOT NULL,
@@ -125,11 +133,11 @@ Create seed data
SET IDENTITY_INSERT [dbo].[Site] ON
GO
-INSERT [dbo].[Site] ([SiteId], [Name], [Logo])
-VALUES (1, N'Site1', N'oqtane.png')
+INSERT [dbo].[Site] ([SiteId], [Name], [Logo], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
+VALUES (1, N'Site1', N'oqtane.png', '', getdate(), '', getdate())
GO
-INSERT [dbo].[Site] ([SiteId], [Name], [Logo])
-VALUES (2, N'Site2', N'oqtane.png')
+INSERT [dbo].[Site] ([SiteId], [Name], [Logo], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
+VALUES (2, N'Site2', N'oqtane.png', '', getdate(), '', getdate())
GO
SET IDENTITY_INSERT [dbo].[Site] OFF
GO
@@ -292,23 +300,23 @@ GO
SET IDENTITY_INSERT [dbo].[HtmlText] ON
GO
-INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content])
-VALUES (1, 3, N'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Go To Site2')
+INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
+VALUES (1, 3, N'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Go To Site2', '', getdate(), '', getdate())
GO
-INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content])
-VALUES (2, 5, N'Enim sed faucibus turpis in eu mi bibendum neque egestas. Quis hendrerit dolor magna eget est lorem. Dui faucibus in ornare quam viverra orci sagittis. Integer eget aliquet nibh praesent tristique magna sit. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Tortor id aliquet lectus proin. Diam volutpat commodo sed egestas egestas fringilla. Posuere sollicitudin aliquam ultrices sagittis orci. Viverra mauris in aliquam sem fringilla ut morbi tincidunt. Eget gravida cum sociis natoque penatibus et. Sagittis orci a scelerisque purus semper. Eget velit aliquet sagittis id consectetur purus. Volutpat blandit aliquam etiam erat. Et tortor consequat id porta nibh venenatis cras. Volutpat odio facilisis mauris sit amet. Varius duis at consectetur lorem.')
+INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
+VALUES (2, 5, N'Enim sed faucibus turpis in eu mi bibendum neque egestas. Quis hendrerit dolor magna eget est lorem. Dui faucibus in ornare quam viverra orci sagittis. Integer eget aliquet nibh praesent tristique magna sit. Nunc aliquet bibendum enim facilisis gravida neque convallis a cras. Tortor id aliquet lectus proin. Diam volutpat commodo sed egestas egestas fringilla. Posuere sollicitudin aliquam ultrices sagittis orci. Viverra mauris in aliquam sem fringilla ut morbi tincidunt. Eget gravida cum sociis natoque penatibus et. Sagittis orci a scelerisque purus semper. Eget velit aliquet sagittis id consectetur purus. Volutpat blandit aliquam etiam erat. Et tortor consequat id porta nibh venenatis cras. Volutpat odio facilisis mauris sit amet. Varius duis at consectetur lorem.', '', getdate(), '', getdate())
GO
-INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content])
-VALUES (3, 6, N'Id consectetur purus ut faucibus pulvinar elementum integer. Bibendum neque egestas congue quisque egestas diam in arcu. Eget nullam non nisi est sit amet facilisis. Sit amet consectetur adipiscing elit pellentesque. Id aliquet risus feugiat in. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Commodo odio aenean sed adipiscing. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Aliquet enim tortor at auctor urna nunc. Nulla pellentesque dignissim enim sit amet. Suscipit adipiscing bibendum est ultricies integer quis auctor. Lacinia quis vel eros donec ac odio tempor. Aliquam vestibulum morbi blandit cursus risus at.')
+INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
+VALUES (3, 6, N'Id consectetur purus ut faucibus pulvinar elementum integer. Bibendum neque egestas congue quisque egestas diam in arcu. Eget nullam non nisi est sit amet facilisis. Sit amet consectetur adipiscing elit pellentesque. Id aliquet risus feugiat in. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Commodo odio aenean sed adipiscing. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Aliquet enim tortor at auctor urna nunc. Nulla pellentesque dignissim enim sit amet. Suscipit adipiscing bibendum est ultricies integer quis auctor. Lacinia quis vel eros donec ac odio tempor. Aliquam vestibulum morbi blandit cursus risus at.', '', getdate(), '', getdate())
GO
-INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content])
-VALUES (4, 7, N'Ornare arcu dui vivamus arcu felis bibendum ut. Tortor vitae purus faucibus ornare. Lectus sit amet est placerat in egestas erat imperdiet sed. Aliquam sem et tortor consequat id. Fermentum iaculis eu non diam phasellus vestibulum. Ultricies integer quis auctor elit sed. Fermentum odio eu feugiat pretium nibh ipsum. Ut consequat semper viverra nam libero. Blandit aliquam etiam erat velit scelerisque in dictum non consectetur. At risus viverra adipiscing at in tellus. Facilisi nullam vehicula ipsum a arcu cursus vitae congue. At varius vel pharetra vel turpis nunc eget lorem dolor. Morbi non arcu risus quis varius. Turpis massa sed elementum tempus egestas.')
+INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
+VALUES (4, 7, N'Ornare arcu dui vivamus arcu felis bibendum ut. Tortor vitae purus faucibus ornare. Lectus sit amet est placerat in egestas erat imperdiet sed. Aliquam sem et tortor consequat id. Fermentum iaculis eu non diam phasellus vestibulum. Ultricies integer quis auctor elit sed. Fermentum odio eu feugiat pretium nibh ipsum. Ut consequat semper viverra nam libero. Blandit aliquam etiam erat velit scelerisque in dictum non consectetur. At risus viverra adipiscing at in tellus. Facilisi nullam vehicula ipsum a arcu cursus vitae congue. At varius vel pharetra vel turpis nunc eget lorem dolor. Morbi non arcu risus quis varius. Turpis massa sed elementum tempus egestas.', '', getdate(), '', getdate())
GO
-INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content])
-VALUES (5, 16, N'Id consectetur purus ut faucibus pulvinar elementum integer. Bibendum neque egestas congue quisque egestas diam in arcu. Eget nullam non nisi est sit amet facilisis. Sit amet consectetur adipiscing elit pellentesque. Id aliquet risus feugiat in. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Commodo odio aenean sed adipiscing. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Aliquet enim tortor at auctor urna nunc. Nulla pellentesque dignissim enim sit amet. Suscipit adipiscing bibendum est ultricies integer quis auctor. Lacinia quis vel eros donec ac odio tempor. Aliquam vestibulum morbi blandit cursus risus at.
Go To Site1')
+INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
+VALUES (5, 16, N'Id consectetur purus ut faucibus pulvinar elementum integer. Bibendum neque egestas congue quisque egestas diam in arcu. Eget nullam non nisi est sit amet facilisis. Sit amet consectetur adipiscing elit pellentesque. Id aliquet risus feugiat in. Enim blandit volutpat maecenas volutpat blandit aliquam etiam erat. Commodo odio aenean sed adipiscing. Pharetra massa massa ultricies mi quis hendrerit dolor magna. Aliquet enim tortor at auctor urna nunc. Nulla pellentesque dignissim enim sit amet. Suscipit adipiscing bibendum est ultricies integer quis auctor. Lacinia quis vel eros donec ac odio tempor. Aliquam vestibulum morbi blandit cursus risus at.
Go To Site1', '', getdate(), '', getdate())
GO
-INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content])
-VALUES (6, 17, N'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.')
+INSERT [dbo].[HtmlText] ([HtmlTextId], [ModuleId], [Content], [CreatedBy], [CreatedOn], [ModifiedBy], [ModifiedOn])
+VALUES (6, 17, N'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', '', getdate(), '', getdate())
GO
SET IDENTITY_INSERT [dbo].[HtmlText] OFF
GO
diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs
index d071f537..10c2a516 100644
--- a/Oqtane.Server/Startup.cs
+++ b/Oqtane.Server/Startup.cs
@@ -101,14 +101,14 @@ namespace Oqtane.Server
services.AddSingleton();
- services.AddDbContext(options =>
+ services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")
.Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString())
));
- services.AddDbContext(options => { });
+ services.AddDbContext(options => { });
services.AddIdentity()
- .AddEntityFrameworkStores()
+ .AddEntityFrameworkStores()
.AddDefaultTokenProviders();
services.Configure(options =>
@@ -235,14 +235,14 @@ namespace Oqtane.Server
{
services.AddSingleton();
- services.AddDbContext(options =>
+ services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")
.Replace("|DataDirectory|", AppDomain.CurrentDomain.GetData("DataDirectory").ToString())
));
- services.AddDbContext(options => { });
+ services.AddDbContext(options => { });
services.AddIdentity()
- .AddEntityFrameworkStores()
+ .AddEntityFrameworkStores()
.AddDefaultTokenProviders();
services.Configure(options =>
diff --git a/Oqtane.Shared/Models/HtmlTextInfo.cs b/Oqtane.Shared/Models/HtmlTextInfo.cs
index 31364b59..c26fa269 100644
--- a/Oqtane.Shared/Models/HtmlTextInfo.cs
+++ b/Oqtane.Shared/Models/HtmlTextInfo.cs
@@ -1,14 +1,21 @@
+using System;
+using Oqtane.Models;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Oqtane.Shared.Modules.HtmlText.Models
{
[Table("HtmlText")]
- public class HtmlTextInfo
+ public class HtmlTextInfo : IAuditable
{
[Key]
public int HtmlTextId { get; set; }
public int ModuleId { get; set; }
public string Content { get; set; }
+
+ public string CreatedBy { get; set; }
+ public DateTime CreatedOn { get; set; }
+ public string ModifiedBy { get; set; }
+ public DateTime ModifiedOn { get; set; }
}
}
diff --git a/Oqtane.Shared/Models/IAuditable.cs b/Oqtane.Shared/Models/IAuditable.cs
new file mode 100644
index 00000000..83cd1c1f
--- /dev/null
+++ b/Oqtane.Shared/Models/IAuditable.cs
@@ -0,0 +1,12 @@
+using System;
+
+namespace Oqtane.Models
+{
+ public interface IAuditable
+ {
+ string CreatedBy { get; set; }
+ DateTime CreatedOn { get; set; }
+ string ModifiedBy { get; set; }
+ DateTime ModifiedOn { get; set; }
+ }
+}
diff --git a/Oqtane.Shared/Models/Site.cs b/Oqtane.Shared/Models/Site.cs
index c3f214f8..14c5c34a 100644
--- a/Oqtane.Shared/Models/Site.cs
+++ b/Oqtane.Shared/Models/Site.cs
@@ -1,9 +1,16 @@
-namespace Oqtane.Models
+using System;
+
+namespace Oqtane.Models
{
- public class Site
+ public class Site : IAuditable
{
public int SiteId { get; set; }
public string Name { get; set; }
public string Logo { get; set; }
+
+ public string CreatedBy { get; set; }
+ public DateTime CreatedOn { get; set; }
+ public string ModifiedBy { get; set; }
+ public DateTime ModifiedOn { get; set; }
}
}