From 163d6cd992aa76e892a4fce6613b7644a2d19895 Mon Sep 17 00:00:00 2001 From: Simon Martens Date: Thu, 22 Jan 2026 16:49:49 +0100 Subject: [PATCH] +BUGFIX: restore values on validation error --- controllers/ort_edit.go | 21 +++++++++++++-------- controllers/person_edit.go | 21 +++++++++++++-------- controllers/reihe_edit.go | 21 +++++++++++++-------- 3 files changed, 39 insertions(+), 24 deletions(-) diff --git a/controllers/ort_edit.go b/controllers/ort_edit.go index 0b248cc..3e9c288 100644 --- a/controllers/ort_edit.go +++ b/controllers/ort_edit.go @@ -117,13 +117,18 @@ func (p *OrtEditPage) GET(engine *templating.Engine, app core.App) HandleFunc { } } -func (p *OrtEditPage) renderError(engine *templating.Engine, app core.App, e *core.RequestEvent, message string) error { +func (p *OrtEditPage) renderError(engine *templating.Engine, app core.App, e *core.RequestEvent, message string, formdata *ortEditForm) error { id := e.Request.PathValue("id") data := make(map[string]any) result, err := NewOrtEditResult(app, id) if err != nil { return engine.Response404(e, err, data) } + if formdata != nil && result != nil && result.Place != nil { + name := strings.TrimSpace(formdata.Name) + status := strings.TrimSpace(formdata.Status) + applyPlaceForm(result.Place, *formdata, name, status, nil) + } data["result"] = result data["error"] = message @@ -165,11 +170,11 @@ func (p *OrtEditPage) POST(engine *templating.Engine, app core.App) HandleFunc { formdata := ortEditForm{} if err := e.BindBody(&formdata); err != nil { - return p.renderError(engine, app, e, "Formulardaten ungültig.") + return p.renderError(engine, app, e, "Formulardaten ungültig.", nil) } if err := req.CheckCSRF(formdata.CSRFToken); err != nil { - return p.renderError(engine, app, e, err.Error()) + return p.renderError(engine, app, e, err.Error(), &formdata) } place, err := dbmodels.Places_ID(app, id) @@ -180,21 +185,21 @@ func (p *OrtEditPage) POST(engine *templating.Engine, app core.App) HandleFunc { if formdata.LastEdited != "" { lastEdited, err := types.ParseDateTime(formdata.LastEdited) if err != nil { - return p.renderError(engine, app, e, "Ungültiger Bearbeitungszeitstempel.") + return p.renderError(engine, app, e, "Ungültiger Bearbeitungszeitstempel.", &formdata) } if !place.Updated().Time().Equal(lastEdited.Time()) { - return p.renderError(engine, app, e, "Der Ort wurde inzwischen geändert. Bitte Seite neu laden.") + return p.renderError(engine, app, e, "Der Ort wurde inzwischen geändert. Bitte Seite neu laden.", &formdata) } } name := strings.TrimSpace(formdata.Name) if name == "" { - return p.renderError(engine, app, e, "Name ist erforderlich.") + return p.renderError(engine, app, e, "Name ist erforderlich.", &formdata) } status := strings.TrimSpace(formdata.Status) if status == "" || !slices.Contains(dbmodels.EDITORSTATE_VALUES, status) { - return p.renderError(engine, app, e, "Ungültiger Status.") + return p.renderError(engine, app, e, "Ungültiger Status.", &formdata) } // Capture old name (entries depend on place name) @@ -206,7 +211,7 @@ func (p *OrtEditPage) POST(engine *templating.Engine, app core.App) HandleFunc { return tx.Save(place) }); err != nil { app.Logger().Error("Failed to save place", "place_id", place.Id, "error", err) - return p.renderError(engine, app, e, "Speichern fehlgeschlagen.") + return p.renderError(engine, app, e, "Speichern fehlgeschlagen.", &formdata) } // Check if name changed (entries store place name) diff --git a/controllers/person_edit.go b/controllers/person_edit.go index 6578ff2..9ed5e7f 100644 --- a/controllers/person_edit.go +++ b/controllers/person_edit.go @@ -130,13 +130,18 @@ func (p *PersonEditPage) GET(engine *templating.Engine, app core.App) HandleFunc } } -func (p *PersonEditPage) renderError(engine *templating.Engine, app core.App, e *core.RequestEvent, message string) error { +func (p *PersonEditPage) renderError(engine *templating.Engine, app core.App, e *core.RequestEvent, message string, formdata *personEditForm) error { id := e.Request.PathValue("id") data := make(map[string]any) result, err := NewPersonEditResult(app, id) if err != nil { return engine.Response404(e, err, data) } + if formdata != nil && result != nil && result.Agent != nil { + name := strings.TrimSpace(formdata.Name) + status := strings.TrimSpace(formdata.Status) + applyPersonForm(result.Agent, *formdata, name, status, nil) + } data["result"] = result data["error"] = message @@ -277,11 +282,11 @@ func (p *PersonEditPage) POST(engine *templating.Engine, app core.App) HandleFun formdata := personEditForm{} if err := e.BindBody(&formdata); err != nil { - return p.renderError(engine, app, e, "Formulardaten ungültig.") + return p.renderError(engine, app, e, "Formulardaten ungültig.", nil) } if err := req.CheckCSRF(formdata.CSRFToken); err != nil { - return p.renderError(engine, app, e, err.Error()) + return p.renderError(engine, app, e, err.Error(), &formdata) } agent, err := dbmodels.Agents_ID(app, id) @@ -292,21 +297,21 @@ func (p *PersonEditPage) POST(engine *templating.Engine, app core.App) HandleFun if formdata.LastEdited != "" { lastEdited, err := types.ParseDateTime(formdata.LastEdited) if err != nil { - return p.renderError(engine, app, e, "Ungültiger Bearbeitungszeitstempel.") + return p.renderError(engine, app, e, "Ungültiger Bearbeitungszeitstempel.", &formdata) } if !agent.Updated().Time().Equal(lastEdited.Time()) { - return p.renderError(engine, app, e, "Die Person wurde inzwischen geändert. Bitte Seite neu laden.") + return p.renderError(engine, app, e, "Die Person wurde inzwischen geändert. Bitte Seite neu laden.", &formdata) } } name := strings.TrimSpace(formdata.Name) if name == "" { - return p.renderError(engine, app, e, "Name ist erforderlich.") + return p.renderError(engine, app, e, "Name ist erforderlich.", &formdata) } status := strings.TrimSpace(formdata.Status) if status == "" || !slices.Contains(dbmodels.EDITORSTATE_VALUES, status) { - return p.renderError(engine, app, e, "Ungültiger Status.") + return p.renderError(engine, app, e, "Ungültiger Status.", &formdata) } // Capture old name (entries and contents depend on agent name) @@ -318,7 +323,7 @@ func (p *PersonEditPage) POST(engine *templating.Engine, app core.App) HandleFun return tx.Save(agent) }); err != nil { app.Logger().Error("Failed to save agent", "agent_id", agent.Id, "error", err) - return p.renderError(engine, app, e, "Speichern fehlgeschlagen.") + return p.renderError(engine, app, e, "Speichern fehlgeschlagen.", &formdata) } // Check if name changed (entries and contents store agent name) diff --git a/controllers/reihe_edit.go b/controllers/reihe_edit.go index 1b8dcd8..fb2ec49 100644 --- a/controllers/reihe_edit.go +++ b/controllers/reihe_edit.go @@ -139,13 +139,18 @@ func (p *ReiheEditPage) GET(engine *templating.Engine, app core.App) HandleFunc } } -func (p *ReiheEditPage) renderError(engine *templating.Engine, app core.App, e *core.RequestEvent, message string) error { +func (p *ReiheEditPage) renderError(engine *templating.Engine, app core.App, e *core.RequestEvent, message string, formdata *reiheEditForm) error { id := e.Request.PathValue("id") data := make(map[string]any) result, err := NewReiheEditResult(app, id) if err != nil { return engine.Response404(e, err, data) } + if formdata != nil && result != nil && result.Series != nil { + title := strings.TrimSpace(formdata.Title) + status := strings.TrimSpace(formdata.Status) + applySeriesForm(result.Series, *formdata, title, status, nil) + } data["result"] = result data["error"] = message @@ -377,11 +382,11 @@ func (p *ReiheEditPage) POST(engine *templating.Engine, app core.App) HandleFunc formdata := reiheEditForm{} if err := e.BindBody(&formdata); err != nil { - return p.renderError(engine, app, e, "Formulardaten ungültig.") + return p.renderError(engine, app, e, "Formulardaten ungültig.", nil) } if err := req.CheckCSRF(formdata.CSRFToken); err != nil { - return p.renderError(engine, app, e, err.Error()) + return p.renderError(engine, app, e, err.Error(), &formdata) } series, err := dbmodels.Series_MusenalmID(app, id) @@ -392,21 +397,21 @@ func (p *ReiheEditPage) POST(engine *templating.Engine, app core.App) HandleFunc if formdata.LastEdited != "" { lastEdited, err := types.ParseDateTime(formdata.LastEdited) if err != nil { - return p.renderError(engine, app, e, "Ungültiger Bearbeitungszeitstempel.") + return p.renderError(engine, app, e, "Ungültiger Bearbeitungszeitstempel.", &formdata) } if !series.Updated().Time().Equal(lastEdited.Time()) { - return p.renderError(engine, app, e, "Die Reihe wurde inzwischen geändert. Bitte Seite neu laden.") + return p.renderError(engine, app, e, "Die Reihe wurde inzwischen geändert. Bitte Seite neu laden.", &formdata) } } title := strings.TrimSpace(formdata.Title) if title == "" { - return p.renderError(engine, app, e, "Reihentitel ist erforderlich.") + return p.renderError(engine, app, e, "Reihentitel ist erforderlich.", &formdata) } status := strings.TrimSpace(formdata.Status) if status == "" || !slices.Contains(dbmodels.EDITORSTATE_VALUES, status) { - return p.renderError(engine, app, e, "Ungültiger Status.") + return p.renderError(engine, app, e, "Ungültiger Status.", &formdata) } // Capture old title (entries depend on series title) @@ -418,7 +423,7 @@ func (p *ReiheEditPage) POST(engine *templating.Engine, app core.App) HandleFunc return tx.Save(series) }); err != nil { app.Logger().Error("Failed to save series", "series_id", series.Id, "error", err) - return p.renderError(engine, app, e, "Speichern fehlgeschlagen.") + return p.renderError(engine, app, e, "Speichern fehlgeschlagen.", &formdata) } // Check if title changed (entries store series title)