diff --git a/.deployment b/.deployment new file mode 100644 index 00000000..3f3f33f2 --- /dev/null +++ b/.deployment @@ -0,0 +1,2 @@ +[config] +project = Oqtane.Server/Oqtane.Server.csproj diff --git a/Oqtane.Client/Modules/Admin/Files/Details.razor b/Oqtane.Client/Modules/Admin/Files/Details.razor new file mode 100644 index 00000000..6b4b14aa --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Files/Details.razor @@ -0,0 +1,111 @@ +@namespace Oqtane.Modules.Admin.Files +@inherits ModuleBase +@inject IFileService FileService +@inject IFolderService FolderService +@inject NavigationManager NavigationManager + +@if (_folders != null) +{ + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + Cancel +
+
+ +} + +@code { + private int _fileId = -1; + private string _name; + private List _folders; + private int _folderId = -1; + private int _size; + private string _createdBy; + private DateTime _createdOn; + private string _modifiedBy; + private DateTime _modifiedOn; + + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; + + public override string Title => "File Management"; + + protected override async Task OnInitializedAsync() + { + try + { + _folders = await FolderService.GetFoldersAsync(PageState.Site.SiteId); + _fileId = Int32.Parse(PageState.QueryString["id"]); + File file = await FileService.GetFileAsync(_fileId); + if (file != null) + { + _name = file.Name; + _folderId = file.FolderId; + _size = file.Size; + _createdBy = file.CreatedBy; + _createdOn = file.CreatedOn; + _modifiedBy = file.ModifiedBy; + _modifiedOn = file.ModifiedOn; + } + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Loading File {FileId} {Error}", _fileId, ex.Message); + AddModuleMessage("Error Loading File", MessageType.Error); + } + } + + private async Task SaveFile() + { + try + { + if (_name.IsPathOrFileValid()) + { + File file = await FileService.GetFileAsync(_fileId); + file.Name = _name; + file.FolderId = _folderId; + file = await FileService.UpdateFileAsync(file); + await logger.LogInformation("File Saved {File}", file); + NavigationManager.NavigateTo(NavigateUrl()); + } + else + { + AddModuleMessage("File Name Not Valid", MessageType.Warning); + } + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Saving File {FileId} {Error}", _fileId, ex.Message); + AddModuleMessage("Error Saving File", MessageType.Error); + } + } +} diff --git a/Oqtane.Client/Modules/Admin/Files/Edit.razor b/Oqtane.Client/Modules/Admin/Files/Edit.razor index 5d42485b..2c502690 100644 --- a/Oqtane.Client/Modules/Admin/Files/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Files/Edit.razor @@ -123,7 +123,7 @@ AddModuleMessage("Folder Name Not Valid.", MessageType.Warning); return; } - + try { Folder folder; @@ -174,7 +174,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Saving Folder {FolderId} {Error}", _folderId, ex.Message); - AddModuleMessage("Error Saving Module", MessageType.Error); + AddModuleMessage("Error Saving Folder", MessageType.Error); } } @@ -182,9 +182,25 @@ { try { - await FolderService.DeleteFolderAsync(_folderId); - await logger.LogInformation("Folder Deleted {Folder}", _folderId); - AddModuleMessage("Folder Deleted", MessageType.Success); + bool isparent = false; + foreach (Folder folder in _folders) + { + if (folder.ParentId == _folderId) + { + isparent = true; + break; + } + } + if (!isparent) + { + await FolderService.DeleteFolderAsync(_folderId); + await logger.LogInformation("Folder Deleted {Folder}", _folderId); + NavigationManager.NavigateTo(NavigateUrl()); + } + else + { + AddModuleMessage("Folder Has Child Folders And Cannot Be Deleted", MessageType.Warning); + } } catch (Exception ex) { diff --git a/Oqtane.Client/Modules/Admin/Files/Index.razor b/Oqtane.Client/Modules/Admin/Files/Index.razor index d92e0994..ccb8a135 100644 --- a/Oqtane.Client/Modules/Admin/Files/Index.razor +++ b/Oqtane.Client/Modules/Admin/Files/Index.razor @@ -28,13 +28,15 @@
-   +   +   Name Modified Type Size
+ @context.Name @context.ModifiedOn diff --git a/Oqtane.Client/Modules/Admin/Jobs/Edit.razor b/Oqtane.Client/Modules/Admin/Jobs/Edit.razor index ae1f3d9b..25d8e4fb 100644 --- a/Oqtane.Client/Modules/Admin/Jobs/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Jobs/Edit.razor @@ -63,10 +63,18 @@ - + - + + + + + + + + + @@ -83,6 +91,7 @@ private string _startDate = string.Empty; private string _endDate = string.Empty; private string _retentionHistory = string.Empty; + private string _nextExecution = string.Empty; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; @@ -102,6 +111,7 @@ _startDate = (job.StartDate != null) ? job.StartDate.ToString() : string.Empty; _endDate = (job.EndDate != null) ? job.EndDate.ToString() : string.Empty; _retentionHistory = job.RetentionHistory.ToString(); + _nextExecution = job.NextExecution.ToString(); } } catch (Exception ex) @@ -140,6 +150,15 @@ job.EndDate = DateTime.Parse(_endDate); } + if (_nextExecution == string.Empty) + { + job.NextExecution = null; + } + else + { + job.NextExecution = DateTime.Parse(_nextExecution); + } + job.RetentionHistory = int.Parse(_retentionHistory); try diff --git a/Oqtane.Client/Modules/Admin/Jobs/Index.razor b/Oqtane.Client/Modules/Admin/Jobs/Index.razor index f15c50df..6ba8c69b 100644 --- a/Oqtane.Client/Modules/Admin/Jobs/Index.razor +++ b/Oqtane.Client/Modules/Admin/Jobs/Index.razor @@ -15,14 +15,14 @@ else
-   -   -   +   +   +   Name Status Frequency Next Execution -   +  
diff --git a/Oqtane.Client/Modules/Admin/Jobs/Log.razor b/Oqtane.Client/Modules/Admin/Jobs/Log.razor index 9efc1486..2d4ef706 100644 --- a/Oqtane.Client/Modules/Admin/Jobs/Log.razor +++ b/Oqtane.Client/Modules/Admin/Jobs/Log.razor @@ -22,7 +22,7 @@ else @context.FinishDate - @context.Notes + @((MarkupString)context.Notes)
} diff --git a/Oqtane.Client/Modules/Admin/Logs/Index.razor b/Oqtane.Client/Modules/Admin/Logs/Index.razor index 730c6d13..3fcb0fb5 100644 --- a/Oqtane.Client/Modules/Admin/Logs/Index.razor +++ b/Oqtane.Client/Modules/Admin/Logs/Index.razor @@ -49,7 +49,7 @@ else {
-   +   Date Level Feature diff --git a/Oqtane.Client/Modules/Admin/ModuleCreator/Index.razor b/Oqtane.Client/Modules/Admin/ModuleCreator/Index.razor index 9d26615a..e42c394f 100644 --- a/Oqtane.Client/Modules/Admin/ModuleCreator/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleCreator/Index.razor @@ -16,7 +16,7 @@ - + diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor index 4d13338e..526f1af4 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor @@ -16,7 +16,7 @@
Name Version - +
@context.Name @@ -79,7 +79,7 @@ { ShowProgressIndicator(); var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 3); + await interop.RedirectBrowser(NavigateUrl(), 10); await ModuleDefinitionService.InstallModuleDefinitionsAsync(); } catch (Exception ex) diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor index 743938bf..51ed8992 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor @@ -75,12 +75,20 @@ - + + + + + + + + + @@ -110,6 +118,7 @@ private string _url = ""; private string _contact = ""; private string _license = ""; + private string _runtimes = ""; private string _permissions; private string _createdby; private DateTime _createdon; @@ -139,6 +148,7 @@ _url = moduleDefinition.Url; _contact = moduleDefinition.Contact; _license = moduleDefinition.License; + _runtimes = moduleDefinition.Runtimes; _permissions = moduleDefinition.Permissions; _createdby = moduleDefinition.CreatedBy; _createdon = moduleDefinition.CreatedOn; diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor index 88590d5e..fabf6973 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor @@ -14,11 +14,11 @@ else
-   -   +   +   Name Version -   +  
@@ -86,7 +86,7 @@ else await logger.LogInformation("Module Downloaded {ModuleDefinitionName} {Version}", moduledefinitionname, version); ShowProgressIndicator(); var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 3); + await interop.RedirectBrowser(NavigateUrl(), 10); await ModuleDefinitionService.InstallModuleDefinitionsAsync(); } catch (Exception ex) @@ -102,7 +102,7 @@ else { ShowProgressIndicator(); var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 3); + await interop.RedirectBrowser(NavigateUrl(), 10); await ModuleDefinitionService.DeleteModuleDefinitionAsync(moduleDefinition.ModuleDefinitionId, moduleDefinition.SiteId); } catch (Exception ex) diff --git a/Oqtane.Client/Modules/Admin/Modules/Import.razor b/Oqtane.Client/Modules/Admin/Modules/Import.razor index e341ad78..1d99bcb9 100644 --- a/Oqtane.Client/Modules/Admin/Modules/Import.razor +++ b/Oqtane.Client/Modules/Admin/Modules/Import.razor @@ -31,9 +31,15 @@ { try { - await ModuleService.ImportModuleAsync(ModuleState.ModuleId, _content); - StateHasChanged(); - NavigationManager.NavigateTo(NavigateUrl()); + bool success = await ModuleService.ImportModuleAsync(ModuleState.ModuleId, _content); + if (success) + { + AddModuleMessage("Content Imported Successfully", MessageType.Success); + } + else + { + AddModuleMessage("A Problem Was Encountered Importing Content. Please Ensure The Content Is Formatted Correctly For The Module.", MessageType.Warning); + } } catch (Exception ex) { diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor index 2970d442..9e73435b 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -162,17 +162,6 @@ - - - - - - - - @@ -217,7 +206,6 @@ private string _isnavigation = "True"; private string _url; private string _ispersonalizable = "False"; - private string _mode = "view"; private string _themetype = "-"; private string _layouttype = "-"; private string _containertype = "-"; @@ -346,6 +334,12 @@ } } + if (!PagePathIsUnique(page.Path, page.SiteId, _pageList)) + { + AddModuleMessage($"A page with path {_path} already exists for the selected parent page. The page path needs to be unique for the selected parent.", MessageType.Warning); + return; + } + Page child; switch (_insert) { @@ -367,7 +361,6 @@ page.IsNavigation = (_isnavigation == null ? true : Boolean.Parse(_isnavigation)); page.Url = _url; - page.EditMode = (_mode == "edit" ? true : false); page.ThemeType = (_themetype != "-") ? _themetype : string.Empty; if (!string.IsNullOrEmpty(page.ThemeType) && page.ThemeType == PageState.Site.DefaultThemeType) { @@ -407,4 +400,8 @@ } } + private static bool PagePathIsUnique(string pagePath, int siteId, List existingPages) + { + return !existingPages.Any(page => page.SiteId == siteId && page.Path == pagePath); + } } diff --git a/Oqtane.Client/Modules/Admin/Pages/Edit.razor b/Oqtane.Client/Modules/Admin/Pages/Edit.razor index 7373d36a..ee191dd8 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Edit.razor @@ -173,17 +173,6 @@ - - - - - - - - @@ -235,7 +224,6 @@ private string _isnavigation; private string _url; private string _ispersonalizable; - private string _mode; private string _themetype = "-"; private string _layouttype = "-"; private string _containertype = "-"; @@ -290,7 +278,6 @@ _isnavigation = page.IsNavigation.ToString(); _url = page.Url; _ispersonalizable = page.IsPersonalizable.ToString(); - _mode = (page.EditMode) ? "edit" : "view"; _themetype = page.ThemeType; if (_themetype == PageState.Site.DefaultThemeType) { @@ -333,7 +320,7 @@ _children = new List(); if (_parentid == "-1") { - foreach(Page p in PageState.Pages.Where(item => item.ParentId == null)) + foreach (Page p in PageState.Pages.Where(item => item.ParentId == null)) { if (UserSecurity.IsAuthorized(PageState.User, PermissionNames.View, p.Permissions)) { @@ -433,6 +420,13 @@ page.Path = parent.Path + "/" + Utilities.GetFriendlyUrl(_path); } } + + if (!PagePathIsUnique(page.Path, page.SiteId, page.PageId, _pageList)) + { + AddModuleMessage($"A page with path {_path} already exists for the selected parent page. The page path needs to be unique for the selected parent.", MessageType.Warning); + return; + } + if (_insert != "=") { Page child; @@ -456,7 +450,6 @@ } page.IsNavigation = (_isnavigation == null || Boolean.Parse(_isnavigation)); page.Url = _url; - page.EditMode = (_mode == "edit"); page.ThemeType = (_themetype != "-") ? _themetype : string.Empty; if (!string.IsNullOrEmpty(page.ThemeType) && page.ThemeType == PageState.Site.DefaultThemeType) { @@ -512,4 +505,9 @@ AddModuleMessage("Error Saving Page", MessageType.Error); } } + + private static bool PagePathIsUnique(string pagePath, int siteId, int pageId, List existingPages) + { + return !existingPages.Any(page => page.SiteId == siteId && page.Path == pagePath && page.PageId != pageId); + } } diff --git a/Oqtane.Client/Modules/Admin/Pages/Index.razor b/Oqtane.Client/Modules/Admin/Pages/Index.razor index b53f3811..02d1d14c 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Index.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Index.razor @@ -9,8 +9,8 @@
-   -   +   +   Name
diff --git a/Oqtane.Client/Modules/Admin/Profiles/Edit.razor b/Oqtane.Client/Modules/Admin/Profiles/Edit.razor index 96a65b18..73847560 100644 --- a/Oqtane.Client/Modules/Admin/Profiles/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Profiles/Edit.razor @@ -145,6 +145,7 @@ profile = new Profile(); } + profile.SiteId = PageState.Site.SiteId; profile.Name = _name; profile.Title = _title; profile.Description = _description; diff --git a/Oqtane.Client/Modules/Admin/Profiles/Index.razor b/Oqtane.Client/Modules/Admin/Profiles/Index.razor index e3cefdaa..36df1731 100644 --- a/Oqtane.Client/Modules/Admin/Profiles/Index.razor +++ b/Oqtane.Client/Modules/Admin/Profiles/Index.razor @@ -12,8 +12,8 @@ else
-   -   +   +   Name
diff --git a/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor b/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor index d3955307..220f5ffe 100644 --- a/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor +++ b/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor @@ -16,8 +16,8 @@ {
-   -   +   +   Name Deleted By Deleted On @@ -42,8 +42,8 @@ {
-   -   +   +   Page Module Deleted By diff --git a/Oqtane.Client/Modules/Admin/Roles/Index.razor b/Oqtane.Client/Modules/Admin/Roles/Index.razor index 881a9348..a41998d4 100644 --- a/Oqtane.Client/Modules/Admin/Roles/Index.razor +++ b/Oqtane.Client/Modules/Admin/Roles/Index.razor @@ -12,9 +12,9 @@ else
-   -   -   +   +   +   Name
diff --git a/Oqtane.Client/Modules/Admin/Site/Index.razor b/Oqtane.Client/Modules/Admin/Site/Index.razor index 9d4e4611..e483465e 100644 --- a/Oqtane.Client/Modules/Admin/Site/Index.razor +++ b/Oqtane.Client/Modules/Admin/Site/Index.razor @@ -7,7 +7,7 @@ @inject IThemeService ThemeService @inject ISettingService SettingService -@if (_themes != null) +@if (_initialized) { @@ -211,6 +211,7 @@ } @code { + private bool _initialized = false; private List _themeList; private List _themes = new List(); private List _layouts = new List(); @@ -318,6 +319,8 @@ _deletedby = site.DeletedBy; _deletedon = site.DeletedOn; _isdeleted = site.IsDeleted.ToString(); + + _initialized = true; } } catch (Exception ex) diff --git a/Oqtane.Client/Modules/Admin/Sites/Edit.razor b/Oqtane.Client/Modules/Admin/Sites/Edit.razor index 00e3d9f9..43599e98 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Edit.razor @@ -6,7 +6,7 @@ @inject IAliasService AliasService @inject IThemeService ThemeService -@if (_themes != null) +@if (_initialized) {
@@ -106,6 +106,7 @@ } @code { + private bool _initialized = false; private List _themeList; private List _themes = new List(); private List _layouts = new List(); @@ -163,6 +164,8 @@ _deletedby = site.DeletedBy; _deletedon = site.DeletedOn; _isdeleted = site.IsDeleted.ToString(); + + _initialized = true; } } catch (Exception ex) diff --git a/Oqtane.Client/Modules/Admin/Sites/Index.razor b/Oqtane.Client/Modules/Admin/Sites/Index.razor index d8b79632..8d82492d 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Index.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Index.razor @@ -14,8 +14,8 @@ else
-
- + + diff --git a/Oqtane.Client/Modules/Admin/Tenants/Index.razor b/Oqtane.Client/Modules/Admin/Tenants/Index.razor index ead272dc..1ce7c686 100644 --- a/Oqtane.Client/Modules/Admin/Tenants/Index.razor +++ b/Oqtane.Client/Modules/Admin/Tenants/Index.razor @@ -11,8 +11,8 @@ else {
-
- + + diff --git a/Oqtane.Client/Modules/Admin/Themes/Add.razor b/Oqtane.Client/Modules/Admin/Themes/Add.razor index 327a7d3a..eda40597 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Add.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Add.razor @@ -16,7 +16,7 @@
- + @@ -79,7 +79,7 @@ { ShowProgressIndicator(); var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 3); + await interop.RedirectBrowser(NavigateUrl(), 10); await ThemeService.InstallThemesAsync(); } catch (Exception ex) diff --git a/Oqtane.Client/Modules/Admin/Themes/Index.razor b/Oqtane.Client/Modules/Admin/Themes/Index.razor index d2e6b2e9..29ed1b00 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Index.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Index.razor @@ -15,10 +15,10 @@ else
-
- - - + + + + @@ -37,6 +37,7 @@ else } + } @@ -86,7 +87,7 @@ else await logger.LogInformation("Theme Downloaded {ThemeName} {Version}", themename, version); ShowProgressIndicator(); var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 3); + await interop.RedirectBrowser(NavigateUrl(), 10); await ThemeService.InstallThemesAsync(); } catch (Exception ex) @@ -102,7 +103,7 @@ else { ShowProgressIndicator(); var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 3); + await interop.RedirectBrowser(NavigateUrl(), 10); await ThemeService.DeleteThemeAsync(Theme.ThemeName); } catch (Exception ex) diff --git a/Oqtane.Client/Modules/Admin/Upgrade/Index.razor b/Oqtane.Client/Modules/Admin/Upgrade/Index.razor index 5eba7cbd..06611217 100644 --- a/Oqtane.Client/Modules/Admin/Upgrade/Index.razor +++ b/Oqtane.Client/Modules/Admin/Upgrade/Index.razor @@ -12,7 +12,7 @@ @if (_upgradeavailable) { - @("Framework") @_package.Version + } else { @@ -26,7 +26,7 @@
     Name      Name Name Version @context.Name  NameVersion  NameVersion   - +
@@ -71,7 +71,7 @@ { ShowProgressIndicator(); var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 3); + await interop.RedirectBrowser(NavigateUrl(), 10); await InstallationService.Upgrade(); } catch (Exception ex) @@ -88,7 +88,7 @@ await PackageService.DownloadPackageAsync(packageid, version, "Framework"); ShowProgressIndicator(); var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 3); + await interop.RedirectBrowser(NavigateUrl(), 10); await InstallationService.Upgrade(); } catch (Exception ex) diff --git a/Oqtane.Client/Modules/Admin/UserProfile/Add.razor b/Oqtane.Client/Modules/Admin/UserProfile/Add.razor index c413ec91..b19bae1d 100644 --- a/Oqtane.Client/Modules/Admin/UserProfile/Add.razor +++ b/Oqtane.Client/Modules/Admin/UserProfile/Add.razor @@ -65,7 +65,8 @@ notification.ParentId = null; notification.CreatedOn = DateTime.UtcNow; notification.IsDelivered = false; - notification.DeliveredOn = null; + notification.DeliveredOn = null; + notification.SendOn = DateTime.UtcNow; notification = await NotificationService.AddNotificationAsync(notification); await logger.LogInformation("Notification Created {Notification}", notification); NavigationManager.NavigateTo(NavigateUrl()); diff --git a/Oqtane.Client/Modules/Admin/UserProfile/Index.razor b/Oqtane.Client/Modules/Admin/UserProfile/Index.razor index 82ff8309..9c718ef1 100644 --- a/Oqtane.Client/Modules/Admin/UserProfile/Index.razor +++ b/Oqtane.Client/Modules/Admin/UserProfile/Index.razor @@ -32,7 +32,7 @@ else - + @@ -40,7 +40,7 @@ else - + @@ -75,10 +75,12 @@ else @if (profiles != null && settings != null) { - - @foreach (Profile profile in profiles) +
+ @foreach (Profile profile in profiles) + { + var p = profile; + if (!p.IsPrivate || UserSecurity.IsAuthorized(PageState.User, Constants.AdminRole)) { - var p = profile; if (p.Category != category) { @@ -90,14 +92,22 @@ else } } -
- + - + @if (p.IsRequired) + { + + } + else + { + + }
+ } + } @@ -111,8 +121,8 @@ else {
-   -   +   +   From Subject Received @@ -241,7 +251,7 @@ else { try { - if (username != string.Empty && email != string.Empty) + if (username != string.Empty && email != string.Empty && ValidateProfiles()) { if (password == confirm) { @@ -261,6 +271,7 @@ else await UserService.UpdateUserAsync(user); await SettingService.UpdateUserSettingsAsync(settings, PageState.User.UserId); await logger.LogInformation("User Profile Saved"); + AddModuleMessage("User Profile Updated Successfully", MessageType.Success); } else { @@ -269,7 +280,7 @@ else } else { - AddModuleMessage("You Must Provide A Username and Email Address", MessageType.Warning); + AddModuleMessage("You Must Provide A Username and Email Address As Well As All Required Profile Information", MessageType.Warning); } } catch (Exception ex) @@ -279,6 +290,26 @@ else } } + private bool ValidateProfiles() + { + bool valid = true; + foreach (Profile profile in profiles) + { + if (string.IsNullOrEmpty(SettingService.GetSetting(settings, profile.Name, string.Empty)) && !string.IsNullOrEmpty(profile.DefaultValue)) + { + settings = SettingService.SetSetting(settings, profile.Name, profile.DefaultValue); + } + if (!profile.IsPrivate || UserSecurity.IsAuthorized(PageState.User, Constants.AdminRole)) + { + if (profile.IsRequired && string.IsNullOrEmpty(SettingService.GetSetting(settings, profile.Name, string.Empty))) + { + valid = false; + } + } + } + return valid; + } + private void Cancel() { NavigationManager.NavigateTo(NavigateUrl(string.Empty)); diff --git a/Oqtane.Client/Modules/Admin/UserProfile/View.razor b/Oqtane.Client/Modules/Admin/UserProfile/View.razor index 2e48fcb1..5621001f 100644 --- a/Oqtane.Client/Modules/Admin/UserProfile/View.razor +++ b/Oqtane.Client/Modules/Admin/UserProfile/View.razor @@ -33,7 +33,7 @@ -} + } @if (title == "To") { @@ -51,7 +51,7 @@ -} + } @if (title == "From") { @@ -62,7 +62,7 @@