mirror of
https://github.com/Theodor-Springmann-Stiftung/musenalm.git
synced 2025-10-29 09:15:33 +00:00
Prev/next
This commit is contained in:
@@ -68,7 +68,6 @@ type AlmanachResult struct {
|
|||||||
EntriesSeries map[string]*dbmodels.REntriesSeries // <- Key is series id
|
EntriesSeries map[string]*dbmodels.REntriesSeries // <- Key is series id
|
||||||
EntriesAgents []*dbmodels.REntriesAgents
|
EntriesAgents []*dbmodels.REntriesAgents
|
||||||
ContentsAgents map[string][]*dbmodels.RContentsAgents // <- Key is content id
|
ContentsAgents map[string][]*dbmodels.RContentsAgents // <- Key is content id
|
||||||
User *dbmodels.User
|
|
||||||
|
|
||||||
Types []string
|
Types []string
|
||||||
HasScans bool
|
HasScans bool
|
||||||
@@ -167,16 +166,6 @@ func NewAlmanachResult(app core.App, id string, params BeitraegeFilterParameters
|
|||||||
agentsMap[a.Id] = a
|
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{
|
ret := &AlmanachResult{
|
||||||
Entry: entry,
|
Entry: entry,
|
||||||
Places: places,
|
Places: places,
|
||||||
@@ -188,7 +177,6 @@ func NewAlmanachResult(app core.App, id string, params BeitraegeFilterParameters
|
|||||||
ContentsAgents: caMap,
|
ContentsAgents: caMap,
|
||||||
Types: types,
|
Types: types,
|
||||||
HasScans: hs,
|
HasScans: hs,
|
||||||
User: user,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret.Collections()
|
ret.Collections()
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package controllers
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/Theodor-Springmann-Stiftung/musenalm/app"
|
"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/middleware"
|
||||||
"github.com/Theodor-Springmann-Stiftung/musenalm/pagemodels"
|
"github.com/Theodor-Springmann-Stiftung/musenalm/pagemodels"
|
||||||
"github.com/Theodor-Springmann-Stiftung/musenalm/templating"
|
"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 {
|
func (p *AlmanachEditPage) GET(engine *templating.Engine, app core.App) HandleFunc {
|
||||||
return func(e *core.RequestEvent) error {
|
return func(e *core.RequestEvent) error {
|
||||||
id := e.Request.PathValue("id")
|
id := e.Request.PathValue("id")
|
||||||
|
req := templating.NewRequest(e)
|
||||||
data := make(map[string]any)
|
data := make(map[string]any)
|
||||||
filters := NewBeitraegeFilterParameters(e)
|
filters := NewBeitraegeFilterParameters(e)
|
||||||
result, err := NewAlmanachResult(app, id, filters)
|
result, err := NewAlmanachEditResult(app, id, filters)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
engine.Response404(e, err, nil)
|
engine.Response404(e, err, nil)
|
||||||
}
|
}
|
||||||
data["result"] = result
|
data["result"] = result
|
||||||
data["filters"] = filters
|
data["filters"] = filters
|
||||||
|
data["csrf_token"] = req.Session().Token
|
||||||
|
|
||||||
abbrs, err := pagemodels.GetAbks(app)
|
abbrs, err := pagemodels.GetAbks(app)
|
||||||
if err == nil {
|
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)
|
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
|
||||||
|
}
|
||||||
|
|||||||
34
dbmodels/entries_functions.go
Normal file
34
dbmodels/entries_functions.go
Normal file
@@ -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
|
||||||
|
}
|
||||||
@@ -19,7 +19,34 @@ type AlmanachResult struct {
|
|||||||
<div class="flex container-normal bg-slate-100 mx-auto px-8">
|
<div class="flex container-normal bg-slate-100 mx-auto px-8">
|
||||||
<div class="flex flex-row w-full justify-between pb-6">
|
<div class="flex flex-row w-full justify-between pb-6">
|
||||||
<div class="flex flex-col justify-end-safe pt-36 flex-2/5">
|
<div class="flex flex-col justify-end-safe pt-36 flex-2/5">
|
||||||
<a href="/almanach/{{ $model.result.Entry.MusenalmID }}" class="text-gray-700 hover:text-slate-950 block mb-2"><i class="ri-arrow-left-s-line"></i>Anschauen</a>
|
<div class="flex flex-row gap-x-3 mb-2">
|
||||||
|
<div>
|
||||||
|
<a
|
||||||
|
href="/almanach/{{ $model.result.Entry.MusenalmID }}"
|
||||||
|
class="text-gray-700
|
||||||
|
hover:text-slate-950 block no-underline"
|
||||||
|
><i class="ri-arrow-left-s-line"></i>Anschauen</a
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
·
|
||||||
|
<div class="flex flex-row">
|
||||||
|
{{- if $model.result.Prev -}}
|
||||||
|
<div>
|
||||||
|
<a href="/almanach/{{ $model.result.Prev.MusenalmID }}/edit" class="text-gray-700 hover:text-slate-950 no-underline block "><i class="ri-arrow-left-s-line"></i></a>
|
||||||
|
</div>
|
||||||
|
{{- end -}}
|
||||||
|
<div>{{ $model.result.Entry.MusenalmID }}</div>
|
||||||
|
{{- if $model.result.Next -}}
|
||||||
|
<div>
|
||||||
|
<a href="/almanach/{{ $model.result.Next.MusenalmID }}/edit" class="text-gray-700 hover:text-slate-950 block no-underline"><i class="ri-arrow-right-s-line"></i></a>
|
||||||
|
</div>
|
||||||
|
{{- end -}}
|
||||||
|
</div>
|
||||||
|
·
|
||||||
|
<div>
|
||||||
|
<a href="/almanach/{{- $model.result.Entry.MusenalmID -}}/edit" class="text-gray-700 no-underline hover:text-slate-950 block "><i class="ri-loop-left-line"></i></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<h1 class="text-2xl w-full font-bold text-slate-900">Almanach bearbeiten</h1>
|
<h1 class="text-2xl w-full font-bold text-slate-900">Almanach bearbeiten</h1>
|
||||||
<!--
|
<!--
|
||||||
<div class="mt-1">
|
<div class="mt-1">
|
||||||
@@ -74,5 +101,8 @@ type AlmanachResult struct {
|
|||||||
|
|
||||||
<div class="container-normal mx-auto px-8 mt-4">
|
<div class="container-normal mx-auto px-8 mt-4">
|
||||||
{{ template "_usermessage" $model }}
|
{{ template "_usermessage" $model }}
|
||||||
<form class="w-full grid grid-cols-12 gap-4" id="changealmanachform" x-target="changealmanachform user-message almanach-header-data" hx-boost="false" method="POST"></form>
|
<form class="w-full grid grid-cols-12 gap-4" id="changealmanachform" x-target="changealmanachform user-message almanach-header-data" hx-boost="false" method="POST">
|
||||||
|
<input type="hidden" name="csrf_token" value="{{ $model.csrf_token }}" />
|
||||||
|
<input type="hidden" name="last_edited" value="{{ $model.result.Entry.Updated }}" />
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user