Erste Experimente mit Reihen

This commit is contained in:
Simon Martens
2025-02-13 17:20:16 +01:00
parent ae041aa3bf
commit 8d00f6a44d
15 changed files with 394 additions and 64 deletions

View File

@@ -7,31 +7,9 @@ import (
m "github.com/pocketbase/pocketbase/migrations"
)
var bilder_fields = core.NewFieldsList(
&core.TextField{Name: pagemodels.F_INDEX_BILDER_TITEL, Required: true, Presentable: true},
&core.EditorField{Name: pagemodels.F_INDEX_BILDER_BESCHREIBUNG, Required: false, Presentable: false},
&core.FileField{
Name: pagemodels.F_INDEX_BILDER_BILD,
Required: true,
MaxSize: 100 * 1024 * 1024,
MaxSelect: 1000,
MimeTypes: dbmodels.MUSENALM_MIME_TYPES,
Thumbs: []string{"0x300", "0x500", "0x1000", "300x0", "500x0", "1000x0"},
}, // 100 MB a file
&core.FileField{
Name: pagemodels.F_INDEX_BILDER_VORSCHAU,
Required: true,
MaxSize: 100 * 1024 * 1024,
MaxSelect: 1000,
MimeTypes: dbmodels.MUSENALM_MIME_TYPES,
Thumbs: []string{"0x300", "0x500", "0x1000", "300x0", "500x0", "1000x0"},
}, // 100 MB a file
)
var texte_fields = core.NewFieldsList(
&core.TextField{Name: pagemodels.F_INDEX_TEXTE_TITEL, Required: true, Presentable: true},
&core.EditorField{Name: pagemodels.F_INDEX_TEXTE_ABS1, Required: false, Presentable: false},
&core.EditorField{Name: pagemodels.F_INDEX_TEXTE_ABS2, Required: false, Presentable: false},
pagemodels.EditorField(pagemodels.F_INDEX_TEXTE_ABS1),
pagemodels.EditorField(pagemodels.F_INDEX_TEXTE_ABS2),
)
func init() {
@@ -56,7 +34,7 @@ func init() {
}
collection_t, err := app.FindCollectionByNameOrId(
pagemodels.GeneratePageTableName(pagemodels.P_INDEX_NAME, pagemodels.T_INDEX_TEXTE))
pagemodels.GeneratePageTableName(pagemodels.P_INDEX_NAME))
if err == nil && collection_t != nil {
if err := app.Delete(collection_t); err != nil {
return err
@@ -71,15 +49,18 @@ func bilderCollection() *core.Collection {
pagemodels.GeneratePageTableName(pagemodels.P_INDEX_NAME, pagemodels.T_INDEX_BILDER))
c.ListRule = dbmodels.PUBLIC_LIST_RULE
c.ViewRule = dbmodels.PUBLIC_VIEW_RULE
c.Fields = bilder_fields
c.Fields = core.NewFieldsList(
pagemodels.TextField(pagemodels.F_TITLE),
pagemodels.EditorField(pagemodels.F_DESCRIPTION),
pagemodels.RequiredImageField(pagemodels.F_IMAGE, false),
pagemodels.RequiredImageField(pagemodels.F_PREVIEW, false),
)
return c
}
func texteCollection() *core.Collection {
c := core.NewBaseCollection(
pagemodels.GeneratePageTableName(pagemodels.P_INDEX_NAME, pagemodels.T_INDEX_TEXTE))
c.ListRule = dbmodels.PUBLIC_LIST_RULE
c.ViewRule = dbmodels.PUBLIC_VIEW_RULE
c.Fields = texte_fields
c := pagemodels.BasePageCollection(pagemodels.P_INDEX_NAME)
c.Fields = append(c.Fields, texte_fields...)
return c
}

View File

@@ -14,14 +14,36 @@ import (
"github.com/pocketbase/pocketbase/tools/filesystem"
)
const ABS1 = "<p>Die Epoche der Almanache und Taschenbücher in der deutschsprachigen Publizistik beginnt im Jahr 1770 und klingt ab 1848 allmählich aus.</p><p>Noch heute erstaunt die Vielfalt der im Almanachwesen anzutreffenden Gegenstände: es gab literarische, politische, historische, satirische, philosophische und naturwissenschaftliche Almanache und Taschenbücher; es gab solche die der Mode, der Forstwirtschaft, dem Laientheater, dem Schachspiel oder der leichten Abendunterhaltung gewidmet waren etc.</p><p>In ihrer thematischen Bandbreite stellen Almanache und Taschenbücher über ihre oft reizvolle Ausstattung und Illustration hinaus wichtige kulturhistorische Zeitzeugen dar.</p>"
const ABS2 = "Die laufend aktualisierte Datenbank erfasst die Almanache nach <a href='/reihen'>Reihen</a>, <a href='/personen'>Personen</a> und verschiedenen Arten von Beiträgen — Textbeiträgen, Graphiken oder Musikbeiträgen. Umfangreiche <a href='/recherche'>Suchfunktionen</a> helfen bei der Erschließung des Materials."
func init() {
m.Register(func(app core.App) error {
index_collection, err := app.FindCollectionByNameOrId(
pagemodels.GeneratePageTableName(pagemodels.P_INDEX_NAME))
if err != nil {
app.Logger().Error("Could not find Table Texte! You need to execute table migrations first!")
return err
}
images := readImages(app, xmlmodels.STATIC_IMG_PATH, xmlmodels.BESCHREIBUNGEN_FN)
for _, image := range images {
if err := app.Save(image); err != nil {
app.Logger().Error("Failed to save image:", "error", err, "image", image)
}
}
text := pagemodels.NewIndexTexte(core.NewRecord(index_collection))
text.SetTitel("MUSENALM")
text.SetAbs1(ABS1)
text.SetAbs2(ABS2)
if err := app.Save(text); err != nil {
app.Logger().Error("Failed to save text:", "error", err, "text", text)
return err
}
return nil
}, func(app core.App) error {
collection, err := app.FindCollectionByNameOrId(
@@ -29,6 +51,12 @@ func init() {
if err == nil && collection != nil {
app.DB().NewQuery("DELETE FROM " + collection.TableName()).Execute()
}
index_collection, err := app.FindCollectionByNameOrId(
pagemodels.GeneratePageTableName(pagemodels.P_INDEX_NAME))
if err == nil && index_collection != nil {
app.DB().NewQuery("DELETE FROM " + index_collection.TableName()).Execute()
}
return nil
})
}

View File

@@ -0,0 +1,39 @@
package migrations_reihen
import (
"github.com/Theodor-Springmann-Stiftung/musenalm/pagemodels"
"github.com/pocketbase/pocketbase/core"
m "github.com/pocketbase/pocketbase/migrations"
)
var reihen_fields = core.NewFieldsList(
pagemodels.EditorField(pagemodels.F_TEXT),
pagemodels.RequiredImageField(pagemodels.F_IMAGE, false),
)
func init() {
m.Register(func(app core.App) error {
collection := pageCollection()
if err := app.Save(collection); err != nil {
app.Logger().Error("Failed to save collection:", "error", err, "collection", collection)
return err
}
return nil
}, func(app core.App) error {
collection, err := app.FindCollectionByNameOrId(
pagemodels.GeneratePageTableName(pagemodels.P_REIHEN_NAME))
if err == nil && collection != nil {
if err := app.Delete(collection); err != nil {
app.Logger().Error("Failed to delete collection:", "error", err, "collection", collection)
return err
}
}
return nil
})
}
func pageCollection() *core.Collection {
c := pagemodels.BasePageCollection(pagemodels.P_REIHEN_NAME)
c.Fields = append(c.Fields, reihen_fields...)
return c
}

View File

@@ -0,0 +1,50 @@
package migrations_reihen
import (
"github.com/Theodor-Springmann-Stiftung/musenalm/pagemodels"
"github.com/pocketbase/pocketbase/core"
m "github.com/pocketbase/pocketbase/migrations"
"github.com/pocketbase/pocketbase/tools/filesystem"
)
const START = "<p>Ziel der Musenalm ist die&nbsp;bibliographische Erfassung eines Jahrhunderts deutscher Almanache und Taschenb&uuml;cher;<strong>&nbsp;</strong>das Projekt ist im Aufbau und wird kontinuierlich weitergef&uuml;hrt.</p><p>Verzeichnet werden:</p><ul><li><strong>Reihen </strong>und<strong> B&auml;nde</strong> bekannter Almanache und einzelne Druckauflagen mit ausf&uuml;hrlichen bibliographischen Angaben und kurzer systematisierter&nbsp;<strong>Darstellung ihres strukturellen Aufbaus </strong>&nbsp;(Paginierung, Anordnung der Druckteile, Graphiken und Beilagen),<strong><br></strong></li><li><strong>Beitr&auml;ge literarisch oder musisch ausgerichteter Almanache&nbsp;</strong>einzeln, nach Autor, &Uuml;berschrift und Incipit,<strong> </strong>inklusive<strong> Digitalisate </strong>graphischer und musischer Beitr&auml;ge,</li><li>Beitr&auml;ge vorwiegend&nbsp;<strong>nicht literarischer Almanache</strong>&nbsp;in der Regel durch Wiedergabe des&nbsp;<strong>Inhaltsverzeichnisses.</strong></li></ul><p>Die Bibliographie ist zug&auml;nglich mit umfangreichen Suchfunktionen &uuml;ber:</p><ul><li><strong>Reihentitel der Almanache,</strong></li><li><strong>Abbildungen (Graphiken und Musikbeilagen),</strong></li><li>Personennamen von Herausgebern und Beitr&auml;gern einerseits &uuml;ber normierte<strong> Realnamen </strong>und andererseits &uuml;ber die im Druck erscheinenden Schreibweisen der Personen (auch Pseudonyme)<strong> </strong>als<strong> Autornamen,</strong></li><li><strong>Einzeltitel und Incipit </strong>(w&ouml;rtliche Textanf&auml;nge) von Beitr&auml;gen.</li></ul><p>Die Musenalm ist ein Projekt der Theodor Springmann Stiftung in Heidelberg.</p>"
const START_BILD = "./Static-Bilder/musen.png"
func init() {
m.Register(func(app core.App) error {
collection, err := app.FindCollectionByNameOrId(
pagemodels.GeneratePageTableName(pagemodels.P_REIHEN_NAME))
if err != nil {
app.Logger().Error("Could not find Table Reihen! You need to execute table migrations first!")
return err
}
record := pagemodels.NewReihen(core.NewRecord(collection))
record.SetTitle("Musenalm")
record.SetText(START)
img, err := filesystem.NewFileFromPath(START_BILD)
if err != nil {
app.Logger().Error("Failed to read image file", "error", err, "path", START_BILD)
return err
}
record.SetImage(img)
if err := app.Save(record); err != nil {
app.Logger().Error("Failed to save record", "error", err, "record", record)
return err
}
return nil
}, func(app core.App) error {
coll, err := app.FindCollectionByNameOrId(
pagemodels.GeneratePageTableName(pagemodels.P_REIHEN_NAME))
if err == nil && coll != nil {
app.DB().NewQuery("DELETE FROM " + coll.TableName()).Execute()
}
return nil
})
}

75
pages/reihen.go Normal file
View File

@@ -0,0 +1,75 @@
package pages
import (
"fmt"
"net/http"
"strings"
"github.com/Theodor-Springmann-Stiftung/musenalm/app"
"github.com/Theodor-Springmann-Stiftung/musenalm/dbmodels"
"github.com/Theodor-Springmann-Stiftung/musenalm/pagemodels"
"github.com/Theodor-Springmann-Stiftung/musenalm/templating"
"github.com/pocketbase/dbx"
"github.com/pocketbase/pocketbase/core"
"github.com/pocketbase/pocketbase/tools/router"
)
const (
URL_REIHEN = "/reihen/"
PARAM_LETTER = "letter"
)
func init() {
rp := &ReihenPage{
Page: pagemodels.Page{
Name: pagemodels.P_REIHEN_NAME,
},
}
app.Register(rp)
}
type ReihenPage struct {
pagemodels.Page
}
func (p *ReihenPage) Up(app core.App) error {
return nil
}
func (p *ReihenPage) Down(app core.App) error {
return nil
}
func (p *ReihenPage) Setup(router *router.Router[*core.RequestEvent], app core.App, engine *templating.Engine) error {
router.GET(URL_REIHEN, func(e *core.RequestEvent) error {
letter := e.Request.URL.Query().Get(PARAM_LETTER)
if letter == "" {
letter = "A"
}
series := []*dbmodels.Series{}
err := app.RecordQuery(dbmodels.SERIES_TABLE).
AndWhere(dbx.NewExp(dbmodels.SERIES_TITLE_FIELD + " LIKE '" + letter + "%'")).
OrderBy(dbmodels.SERIES_TITLE_FIELD).
All(&series)
// INFO: this does not return an error if the result set is empty
if err != nil {
return err
}
// INFO: We sort again since the query can't sort german umlauts correctly
dbmodels.SortSeriesByTitle(series)
var builder strings.Builder
err = engine.Render(&builder, URL_REIHEN, map[string]interface{}{
PARAM_LETTER: letter,
"series": series,
})
if err != nil {
return err
}
return e.HTML(http.StatusOK, builder.String())
})
return nil
}