@namespace Oqtane.Modules.Admin.Visitors @inherits ModuleBase @inject IVisitorService VisitorService @inject ISiteService SiteService @inject ISettingService SettingService @inject IStringLocalizer Localizer @inject IStringLocalizer SharedLocalizer @if (_visitors == null) {

@SharedLocalizer["Loading"]

} else {

  @Localizer["IP"] @Localizer["User"] @Localizer["Language"] @Localizer["Visits"] @Localizer["Visited"] @Localizer["Created"]
@context.IPAddress @if (context.UserId != null) { @context.User.DisplayName } @context.Language @context.Visits @context.VisitedOn @context.CreatedOn

} @code { private string _type = "visitors"; private int _days = 1; private int _page = 1; private List _visitors; private string _tracking; private int _duration = 5; private string _filter = ""; private int _retention = 30; private string _correlation = "true"; public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.Admin; protected override async Task OnParametersSetAsync() { if (PageState.QueryString.ContainsKey("type")) { _type = PageState.QueryString["type"]; } if (PageState.QueryString.ContainsKey("days") && int.TryParse(PageState.QueryString["days"], out int days)) { _days = days; } if (PageState.QueryString.ContainsKey("page") && int.TryParse(PageState.QueryString["page"], out int page)) { _page = page; } await GetVisitors(); _tracking = PageState.Site.VisitorTracking.ToString(); var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId); _duration = SharedConverter.ParseInteger(SettingService.GetSetting(settings, "VisitorDuration", "5")); _filter = SettingService.GetSetting(settings, "VisitorFilter", Constants.DefaultVisitorFilter); _retention = SharedConverter.ParseInteger(SettingService.GetSetting(settings, "VisitorRetention", "30")); _correlation = SettingService.GetSetting(settings, "VisitorCorrelation", "true"); } private async void TypeChanged(ChangeEventArgs e) { try { _type = e.Value.ToString(); await GetVisitors(); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error On TypeChanged"); } } private async void DaysChanged(ChangeEventArgs e) { try { _days = SharedConverter.ParseInteger(e.Value.ToString()); await GetVisitors(); StateHasChanged(); } catch (Exception ex) { await logger.LogError(ex, "Error On DateChanged"); } } private async Task GetVisitors() { _visitors = await VisitorService.GetVisitorsAsync(PageState.Site.SiteId, DateTime.UtcNow.AddDays(-_days)); if (_type == "users") { _visitors = _visitors.Where(item => item.UserId != null).ToList(); } } private async Task SaveSiteSettings() { try { var site = PageState.Site; site.VisitorTracking = bool.Parse(_tracking); await SiteService.UpdateSiteAsync(site); var settings = await SettingService.GetSiteSettingsAsync(PageState.Site.SiteId); settings = SettingService.SetSetting(settings, "VisitorDuration", _duration.ToString(), true); settings = SettingService.SetSetting(settings, "VisitorFilter", _filter, true); settings = SettingService.SetSetting(settings, "VisitorRetention", _retention.ToString(), true); settings = SettingService.SetSetting(settings, "VisitorCorrelation", _correlation, 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 void OnPageChange(int page) { _page = page; } }