@using Oqtane.Modules.Controls @using SZUAbsolventenverein.Module.HallOfFame.Services @using SZUAbsolventenverein.Module.HallOfFame.Models @namespace SZUAbsolventenverein.Module.HallOfFame @inherits ModuleBase @inject IHallOfFameService HallOfFameService @inject NavigationManager NavigationManager @inject IStringLocalizer Localizer
Bitte gib einen Namen ein (max. 120 Zeichen).
Bitte gib einen gültigen Jahrgang ein.
Bitte gib eine Beschreibung ein.
Bitte gib eine gültige URL ein (startet mit http:// oder https://).

Aktuell: @(_status ?? "Neu")

Abbrechen


@if (PageState.Action == "Edit") { }
@code { public override SecurityAccessLevel SecurityAccessLevel => SecurityAccessLevel.View; // Logic handles checking user own entry public override string Actions => "Add,Edit"; public override string Title => "Hall of Fame Eintrag verwalten"; public override List Resources => new List() { new Stylesheet("_content/SZUAbsolventenverein.Module.HallOfFame/Module.css") }; private ElementReference form; private bool validated = false; private int _id; private string _name; private int _year = DateTime.Now.Year; private string _description; private string _image; private string _link; private string _status = "Draft"; private string _createdby; private DateTime _createdon; private string _modifiedby; private DateTime _modifiedon; protected override async Task OnInitializedAsync() { try { if (PageState.Action == "Edit") { _id = Int32.Parse(PageState.QueryString["id"]); HallOfFame HallOfFame = await HallOfFameService.GetHallOfFameAsync(_id, ModuleState.ModuleId); // Security check: only allow editing own entry if (HallOfFame != null) { if (HallOfFame.UserId != PageState.User.UserId) { NavigationManager.NavigateTo(NavigateUrl()); return; } _name = HallOfFame.Name; _year = HallOfFame.Year; _description = HallOfFame.Description; _image = HallOfFame.Image; _link = HallOfFame.Link; _status = HallOfFame.Status; _createdby = HallOfFame.CreatedBy; _createdon = HallOfFame.CreatedOn; _modifiedby = HallOfFame.ModifiedBy; _modifiedon = HallOfFame.ModifiedOn; } } else // Add Mode { // Check if user already has an entry to prevent duplicates var existing = await HallOfFameService.GetHallOfFameByUserIdAsync(PageState.User.UserId, ModuleState.ModuleId); if (existing != null) { // Use NavigateUrl with parameters properly (simplified here) NavigationManager.NavigateTo(EditUrl(existing.HallOfFameId.ToString())); } } } catch (Exception ex) { await logger.LogError(ex, "Error Loading HallOfFame {HallOfFameId} {Error}", _id, ex.Message); AddModuleMessage(Localizer["Message.LoadError"], MessageType.Error); } } private async Task Save(string status) { try { validated = true; var interop = new Oqtane.UI.Interop(JSRuntime); if (await interop.FormValid(form)) { _status = status; if (PageState.Action == "Add") { HallOfFame HallOfFame = new HallOfFame(); HallOfFame.ModuleId = ModuleState.ModuleId; HallOfFame.UserId = PageState.User.UserId; // Set Owner HallOfFame.Name = _name; HallOfFame.Year = _year; HallOfFame.Description = _description; HallOfFame.Image = _image; HallOfFame.Link = _link; HallOfFame.Status = _status; HallOfFame = await HallOfFameService.AddHallOfFameAsync(HallOfFame); await logger.LogInformation("HallOfFame Added {HallOfFame}", HallOfFame); } else { HallOfFame HallOfFame = await HallOfFameService.GetHallOfFameAsync(_id, ModuleState.ModuleId); // Ensure we don't overwrite with invalid user logic, though server checks too if (HallOfFame.UserId == PageState.User.UserId) { HallOfFame.Name = _name; HallOfFame.Year = _year; HallOfFame.Description = _description; HallOfFame.Image = _image; HallOfFame.Link = _link; HallOfFame.Status = _status; await HallOfFameService.UpdateHallOfFameAsync(HallOfFame); await logger.LogInformation("HallOfFame Updated {HallOfFame}", HallOfFame); } } NavigationManager.NavigateTo(NavigateUrl()); } else { AddModuleMessage(Localizer["Message.SaveValidation"], MessageType.Warning); } } catch (Exception ex) { await logger.LogError(ex, "Error Saving HallOfFame {Error}", ex.Message); AddModuleMessage(Localizer["Message.SaveError"], MessageType.Error); } } }