@using Oqtane.Modules.Controls @using SZUAbsolventenverein.Module.HallOfFame.Services @using SZUAbsolventenverein.Module.HallOfFame.Models @using Microsoft.AspNetCore.Components.Forms @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.
@(_description?.Length ?? 0) / 500 Zeichen
Bitte gib eine Beschreibung ein.
@if (!string.IsNullOrEmpty(_image)) {
Vorschau
} else {
Kein Bild
}
Nur JPG oder PNG, max. 5 MB.
@if (_uploading) {
Wird hochgeladen...
Wird hochgeladen... }
Bitte gib eine gültige URL ein (startet mit http:// oder https://).

Aktuell: @(_status ?? "Neu")

Abbrechen
@if (PageState.Action == "Edit") { }


@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 bool _uploading = 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); 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 { var existing = await HallOfFameService.GetHallOfFameByUserIdAsync(PageState.User.UserId, ModuleState.ModuleId); if (existing != null) { 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 HandleFileSelected(InputFileChangeEventArgs e) { var file = e.File; if (file == null) return; if (file.Size > 5 * 1024 * 1024) { AddModuleMessage("Die Datei ist zu groß (max. 5 MB allowed).", MessageType.Warning); return; } try { _uploading = true; using var stream = file.OpenReadStream(5 * 1024 * 1024); var url = await HallOfFameService.UploadFileAsync(stream, file.Name, ModuleState.ModuleId); if (!string.IsNullOrEmpty(url)) { _image = url; AddModuleMessage("Foto erfolgreich hochgeladen.", MessageType.Success); } else { AddModuleMessage("Fehler beim Hochladen des Fotos.", MessageType.Error); } } catch (Exception ex) { await logger.LogError(ex, "Error Uploading File {Error}", ex.Message); AddModuleMessage("Ein technischer Fehler ist beim Upload aufgetreten.", MessageType.Error); } finally { _uploading = false; StateHasChanged(); } } private void RemoveImage() { _image = string.Empty; StateHasChanged(); } 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; 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); 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); } } private async Task DeleteEntry() { try { await HallOfFameService.DeleteHallOfFameAsync(_id, ModuleState.ModuleId); NavigationManager.NavigateTo(NavigateUrl()); } catch (Exception ex) { await logger.LogError(ex, "Error Deleting HallOfFame {Error}", ex.Message); AddModuleMessage("Fehler beim Löschen des Eintrags.", MessageType.Error); } } }