diff --git a/Oqtane.Client/Modules/Admin/Pages/Delete.razor b/Oqtane.Client/Modules/Admin/Pages/Delete.razor
index 5dff05a2..0f1e9cc8 100644
--- a/Oqtane.Client/Modules/Admin/Pages/Delete.razor
+++ b/Oqtane.Client/Modules/Admin/Pages/Delete.razor
@@ -10,7 +10,7 @@
-
+
|
@@ -18,7 +18,7 @@
-
+
|
@@ -26,7 +26,7 @@
- |
-
+
@@ -51,7 +51,7 @@
|
-
+
@@ -62,7 +62,7 @@
|
-
+
@foreach (KeyValuePair item in themes)
{
@@ -76,7 +76,7 @@
|
-
+
@foreach (KeyValuePair panelayout in panelayouts)
{
@@ -90,7 +90,7 @@
|
-
+
|
@@ -98,7 +98,7 @@
-
+
diff --git a/Oqtane.Client/Modules/Admin/Sites/Delete.razor b/Oqtane.Client/Modules/Admin/Sites/Delete.razor
index f57f6e00..b2acba36 100644
--- a/Oqtane.Client/Modules/Admin/Sites/Delete.razor
+++ b/Oqtane.Client/Modules/Admin/Sites/Delete.razor
@@ -16,7 +16,7 @@ else
|
-
+
|
@@ -24,7 +24,7 @@ else
-
+
|
@@ -32,7 +32,7 @@ else
-
+
@foreach (KeyValuePair item in themes)
{
@@ -46,7 +46,7 @@ else
|
-
+
@foreach (KeyValuePair panelayout in panelayouts)
{
@@ -55,9 +55,23 @@ else
|
+
+
+
+ |
+
+
+
+
+
+ |
+
Cancel
+
+
+
}
@code {
@@ -70,6 +84,13 @@ else
string logo = "";
string themetype;
string layouttype;
+ string createdby;
+ DateTime createdon;
+ string modifiedby;
+ DateTime modifiedon;
+ string deletedby;
+ DateTime? deletedon;
+ string isdeleted;
protected override void OnInitialized()
{
@@ -79,6 +100,14 @@ else
logo = PageState.Site.Logo;
themetype = PageState.Site.DefaultThemeType;
layouttype = PageState.Site.DefaultLayoutType;
+
+ createdby = PageState.Site.CreatedBy;
+ createdon = PageState.Site.CreatedOn;
+ modifiedby = PageState.Site.ModifiedBy;
+ modifiedon = PageState.Site.ModifiedOn;
+ deletedby = PageState.Site.DeletedBy;
+ deletedon = PageState.Site.DeletedOn;
+ isdeleted = PageState.Site.IsDeleted.ToString();
}
private async Task DeleteSite()
diff --git a/Oqtane.Client/Modules/Admin/Sites/Edit.razor b/Oqtane.Client/Modules/Admin/Sites/Edit.razor
index 6ad50046..92f4a0f4 100644
--- a/Oqtane.Client/Modules/Admin/Sites/Edit.razor
+++ b/Oqtane.Client/Modules/Admin/Sites/Edit.razor
@@ -55,9 +55,23 @@ else
+
+
+
+ |
+
+
+
+
+
+ |
+
Cancel
+
+
+
}
@code {
@@ -71,6 +85,14 @@ else
string themetype;
string layouttype;
+ string createdby;
+ DateTime createdon;
+ string modifiedby;
+ DateTime modifiedon;
+ string deletedby;
+ DateTime? deletedon;
+ string isdeleted;
+
protected override void OnInitialized()
{
themes = ThemeService.GetThemeTypes(PageState.Themes);
@@ -79,6 +101,14 @@ else
logo = PageState.Site.Logo;
themetype = PageState.Site.DefaultThemeType;
layouttype = PageState.Site.DefaultLayoutType;
+
+ createdby = PageState.Site.CreatedBy;
+ createdon = PageState.Site.CreatedOn;
+ modifiedby = PageState.Site.ModifiedBy;
+ modifiedon = PageState.Site.ModifiedOn;
+ deletedby = PageState.Site.DeletedBy;
+ deletedon = PageState.Site.DeletedOn;
+ isdeleted = PageState.Site.IsDeleted.ToString();
}
private async Task SaveSite()
@@ -88,6 +118,8 @@ else
site.Logo = (logo == null ? "" : logo);
site.DefaultThemeType = themetype;
site.DefaultLayoutType = (layouttype == null ? "" : layouttype);
+ site.IsDeleted = (isdeleted == null ? true : Boolean.Parse(isdeleted));
+
site = await SiteService.UpdateSiteAsync(site);
NavigationManager.NavigateTo(NavigateUrl());
diff --git a/Oqtane.Client/Modules/Admin/Users/Add.razor b/Oqtane.Client/Modules/Admin/Users/Add.razor
index 587eb406..6ce94d0a 100644
--- a/Oqtane.Client/Modules/Admin/Users/Add.razor
+++ b/Oqtane.Client/Modules/Admin/Users/Add.razor
@@ -100,8 +100,10 @@
user.Username = username;
user.Password = password;
user.Email = email;
- user.DisplayName = displayname;
+ user.DisplayName = string.IsNullOrWhiteSpace(user.DisplayName) ? user.Username : user.DisplayName;
+
user = await UserService.AddUserAsync(user);
+
if (user != null)
{
await SettingService.UpdateUserSettingsAsync(settings, user.UserId);
diff --git a/Oqtane.Client/Modules/Admin/Users/Delete.razor b/Oqtane.Client/Modules/Admin/Users/Delete.razor
index 7bdef31d..8e68735a 100644
--- a/Oqtane.Client/Modules/Admin/Users/Delete.razor
+++ b/Oqtane.Client/Modules/Admin/Users/Delete.razor
@@ -5,7 +5,7 @@
@inject IProfileService ProfileService
@inject ISettingService SettingService
-@if (profiles != null)
+@if (!string.IsNullOrWhiteSpace(username))
{
Cancel
+
+
+
}
@code {
@@ -66,16 +58,19 @@
string username = "";
string email = "";
string displayname = "";
- List profiles;
- Dictionary settings;
string category = "";
+ string createdby;
+ DateTime createdon;
+ string modifiedby;
+ DateTime modifiedon;
+ string deletedby;
+ DateTime? deletedon;
+ string isdeleted;
protected override async Task OnInitializedAsync()
{
try
{
- profiles = await ProfileService.GetProfilesAsync(PageState.Site.SiteId);
-
userid = Int32.Parse(PageState.QueryString["id"]);
User user = await UserService.GetUserAsync(userid, PageState.Site.SiteId);
if (user != null)
@@ -83,7 +78,13 @@
username = user.Username;
email = user.Email;
displayname = user.DisplayName;
- settings = await SettingService.GetUserSettingsAsync(user.UserId);
+ createdby = user.CreatedBy;
+ createdon = user.CreatedOn;
+ modifiedby = user.ModifiedBy;
+ modifiedon = user.ModifiedOn;
+ deletedby = user.DeletedBy;
+ deletedon = user.DeletedOn;
+ isdeleted = user.IsDeleted.ToString();
}
}
catch (Exception ex)
@@ -92,11 +93,6 @@
}
}
- private string GetProfileValue(string SettingName, string DefaultValue)
- {
- return SettingService.GetSetting(settings, SettingName, DefaultValue);
- }
-
private async Task DeleteUser()
{
try
diff --git a/Oqtane.Client/Modules/Admin/Users/Edit.razor b/Oqtane.Client/Modules/Admin/Users/Edit.razor
index 9c232a7f..974bc6dd 100644
--- a/Oqtane.Client/Modules/Admin/Users/Edit.razor
+++ b/Oqtane.Client/Modules/Admin/Users/Edit.razor
@@ -62,9 +62,23 @@
}
+
+
+
+ |
+
+
+
+
+
+ |
+
Cancel
+
+
+
}
@code {
@@ -78,6 +92,13 @@
List profiles;
Dictionary settings;
string category = "";
+ string createdby;
+ DateTime createdon;
+ string modifiedby;
+ DateTime modifiedon;
+ string deletedby;
+ DateTime? deletedon;
+ string isdeleted;
protected override async Task OnInitializedAsync()
{
@@ -93,6 +114,13 @@
email = user.Email;
displayname = user.DisplayName;
settings = await SettingService.GetUserSettingsAsync(user.UserId);
+ createdby = user.CreatedBy;
+ createdon = user.CreatedOn;
+ modifiedby = user.ModifiedBy;
+ modifiedon = user.ModifiedOn;
+ deletedby = user.DeletedBy;
+ deletedon = user.DeletedOn;
+ isdeleted = user.IsDeleted.ToString();
}
}
catch (Exception ex)
@@ -115,7 +143,9 @@
user.Username = username;
user.Password = password;
user.Email = email;
- user.DisplayName = displayname;
+ user.DisplayName = string.IsNullOrWhiteSpace(user.DisplayName) ? user.Username : user.DisplayName;
+ user.IsDeleted = (isdeleted == null ? true : Boolean.Parse(isdeleted));
+
user = await UserService.UpdateUserAsync(user);
await SettingService.UpdateUserSettingsAsync(settings, user.UserId);
diff --git a/Oqtane.Server/Controllers/UserController.cs b/Oqtane.Server/Controllers/UserController.cs
index c767e479..a2bbd4bd 100644
--- a/Oqtane.Server/Controllers/UserController.cs
+++ b/Oqtane.Server/Controllers/UserController.cs
@@ -152,9 +152,19 @@ namespace Oqtane.Controllers
// DELETE api//5?siteid=x
[HttpDelete("{id}")]
[Authorize(Roles = Constants.AdminRole)]
- public void Delete(int id)
+ public async Task Delete(int id)
{
- Users.DeleteUser(id);
+ IdentityUser identityuser = await IdentityUserManager.FindByNameAsync(Users.GetUser(id).Username);
+
+ if (identityuser != null)
+ {
+ var result = await IdentityUserManager.DeleteAsync(identityuser);
+
+ if (result != null)
+ {
+ Users.DeleteUser(id);
+ }
+ }
}
// POST api//login
diff --git a/Oqtane.Server/Scripts/00.00.00.sql b/Oqtane.Server/Scripts/00.00.00.sql
index fd1a0233..d50dce0a 100644
--- a/Oqtane.Server/Scripts/00.00.00.sql
+++ b/Oqtane.Server/Scripts/00.00.00.sql
@@ -14,6 +14,9 @@ CREATE TABLE [dbo].[Site](
[CreatedOn] [datetime] NOT NULL,
[ModifiedBy] [nvarchar](256) NOT NULL,
[ModifiedOn] [datetime] NOT NULL,
+ [DeletedBy] [nvarchar](256) NULL,
+ [DeletedOn] [datetime] NULL,
+ [IsDeleted][bit] NOT NULL
CONSTRAINT [PK_Site] PRIMARY KEY CLUSTERED
(
[SiteId] ASC
@@ -91,6 +94,9 @@ CREATE TABLE [dbo].[User](
[CreatedOn] [datetime] NOT NULL,
[ModifiedBy] [nvarchar](256) NOT NULL,
[ModifiedOn] [datetime] NOT NULL,
+ [DeletedBy] [nvarchar](256) NULL,
+ [DeletedOn] [datetime] NULL,
+ [IsDeleted][bit] NOT NULL
CONSTRAINT [PK_User] PRIMARY KEY CLUSTERED
(
[UserId] ASC
diff --git a/Oqtane.Shared/Models/Site.cs b/Oqtane.Shared/Models/Site.cs
index f1384879..05c659ef 100644
--- a/Oqtane.Shared/Models/Site.cs
+++ b/Oqtane.Shared/Models/Site.cs
@@ -2,7 +2,7 @@
namespace Oqtane.Models
{
- public class Site : IAuditable
+ public class Site : IAuditable, IDeletable
{
public int SiteId { get; set; }
public string Name { get; set; }
@@ -15,5 +15,8 @@ namespace Oqtane.Models
public DateTime CreatedOn { get; set; }
public string ModifiedBy { get; set; }
public DateTime ModifiedOn { get; set; }
+ public string DeletedBy { get; set; }
+ public DateTime? DeletedOn { get; set; }
+ public bool IsDeleted { get; set; }
}
}
diff --git a/Oqtane.Shared/Models/User.cs b/Oqtane.Shared/Models/User.cs
index 001c4472..bec8f3e2 100644
--- a/Oqtane.Shared/Models/User.cs
+++ b/Oqtane.Shared/Models/User.cs
@@ -3,7 +3,7 @@ using System.ComponentModel.DataAnnotations.Schema;
namespace Oqtane.Models
{
- public class User : IAuditable
+ public class User : IAuditable, IDeletable
{
public int UserId { get; set; }
public string Username { get; set; }
@@ -19,6 +19,9 @@ namespace Oqtane.Models
public DateTime CreatedOn { get; set; }
public string ModifiedBy { get; set; }
public DateTime ModifiedOn { get; set; }
+ public string DeletedBy { get; set; }
+ public DateTime? DeletedOn { get; set; }
+ public bool IsDeleted { get; set; }
[NotMapped]
public string Password { get; set; }