/* * SPDX-FileCopyrightText: 2023 jordi fita mas * SPDX-License-Identifier: AGPL-3.0-only */ package form import ( "database/sql/driver" "net/http" "strconv" "strings" "golang.org/x/text/language" "dev.tandem.ws/tandem/camper/pkg/database" "dev.tandem.ws/tandem/camper/pkg/locale" ) type Input struct { Name string Val string Error error } func (input *Input) setError(err error) { input.Error = err } func (input *Input) FillValue(r *http.Request) { input.Val = strings.TrimSpace(r.FormValue(input.Name)) } func (input *Input) Value() (driver.Value, error) { return input.Val, nil } func (input *Input) Int() int { i, err := strconv.Atoi(input.Val) if err != nil { panic(err) } return i } type I18nInput map[string]*Input func NewI18nInput(locales locale.Locales, name string) I18nInput { input := make(I18nInput) for lang := range locales { input[lang.String()] = &Input{ Name: name + "." + lang.String(), } } return input } func (input I18nInput) FillValue(r *http.Request) { for _, inner := range input { inner.FillValue(r) } } func (input I18nInput) FillArray(array database.RecordArray) error { for _, el := range array.Elements { lang := el.Fields[0].Get() if lang == nil { continue } tag, err := language.Parse(lang.(string)) if err != nil { return err } val := el.Fields[1].Get() if val == nil { input[tag.String()].Val = "" } else { input[tag.String()].Val = val.(string) } } return nil } func (input I18nInput) Error() string { for _, inner := range input { if inner.Error != nil { return inner.Error.Error() } } return "" }