@using SZUAbsolventenverein.Module.HallOfFame.Services @using SZUAbsolventenverein.Module.HallOfFame.Models @using Oqtane.Security @using Oqtane.Shared @namespace SZUAbsolventenverein.Module.HallOfFame @inherits ModuleBase @inject IHallOfFameService HallOfFameService @inject NavigationManager NavigationManager @inject IStringLocalizer Localizer @inject ISettingService SettingService @if (_HallOfFames == null) {

Loading...

} else {
@if (PageState.User != null) { if (_myEntry != null) { } else { } }
@if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin + ";" + RoleNames.Host)) {
Maximale Zeichen für Beschreibungen
} @if (@_HallOfFames.Count != 0) {
@foreach (var item in FilteredHallOfFames) {
@if (!string.IsNullOrEmpty(item.Image)) { @item.Name }
@item.Name (@item.Year)
@if (item.IsReported && UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin + ";" + RoleNames.Host)) {
Dieser Eintrag wurde gemeldet!
}
@((MarkupString)(item.Description ?? ""))
@if (UserSecurity.IsAuthorized(PageState.User, RoleNames.Admin + ";" + RoleNames.Host)) { }
}
} else {
Es sind noch keine Hall-of-Fame-Einträge veröffentlicht.
} } @code { public override List Resources => new List() { new Stylesheet("_content/SZUAbsolventenverein.Module.HallOfFame/Module.css"), new Script("_content/SZUAbsolventenverein.Module.HallOfFame/Module.js") }; List _HallOfFames; HallOfFame _myEntry; string _searchText = ""; string _sortOption = "CreatedOn"; bool _sortAscending = false; int _charLimit = 500; IEnumerable FilteredHallOfFames { get { var items = _HallOfFames.AsEnumerable(); if (!string.IsNullOrEmpty(_searchText)) { items = items.Where(i => (i.Name?.Contains(_searchText, StringComparison.OrdinalIgnoreCase) ?? false) || (i.Description?.Contains(_searchText, StringComparison.OrdinalIgnoreCase) ?? false) ); } items = _sortOption switch { "Name" => _sortAscending ? items.OrderBy(i => i.Name) : items.OrderByDescending(i => i.Name), "Year" => _sortAscending ? items.OrderBy(i => i.Year) : items.OrderByDescending(i => i.Year), "CreatedOn" or _ => _sortAscending ? items.OrderBy(i => i.CreatedOn) : items.OrderByDescending(i => i.CreatedOn) }; return items; } } private string TruncateDescription(string description) { if (string.IsNullOrEmpty(description)) return ""; const int maxLength = 150; if (description.Length <= maxLength) return description; return description.Substring(0, maxLength).TrimEnd() + "..."; } private void ToggleSortDirection() { _sortAscending = !_sortAscending; } protected override async Task OnInitializedAsync() { await LoadData(); } private async Task LoadData() { try { var allEntries = await HallOfFameService.GetHallOfFamesAsync(ModuleState.ModuleId); _HallOfFames = allEntries.Where(i => i.Status == "Published").ToList(); if (PageState.User != null) { _myEntry = await HallOfFameService.GetHallOfFameByUserIdAsync(PageState.User.UserId, ModuleState.ModuleId); } // Load character limit setting var settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); var charLimitStr = SettingService.GetSetting(settings, "CharLimit", "500"); if (int.TryParse(charLimitStr, out var parsed) && parsed >= 4 && parsed <= 32000) { _charLimit = parsed; } } catch (Exception ex) { await logger.LogError(ex, "Error Loading HallOfFame {Error}", ex.Message); AddModuleMessage(Localizer["Message.LoadError"], MessageType.Error); } } private void OnCharLimitChanged(ChangeEventArgs e) { if (int.TryParse(e.Value?.ToString(), out var val) && val >= 4 && val <= 32000) { _charLimit = val; } } private void OnCharLimitInputChanged(ChangeEventArgs e) { if (int.TryParse(e.Value?.ToString(), out var val)) { _charLimit = Math.Clamp(val, 4, 32000); } } private async Task SaveCharLimit() { try { var settings = await SettingService.GetModuleSettingsAsync(ModuleState.ModuleId); SettingService.SetSetting(settings, "CharLimit", _charLimit.ToString()); await SettingService.UpdateModuleSettingsAsync(settings, ModuleState.ModuleId); AddModuleMessage($"Zeichenlimit auf {_charLimit} gesetzt.", MessageType.Success); } catch (Exception ex) { await logger.LogError(ex, "Error Saving CharLimit {Error}", ex.Message); AddModuleMessage("Fehler beim Speichern des Zeichenlimits.", MessageType.Error); } } private async Task Delete(int hallOfFameId) { try { await HallOfFameService.DeleteHallOfFameAsync(hallOfFameId, ModuleState.ModuleId); AddModuleMessage("Eintrag wurde gelöscht.", MessageType.Success); await LoadData(); } catch (Exception ex) { await logger.LogError(ex, "Error Deleting HallOfFame {Error}", ex.Message); AddModuleMessage("Fehler beim Löschen des Eintrags.", MessageType.Error); } } }