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 @@ - @foreach (Page p in PageState.Pages) { @@ -40,7 +40,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)) { @@ -13,7 +13,7 @@ @@ -21,7 +21,7 @@ @@ -29,34 +29,26 @@ + + + + - - @foreach (Profile profile in profiles) - { - var p = profile; - if (p.Category != category) - { - - - - category = p.Category; - } - - - - - }
- +
- +
- + +
+ + +
- @p.Category -
- - - -
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; }