diff --git a/.gitignore b/.gitignore index 8f8f91ba..d47b8dcf 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ Oqtane.Server/Data/*.mdf Oqtane.Server/Data/*.ldf /Oqtane.Server/Properties/PublishProfiles/FolderProfile.pubxml +Oqtane.Server/Content diff --git a/Oqtane.Client/Modules/Admin/Dashboard/Index.razor b/Oqtane.Client/Modules/Admin/Dashboard/Index.razor index 7e3004fb..650eaee6 100644 --- a/Oqtane.Client/Modules/Admin/Dashboard/Index.razor +++ b/Oqtane.Client/Modules/Admin/Dashboard/Index.razor @@ -1,4 +1,4 @@ -@namespace Oqtane.Modules.Admin.Dashboard +@namespace Oqtane.Modules.Admin.Dashboard @inherits ModuleBase @inject IPageService PageService @inject IUserService UserService @@ -11,7 +11,7 @@ string url = NavigateUrl(p.Path);
-

@p.Name +

@p.Name
} diff --git a/Oqtane.Client/Modules/Admin/Error/Index.razor b/Oqtane.Client/Modules/Admin/Error/Index.razor index 7ddb0ce3..381665ae 100644 --- a/Oqtane.Client/Modules/Admin/Error/Index.razor +++ b/Oqtane.Client/Modules/Admin/Error/Index.razor @@ -1,6 +1,7 @@ -@namespace Oqtane.Modules.Admin.Error +@namespace Oqtane.Modules.Admin.Error @inherits ModuleBase @inject IModuleService ModuleService +@inject IStringLocalizer Localizer @code { public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Anonymous; @@ -10,10 +11,10 @@ Module module = await ModuleService.GetModuleAsync(ModuleState.ModuleId); if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Host)) { - string message = "A Problem Was Encountered Loading Module " + module.ModuleDefinitionName; + string message = Localizer["A Problem Was Encountered Loading Module {0}", module.ModuleDefinitionName]; AddModuleMessage(message, MessageType.Error); } - + await logger.LogCritical("Error Loading Module {Module}", module); } } diff --git a/Oqtane.Client/Modules/Admin/Files/Add.razor b/Oqtane.Client/Modules/Admin/Files/Add.razor index 9f19370d..a848ee19 100644 --- a/Oqtane.Client/Modules/Admin/Files/Add.razor +++ b/Oqtane.Client/Modules/Admin/Files/Add.razor @@ -1,31 +1,32 @@ -@namespace Oqtane.Modules.Admin.Files +@namespace Oqtane.Modules.Admin.Files @using System.IO @inherits ModuleBase @inject NavigationManager NavigationManager @inject IFileService FileService @inject IFolderService FolderService +@inject IStringLocalizer Localizer - +
- +
- Cancel + @Localizer["Cancel"]
- + @if (_folders != null) {
- + @@ -33,11 +34,11 @@
- +
- - Cancel + + @Localizer["Cancel"] }
@@ -73,7 +74,7 @@ { if (url == string.Empty || _folderId == -1) { - AddModuleMessage("You Must Enter A Url And Select A Folder", MessageType.Warning); + AddModuleMessage(Localizer["You Must Enter A Url And Select A Folder"], MessageType.Warning); return; } @@ -81,14 +82,14 @@ if (!Constants.UploadableFiles.Split(',') .Contains(Path.GetExtension(filename).ToLower().Replace(".", ""))) - { - AddModuleMessage("File Could Not Be Downloaded From Url Due To Its File Extension", MessageType.Warning); - return ; - } + { + AddModuleMessage(Localizer["File Could Not Be Downloaded From Url Due To Its File Extension"], MessageType.Warning); + return; + } if (!filename.IsPathOrFileValid()) { - AddModuleMessage("You Must Enter A Url With A Valid File Name", MessageType.Warning); + AddModuleMessage(Localizer["You Must Enter A Url With A Valid File Name"], MessageType.Warning); return; } @@ -96,12 +97,12 @@ { await FileService.UploadFileAsync(url, _folderId); await logger.LogInformation("File Downloaded Successfully From Url {Url}", url); - AddModuleMessage("File Downloaded Successfully From Url", MessageType.Success); + AddModuleMessage(Localizer["File Downloaded Successfully From Url"], MessageType.Success); } catch (Exception ex) { await logger.LogError(ex, "Error Downloading File From Url {Url} {Error}", url, ex.Message); - AddModuleMessage("Error Downloading File From Url. Please Verify That The Url Is Valid.", MessageType.Error); + AddModuleMessage(Localizer["Error Downloading File From Url. Please Verify That The Url Is Valid."], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Files/Details.razor b/Oqtane.Client/Modules/Admin/Files/Details.razor index 6b4b14aa..93bd73a8 100644 --- a/Oqtane.Client/Modules/Admin/Files/Details.razor +++ b/Oqtane.Client/Modules/Admin/Files/Details.razor @@ -1,15 +1,16 @@ -@namespace Oqtane.Modules.Admin.Files +@namespace Oqtane.Modules.Admin.Files @inherits ModuleBase @inject IFileService FileService @inject IFolderService FolderService @inject NavigationManager NavigationManager +@inject IStringLocalizer
Localizer @if (_folders != null) {
- + @@ -17,7 +18,7 @@
- +
- +
- - Cancel + + @Localizer["Cancel"]

@@ -80,7 +81,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading File {FileId} {Error}", _fileId, ex.Message); - AddModuleMessage("Error Loading File", MessageType.Error); + AddModuleMessage(Localizer["Error Loading File"], MessageType.Error); } } @@ -99,13 +100,13 @@ } else { - AddModuleMessage("File Name Not Valid", MessageType.Warning); + AddModuleMessage(Localizer["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); + AddModuleMessage(Localizer["Error Saving File"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Files/Edit.razor b/Oqtane.Client/Modules/Admin/Files/Edit.razor index 73cac84d..892f0559 100644 --- a/Oqtane.Client/Modules/Admin/Files/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Files/Edit.razor @@ -1,21 +1,22 @@ -@namespace Oqtane.Modules.Admin.Files +@namespace Oqtane.Modules.Admin.Files @inherits ModuleBase @inject IFolderService FolderService @inject IFileService FileService @inject NavigationManager NavigationManager +@inject IStringLocalizer Localizer @if (_folders != null) {
- +
- + @@ -34,19 +35,19 @@
- +
@if (!_isSystem) { - + } - Cancel + @Localizer["Cancel"] @if (!_isSystem && PageState.QueryString.ContainsKey("id")) { - + }

@@ -107,7 +108,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Folder {FolderId} {Error}", _folderId, ex.Message); - AddModuleMessage("Error Loading Folder", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Folder"], MessageType.Error); } } @@ -115,13 +116,13 @@ { if (_name == string.Empty || _parentId == -1) { - AddModuleMessage("Folders Must Have A Parent And A Name", MessageType.Warning); + AddModuleMessage(Localizer["Folders Must Have A Parent And A Name"], MessageType.Warning); return; } if (!_name.IsPathOrFileValid()) { - AddModuleMessage("Folder Name Not Valid.", MessageType.Warning); + AddModuleMessage(Localizer["Folder Name Not Valid."], MessageType.Warning); return; } @@ -169,13 +170,13 @@ } else { - AddModuleMessage("An Error Was Encountered Saving The Folder", MessageType.Error); + AddModuleMessage(Localizer["An Error Was Encountered Saving The Folder"], MessageType.Error); } } catch (Exception ex) { await logger.LogError(ex, "Error Saving Folder {FolderId} {Error}", _folderId, ex.Message); - AddModuleMessage("Error Saving Folder", MessageType.Error); + AddModuleMessage(Localizer["Error Saving Folder"], MessageType.Error); } } @@ -203,18 +204,18 @@ } else { - AddModuleMessage("Folder Has Files And Cannot Be Deleted", MessageType.Warning); + AddModuleMessage(Localizer["Folder Has Files And Cannot Be Deleted"], MessageType.Warning); } } else { - AddModuleMessage("Folder Has Subfolders And Cannot Be Deleted", MessageType.Warning); + AddModuleMessage(Localizer["Folder Has Subfolders And Cannot Be Deleted"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Deleting Folder {Folder} {Error}", _folderId, ex.Message); - AddModuleMessage("Error Deleting Folder", MessageType.Error); + AddModuleMessage(Localizer["Error Deleting Folder"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Files/Index.razor b/Oqtane.Client/Modules/Admin/Files/Index.razor index ccb8a135..58990804 100644 --- a/Oqtane.Client/Modules/Admin/Files/Index.razor +++ b/Oqtane.Client/Modules/Admin/Files/Index.razor @@ -1,15 +1,16 @@ -@namespace Oqtane.Modules.Admin.Files +@namespace Oqtane.Modules.Admin.Files @inherits ModuleBase @inject NavigationManager NavigationManager @inject IFolderService FolderService @inject IFileService FileService +@inject IStringLocalizer Localizer @if (_files != null) {
- + -   -   - +   +   +
@@ -30,23 +31,23 @@
    - Name - Modified - Type - Size + @Localizer["Name"] + @Localizer["Modified"] + @Localizer["Type"] + @Localizer["Size"]
- - + + @context.Name @context.ModifiedOn - @context.Extension.ToUpper() File - @(context.Size / 1000) KB + @context.Extension.ToUpper() @Localizer["File"] + @string.Format("{0:0.00}", ((decimal)context.Size / 1000)) KB @if (_files.Count == 0) { -
No Files Exist In Selected Folder
+
@Localizer["No Files Exist In Selected Folder"]
} } @@ -72,7 +73,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Files {Error}", ex.Message); - AddModuleMessage("Error Loading Files", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Files"], MessageType.Error); } } @@ -92,7 +93,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Files {Error}", ex.Message); - AddModuleMessage("Error Loading Files", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Files"], MessageType.Error); } } @@ -102,14 +103,14 @@ { await FileService.DeleteFileAsync(file.FileId); await logger.LogInformation("File Deleted {File}", file.Name); - AddModuleMessage("File " + file.Name + " Deleted", MessageType.Success); + AddModuleMessage(Localizer["File {0} Deleted", file.Name], MessageType.Success); await GetFiles(); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Deleting File {File} {Error}", file.Name, ex.Message); - AddModuleMessage("Error Deleting File " + file.Name, MessageType.Error); + AddModuleMessage(Localizer["Error Deleting File {0}", file.Name], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Jobs/Add.razor b/Oqtane.Client/Modules/Admin/Jobs/Add.razor deleted file mode 100644 index 65361e41..00000000 --- a/Oqtane.Client/Modules/Admin/Jobs/Add.razor +++ /dev/null @@ -1,140 +0,0 @@ -@namespace Oqtane.Modules.Admin.Jobs -@inherits ModuleBase -@inject NavigationManager NavigationManager -@inject IJobService JobService - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - - -
- - - -
- - - -
- - - -
- -Cancel - -@code { - private string _name = string.Empty; - private string _jobType = string.Empty; - private string _isEnabled = "True"; - private string _interval = string.Empty; - private string _frequency = string.Empty; - private string _startDate = string.Empty; - private string _endDate = string.Empty; - private string _retentionHistory = "10"; - - public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; - - private async Task SaveJob() - { - if (_name != string.Empty && !string.IsNullOrEmpty(_jobType) && _frequency != string.Empty && _interval != string.Empty && _retentionHistory != string.Empty) - { - var job = new Job(); - job.Name = _name; - job.JobType = _jobType; - job.IsEnabled = Boolean.Parse(_isEnabled); - job.Frequency = _frequency; - job.Interval = int.Parse(_interval); - - if (_startDate == string.Empty) - { - job.StartDate = null; - } - else - { - job.StartDate = DateTime.Parse(_startDate); - } - - if (_endDate == string.Empty) - { - job.EndDate = null; - } - else - { - job.EndDate = DateTime.Parse(_endDate); - } - - job.RetentionHistory = int.Parse(_retentionHistory); - job.IsStarted = false; - job.IsExecuting = false; - job.NextExecution = null; - - try - { - job = await JobService.AddJobAsync(job); - await logger.LogInformation("Job Added {Job}", job); - NavigationManager.NavigateTo(NavigateUrl()); - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Adding Job {Job} {Error}", job, ex.Message); - AddModuleMessage("Error Adding Job", MessageType.Error); - } - } - else - { - AddModuleMessage("You Must Provide The Job Name, Type, Frequency, and Retention", MessageType.Warning); - } - } - -} diff --git a/Oqtane.Client/Modules/Admin/Jobs/Edit.razor b/Oqtane.Client/Modules/Admin/Jobs/Edit.razor index 25d8e4fb..9a436b6d 100644 --- a/Oqtane.Client/Modules/Admin/Jobs/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Jobs/Edit.razor @@ -1,12 +1,13 @@ -@namespace Oqtane.Modules.Admin.Jobs +@namespace Oqtane.Modules.Admin.Jobs @inherits ModuleBase @inject NavigationManager NavigationManager @inject IJobService JobService +@inject IStringLocalizer Localizer
- + @@ -14,40 +15,40 @@
- + - +
- +
- +
- + @@ -55,7 +56,7 @@
- + @@ -63,7 +64,7 @@
- + @@ -71,15 +72,15 @@
- +
- -Cancel + +@Localizer["Cancel"] @code { private int _jobId; @@ -117,7 +118,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Job {JobId} {Error}", _jobId, ex.Message); - AddModuleMessage("Error Loading Job", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Job"], MessageType.Error); } } @@ -158,7 +159,7 @@ { job.NextExecution = DateTime.Parse(_nextExecution); } - + job.RetentionHistory = int.Parse(_retentionHistory); try @@ -170,12 +171,12 @@ catch (Exception ex) { await logger.LogError(ex, "Error Udate Job {Job} {Error}", job, ex.Message); - AddModuleMessage("Error Updating Job", MessageType.Error); + AddModuleMessage(Localizer["Error Updating Job"], MessageType.Error); } } else { - AddModuleMessage("You Must Provide The Job Name, Type, Frequency, and Retention", MessageType.Warning); + AddModuleMessage(Localizer["You Must Provide The Job Name, Type, Frequency, and Retention"], MessageType.Warning); } } diff --git a/Oqtane.Client/Modules/Admin/Jobs/Index.razor b/Oqtane.Client/Modules/Admin/Jobs/Index.razor index 6ba8c69b..5aefdcbe 100644 --- a/Oqtane.Client/Modules/Admin/Jobs/Index.razor +++ b/Oqtane.Client/Modules/Admin/Jobs/Index.razor @@ -1,46 +1,47 @@ -@namespace Oqtane.Modules.Admin.Jobs +@namespace Oqtane.Modules.Admin.Jobs @inherits ModuleBase @inject IJobService JobService +@inject IStringLocalizer Localizer @if (_jobs == null) { -

Loading...

+

@Localizer["Loading..."]

} else { - - + -

+
+
      - Name - Status - Frequency - Next Execution + @Localizer["Name"] + @Localizer["Status"] + @Localizer["Frequency"] + @Localizer["Next Execution"]  
- - - + + + @context.Name @DisplayStatus(context.IsEnabled, context.IsExecuting) @DisplayFrequency(context.Interval, context.Frequency) @context.NextExecution @if (context.IsStarted) - { - - } - else - { - - } + { + + } + else + { + + }
@@ -48,7 +49,7 @@ else @code { private List _jobs; - + public override SecurityAccessLevel SecurityAccessLevel { get { return SecurityAccessLevel.Host; } } protected override async Task OnParametersSetAsync() @@ -61,17 +62,17 @@ else var status = string.Empty; if (!isEnabled) { - status = "Disabled"; + status = Localizer["Disabled"]; } else { if (isExecuting) { - status = "Executing"; + status = Localizer["Executing"]; } else { - status = "Idle"; + status = Localizer["Idle"]; } } @@ -81,28 +82,28 @@ else private string DisplayFrequency(int interval, string frequency) { - var result = "Every " + interval.ToString() + " "; + var result = $"{Localizer["Every"]} {interval.ToString()} "; switch (frequency) { case "m": - result += "Minute"; + result += Localizer["Minute"]; break; case "H": - result += "Hour"; + result += Localizer["Hour"]; break; case "d": - result += "Day"; + result += Localizer["Day"]; break; case "M": - result += "Month"; + result += Localizer["Month"]; break; } - + if (interval > 1) { - result += "s"; + result += Localizer["s"]; } - + return result; } @@ -117,7 +118,7 @@ else catch (Exception ex) { await logger.LogError(ex, "Error Deleting Job {Job} {Error}", job, ex.Message); - AddModuleMessage("Error Deleting Job", MessageType.Error); + AddModuleMessage(Localizer["Error Deleting Job"], MessageType.Error); } } diff --git a/Oqtane.Client/Modules/Admin/Jobs/Log.razor b/Oqtane.Client/Modules/Admin/Jobs/Log.razor index 2d4ef706..b0049db7 100644 --- a/Oqtane.Client/Modules/Admin/Jobs/Log.razor +++ b/Oqtane.Client/Modules/Admin/Jobs/Log.razor @@ -1,19 +1,20 @@ -@namespace Oqtane.Modules.Admin.Jobs +@namespace Oqtane.Modules.Admin.Jobs @inherits ModuleBase @inject IJobLogService JobLogService +@inject IStringLocalizer Localizer @if (_jobLogs == null) { -

Loading...

+

@Localizer["Loading..."]

} else {
- Name - Status - Started - Finished + @Localizer["Name"] + @Localizer["Status"] + @Localizer["Started"] + @Localizer["Finished"]
@context.Job.Name @@ -49,17 +50,17 @@ else var status = string.Empty; if (isExecuting) { - status = "Executing"; + status = Localizer["Executing"]; } else { if (succeeded != null && succeeded.Value) { - status = "Succeeded"; + status = Localizer["Succeeded"]; } else { - status = "Failed"; + status = Localizer["Failed"]; } } diff --git a/Oqtane.Client/Modules/Admin/Languages/Add.razor b/Oqtane.Client/Modules/Admin/Languages/Add.razor new file mode 100644 index 00000000..7efbcf85 --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Languages/Add.razor @@ -0,0 +1,107 @@ +@namespace Oqtane.Modules.Admin.Languages +@inherits ModuleBase +@using System.Globalization +@using Microsoft.AspNetCore.Localization +@inject NavigationManager NavigationManager +@inject ILocalizationService LocalizationService +@inject ILanguageService LanguageService +@inject IStringLocalizer Localizer + +@if (_supportedCultures == null) +{ +

@Localizer["Loading..."]

+} +else +{ + @if (_supportedCultures?.Count() > 1) + { + + + + + + + + + +
+ + + +
+ + + +
+ + } + @Localizer["Cancel"] +} + +@code { + private string _code = string.Empty; + private string _isDefault = "False"; + + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; + + private IEnumerable _supportedCultures; + + protected override async Task OnParametersSetAsync() + { + _supportedCultures = await LocalizationService.GetCulturesAsync(); + if (_supportedCultures.Count() <= 1) + { + AddModuleMessage(Localizer["The Only Supported Culture That Has Been Defined Is English"], MessageType.Warning); + } + } + + private async Task SaveLanguage() + { + var language = new Language + { + SiteId = PageState.Page.SiteId, + Name = CultureInfo.GetCultureInfo(_code).DisplayName, + Code = _code, + IsDefault = (_isDefault == null ? false : Boolean.Parse(_isDefault)) + }; + + try + { + language = await LanguageService.AddLanguageAsync(language); + + if (language.IsDefault) + { + await SetCultureAsync(language.Code); + } + + await logger.LogInformation("Language Added {Language}", language); + + NavigationManager.NavigateTo(NavigateUrl()); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Adding Language {Language} {Error}", language, ex.Message); + AddModuleMessage(Localizer["Error Adding Language"], MessageType.Error); + } + } + + private async Task SetCultureAsync(string culture) + { + if (culture != CultureInfo.CurrentUICulture.Name) + { + var interop = new Interop(JSRuntime); + var localizationCookieValue = CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)); + await interop.SetCookie(CookieRequestCultureProvider.DefaultCookieName, localizationCookieValue, 360); + + NavigationManager.NavigateTo(NavigationManager.Uri, forceLoad: true); + } + } +} diff --git a/Oqtane.Client/Modules/Admin/Languages/Index.razor b/Oqtane.Client/Modules/Admin/Languages/Index.razor new file mode 100644 index 00000000..748c875b --- /dev/null +++ b/Oqtane.Client/Modules/Admin/Languages/Index.razor @@ -0,0 +1,56 @@ +@namespace Oqtane.Modules.Admin.Languages +@inherits ModuleBase +@inject ILanguageService LanguageService +@inject IStringLocalizer Localizer + +@if (_languages == null) +{ +

@Localizer["Loading..."]

+} +else +{ + + + +
+   + @Localizer["Name"] + @Localizer["Code"] + @Localizer["Default?"] +
+ + + @context.Name + @context.Code + + +
+} + +@code { + private List _languages; + + public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; + + protected override async Task OnParametersSetAsync() + { + _languages = await LanguageService.GetLanguagesAsync(PageState.Site.SiteId); + } + + private async Task DeleteLanguage(Language language) + { + try + { + await LanguageService.DeleteLanguageAsync(language.LanguageId); + await logger.LogInformation("Language Deleted {Language}", language); + + StateHasChanged(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Deleting Language {Language} {Error}", language, ex.Message); + + AddModuleMessage(Localizer["Error Deleting Language"], MessageType.Error); + } + } +} diff --git a/Oqtane.Client/Modules/Admin/Login/Index.razor b/Oqtane.Client/Modules/Admin/Login/Index.razor index 49815187..bbd2428a 100644 --- a/Oqtane.Client/Modules/Admin/Login/Index.razor +++ b/Oqtane.Client/Modules/Admin/Login/Index.razor @@ -3,38 +3,33 @@ @inject NavigationManager NavigationManager @inject IUserService UserService @inject IServiceProvider ServiceProvider +@inject IStringLocalizer Localizer @if (_message != string.Empty) { } - - ... - - - - @@ -75,11 +70,11 @@ if (user != null) { - _message = "User Account Verified Successfully. You Can Now Login With Your Username And Password Below."; + _message = Localizer["User Account Verified Successfully. You Can Now Login With Your Username And Password Below."]; } else { - _message = "User Account Could Not Be Verified. Please Contact Your Administrator For Further Instructions."; + _message = Localizer["User Account Could Not Be Verified. Please Contact Your Administrator For Further Instructions."]; _type = MessageType.Warning; } } @@ -87,7 +82,7 @@ private async Task Login() { - if (PageState.Runtime == Runtime.Server) + if (PageState.Runtime == Oqtane.Shared.Runtime.Server) { // server-side Blazor var user = new User(); @@ -108,7 +103,7 @@ else { await logger.LogInformation("Login Failed For Username {Username}", _username); - AddModuleMessage("Login Failed. Please Remember That Passwords Are Case Sensitive And User Accounts Require Email Verification When They Initially Created.", MessageType.Error); + AddModuleMessage(Localizer["Login Failed. Please Remember That Passwords Are Case Sensitive And User Accounts Require Email Verification When They Initially Created."], MessageType.Error); } } else @@ -129,7 +124,7 @@ else { await logger.LogInformation("Login Failed For Username {Username}", _username); - AddModuleMessage("Login Failed. Please Remember That Passwords Are Case Sensitive And User Accounts Require Verification When They Are Initially Created So You May Wish To Check Your Email.", MessageType.Error); + AddModuleMessage(Localizer["Login Failed. Please Remember That Passwords Are Case Sensitive And User Accounts Require Verification When They Are Initially Created So You May Wish To Check Your Email."], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Logs/Detail.razor b/Oqtane.Client/Modules/Admin/Logs/Detail.razor index 1baac265..481a9636 100644 --- a/Oqtane.Client/Modules/Admin/Logs/Detail.razor +++ b/Oqtane.Client/Modules/Admin/Logs/Detail.razor @@ -1,4 +1,4 @@ -@namespace Oqtane.Modules.Admin.Logs +@namespace Oqtane.Modules.Admin.Logs @using System.Globalization @inherits ModuleBase @inject NavigationManager NavigationManager @@ -6,134 +6,135 @@ @inject IPageService PageService @inject IPageModuleService PageModuleService @inject IUserService UserService +@inject IStringLocalizer Localizer - +
+ + + + + + + + + + + + + + + + + + + + + @if (_pageName != string.Empty) + { + } + @if (_moduleTitle != string.Empty) + { + } + @if (_username != string.Empty) + { + } + + + + + + + + + + + + + @if (!string.IsNullOrEmpty(_exception)) + { - - - - - @if (_pageName != string.Empty) - { - - - - - } - @if (_moduleTitle != string.Empty) - { - - - - - } - @if (_username != string.Empty) - { - - - - - } - - - - - - - - - - - - - @if (!string.IsNullOrEmpty(_exception)) - { - - - - - } - - - - - - - - -
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
- + - +
- + - +
- + - +
+ + + +
+ + + +
+ + + +
- + - +
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
-Cancel + } + + + + + + + + + + + + + + + + + +@Localizer["Cancel"] @code { private int _logId; @@ -167,7 +168,7 @@ _feature = log.Feature; _function = log.Function; _category = log.Category; - + if (log.PageId != null) { var page = await PageService.GetPageAsync(log.PageId.Value); @@ -176,7 +177,7 @@ _pageName = page.Name; } } - + if (log.PageId != null && log.ModuleId != null) { var pagemodule = await PageModuleService.GetPageModuleAsync(log.PageId.Value, log.ModuleId.Value); @@ -185,7 +186,7 @@ _moduleTitle = pagemodule.Title; } } - + if (log.UserId != null) { var user = await UserService.GetUserAsync(log.UserId.Value, PageState.Site.SiteId); @@ -194,7 +195,7 @@ _username = user.Username; } } - + _url = log.Url; _template = log.MessageTemplate; _message = log.Message; @@ -206,7 +207,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Log {LogId} {Error}", _logId, ex.Message); - AddModuleMessage("Error Loading Log", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Log"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Logs/Index.razor b/Oqtane.Client/Modules/Admin/Logs/Index.razor index 3fcb0fb5..3ace61fd 100644 --- a/Oqtane.Client/Modules/Admin/Logs/Index.razor +++ b/Oqtane.Client/Modules/Admin/Logs/Index.razor @@ -1,41 +1,42 @@ -@namespace Oqtane.Modules.Admin.Logs +@namespace Oqtane.Modules.Admin.Logs @inherits ModuleBase @inject ILogService LogService +@inject IStringLocalizer Localizer @if (_logs == null) { -

Loading...

+

@Localizer["Loading..."]

} else { - - - - + + + + - + @@ -66,7 +67,7 @@ else } else { -

No Logs Match The Criteria Specified

+

@Localizer["No Logs Match The Criteria Specified"]

} } @@ -87,7 +88,7 @@ else catch (Exception ex) { await logger.LogError(ex, "Error Loading Logs {Error}", ex.Message); - AddModuleMessage("Error Loading Logs", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Logs"], MessageType.Error); } } @@ -102,7 +103,7 @@ else catch (Exception ex) { await logger.LogError(ex, "Error Loading Logs {Error}", ex.Message); - AddModuleMessage("Error Loading Logs", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Logs"], MessageType.Error); } } @@ -117,7 +118,7 @@ else catch (Exception ex) { await logger.LogError(ex, "Error Loading Logs {Error}", ex.Message); - AddModuleMessage("Error Loading Logs", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Logs"], MessageType.Error); } } @@ -133,7 +134,7 @@ else catch (Exception ex) { await logger.LogError(ex, "Error Loading Logs {Error}", ex.Message); - AddModuleMessage("Error Loading Logs", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Logs"], MessageType.Error); } } diff --git a/Oqtane.Client/Modules/Admin/ModuleCreator/Index.razor b/Oqtane.Client/Modules/Admin/ModuleCreator/Index.razor index cafecf3b..66794ad5 100644 --- a/Oqtane.Client/Modules/Admin/ModuleCreator/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleCreator/Index.razor @@ -4,11 +4,17 @@ @inject IModuleDefinitionService ModuleDefinitionService @inject IModuleService ModuleService @inject ISystemService SystemService +@inject ISettingService SettingService +@inject IStringLocalizer Localizer +@using System.Text.RegularExpressions +@using System.IO; +@if (string.IsNullOrEmpty(_moduledefinitionname)) +{
- + - + - +  DateLevelFeatureFunction@Localizer["Date"]@Localizer["Level"]@Localizer["Feature"]@Localizer["Function"] @context.LogDate @context.Level @context.Feature
@@ -63,7 +69,7 @@ { }
- + @@ -16,7 +22,7 @@
- + @@ -24,7 +30,7 @@
- + @@ -32,19 +38,19 @@
- +
- +
- + @@ -71,10 +77,15 @@
- - + +} +else +{ + +} @code { + private string _moduledefinitionname = ""; private string _owner = string.Empty; private string _module = string.Empty; private string _description = string.Empty; @@ -86,25 +97,37 @@ protected override void OnInitialized() { - AddModuleMessage("Please Note That Once You Select The Create Module Button The Application Must Restart In Order To Complete The Process. If You Create An External Module You Will Need To Compile The Source Code And Then Relaunch Your Site In Order To Make It Functional.", MessageType.Info); + _moduledefinitionname = SettingService.GetSetting(ModuleState.Settings, "ModuleDefinitionName", ""); + if (string.IsNullOrEmpty(_moduledefinitionname)) + { + _owner = ModuleState.Title; + _module = ModuleState.Title; + _description = ModuleState.Title; + } + else + { + AddModuleMessage(Localizer["Once You Have Compiled The Module And Restarted The Application You Can Activate The Module Below"], MessageType.Info); + } } private async Task CreateModule() { try { - if (!string.IsNullOrEmpty(_owner) && !string.IsNullOrEmpty(_module) && _template != "-") + if (IsValid(_owner) && IsValid(_module) && _owner != _module && _template != "-") { - ShowProgressIndicator(); - var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 5); + var moduleDefinition = new ModuleDefinition { Owner = _owner, Name = _module, Description = _description, Template = _template, Version = _reference }; + moduleDefinition = await ModuleDefinitionService.CreateModuleDefinitionAsync(moduleDefinition); - var moduleDefinition = new ModuleDefinition { Owner = _owner.Replace(" ", ""), Name = _module.Replace(" ", ""), Description = _description, Template = _template, Version = _reference }; - await ModuleDefinitionService.CreateModuleDefinitionAsync(moduleDefinition, ModuleState.ModuleId); + var settings = ModuleState.Settings; + SettingService.SetSetting(settings, "ModuleDefinitionName", moduleDefinition.ModuleDefinitionName); + await SettingService.UpdateModuleSettingsAsync(settings, ModuleState.ModuleId); + + AddModuleMessage(Localizer["The Source Code For Your Module Has Been Created At The Location Specified Below And Must Be Compiled In Order To Make It Functional. Once It Has Been Compiled You Must Restart Your Application To Apply These Changes.", NavigateUrl("admin/system")], MessageType.Success); } else { - AddModuleMessage("You Must Provide An Owner, Module Name, And Template", MessageType.Warning); + AddModuleMessage(Localizer["You Must Provide A Valid Owner Name And Module Name ( ie. No Punctuation Or Spaces And The Values Cannot Be The Same ) And Choose A Template"], MessageType.Warning); } } catch (Exception ex) @@ -113,6 +136,31 @@ } } + private async Task ActivateModule() + { + try + { + if (!string.IsNullOrEmpty(_moduledefinitionname)) + { + Module module = await ModuleService.GetModuleAsync(ModuleState.ModuleId); + module.ModuleDefinitionName = _moduledefinitionname; + await ModuleService.UpdateModuleAsync(module); + ClearModuleMessage(); + NavigationManager.NavigateTo(NavigateUrl()); + } + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Activating Module"); + } + } + + private bool IsValid(string name) + { + // must contain letters, underscores and digits and first character must be letter or underscore + return !string.IsNullOrEmpty(name) && Regex.IsMatch(name, "^[A-Za-z_][A-Za-z0-9_]*$"); + } + private async void TemplateChanged(ChangeEventArgs e) { try @@ -124,14 +172,18 @@ Dictionary systeminfo = await SystemService.GetSystemInfoAsync(); if (systeminfo != null) { - string[] path = systeminfo["serverpath"].Split('\\'); + string[] path = systeminfo["serverpath"].Split(Path.DirectorySeparatorChar); if (_template == "internal") { - _location = string.Join("\\", path, 0, path.Length - 1) + "\\Oqtane.Client\\Modules\\" + _owner + "." + _module; + _location = string.Join(Path.DirectorySeparatorChar, path, 0, path.Length - 1) + + Path.DirectorySeparatorChar + "Oqtane.Client" + + Path.DirectorySeparatorChar + "Modules" + + Path.DirectorySeparatorChar + _owner + "." + _module; } else { - _location = string.Join("\\", path, 0, path.Length - 2) + "\\" + _owner + "." + _module; + _location = string.Join(Path.DirectorySeparatorChar, path, 0, path.Length - 2) + + Path.DirectorySeparatorChar + _owner + "." + _module; } } } @@ -140,7 +192,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Getting System Info {Error}", ex.Message); - AddModuleMessage("Error Getting System Info", MessageType.Error); + AddModuleMessage(Localizer["Error Getting System Info"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor index 526f1af4..92f26844 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Add.razor @@ -1,38 +1,39 @@ -@namespace Oqtane.Modules.Admin.ModuleDefinitions +@namespace Oqtane.Modules.Admin.ModuleDefinitions @inherits ModuleBase @inject NavigationManager NavigationManager @inject IFileService FileService @inject IModuleDefinitionService ModuleDefinitionService @inject IPackageService PackageService +@inject IStringLocalizer Localizer @if (_packages != null) { @if (_packages.Count > 0) { - +
- Name - Version + @Localizer["Name"] + @Localizer["Version"]
@context.Name @context.Version - +
} - + - - + + - + @@ -46,7 +47,7 @@ else public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; - protected override async Task OnInitializedAsync() + protected override async Task OnParametersSetAsync() { try { @@ -58,7 +59,7 @@ else if (_moduleDefinitions == null) { await logger.LogError(ex, "Error Loading Modules {Error}", ex.Message); - AddModuleMessage("Error Loading Modules", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Modules"], MessageType.Error); } } } @@ -84,15 +85,13 @@ else { await PackageService.DownloadPackageAsync(moduledefinitionname, version, "Modules"); await logger.LogInformation("Module Downloaded {ModuleDefinitionName} {Version}", moduledefinitionname, version); - ShowProgressIndicator(); - var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 10); await ModuleDefinitionService.InstallModuleDefinitionsAsync(); + AddModuleMessage(Localizer["Module Installed Successfully. You Must Restart Your Application To Apply These Changes.", NavigateUrl("admin/system")], MessageType.Success); } catch (Exception ex) { await logger.LogError(ex, "Error Downloading Module {ModuleDefinitionName} {Version} {Error}", moduledefinitionname, version, ex.Message); - AddModuleMessage("Error Downloading Module", MessageType.Error); + AddModuleMessage(Localizer["Error Downloading Module"], MessageType.Error); } } @@ -100,15 +99,14 @@ else { try { - ShowProgressIndicator(); - var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 10); await ModuleDefinitionService.DeleteModuleDefinitionAsync(moduleDefinition.ModuleDefinitionId, moduleDefinition.SiteId); + AddModuleMessage(Localizer["Module Deleted Successfully"], MessageType.Success); + StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Deleting Module {ModuleDefinition} {Error}", moduleDefinition, ex.Message); - AddModuleMessage("Error Deleting Module", MessageType.Error); + AddModuleMessage(Localizer["Error Deleting Module"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Modules/Export.razor b/Oqtane.Client/Modules/Admin/Modules/Export.razor index eaa0bc92..fd1aa71c 100644 --- a/Oqtane.Client/Modules/Admin/Modules/Export.razor +++ b/Oqtane.Client/Modules/Admin/Modules/Export.razor @@ -1,13 +1,14 @@ -@namespace Oqtane.Modules.Admin.Modules +@namespace Oqtane.Modules.Admin.Modules @inherits ModuleBase @inject NavigationManager NavigationManager @inject IModuleService ModuleService +@inject IStringLocalizer Localizer
- + @@ -42,8 +43,8 @@ - - Cancel + + @Localizer["Cancel"] } @code { @@ -69,7 +70,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Packages {Error}", ex.Message); - AddModuleMessage("Error Loading Packages", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Packages"], MessageType.Error); } } @@ -77,14 +78,12 @@ { try { - ShowProgressIndicator(); - var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 10); await ModuleDefinitionService.InstallModuleDefinitionsAsync(); + AddModuleMessage(Localizer["Module Installed Successfully. You Must Restart Your Application To Apply These Changes.", NavigateUrl("admin/system")], MessageType.Success); } catch (Exception ex) { - await logger.LogError(ex, "Error Installating Module"); + await logger.LogError(ex, "Error Installing Module"); } } @@ -94,13 +93,13 @@ { await PackageService.DownloadPackageAsync(packageid, version, "Modules"); await logger.LogInformation("Module {ModuleDefinitionName} {Version} Downloaded Successfully", packageid, version); - AddModuleMessage("Modules Downloaded Successfully. Click Install To Complete Installation.", MessageType.Success); + AddModuleMessage(Localizer["Modules Downloaded Successfully. Click Install To Complete Installation."], MessageType.Success); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Downloading Module {ModuleDefinitionName} {Version}", packageid, version); - AddModuleMessage("Error Downloading Module", MessageType.Error); + AddModuleMessage(Localizer["Error Downloading Module"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor index 51ed8992..70310bd4 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Edit.razor @@ -1,14 +1,15 @@ -@namespace Oqtane.Modules.Admin.ModuleDefinitions +@namespace Oqtane.Modules.Admin.ModuleDefinitions @inherits ModuleBase @inject IModuleDefinitionService ModuleDefinitionService @inject NavigationManager NavigationManager +@inject IStringLocalizer Localizer - +
- + @@ -16,7 +17,7 @@
- + @@ -24,18 +25,18 @@
- +
-
+
- + @@ -43,7 +44,7 @@
- + @@ -51,7 +52,7 @@
- + @@ -59,7 +60,7 @@
- + @@ -67,7 +68,7 @@
- + @@ -75,7 +76,7 @@
- + @@ -83,7 +84,7 @@
- + @@ -92,7 +93,7 @@
- +
@@ -102,9 +103,10 @@
- -Cancel -

+ +@Localizer["Cancel"] +
+
@code { @@ -159,7 +161,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message); - AddModuleMessage("Error Loading Module", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Module"], MessageType.Error); } } @@ -188,7 +190,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Saving ModuleDefinition {ModuleDefinitionId} {Error}", _moduleDefinitionId, ex.Message); - AddModuleMessage("Error Saving Module", MessageType.Error); + AddModuleMessage(Localizer["Error Saving Module"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor index fabf6973..538bf700 100644 --- a/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor +++ b/Oqtane.Client/Modules/Admin/ModuleDefinitions/Index.razor @@ -1,40 +1,41 @@ -@namespace Oqtane.Modules.Admin.ModuleDefinitions +@namespace Oqtane.Modules.Admin.ModuleDefinitions @inherits ModuleBase @inject NavigationManager NavigationManager @inject IModuleDefinitionService ModuleDefinitionService @inject IPackageService PackageService +@inject IStringLocalizer Localizer @if (_moduleDefinitions == null) { -

Loading...

+

@Localizer["Loading..."]

} else { - +
   NameVersion@Localizer["Name"]@Localizer["Version"]   @if (context.AssemblyName != "Oqtane.Client") - { - - } + { + + } @context.Name @context.Version @if (UpgradeAvailable(context.ModuleDefinitionName, context.Version)) - { - - } + { + + }
- + @@ -15,15 +16,15 @@
- -Cancel + +@Localizer["Cancel"] @code { private string _content = string.Empty; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; - public override string Title => "Export Module"; + public override string Title => "Export Content"; private async Task ExportModule() diff --git a/Oqtane.Client/Modules/Admin/Modules/Import.razor b/Oqtane.Client/Modules/Admin/Modules/Import.razor index 1d99bcb9..423361f6 100644 --- a/Oqtane.Client/Modules/Admin/Modules/Import.razor +++ b/Oqtane.Client/Modules/Admin/Modules/Import.razor @@ -1,13 +1,14 @@ -@namespace Oqtane.Modules.Admin.Modules +@namespace Oqtane.Modules.Admin.Modules @inherits ModuleBase @inject NavigationManager NavigationManager @inject IModuleService ModuleService +@inject IStringLocalizer Localizer
- + @@ -15,15 +16,15 @@
- -Cancel + +@Localizer["Cancel"] @code { private string _content = string.Empty; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; - public override string Title => "Import Module"; + public override string Title => "Import Content"; private async Task ImportModule() { @@ -34,22 +35,22 @@ bool success = await ModuleService.ImportModuleAsync(ModuleState.ModuleId, _content); if (success) { - AddModuleMessage("Content Imported Successfully", MessageType.Success); + AddModuleMessage(Localizer["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); + AddModuleMessage(Localizer["A Problem Was Encountered Importing Content. Please Ensure The Content Is Formatted Correctly For The Module."], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Importing Module {ModuleId} {Error}", ModuleState.ModuleId, ex.Message); - AddModuleMessage("Error Importing Module", MessageType.Error); + AddModuleMessage(Localizer["Error Importing Module"], MessageType.Error); } } else { - AddModuleMessage("You Must Enter Some Content To Import", MessageType.Warning); + AddModuleMessage(Localizer["You Must Enter Some Content To Import"], MessageType.Warning); } } } diff --git a/Oqtane.Client/Modules/Admin/Modules/Settings.razor b/Oqtane.Client/Modules/Admin/Modules/Settings.razor index 31cedb01..c6ebe5c3 100644 --- a/Oqtane.Client/Modules/Admin/Modules/Settings.razor +++ b/Oqtane.Client/Modules/Admin/Modules/Settings.razor @@ -1,18 +1,20 @@ -@namespace Oqtane.Modules.Admin.Modules +@namespace Oqtane.Modules.Admin.Modules +@using Oqtane.Interfaces @inherits ModuleBase @inject NavigationManager NavigationManager @inject IThemeService ThemeService @inject IModuleService ModuleService @inject IPageModuleService PageModuleService +@inject IStringLocalizer Localizer - + @if (_containers != null) {
- + @@ -20,11 +22,11 @@
- +
- +
- +
}
- + @if (_permissions != null) { @@ -76,13 +78,13 @@ @if (_settingsModuleType != null) { - + @DynamicComponent } - -Cancel + +@Localizer["Cancel"] @code { private List _containers = new List(); @@ -120,7 +122,7 @@ _permissionNames = ModuleState.ModuleDefinition.PermissionNames; _pageId = ModuleState.PageId.ToString(); - _settingsModuleType = Type.GetType(ModuleState.ModuleType); + _settingsModuleType = Type.GetType(ModuleState.ModuleDefinition.ControlTypeTemplate.Replace(Constants.ActionToken, PageState.Action), false, true); if (_settingsModuleType != null) { var moduleobject = Activator.CreateInstance(_settingsModuleType) as IModuleControl; @@ -136,7 +138,7 @@ builder.AddComponentReferenceCapture(1, inst => { _settings = Convert.ChangeType(inst, _settingsModuleType); }); builder.CloseComponent(); }; - } + } } private async Task SaveModule() @@ -161,15 +163,16 @@ module.Permissions = _permissionGrid.GetPermissions(); await ModuleService.UpdateModuleAsync(module); - if (_settingsModuleType != null) + + if (_settings is ISettingsControl control) { - var moduleType = Type.GetType(ModuleState.ModuleType); - if (moduleType != null) - { - moduleType.GetMethod("UpdateSettings")?.Invoke(_settings, null); // method must be public in settings component - } + await control.UpdateSettings(); + } + else + { + // Compatibility 2.0 fallback + _settings?.GetType().GetMethod("UpdateSettings")?.Invoke(_settings, null); // method must be public in settings component } - NavigationManager.NavigateTo(NavigateUrl()); } diff --git a/Oqtane.Client/Modules/Admin/Pages/Add.razor b/Oqtane.Client/Modules/Admin/Pages/Add.razor index f666441b..171ab885 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Add.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Add.razor @@ -1,17 +1,18 @@ -@namespace Oqtane.Modules.Admin.Pages +@namespace Oqtane.Modules.Admin.Pages @inherits ModuleBase @inject NavigationManager NavigationManager @inject IPageService PageService @inject IThemeService ThemeService +@inject IStringLocalizer Localizer - + @if (_themeList != null) {
- + @@ -19,11 +20,11 @@
- +
- + @if (_children != null && _children.Count > 0 && (_insert == "<" || _insert == ">")) {
- +
- + @@ -78,18 +79,18 @@
- +
-
+
@@ -177,7 +178,7 @@ } - +
- + @@ -97,11 +98,11 @@
- +
- +
- +
- + @@ -164,12 +165,12 @@
- +
@@ -187,8 +188,8 @@
- -Cancel + + @code { private List _themeList; @@ -229,7 +230,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Initializing Page {Error}", ex.Message); - AddModuleMessage("Error Initializing Page", MessageType.Error); + AddModuleMessage(Localizer["Error Initializing Page"], MessageType.Error); } } @@ -264,7 +265,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Child Pages For Parent {PageId} {Error}", _parentid, ex.Message); - AddModuleMessage("Error Loading Child Pages For Parent", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Child Pages For Parent"], MessageType.Error); } } @@ -290,7 +291,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Pane Layouts For Theme {ThemeType} {Error}", _themetype, ex.Message); - AddModuleMessage("Error Loading Pane Layouts For Theme", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Pane Layouts For Theme"], MessageType.Error); } } @@ -336,7 +337,7 @@ 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); + AddModuleMessage(Localizer["A page with path {0} already exists for the selected parent page. The page path needs to be unique for the selected parent.", _path], MessageType.Warning); return; } @@ -385,18 +386,37 @@ await PageService.UpdatePageOrderAsync(page.SiteId, page.PageId, page.ParentId); await logger.LogInformation("Page Added {Page}", page); - NavigationManager.NavigateTo(NavigateUrl(page.Path)); + if (PageState.QueryString.ContainsKey("cp")) + { + NavigationManager.NavigateTo(NavigateUrl(PageState.Pages.First(item => item.PageId == int.Parse(PageState.QueryString["cp"])).Path)); + } + else + { + NavigationManager.NavigateTo(NavigateUrl(page.Path)); + } } else { - AddModuleMessage("You Must Provide Page Name And Theme/Layout", MessageType.Warning); + AddModuleMessage(Localizer["You Must Provide Page Name And Theme/Layout"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Saving Page {Page} {Error}", page, ex.Message); - AddModuleMessage("Error Saving Page", MessageType.Error); + AddModuleMessage(Localizer["Error Saving Page"], MessageType.Error); + } + } + + private void Cancel() + { + if (PageState.QueryString.ContainsKey("cp")) + { + NavigationManager.NavigateTo(NavigateUrl(PageState.Pages.First(item => item.PageId == int.Parse(PageState.QueryString["cp"])).Path)); + } + else + { + NavigationManager.NavigateTo(NavigateUrl()); } } diff --git a/Oqtane.Client/Modules/Admin/Pages/Edit.razor b/Oqtane.Client/Modules/Admin/Pages/Edit.razor index ee191dd8..5efdd992 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Edit.razor @@ -1,17 +1,18 @@ -@namespace Oqtane.Modules.Admin.Pages +@namespace Oqtane.Modules.Admin.Pages @inherits ModuleBase @inject NavigationManager NavigationManager @inject IPageService PageService @inject IThemeService ThemeService +@inject IStringLocalizer Localizer - + @if (_themeList != null) {
- + @@ -19,11 +20,11 @@
- +
- + @if (_children != null && _children.Count > 0 && (_insert == "<" || _insert == ">")) {
- +
- + @@ -89,18 +90,18 @@
- +
-
+
@@ -190,7 +191,7 @@ } - + @if (_permissions != null) {
- + @@ -108,7 +109,7 @@
- +
- +
- +
- + @@ -175,12 +176,12 @@
- +
@@ -203,8 +204,8 @@ } - -Cancel + + @code { private List _themeList; @@ -308,7 +309,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Page {PageId} {Error}", _pageId, ex.Message); - AddModuleMessage("Error Loading Page", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Page"], MessageType.Error); } } @@ -351,7 +352,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Child Pages For Parent {PageId} {Error}", _parentid, ex.Message); - AddModuleMessage("Error Loading Child Pages For Parent", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Child Pages For Parent"], MessageType.Error); } } @@ -377,7 +378,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Pane Layouts For Theme {ThemeType} {Error}", _themetype, ex.Message); - AddModuleMessage("Error Loading Pane Layouts For Theme", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Pane Layouts For Theme"], MessageType.Error); } } @@ -423,7 +424,7 @@ 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); + AddModuleMessage(Localizer["A page with path {0} already exists for the selected parent page. The page path needs to be unique for the selected parent.", _path], MessageType.Warning); return; } @@ -492,17 +493,36 @@ } await logger.LogInformation("Page Saved {Page}", page); - NavigationManager.NavigateTo(NavigateUrl(page.Path)); + if (PageState.QueryString.ContainsKey("cp")) + { + NavigationManager.NavigateTo(NavigateUrl(PageState.Pages.First(item => item.PageId == int.Parse(PageState.QueryString["cp"])).Path)); + } + else + { + NavigationManager.NavigateTo(NavigateUrl(page.Path)); + } } else { - AddModuleMessage("You Must Provide Page Name", MessageType.Warning); + AddModuleMessage(Localizer["You Must Provide Page Name"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Saving Page {Page} {Error}", page, ex.Message); - AddModuleMessage("Error Saving Page", MessageType.Error); + AddModuleMessage(Localizer["Error Saving Page"], MessageType.Error); + } + } + + private void Cancel() + { + if (PageState.QueryString.ContainsKey("cp")) + { + NavigationManager.NavigateTo(NavigateUrl(PageState.Pages.First(item => item.PageId == int.Parse(PageState.QueryString["cp"])).Path)); + } + else + { + NavigationManager.NavigateTo(NavigateUrl()); } } diff --git a/Oqtane.Client/Modules/Admin/Pages/Index.razor b/Oqtane.Client/Modules/Admin/Pages/Index.razor index 02d1d14c..4ff925fc 100644 --- a/Oqtane.Client/Modules/Admin/Pages/Index.razor +++ b/Oqtane.Client/Modules/Admin/Pages/Index.razor @@ -1,21 +1,22 @@ -@namespace Oqtane.Modules.Admin.Pages +@namespace Oqtane.Modules.Admin.Pages @inherits ModuleBase @inject NavigationManager NavigationManager @inject IPageService PageService +@inject IStringLocalizer Localizer @if (PageState.Pages != null) { - +
- + - - + + @@ -37,7 +38,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Deleting Page {Page} {Error}", page, ex.Message); - AddModuleMessage("Error Deleting Page", MessageType.Error); + AddModuleMessage(Localizer["Error Deleting Page"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Profiles/Edit.razor b/Oqtane.Client/Modules/Admin/Profiles/Edit.razor index 44843e8e..86a71c8c 100644 --- a/Oqtane.Client/Modules/Admin/Profiles/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Profiles/Edit.razor @@ -2,97 +2,98 @@ @inherits ModuleBase @inject NavigationManager NavigationManager @inject IProfileService ProfileService +@inject IStringLocalizer Localizer -
   Name@Localizer["Name"] @(new string('-', context.Level * 2))@(context.Name)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- - - -
- -Cancel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ +@Localizer["Cancel"] @code { private int _profileid = -1; @@ -137,7 +138,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Profile {ProfileId} {Error}", _profileid, ex.Message); - AddModuleMessage("Error Loading Profile", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Profile"], MessageType.Error); } } @@ -169,7 +170,8 @@ if (_profileid != -1) { profile = await ProfileService.UpdateProfileAsync(profile); - }else + } + else { profile = await ProfileService.AddProfileAsync(profile); } @@ -180,7 +182,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Saving Profile {ProfleId} {Error}", _profileid, ex.Message); - AddModuleMessage("Error Saving Profile", MessageType.Error); + AddModuleMessage(Localizer["Error Saving Profile"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Profiles/Index.razor b/Oqtane.Client/Modules/Admin/Profiles/Index.razor index 36df1731..0bdf8554 100644 --- a/Oqtane.Client/Modules/Admin/Profiles/Index.razor +++ b/Oqtane.Client/Modules/Admin/Profiles/Index.razor @@ -1,24 +1,25 @@ -@namespace Oqtane.Modules.Admin.Profiles +@namespace Oqtane.Modules.Admin.Profiles @inherits ModuleBase @inject IProfileService ProfileService +@inject IStringLocalizer Localizer @if (_profiles == null) { -

Loading...

+

@Localizer["Loading..."]

} else { - +
    - Name + @Localizer["Name"]
- - + + @context.Name
@@ -40,12 +41,12 @@ else { await ProfileService.DeleteProfileAsync(profileId); await logger.LogInformation("Profile Deleted {ProfileId}", profileId); - AddModuleMessage("Profile Deleted", MessageType.Success); + AddModuleMessage(Localizer["Profile Deleted"], MessageType.Success); } catch (Exception ex) { await logger.LogError(ex, "Error Deleting Profile {ProfileId} {Error}", profileId, ex.Message); - AddModuleMessage("Error Deleting Profile", MessageType.Error); + AddModuleMessage(Localizer["Error Deleting Profile"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor b/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor index 220f5ffe..2d81476a 100644 --- a/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor +++ b/Oqtane.Client/Modules/Admin/RecycleBin/Index.razor @@ -1,16 +1,17 @@ -@namespace Oqtane.Modules.Admin.RecycleBin +@namespace Oqtane.Modules.Admin.RecycleBin @inherits ModuleBase @inject NavigationManager NavigationManager @inject IPageModuleService PageModuleService @inject IModuleService ModuleService @inject IPageService PageService +@inject IStringLocalizer Localizer - + @if (_pages == null) {
-

No Deleted Pages

+

@Localizer["No Deleted Pages"]

} else { @@ -18,13 +19,13 @@
    - Name - Deleted By - Deleted On + @Localizer["Name"] + @Localizer["Deleted By"] + @Localizer["Deleted On"]
- + @context.Name @context.DeletedBy @context.DeletedOn @@ -32,11 +33,11 @@ }
- + @if (_modules == null) {
-

No Deleted Modules

+

@Localizer["No Deleted Modules"]

} else { @@ -44,14 +45,14 @@
    - Page - Module - Deleted By - Deleted On + @Localizer["Page"] + @Localizer["Module"] + @Localizer["Deleted By"] + @Localizer["Deleted On"]
- - + + @PageState.Pages.Find(item => item.PageId == context.PageId).Name @context.Title @context.DeletedBy @@ -77,7 +78,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Deleted Pages Or Modules {Error}", ex.Message); - AddModuleMessage("Error Loading Deleted Pages Or Modules", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Deleted Pages Or Modules"], MessageType.Error); } } @@ -104,7 +105,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Restoring Deleted Page {Page} {Error}", page, ex.Message); - AddModuleMessage("Error Restoring Deleted Page", MessageType.Error); + AddModuleMessage(Localizer["Error Restoring Deleted Page"], MessageType.Error); } } @@ -139,7 +140,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Restoring Deleted Module {Module} {Error}", module, ex.Message); - AddModuleMessage("Error Restoring Deleted Module", MessageType.Error); + AddModuleMessage(Localizer["Error Restoring Deleted Module"], MessageType.Error); } } @@ -150,12 +151,12 @@ await PageModuleService.DeletePageModuleAsync(module.PageModuleId); // check if there are any remaining module instances in the site _modules = await ModuleService.GetModulesAsync(PageState.Site.SiteId); - + if (!_modules.Exists(item => item.ModuleId == module.ModuleId)) { await ModuleService.DeleteModuleAsync(module.ModuleId); } - + await logger.LogInformation("Module Permanently Deleted {Module}", module); await Load(); StateHasChanged(); @@ -163,7 +164,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Permanently Deleting Module {Module} {Error}", module, ex.Message); - AddModuleMessage("Error Permanently Deleting Module", MessageType.Error); + AddModuleMessage(Localizer["Error Permanently Deleting Module"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Register/Index.razor b/Oqtane.Client/Modules/Admin/Register/Index.razor index 2ea64944..a9789507 100644 --- a/Oqtane.Client/Modules/Admin/Register/Index.razor +++ b/Oqtane.Client/Modules/Admin/Register/Index.razor @@ -1,7 +1,8 @@ -@namespace Oqtane.Modules.Admin.Register +@namespace Oqtane.Modules.Admin.Register @inherits ModuleBase @inject NavigationManager NavigationManager @inject IUserService UserService +@inject IStringLocalizer Localizer @if (PageState.Site.AllowRegistration) { @@ -10,41 +11,41 @@ ... - + - +
- +
- +
- +
- +
- +
- - + +
} else { - + } @code { @@ -79,28 +80,28 @@ else if (user != null) { await logger.LogInformation("User Created {Username} {Email}", _username, _email); - AddModuleMessage("User Account Created. Please Check Your Email For Verification Instructions.", MessageType.Info); + AddModuleMessage(Localizer["User Account Created. Please Check Your Email For Verification Instructions."], MessageType.Info); } else { await logger.LogError("Error Adding User {Username} {Email}", _username, _email); - AddModuleMessage("Error Adding User. Please Ensure Password Meets Complexity Requirements And Username Is Not Already In Use.", MessageType.Error); + AddModuleMessage(Localizer["Error Adding User. Please Ensure Password Meets Complexity Requirements And Username Is Not Already In Use."], MessageType.Error); } } else { - AddModuleMessage("Passwords Entered Do Not Match", MessageType.Warning); + AddModuleMessage(Localizer["Passwords Entered Do Not Match"], MessageType.Warning); } } else { - AddModuleMessage("You Must Provide A Username, Password, and Email Address", MessageType.Warning); + AddModuleMessage(Localizer["You Must Provide A Username, Password, and Email Address"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Adding User {Username} {Email} {Error}", _username, _email, ex.Message); - AddModuleMessage("Error Adding User", MessageType.Error); + AddModuleMessage(Localizer["Error Adding User"], MessageType.Error); } } diff --git a/Oqtane.Client/Modules/Admin/Reset/Index.razor b/Oqtane.Client/Modules/Admin/Reset/Index.razor index b6e4eb66..4ee8ed15 100644 --- a/Oqtane.Client/Modules/Admin/Reset/Index.razor +++ b/Oqtane.Client/Modules/Admin/Reset/Index.razor @@ -1,23 +1,24 @@ -@namespace Oqtane.Modules.Admin.Reset +@namespace Oqtane.Modules.Admin.Reset @inherits ModuleBase @inject NavigationManager NavigationManager @inject IUserService UserService +@inject IStringLocalizer Localizer
- +
- +
- +
- - + +
@code { @@ -63,23 +64,23 @@ else { await logger.LogError("Error Resetting User Password {Username}", _username); - AddModuleMessage("Error Resetting User Password. Please Ensure Password Meets Complexity Requirements.", MessageType.Error); + AddModuleMessage(Localizer["Error Resetting User Password. Please Ensure Password Meets Complexity Requirements."], MessageType.Error); } } else { - AddModuleMessage("Passwords Entered Do Not Match", MessageType.Warning); + AddModuleMessage(Localizer["Passwords Entered Do Not Match"], MessageType.Warning); } } else { - AddModuleMessage("You Must Provide A Username, Password, and Email Address", MessageType.Warning); + AddModuleMessage(Localizer["You Must Provide A Username, Password, and Email Address"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Resetting User Password {Username} {Error}", _username, ex.Message); - AddModuleMessage("Error Resetting User Password", MessageType.Error); + AddModuleMessage(Localizer["Error Resetting User Password"], MessageType.Error); } } diff --git a/Oqtane.Client/Modules/Admin/Roles/Add.razor b/Oqtane.Client/Modules/Admin/Roles/Add.razor index 34e93e2d..c5bc2a38 100644 --- a/Oqtane.Client/Modules/Admin/Roles/Add.razor +++ b/Oqtane.Client/Modules/Admin/Roles/Add.razor @@ -1,12 +1,13 @@ -@namespace Oqtane.Modules.Admin.Roles +@namespace Oqtane.Modules.Admin.Roles @inherits ModuleBase @inject NavigationManager NavigationManager @inject IRoleService RoleService +@inject IStringLocalizer Localizer
- + @@ -14,7 +15,7 @@
- + @@ -22,20 +23,20 @@
- +
- -Cancel + +@Localizer["Cancel"] -@code { +@code { private string _name = string.Empty; private string _description = string.Empty; private string _isautoassigned = "False"; @@ -61,7 +62,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Adding Role {Role} {Error}", role, ex.Message); - AddModuleMessage("Error Adding Role", MessageType.Error); + AddModuleMessage(Localizer["Error Adding Role"], MessageType.Error); } } diff --git a/Oqtane.Client/Modules/Admin/Roles/Edit.razor b/Oqtane.Client/Modules/Admin/Roles/Edit.razor index 4b0dd0e0..bac812c9 100644 --- a/Oqtane.Client/Modules/Admin/Roles/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Roles/Edit.razor @@ -1,12 +1,13 @@ -@namespace Oqtane.Modules.Admin.Roles +@namespace Oqtane.Modules.Admin.Roles @inherits ModuleBase @inject NavigationManager NavigationManager @inject IRoleService RoleService +@inject IStringLocalizer Localizer
- + @@ -14,7 +15,7 @@
- + @@ -22,18 +23,18 @@
- +
- -Cancel + +@Localizer["Cancel"] @code { private int _roleid; @@ -59,7 +60,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Role {RoleId} {Error}", _roleid, ex.Message); - AddModuleMessage("Error Loading Role", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Role"], MessageType.Error); } } @@ -80,7 +81,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Saving Role {Role} {Error}", role, ex.Message); - AddModuleMessage("Error Saving Role", MessageType.Error); + AddModuleMessage(Localizer["Error Saving Role"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Roles/Index.razor b/Oqtane.Client/Modules/Admin/Roles/Index.razor index a41998d4..3afa6c88 100644 --- a/Oqtane.Client/Modules/Admin/Roles/Index.razor +++ b/Oqtane.Client/Modules/Admin/Roles/Index.razor @@ -1,26 +1,27 @@ -@namespace Oqtane.Modules.Admin.Roles +@namespace Oqtane.Modules.Admin.Roles @inherits ModuleBase @inject IRoleService RoleService +@inject IStringLocalizer Localizer @if (_roles == null) { -

Loading...

+

@Localizer["Loading..."]

} else { - +
      - Name + @Localizer["Name"]
- - - + + + @context.Name
@@ -47,7 +48,7 @@ else catch (Exception ex) { await logger.LogError(ex, "Error Deleting Role {Role} {Error}", role, ex.Message); - AddModuleMessage("Error Deleting Role", MessageType.Error); + AddModuleMessage(Localizer["Error Deleting Role"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Roles/Users.razor b/Oqtane.Client/Modules/Admin/Roles/Users.razor index a583aedc..b9dcd431 100644 --- a/Oqtane.Client/Modules/Admin/Roles/Users.razor +++ b/Oqtane.Client/Modules/Admin/Roles/Users.razor @@ -1,18 +1,19 @@ -@namespace Oqtane.Modules.Admin.Roles +@namespace Oqtane.Modules.Admin.Roles @inherits ModuleBase @inject IRoleService RoleService @inject IUserRoleService UserRoleService +@inject IStringLocalizer Localizer @if (userroles == null) { -

Loading...

+

@Localizer["Loading..."]

} else {
- + @@ -20,11 +21,11 @@ else
- +
- + - +
- + - +
- - Cancel + + @Localizer["Cancel"]

- Users + @Localizer["Users"]  
@context.User.DisplayName - + @@ -74,8 +75,8 @@ else private string name = string.Empty; private List users; private int userid = -1; - private string effectivedate = string.Empty; - private string expirydate = string.Empty; + private DateTime? effectivedate = null; + private DateTime? expirydate = null; private List userroles; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; @@ -88,13 +89,16 @@ else Role role = await RoleService.GetRoleAsync(roleid); name = role.Name; users = await UserRoleService.GetUserRolesAsync(PageState.Site.SiteId); - users = users.Where(item => item.Role.Name == RoleNames.Registered).ToList(); + users = users + .Where(u => u.Role.Name == RoleNames.Registered) + .OrderBy(u => u.User.DisplayName) + .ToList(); await GetUserRoles(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Users {Error}", ex.Message); - AddModuleMessage("Error Loading Users", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Users"], MessageType.Error); } } @@ -108,7 +112,7 @@ else catch (Exception ex) { await logger.LogError(ex, "Error Loading User Roles {RoleId} {Error}", roleid, ex.Message); - AddModuleMessage("Error Loading User Roles", MessageType.Error); + AddModuleMessage(Localizer["Error Loading User Roles"], MessageType.Error); } } @@ -121,23 +125,8 @@ else var userrole = userroles.Where(item => item.UserId == userid && item.RoleId == roleid).FirstOrDefault(); if (userrole != null) { - if (string.IsNullOrEmpty(effectivedate)) - { - userrole.EffectiveDate = null; - } - else - { - userrole.EffectiveDate = DateTime.Parse(effectivedate); - } - - if (string.IsNullOrEmpty(expirydate)) - { - userrole.ExpiryDate = null; - } - else - { - userrole.ExpiryDate = DateTime.Parse(expirydate); - } + userrole.EffectiveDate = effectivedate; + userrole.ExpiryDate = expirydate; await UserRoleService.UpdateUserRoleAsync(userrole); } else @@ -145,41 +134,25 @@ else userrole = new UserRole(); userrole.UserId = userid; userrole.RoleId = roleid; - - if (string.IsNullOrEmpty(effectivedate)) - { - userrole.EffectiveDate = null; - } - else - { - userrole.EffectiveDate = DateTime.Parse(effectivedate); - } - - if (string.IsNullOrEmpty(expirydate)) - { - userrole.ExpiryDate = null; - } - else - { - userrole.ExpiryDate = DateTime.Parse(expirydate); - } + userrole.EffectiveDate = effectivedate; + userrole.ExpiryDate = expirydate; await UserRoleService.AddUserRoleAsync(userrole); } await GetUserRoles(); await logger.LogInformation("User Assigned To Role {UserRole}", userrole); - AddModuleMessage("User Assigned To Role", MessageType.Success); + AddModuleMessage(Localizer["User Assigned To Role"], MessageType.Success); } else { - AddModuleMessage("You Must Select A User", MessageType.Warning); + AddModuleMessage(Localizer["You Must Select A User"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Saving User Roles {RoleId} {Error}", roleid, ex.Message); - AddModuleMessage("Error Saving User Roles", MessageType.Error); + AddModuleMessage(Localizer["Error Saving User Roles"], MessageType.Error); } } @@ -190,12 +163,12 @@ else await UserRoleService.DeleteUserRoleAsync(UserRoleId); await GetUserRoles(); await logger.LogInformation("User Removed From Role {UserRoleId}", UserRoleId); - AddModuleMessage("User Removed From Role", MessageType.Success); + AddModuleMessage(Localizer["User Removed From Role"], MessageType.Success); } catch (Exception ex) { await logger.LogError(ex, "Error Removing User From Role {UserRoleId} {Error}", UserRoleId, ex.Message); - AddModuleMessage("Error Removing User From Role", MessageType.Error); + AddModuleMessage(Localizer["Error Removing User From Role"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Site/Index.razor b/Oqtane.Client/Modules/Admin/Site/Index.razor index 6b5e98ee..bbfd28f7 100644 --- a/Oqtane.Client/Modules/Admin/Site/Index.razor +++ b/Oqtane.Client/Modules/Admin/Site/Index.razor @@ -1,4 +1,4 @@ -@namespace Oqtane.Modules.Admin.Site +@namespace Oqtane.Modules.Admin.Site @inherits ModuleBase @inject NavigationManager NavigationManager @inject ISiteService SiteService @@ -6,131 +6,152 @@ @inject IAliasService AliasService @inject IThemeService ThemeService @inject ISettingService SettingService +@inject IStringLocalizer Localizer @if (_initialized) { - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + +
- - - -
- - - -
- - - -
- - - -
- - - -
- - - + + + + + + + + + + + + + + + + + + + + + + + + + @if (_layouts.Count > 0) + { + + + - @if (_layouts.Count > 0) - { - - - - - } - - - - - - - - - - - - -
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + + +
+ + +
- - - -
- - - -
- - - -
- - - -
+ } +
+ + + +
+ + + +
+ + + +
+ + + +
-
+
+ + + + + + +
+ @Localizer["Please Note That SMTP Requires The Notification Job To Be Enabled In the Scheduled Jobs"] +
- + @@ -138,7 +159,7 @@
- + @@ -146,15 +167,18 @@
- + - +
- + @@ -162,30 +186,38 @@
- +
+ + + +
-
+
- + - - + + @@ -57,24 +58,24 @@ else SiteService.SetAlias(alias); await SiteService.DeleteSiteAsync(alias.SiteId); await Log(alias, LogLevel.Information, "", null, "Site Deleted {SiteId}", alias.SiteId); - + var aliases = await AliasService.GetAliasesAsync(); foreach (Alias a in aliases.Where(item => item.SiteId == alias.SiteId && item.TenantId == alias.TenantId)) { await AliasService.DeleteAliasAsync(a.AliasId); } - + NavigationManager.NavigateTo(NavigateUrl()); } else { - AddModuleMessage("You Can Not Delete The Current Site", MessageType.Warning); + AddModuleMessage(Localizer["You Can Not Delete The Current Site"], MessageType.Warning); } } catch (Exception ex) { await Log(alias, LogLevel.Error, "", ex, "Error Deleting Site {SiteId} {Error}", alias.SiteId, ex.Message); - AddModuleMessage("Error Deleting Site", MessageType.Error); + AddModuleMessage(Localizer["Error Deleting Site"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Sql/Index.razor b/Oqtane.Client/Modules/Admin/Sql/Index.razor index e27350f8..5edd39ab 100644 --- a/Oqtane.Client/Modules/Admin/Sql/Index.razor +++ b/Oqtane.Client/Modules/Admin/Sql/Index.razor @@ -1,8 +1,9 @@ -@namespace Oqtane.Modules.Admin.Sql +@namespace Oqtane.Modules.Admin.Sql @inherits ModuleBase @inject NavigationManager NavigationManager @inject ITenantService TenantService @inject ISqlService SqlService +@inject IStringLocalizer Localizer @if (_tenants == null) { @@ -13,11 +14,11 @@ else
- +
- + @@ -193,7 +225,7 @@
- + @@ -203,8 +235,7 @@
- - Cancel +

@@ -228,12 +259,14 @@ private string _themetype = "-"; private string _layouttype = "-"; private string _containertype = "-"; + private string _admincontainertype = "-"; private string _allowregistration; private string _smtphost = string.Empty; private string _smtpport = string.Empty; - private string _smtpssl = string.Empty; + private string _smtpssl = "False"; private string _smtpusername = string.Empty; private string _smtppassword = string.Empty; + private string _smtpsender = string.Empty; private string _pwaisenabled; private int _pwaappiconfileid = -1; private FileManager _pwaappiconfilemanager; @@ -281,14 +314,16 @@ _layouttype = site.DefaultLayoutType; _containers = ThemeService.GetContainerControls(_themeList, _themetype); _containertype = site.DefaultContainerType; + _admincontainertype = site.AdminContainerType; _allowregistration = site.AllowRegistration.ToString(); 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", string.Empty); + _smtpssl = SettingService.GetSetting(settings, "SMTPSSL", "False"); _smtpusername = SettingService.GetSetting(settings, "SMTPUsername", string.Empty); _smtppassword = SettingService.GetSetting(settings, "SMTPPassword", string.Empty); + _smtpsender = SettingService.GetSetting(settings, "SMTPSender", string.Empty); _pwaisenabled = site.PwaIsEnabled.ToString(); @@ -347,12 +382,13 @@ } _layouttype = "-"; _containertype = "-"; + _admincontainertype = ""; StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Pane Layouts For Theme {ThemeType} {Error}", _themetype, ex.Message); - AddModuleMessage("Error Loading Pane Layouts For Theme", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Pane Layouts For Theme"], MessageType.Error); } } @@ -384,9 +420,17 @@ site.LogoFileId = logofileid; } + + var faviconFieldId = _faviconfilemanager.GetFileId(); + if (faviconFieldId != -1) + { + site.FaviconFileId = faviconFieldId; + } + site.DefaultThemeType = _themetype; site.DefaultLayoutType = (_layouttype == "-" ? string.Empty : _layouttype); site.DefaultContainerType = _containertype; + site.AdminContainerType = _admincontainertype; site.AllowRegistration = (_allowregistration == null ? true : Boolean.Parse(_allowregistration)); site.IsDeleted = (_isdeleted == null ? true : Boolean.Parse(_isdeleted)); @@ -434,27 +478,28 @@ SettingService.SetSetting(settings, "SMTPSSL", _smtpssl); SettingService.SetSetting(settings, "SMTPUsername", _smtpusername); SettingService.SetSetting(settings, "SMTPPassword", _smtppassword); + SettingService.SetSetting(settings, "SMTPSender", _smtpsender); await SettingService.UpdateSiteSettingsAsync(settings, site.SiteId); - await logger.LogInformation("Site Saved {Site}", site); + await logger.LogInformation("Site Settings Saved {Site}", site); - NavigationManager.NavigateTo(NavigateUrl()); + AddModuleMessage(Localizer["Site Settings Saved"], MessageType.Success); } } else { - AddModuleMessage("An Alias Specified Has Already Been Used For Another Site", MessageType.Warning); + AddModuleMessage(Localizer["An Alias Specified Has Already Been Used For Another Site"], MessageType.Warning); } } else { - AddModuleMessage("You Must Provide A Site Name, Alias, And Default Theme/Layout/Container", MessageType.Warning); + AddModuleMessage(Localizer["You Must Provide A Site Name, Alias, And Default Theme/Layout/Container"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Saving Site {SiteId} {Error}", PageState.Site.SiteId, ex.Message); - AddModuleMessage("Error Saving Site", MessageType.Error); + AddModuleMessage(Localizer["Error Saving Site"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Sites/Add.razor b/Oqtane.Client/Modules/Admin/Sites/Add.razor index 7ee36435..a4b430e9 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Add.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Add.razor @@ -1,4 +1,4 @@ -@namespace Oqtane.Modules.Admin.Sites +@namespace Oqtane.Modules.Admin.Sites @inherits ModuleBase @inject NavigationManager NavigationManager @inject ITenantService TenantService @@ -8,17 +8,18 @@ @inject ISiteTemplateService SiteTemplateService @inject IUserService UserService @inject IInstallationService InstallationService +@inject IStringLocalizer Localizer @if (_tenants == null) { -

Loading...

+

@Localizer["Loading..."]

} else { + + + + @@ -163,7 +179,7 @@ else { }
- + @@ -26,7 +27,7 @@ else
- + @@ -34,11 +35,11 @@ else
- +
- +
- +
- + + + +
+
- +
- + @@ -123,18 +139,18 @@ else
- +
- + @@ -142,7 +158,7 @@ else
- + @@ -150,12 +166,12 @@ else
- +
- + @@ -171,7 +187,7 @@ else
- + @@ -180,7 +196,7 @@ else }
- + @@ -188,7 +204,7 @@ else
- + @@ -196,8 +212,8 @@ else
- - Cancel + + @Localizer["Cancel"] } @code { @@ -224,6 +240,7 @@ else private string _themetype = "-"; private string _layouttype = "-"; private string _containertype = "-"; + private string _admincontainertype = ""; private string _sitetemplatetype = "-"; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; @@ -277,12 +294,13 @@ else } _layouttype = "-"; _containertype = "-"; + _admincontainertype = ""; StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Pane Layouts For Theme {ThemeType} {Error}", _themetype, ex.Message); - AddModuleMessage("Error Loading Pane Layouts For Theme", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Pane Layouts For Theme"], MessageType.Error); } } @@ -346,17 +364,17 @@ else } else { - AddModuleMessage("You Must Specify A Server And Database", MessageType.Error); + AddModuleMessage(Localizer["You Must Specify A Server And Database"], MessageType.Error); } } else { - AddModuleMessage("Invalid Host Password", MessageType.Error); + AddModuleMessage(Localizer["Invalid Host Password"], MessageType.Error); } } else { - AddModuleMessage("Tenant Name Is Missing Or Already Exists", MessageType.Error); + AddModuleMessage(Localizer["Tenant Name Is Missing Or Already Exists"], MessageType.Error); } } else @@ -377,6 +395,7 @@ else config.DefaultTheme = _themetype; config.DefaultLayout = _layouttype; config.DefaultContainer = _containertype; + config.DefaultAdminContainer = _admincontainertype; config.SiteTemplate = _sitetemplatetype; ShowProgressIndicator(); @@ -397,12 +416,12 @@ else } else { - AddModuleMessage(string.Join(", ", duplicates.ToArray()) + " Already Used For Another Site", MessageType.Warning); + AddModuleMessage(Localizer["{0} Already Used For Another Site", string.Join(", ", duplicates.ToArray())], MessageType.Warning); } } else { - AddModuleMessage("You Must Provide A Tenant, Site Name, Alias, Default Theme/Layout/Container, And Site Template", MessageType.Warning); + AddModuleMessage(Localizer["You Must Provide A Tenant, Site Name, Alias, Default Theme/Layout/Container, And Site Template"], MessageType.Warning); } } } diff --git a/Oqtane.Client/Modules/Admin/Sites/Edit.razor b/Oqtane.Client/Modules/Admin/Sites/Edit.razor index 43599e98..b1afc85c 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Edit.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Edit.razor @@ -1,17 +1,18 @@ -@namespace Oqtane.Modules.Admin.Sites +@namespace Oqtane.Modules.Admin.Sites @inherits ModuleBase @inject NavigationManager NavigationManager @inject ISiteService SiteService @inject ITenantService TenantService @inject IAliasService AliasService @inject IThemeService ThemeService +@inject IStringLocalizer Localizer @if (_initialized) { - - - - +
- + @@ -19,15 +20,7 @@
- - - -
- + +

- - Cancel + + @Localizer["Cancel"]

@@ -113,13 +138,12 @@ private List _containers = new List(); private Alias _alias; private string _name = string.Empty; - private List _tenantList; - private string _tenant = string.Empty; private List _aliasList; private string _urls = string.Empty; private string _themetype; private string _layouttype; - private string _containertype; + private string _containertype = "-"; + private string _admincontainertype = "-"; private string _createdby; private DateTime _createdon; private string _modifiedby; @@ -127,6 +151,8 @@ private string _deletedby; private DateTime? _deletedon; private string _isdeleted; + private string _tenant = string.Empty; + private string _connectionstring = string.Empty; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; @@ -143,8 +169,6 @@ if (site != null) { _name = site.Name; - _tenantList = await TenantService.GetTenantsAsync(); - _tenant = _tenantList.Find(item => item.TenantId == site.TenantId).Name; foreach (Alias alias in _aliasList.Where(item => item.SiteId == site.SiteId && item.TenantId == site.TenantId).ToList()) { @@ -157,6 +181,7 @@ _layouttype = site.DefaultLayoutType; _containers = ThemeService.GetContainerControls(_themeList, _themetype); _containertype = site.DefaultContainerType; + _admincontainertype = site.AdminContainerType; _createdby = site.CreatedBy; _createdon = site.CreatedOn; _modifiedby = site.ModifiedBy; @@ -165,6 +190,14 @@ _deletedon = site.DeletedOn; _isdeleted = site.IsDeleted.ToString(); + List tenants = await TenantService.GetTenantsAsync(); + Tenant tenant = tenants.Find(item => item.TenantId == site.TenantId); + if (tenant != null) + { + _tenant = tenant.Name; + _connectionstring = tenant.DBConnectionString; + } + _initialized = true; } } @@ -192,12 +225,13 @@ } _layouttype = "-"; _containertype = "-"; + _admincontainertype = ""; StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Pane Layouts For Theme {ThemeType} {Error}", _themetype, ex.Message); - AddModuleMessage("Error Loading Pane Layouts For Theme", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Pane Layouts For Theme"], MessageType.Error); } } @@ -227,6 +261,7 @@ site.DefaultThemeType = _themetype; site.DefaultLayoutType = _layouttype ?? string.Empty; site.DefaultContainerType = _containertype; + site.AdminContainerType = _admincontainertype; site.IsDeleted = (_isdeleted == null || Boolean.Parse(_isdeleted)); site = await SiteService.UpdateSiteAsync(site); @@ -256,25 +291,25 @@ } } - await Log(_alias, LogLevel.Information,PermissionNames.Edit, null, "Site Saved {Site}", site); + await Log(_alias, LogLevel.Information, PermissionNames.Edit, null, "Site Saved {Site}", site); NavigationManager.NavigateTo(NavigateUrl()); } } else { - AddModuleMessage("An Alias Specified Has Already Been Used For Another Site", MessageType.Warning); + AddModuleMessage(Localizer["An Alias Specified Has Already Been Used For Another Site"], MessageType.Warning); } } else { - AddModuleMessage("You Must Provide A Site Name, Alias, And Default Theme/Container", MessageType.Warning); + AddModuleMessage(Localizer["You Must Provide A Site Name, Alias, And Default Theme/Container"], MessageType.Warning); } } catch (Exception ex) { await Log(_alias, LogLevel.Error, string.Empty, ex, "Error Saving Site {SiteId} {Error}", _alias.SiteId, ex.Message); - AddModuleMessage("Error Saving Site", MessageType.Error); + AddModuleMessage(Localizer["Error Saving Site"], MessageType.Error); } } - } +} diff --git a/Oqtane.Client/Modules/Admin/Sites/Index.razor b/Oqtane.Client/Modules/Admin/Sites/Index.razor index 8d82492d..3a571cd3 100644 --- a/Oqtane.Client/Modules/Admin/Sites/Index.razor +++ b/Oqtane.Client/Modules/Admin/Sites/Index.razor @@ -1,8 +1,9 @@ -@namespace Oqtane.Modules.Admin.Sites +@namespace Oqtane.Modules.Admin.Sites @inherits ModuleBase @inject NavigationManager NavigationManager @inject IAliasService AliasService @inject ISiteService SiteService +@inject IStringLocalizer Localizer @if (_sites == null) { @@ -10,17 +11,17 @@ } else { - +
   Name@Localizer["Name"] @context.Name
- +
- +
- -

+ +
+
@if (!string.IsNullOrEmpty(_results)) { @((MarkupString)_results) @@ -65,7 +67,7 @@ else } else { - AddModuleMessage("You Must Select A Tenant And Provide A SQL Query", MessageType.Warning); + AddModuleMessage(Localizer["You Must Select A Tenant And Provide A SQL Query"], MessageType.Warning); } } @@ -78,34 +80,34 @@ else { table = "
"; table += ""; - + foreach (KeyValuePair kvp in item) { table += ""; } - + table += ""; } - + table += ""; - + foreach (KeyValuePair kvp in item) { table += ""; } - + table += ""; } - + if (table != string.Empty) { table += "
" + kvp.Key + "
" + kvp.Value + "
"; } else { - table = "No Results Returned"; + table = Localizer["No Results Returned"]; } - + return table; } } diff --git a/Oqtane.Client/Modules/Admin/SystemInfo/Index.razor b/Oqtane.Client/Modules/Admin/SystemInfo/Index.razor index ca7c7f2c..e7e69635 100644 --- a/Oqtane.Client/Modules/Admin/SystemInfo/Index.razor +++ b/Oqtane.Client/Modules/Admin/SystemInfo/Index.razor @@ -1,11 +1,13 @@ -@namespace Oqtane.Modules.Admin.SystemInfo +@namespace Oqtane.Modules.Admin.SystemInfo @inherits ModuleBase @inject ISystemService SystemService +@inject IInstallationService InstallationService +@inject IStringLocalizer Localizer
- + @@ -13,7 +15,7 @@
- + @@ -21,7 +23,7 @@
- + @@ -29,7 +31,7 @@
- + @@ -37,7 +39,7 @@
- + @@ -45,14 +47,15 @@
- +
-Access Framework API +@Localizer["Access Framework API"]  + @code { public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; @@ -78,4 +81,19 @@ _servertime = systeminfo["servertime"]; } } -} + + private async Task RestartApplication() + { + try + { + ShowProgressIndicator(); + var interop = new Interop(JSRuntime); + await interop.RedirectBrowser(NavigateUrl(""), 10); + await InstallationService.RestartAsync(); + } + catch (Exception ex) + { + await logger.LogError(ex, "Error Restarting Application"); + } + } +} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Tenants/Edit.razor b/Oqtane.Client/Modules/Admin/Tenants/Edit.razor deleted file mode 100644 index 245ce1cb..00000000 --- a/Oqtane.Client/Modules/Admin/Tenants/Edit.razor +++ /dev/null @@ -1,85 +0,0 @@ -@namespace Oqtane.Modules.Admin.Tenants -@inherits ModuleBase -@inject NavigationManager NavigationManager -@inject ITenantService TenantService - - - - - - - - - - - -
- - - @if (name == TenantNames.Master) - { - - } - else - { - - } -
- - - -
- -Cancel - -@code { - private int tenantid; - private string name = string.Empty; - private string connectionstring = string.Empty; - private string schema = string.Empty; - - public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; - - protected override async Task OnInitializedAsync() - { - try - { - tenantid = Int32.Parse(PageState.QueryString["id"]); - var tenant = await TenantService.GetTenantAsync(tenantid); - if (tenant != null) - { - name = tenant.Name; - connectionstring = tenant.DBConnectionString; - } - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Loading Tenant {TenantId} {Error}", tenantid, ex.Message); - AddModuleMessage("Error Loading Tenant", MessageType.Error); - } - } - - private async Task SaveTenant() - { - try - { - connectionstring = connectionstring.Replace("\\\\", "\\"); - var tenant = await TenantService.GetTenantAsync(tenantid); - if (tenant != null) - { - tenant.Name = name; - tenant.DBConnectionString = connectionstring; - - await TenantService.UpdateTenantAsync(tenant); - await logger.LogInformation("Tenant Saved {TenantId}", tenantid); - - NavigationManager.NavigateTo(NavigateUrl()); - } - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Saving Tenant {TenantId} {Error}", tenantid, ex.Message); - AddModuleMessage("Error Saving Tenant", MessageType.Error); - } - } -} diff --git a/Oqtane.Client/Modules/Admin/Tenants/Index.razor b/Oqtane.Client/Modules/Admin/Tenants/Index.razor deleted file mode 100644 index 5858a059..00000000 --- a/Oqtane.Client/Modules/Admin/Tenants/Index.razor +++ /dev/null @@ -1,67 +0,0 @@ -@namespace Oqtane.Modules.Admin.Tenants -@inherits ModuleBase -@inject ITenantService TenantService -@inject IAliasService AliasService - -@if (tenants == null) -{ -

Loading...

-} -else -{ - -
-   -   - Name -
- - - - @context.Name - -
- -} - -@code { - private List tenants; - - public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; - - protected override async Task OnParametersSetAsync() - { - tenants = await TenantService.GetTenantsAsync(); - } - - private async Task DeleteTenant(Tenant Tenant) - { - try - { - string message = string.Empty; - var aliases = await AliasService.GetAliasesAsync(); - foreach (var alias in aliases) - { - if (alias.TenantId == Tenant.TenantId) - { - message += ", " + alias.Name; - } - } - if (string.IsNullOrEmpty(message)) - { - await TenantService.DeleteTenantAsync(Tenant.TenantId); - await logger.LogInformation("Tenant Deleted {Tenant}", Tenant); - StateHasChanged(); - } - else - { - AddModuleMessage("Tenant Cannot Be Deleted Until The Following Sites Are Deleted: " + message.Substring(2), MessageType.Warning); - } - } - catch (Exception ex) - { - await logger.LogError(ex, "Error Deleting Tenant {Tenant} {Error}", Tenant, ex.Message); - AddModuleMessage("Error Deleting Tenant", MessageType.Error); - } - } -} \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Themes/Add.razor b/Oqtane.Client/Modules/Admin/Themes/Add.razor index eda40597..ab042ed5 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Add.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Add.razor @@ -1,38 +1,39 @@ -@namespace Oqtane.Modules.Admin.Themes +@namespace Oqtane.Modules.Admin.Themes @inherits ModuleBase @inject NavigationManager NavigationManager @inject IFileService FileService @inject IThemeService ThemeService @inject IPackageService PackageService +@inject IStringLocalizer Localizer @if (_packages != null) { @if (_packages.Count > 0) { - +
- Name - Version + @Localizer["Name"] + @Localizer["Version"]
@context.Name @context.Version - +
} - + - - + + - + @@ -48,7 +49,7 @@ else public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; - protected override async Task OnInitializedAsync() + protected override async Task OnParametersSetAsync() { try { @@ -60,7 +61,7 @@ else if (_themes == null) { await logger.LogError(ex, "Error Loading Themes {Error}", ex.Message); - AddModuleMessage("Error Loading Themes", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Themes"], MessageType.Error); } } } @@ -85,15 +86,13 @@ else { await PackageService.DownloadPackageAsync(themename, version, "Themes"); await logger.LogInformation("Theme Downloaded {ThemeName} {Version}", themename, version); - ShowProgressIndicator(); - var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 10); await ThemeService.InstallThemesAsync(); + AddModuleMessage(Localizer["Theme Installed Successfully. You Must Restart Your Application To Apply These Changes.", NavigateUrl("admin/system")], MessageType.Success); } catch (Exception ex) { await logger.LogError(ex, "Error Downloading Theme {ThemeName} {Version} {Error}", themename, version, ex.Message); - AddModuleMessage("Error Downloading Theme", MessageType.Error); + AddModuleMessage(Localizer["Error Downloading Theme"], MessageType.Error); } } @@ -101,15 +100,14 @@ else { try { - ShowProgressIndicator(); - var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 10); await ThemeService.DeleteThemeAsync(Theme.ThemeName); + AddModuleMessage(Localizer["Theme Deleted Successfully"], MessageType.Success); + StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Deleting Theme {Theme} {Error}", Theme, ex.Message); - AddModuleMessage("Error Deleting Theme", MessageType.Error); + AddModuleMessage(Localizer["Error Deleting Theme"], MessageType.Error); } } } \ No newline at end of file diff --git a/Oqtane.Client/Modules/Admin/Themes/View.razor b/Oqtane.Client/Modules/Admin/Themes/View.razor index eb655799..2510759d 100644 --- a/Oqtane.Client/Modules/Admin/Themes/View.razor +++ b/Oqtane.Client/Modules/Admin/Themes/View.razor @@ -1,13 +1,14 @@ -@namespace Oqtane.Modules.Admin.Themes +@namespace Oqtane.Modules.Admin.Themes @using System.Net @inherits ModuleBase @inject IThemeService ThemeService @inject NavigationManager NavigationManager +@inject IStringLocalizer Localizer
- + @@ -42,8 +43,8 @@ - - Cancel + + @Localizer["Cancel"] } @code { @@ -69,7 +70,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Packages {Error}", ex.Message); - AddModuleMessage("Error Loading Packages", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Packages"], MessageType.Error); } } @@ -77,14 +78,12 @@ { try { - ShowProgressIndicator(); - var interop = new Interop(JSRuntime); - await interop.RedirectBrowser(NavigateUrl(), 10); await ThemeService.InstallThemesAsync(); + AddModuleMessage(Localizer["Theme Installed Successfully. You Must Restart Your Application To Apply These Changes.", NavigateUrl("admin/system")], MessageType.Success); } catch (Exception ex) { - await logger.LogError(ex, "Error Installating Theme"); + await logger.LogError(ex, "Error Installing Theme"); } } @@ -94,13 +93,13 @@ { await PackageService.DownloadPackageAsync(packageid, version, "Themes"); await logger.LogInformation("Theme {ThemeName} {Version} Downloaded Successfully", packageid, version); - AddModuleMessage("Themes Downloaded Successfully. Click Install To Complete Installation.", MessageType.Success); + AddModuleMessage(Localizer["Themes Downloaded Successfully. Click Install To Complete Installation."], MessageType.Success); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Downloading Module {ThemeName} {Version}", packageid, version); - AddModuleMessage("Error Downloading Theme", MessageType.Error); + AddModuleMessage(Localizer["Error Downloading Theme"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Themes/Index.razor b/Oqtane.Client/Modules/Admin/Themes/Index.razor index 29ed1b00..9e8677f7 100644 --- a/Oqtane.Client/Modules/Admin/Themes/Index.razor +++ b/Oqtane.Client/Modules/Admin/Themes/Index.razor @@ -1,9 +1,10 @@ -@namespace Oqtane.Modules.Admin.Themes +@namespace Oqtane.Modules.Admin.Themes @using System.Net @inherits ModuleBase @inject NavigationManager NavigationManager @inject IThemeService ThemeService @inject IPackageService PackageService +@inject IStringLocalizer Localizer @if (_themes == null) { @@ -17,25 +18,25 @@ else
   NameVersion@Localizer["Name"]@Localizer["Version"]   @if (context.AssemblyName != "Oqtane.Client") - { - - } + { + + } @context.Name @context.Version @if (UpgradeAvailable(context.ThemeName, context.Version)) - { - - } + { + + }
- + @@ -15,7 +16,7 @@
- + @@ -23,7 +24,7 @@
- + @@ -31,7 +32,7 @@
- + @@ -39,7 +40,7 @@
- + @@ -47,7 +48,7 @@
- + @@ -55,14 +56,14 @@
- +
-Cancel +@Localizer["Cancel"] @code { private string _themeName = ""; @@ -95,7 +96,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Loading Theme {ThemeName} {Error}", _themeName, ex.Message); - AddModuleMessage("Error Loading Theme", MessageType.Error); + AddModuleMessage(Localizer["Error Loading Theme"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/Upgrade/Index.razor b/Oqtane.Client/Modules/Admin/Upgrade/Index.razor index 06611217..c0475d59 100644 --- a/Oqtane.Client/Modules/Admin/Upgrade/Index.razor +++ b/Oqtane.Client/Modules/Admin/Upgrade/Index.razor @@ -1,36 +1,37 @@ -@namespace Oqtane.Modules.Admin.Upgrade +@namespace Oqtane.Modules.Admin.Upgrade @inherits ModuleBase @inject NavigationManager NavigationManager @inject IFileService FileService @inject IPackageService PackageService @inject IInstallationService InstallationService +@inject IStringLocalizer Localizer @if (_package != null) { - + @if (_upgradeavailable) { - + } else { } - +
- +
- +
} @@ -77,7 +78,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Executing Upgrade {Error}", ex.Message); - AddModuleMessage("Error Executing Upgrade", MessageType.Error); + AddModuleMessage(Localizer["Error Executing Upgrade"], MessageType.Error); } } @@ -94,7 +95,7 @@ catch (Exception ex) { await logger.LogError(ex, "Error Downloading Framework {Error}", ex.Message); - AddModuleMessage("Error Downloading Framework", MessageType.Error); + AddModuleMessage(Localizer["Error Downloading Framework"], MessageType.Error); } } } diff --git a/Oqtane.Client/Modules/Admin/UserProfile/Add.razor b/Oqtane.Client/Modules/Admin/UserProfile/Add.razor index b19bae1d..dcc96ff4 100644 --- a/Oqtane.Client/Modules/Admin/UserProfile/Add.razor +++ b/Oqtane.Client/Modules/Admin/UserProfile/Add.razor @@ -1,15 +1,16 @@ -@namespace Oqtane.Modules.Admin.UserProfile +@namespace Oqtane.Modules.Admin.UserProfile @inherits ModuleBase @inject NavigationManager NavigationManager @inject IUserService UserService -@inject INotificationService NotificationService +@inject INotificationService NotificationService +@inject IStringLocalizer Localizer @if (PageState.User != null) {
- + @@ -17,7 +18,7 @@
- + @@ -25,15 +26,15 @@
- +