diff --git a/controllers/almanach.go b/controllers/almanach.go index e032437..1292f9b 100644 --- a/controllers/almanach.go +++ b/controllers/almanach.go @@ -68,7 +68,6 @@ type AlmanachResult struct { EntriesSeries map[string]*dbmodels.REntriesSeries // <- Key is series id EntriesAgents []*dbmodels.REntriesAgents ContentsAgents map[string][]*dbmodels.RContentsAgents // <- Key is content id - User *dbmodels.User Types []string HasScans bool @@ -167,16 +166,6 @@ func NewAlmanachResult(app core.App, id string, params BeitraegeFilterParameters agentsMap[a.Id] = a } - var user *dbmodels.User - if entry.Editor() != "" { - u, err := dbmodels.Users_ID(app, entry.Editor()) - if err == nil { - user = u - } else { - app.Logger().Error("Failed to load user for entry editor", "entry", entry.Id, "error", err) - } - } - ret := &AlmanachResult{ Entry: entry, Places: places, @@ -188,7 +177,6 @@ func NewAlmanachResult(app core.App, id string, params BeitraegeFilterParameters ContentsAgents: caMap, Types: types, HasScans: hs, - User: user, } ret.Collections() diff --git a/controllers/almanach_edit.go b/controllers/almanach_edit.go index 89f214f..46b2750 100644 --- a/controllers/almanach_edit.go +++ b/controllers/almanach_edit.go @@ -2,6 +2,7 @@ package controllers import ( "github.com/Theodor-Springmann-Stiftung/musenalm/app" + "github.com/Theodor-Springmann-Stiftung/musenalm/dbmodels" "github.com/Theodor-Springmann-Stiftung/musenalm/middleware" "github.com/Theodor-Springmann-Stiftung/musenalm/pagemodels" "github.com/Theodor-Springmann-Stiftung/musenalm/templating" @@ -40,14 +41,16 @@ func (p *AlmanachEditPage) Setup(router *router.Router[*core.RequestEvent], app func (p *AlmanachEditPage) GET(engine *templating.Engine, app core.App) HandleFunc { return func(e *core.RequestEvent) error { id := e.Request.PathValue("id") + req := templating.NewRequest(e) data := make(map[string]any) filters := NewBeitraegeFilterParameters(e) - result, err := NewAlmanachResult(app, id, filters) + result, err := NewAlmanachEditResult(app, id, filters) if err != nil { engine.Response404(e, err, nil) } data["result"] = result data["filters"] = filters + data["csrf_token"] = req.Session().Token abbrs, err := pagemodels.GetAbks(app) if err == nil { @@ -57,3 +60,37 @@ func (p *AlmanachEditPage) GET(engine *templating.Engine, app core.App) HandleFu return engine.Response200(e, p.Template, data, p.Layout) } } + +type AlmanachEditResult struct { + Next *dbmodels.Entry + Prev *dbmodels.Entry + User *dbmodels.User + AlmanachResult +} + +func NewAlmanachEditResult(app core.App, id string, filters BeitraegeFilterParameters) (*AlmanachEditResult, error) { + result, err := NewAlmanachResult(app, id, filters) + if err != nil { + return nil, err + } + + var user *dbmodels.User + if result.Entry.Editor() != "" { + u, err := dbmodels.Users_ID(app, result.Entry.Editor()) + if err == nil { + user = u + } else { + app.Logger().Error("Failed to load user for entry editor", "entry", result.Entry.Id, "error", err) + } + } + + next := result.Entry.Next(app) + prev := result.Entry.Prev(app) + + return &AlmanachEditResult{ + User: user, + AlmanachResult: *result, + Next: next, + Prev: prev, + }, nil +} diff --git a/dbmodels/access_tokens.go b/dbmodels/access_token.go similarity index 100% rename from dbmodels/access_tokens.go rename to dbmodels/access_token.go diff --git a/dbmodels/agents.go b/dbmodels/agents_functions.go similarity index 100% rename from dbmodels/agents.go rename to dbmodels/agents_functions.go diff --git a/dbmodels/entries_functions.go b/dbmodels/entries_functions.go new file mode 100644 index 0000000..a4fff56 --- /dev/null +++ b/dbmodels/entries_functions.go @@ -0,0 +1,34 @@ +package dbmodels + +import ( + "github.com/pocketbase/dbx" + "github.com/pocketbase/pocketbase/core" +) + +func (e *Entry) Prev(app core.App) *Entry { + var entry Entry + err := app.RecordQuery(ENTRIES_TABLE). + Where(dbx.NewExp(MUSENALMID_FIELD+" < {:exp}", dbx.Params{"exp": e.MusenalmID()})). + OrderBy(MUSENALMID_FIELD + " DESC"). + Limit(1). + One(&entry) + if err != nil { + return nil + } + + return &entry +} + +func (e *Entry) Next(app core.App) *Entry { + var entry Entry + err := app.RecordQuery(ENTRIES_TABLE). + Where(dbx.NewExp(MUSENALMID_FIELD+" > {:exp}", dbx.Params{"exp": e.MusenalmID()})). + OrderBy(MUSENALMID_FIELD + " ASC"). + Limit(1). + One(&entry) + if err != nil { + return nil + } + + return &entry +} diff --git a/dbmodels/seriesses.go b/dbmodels/series_functions.go similarity index 100% rename from dbmodels/seriesses.go rename to dbmodels/series_functions.go diff --git a/dbmodels/sessions.go b/dbmodels/session.go similarity index 100% rename from dbmodels/sessions.go rename to dbmodels/session.go diff --git a/views/routes/almanach/edit/body.gohtml b/views/routes/almanach/edit/body.gohtml index 0400d41..975d950 100644 --- a/views/routes/almanach/edit/body.gohtml +++ b/views/routes/almanach/edit/body.gohtml @@ -19,7 +19,34 @@ type AlmanachResult struct {