mirror of
https://github.com/Theodor-Springmann-Stiftung/musenalm.git
synced 2026-02-04 02:25:30 +00:00
+BUGFIX: restore values on validation error
This commit is contained in:
@@ -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")
|
id := e.Request.PathValue("id")
|
||||||
data := make(map[string]any)
|
data := make(map[string]any)
|
||||||
result, err := NewOrtEditResult(app, id)
|
result, err := NewOrtEditResult(app, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return engine.Response404(e, err, data)
|
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["result"] = result
|
||||||
data["error"] = message
|
data["error"] = message
|
||||||
|
|
||||||
@@ -165,11 +170,11 @@ func (p *OrtEditPage) POST(engine *templating.Engine, app core.App) HandleFunc {
|
|||||||
|
|
||||||
formdata := ortEditForm{}
|
formdata := ortEditForm{}
|
||||||
if err := e.BindBody(&formdata); err != nil {
|
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 {
|
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)
|
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 != "" {
|
if formdata.LastEdited != "" {
|
||||||
lastEdited, err := types.ParseDateTime(formdata.LastEdited)
|
lastEdited, err := types.ParseDateTime(formdata.LastEdited)
|
||||||
if err != nil {
|
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()) {
|
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)
|
name := strings.TrimSpace(formdata.Name)
|
||||||
if 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)
|
status := strings.TrimSpace(formdata.Status)
|
||||||
if status == "" || !slices.Contains(dbmodels.EDITORSTATE_VALUES, 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)
|
// 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)
|
return tx.Save(place)
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
app.Logger().Error("Failed to save place", "place_id", place.Id, "error", err)
|
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)
|
// Check if name changed (entries store place name)
|
||||||
|
|||||||
@@ -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")
|
id := e.Request.PathValue("id")
|
||||||
data := make(map[string]any)
|
data := make(map[string]any)
|
||||||
result, err := NewPersonEditResult(app, id)
|
result, err := NewPersonEditResult(app, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return engine.Response404(e, err, data)
|
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["result"] = result
|
||||||
data["error"] = message
|
data["error"] = message
|
||||||
|
|
||||||
@@ -277,11 +282,11 @@ func (p *PersonEditPage) POST(engine *templating.Engine, app core.App) HandleFun
|
|||||||
|
|
||||||
formdata := personEditForm{}
|
formdata := personEditForm{}
|
||||||
if err := e.BindBody(&formdata); err != nil {
|
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 {
|
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)
|
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 != "" {
|
if formdata.LastEdited != "" {
|
||||||
lastEdited, err := types.ParseDateTime(formdata.LastEdited)
|
lastEdited, err := types.ParseDateTime(formdata.LastEdited)
|
||||||
if err != nil {
|
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()) {
|
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)
|
name := strings.TrimSpace(formdata.Name)
|
||||||
if 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)
|
status := strings.TrimSpace(formdata.Status)
|
||||||
if status == "" || !slices.Contains(dbmodels.EDITORSTATE_VALUES, 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)
|
// 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)
|
return tx.Save(agent)
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
app.Logger().Error("Failed to save agent", "agent_id", agent.Id, "error", err)
|
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)
|
// Check if name changed (entries and contents store agent name)
|
||||||
|
|||||||
@@ -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")
|
id := e.Request.PathValue("id")
|
||||||
data := make(map[string]any)
|
data := make(map[string]any)
|
||||||
result, err := NewReiheEditResult(app, id)
|
result, err := NewReiheEditResult(app, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return engine.Response404(e, err, data)
|
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["result"] = result
|
||||||
data["error"] = message
|
data["error"] = message
|
||||||
|
|
||||||
@@ -377,11 +382,11 @@ func (p *ReiheEditPage) POST(engine *templating.Engine, app core.App) HandleFunc
|
|||||||
|
|
||||||
formdata := reiheEditForm{}
|
formdata := reiheEditForm{}
|
||||||
if err := e.BindBody(&formdata); err != nil {
|
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 {
|
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)
|
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 != "" {
|
if formdata.LastEdited != "" {
|
||||||
lastEdited, err := types.ParseDateTime(formdata.LastEdited)
|
lastEdited, err := types.ParseDateTime(formdata.LastEdited)
|
||||||
if err != nil {
|
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()) {
|
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)
|
title := strings.TrimSpace(formdata.Title)
|
||||||
if 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)
|
status := strings.TrimSpace(formdata.Status)
|
||||||
if status == "" || !slices.Contains(dbmodels.EDITORSTATE_VALUES, 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)
|
// 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)
|
return tx.Save(series)
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
app.Logger().Error("Failed to save series", "series_id", series.Id, "error", err)
|
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)
|
// Check if title changed (entries store series title)
|
||||||
|
|||||||
Reference in New Issue
Block a user