The alert list is now visible on the Shadow Theme. The User Manager is now paginated. The Moderation Logs are now paginated. The Group Manager is now paginated. The alert counter no longer shows up as undefined on Edge. Added a cache control header to the static files. Fixed a few bits of mangled HTML. Fixed the Forum Manager CSS for the Shadow Theme.
97 lines
2.2 KiB
Go
97 lines
2.2 KiB
Go
package main
|
|
import "strconv"
|
|
import "strings"
|
|
|
|
// TO-DO: Move this into the phrase system
|
|
var settingLabels map[string]string
|
|
|
|
type OptionLabel struct
|
|
{
|
|
Label string
|
|
Value int
|
|
Selected bool
|
|
}
|
|
|
|
type Setting struct
|
|
{
|
|
Name string
|
|
Content string
|
|
Type string
|
|
Constraint string
|
|
}
|
|
|
|
func init() {
|
|
settingLabels = make(map[string]string)
|
|
settingLabels["activation_type"] = "Activate All,Email Activation,Admin Approval"
|
|
}
|
|
|
|
func LoadSettings() error {
|
|
rows, err := get_full_settings_stmt.Query()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer rows.Close()
|
|
|
|
var sname, scontent, stype, sconstraints string
|
|
for rows.Next() {
|
|
err = rows.Scan(&sname, &scontent, &stype, &sconstraints)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
errmsg := parseSetting(sname, scontent, stype, sconstraints)
|
|
if errmsg != "" {
|
|
return err
|
|
}
|
|
}
|
|
err = rows.Err()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// TO-DO: Add better support for HTML attributes (html-attribute). E.g. Meta descriptions.
|
|
func parseSetting(sname string, scontent string, stype string, constraint string) string {
|
|
var err error
|
|
if stype == "bool" {
|
|
settings[sname] = (scontent == "1")
|
|
} else if stype == "int" {
|
|
settings[sname], err = strconv.Atoi(scontent)
|
|
if err != nil {
|
|
return "You were supposed to enter an integer x.x\nType mismatch in " + sname
|
|
}
|
|
} else if stype == "int64" {
|
|
settings[sname], err = strconv.ParseInt(scontent, 10, 64)
|
|
if err != nil {
|
|
return "You were supposed to enter an integer x.x\nType mismatch in " + sname
|
|
}
|
|
} else if stype == "list" {
|
|
cons := strings.Split(constraint,"-")
|
|
if len(cons) < 2 {
|
|
return "Invalid constraint! The second field wasn't set!"
|
|
}
|
|
|
|
con1, err := strconv.Atoi(cons[0])
|
|
if err != nil {
|
|
return "Invalid contraint! The constraint field wasn't an integer!"
|
|
}
|
|
con2, err := strconv.Atoi(cons[1])
|
|
if err != nil {
|
|
return "Invalid contraint! The constraint field wasn't an integer!"
|
|
}
|
|
|
|
value, err := strconv.Atoi(scontent)
|
|
if err != nil {
|
|
return "Only integers are allowed in this setting x.x\nType mismatch in " + sname
|
|
}
|
|
|
|
if value < con1 || value > con2 {
|
|
return "Only integers between a certain range are allowed in this setting"
|
|
}
|
|
settings[sname] = value
|
|
} else {
|
|
settings[sname] = scontent
|
|
}
|
|
return ""
|
|
}
|