@namespace Oqtane.Modules.Admin.Logs @inherits ModuleBase @inject NavigationManager NavigationManager @inject ILogService LogService @inject ISettingService SettingService @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer @if (_logs == null) {

@SharedLocalizer["Loading"]

} else {







@if (_logs.Any()) {
  @Localizer["Date"] @Localizer["Level"] @Localizer["Feature"] @Localizer["Function"]
@context.LogDate @context.Level @context.Feature @context.Function
} else {

@Localizer["NoLogs"]

}

} @code { private string _level = "-"; private string _function = "-"; private string _rows = "10"; private int _page = 1; private List _logs; private int _retention = 30; public override string UrlParametersTemplate => "/{level}/{function}/{rows}/{page}"; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Host; protected override async Task OnParametersSetAsync() { try { if (UrlParameters.ContainsKey("level")) { _level = UrlParameters["level"]; } if (UrlParameters.ContainsKey("function")) { _function = UrlParameters["function"]; } if (UrlParameters.ContainsKey("rows")) { _rows = UrlParameters["rows"]; } if (UrlParameters.ContainsKey("page") && int.TryParse(UrlParameters["page"], out int page)) { _page = page; } await GetLogs(); var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId); _retention = int.Parse( SettingService.GetSetting(settings, "LogRetention", "30")); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Logs {Error}", ex.Message); AddModuleMessage(Localizer["Error.Log.Load"], MessageType.Error); } } private async void LevelChanged(ChangeEventArgs e) { try { _level = (string)e.Value; await GetLogs(); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Logs {Error}", ex.Message); AddModuleMessage(Localizer["Error.Log.Load"], MessageType.Error); } } private async void FunctionChanged(ChangeEventArgs e) { try { _function = (string)e.Value; await GetLogs(); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Logs {Error}", ex.Message); AddModuleMessage(Localizer["Error.Log.Load"], MessageType.Error); } } private async void RowsChanged(ChangeEventArgs e) { try { _rows = (string)e.Value; await GetLogs(); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Loading Logs {Error}", ex.Message); AddModuleMessage(Localizer["Error.Log.Load"], MessageType.Error); } } private async Task GetLogs() { _logs = await LogService.GetLogsAsync(PageState.Site.SiteId, ((_level == "-") ? string.Empty : _level), ((_function == "-") ? string.Empty : _function), int.Parse(_rows)); } private string GetClass(string function) { string classname = string.Empty; switch (function) { case "Create": classname = "table-success"; break; case "Read": classname = "table-primary"; break; case "Update": classname = "table-warning"; break; case "Delete": classname = "table-danger"; break; case "Security": classname = "table-secondary"; break; default: classname = string.Empty; break; } return classname; } private async Task SaveSiteSettings() { try { var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId); settings = SettingService.SetSetting(settings, "LogRetention", _retention.ToString(), true); await SettingService.UpdateSiteSettingsAsync(settings, PageState.Site.SiteId); AddModuleMessage(Localizer["Success.SaveSiteSettings"], MessageType.Success); } catch (Exception ex) { await logger.LogError(ex, "Error Saving Site Settings {Error}", ex.Message); AddModuleMessage(Localizer["Error.SaveSiteSettings"], MessageType.Error); } } private async Task DeleteLogs() { try { await LogService.DeleteLogsAsync(PageState.Site.SiteId); await GetLogs(); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error Deleting Logs {Error}", ex.Message); AddModuleMessage(Localizer["Error.DeleteLogs"], MessageType.Error); } } private void OnPageChange(int page) { _page = page; } protected override void OnAfterRender(bool firstRender) { if (firstRender) { // external link to log item will display Details component if (PageState.QueryString.ContainsKey("id") && int.TryParse(PageState.QueryString["id"], out int id)) { NavigationManager.NavigateTo(EditUrl(PageState.Page.Path, ModuleState.ModuleId, "Detail", $"/{id}")); } } } }