mirror of https://github.com/jlelse/GoBlog
Simple blogging system written in Go
https://goblog.app
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.3 KiB
124 lines
3.3 KiB
package main |
|
|
|
import ( |
|
"database/sql" |
|
"errors" |
|
"fmt" |
|
|
|
"github.com/samber/lo" |
|
) |
|
|
|
func settingNameWithBlog(blog, name string) string { |
|
return fmt.Sprintf("%s---%s", blog, name) |
|
} |
|
|
|
const ( |
|
defaultSectionSetting = "defaultsection" |
|
hideOldContentWarningSetting = "hideoldcontentwarning" |
|
) |
|
|
|
func (a *goBlog) getSettingValue(name string) (string, error) { |
|
row, err := a.db.queryRow("select value from settings where name = @name", sql.Named("name", name)) |
|
if err != nil { |
|
return "", |
|
err |
|
} |
|
var value string |
|
err = row.Scan(&value) |
|
if errors.Is(err, sql.ErrNoRows) { |
|
return "", nil |
|
} else if err != nil { |
|
return "", err |
|
} |
|
return value, nil |
|
} |
|
|
|
func (a *goBlog) getBooleanSettingValue(name string, defaultValue bool) (bool, error) { |
|
stringValue, err := a.getSettingValue(name) |
|
if err != nil { |
|
return defaultValue, err |
|
} |
|
if stringValue == "" { |
|
return defaultValue, nil |
|
} |
|
return stringValue == "1", nil |
|
} |
|
|
|
func (a *goBlog) saveSettingValue(name, value string) error { |
|
_, err := a.db.exec( |
|
"insert into settings (name, value) values (@name, @value) on conflict (name) do update set value = @value2", |
|
sql.Named("name", name), |
|
sql.Named("value", value), |
|
sql.Named("value2", value), |
|
) |
|
return err |
|
} |
|
|
|
func (a *goBlog) saveBooleanSettingValue(name string, value bool) error { |
|
return a.saveSettingValue(name, lo.If(value, "1").Else("0")) |
|
} |
|
|
|
func (a *goBlog) loadSections() error { |
|
for blog, bc := range a.cfg.Blogs { |
|
sections, err := a.getSections(blog) |
|
if err != nil { |
|
return err |
|
} |
|
bc.Sections = sections |
|
} |
|
return nil |
|
} |
|
|
|
func (a *goBlog) getSections(blog string) (map[string]*configSection, error) { |
|
rows, err := a.db.query("select name, title, description, pathtemplate, showfull from sections where blog = @blog", sql.Named("blog", blog)) |
|
if err != nil { |
|
return nil, err |
|
} |
|
sections := map[string]*configSection{} |
|
for rows.Next() { |
|
section := &configSection{} |
|
err = rows.Scan(§ion.Name, §ion.Title, §ion.Description, §ion.PathTemplate, §ion.ShowFull) |
|
if err != nil { |
|
return nil, err |
|
} |
|
sections[section.Name] = section |
|
} |
|
return sections, nil |
|
} |
|
|
|
func (a *goBlog) saveAllSections() error { |
|
for blog, bc := range a.cfg.Blogs { |
|
for k, s := range bc.Sections { |
|
s.Name = k |
|
if err := a.saveSection(blog, s); err != nil { |
|
return err |
|
} |
|
} |
|
} |
|
return nil |
|
} |
|
|
|
func (a *goBlog) saveSection(blog string, section *configSection) error { |
|
_, err := a.db.exec( |
|
` |
|
insert into sections (blog, name, title, description, pathtemplate, showfull) values (@blog, @name, @title, @description, @pathtemplate, @showfull) |
|
on conflict (blog, name) do update set title = @title2, description = @description2, pathtemplate = @pathtemplate2, showfull = @showfull2 |
|
`, |
|
sql.Named("blog", blog), |
|
sql.Named("name", section.Name), |
|
sql.Named("title", section.Title), |
|
sql.Named("description", section.Description), |
|
sql.Named("pathtemplate", section.PathTemplate), |
|
sql.Named("showfull", section.ShowFull), |
|
sql.Named("title2", section.Title), |
|
sql.Named("description2", section.Description), |
|
sql.Named("pathtemplate2", section.PathTemplate), |
|
sql.Named("showfull2", section.ShowFull), |
|
) |
|
return err |
|
} |
|
|
|
func (a *goBlog) deleteSection(blog string, name string) error { |
|
_, err := a.db.exec("delete from sections where blog = @blog and name = @name", sql.Named("blog", blog), sql.Named("name", name)) |
|
return err |
|
}
|
|
|