Albirew/nyaa-pantsu
Archivé
1
0
Bifurcation 0
Ce dépôt a été archivé le 2022-05-07. Vous pouvez voir ses fichiers ou le cloner, mais pas ouvrir de ticket ou de demandes d'ajout, ni soumettre de changements.
nyaa-pantsu/util/messages/messages.go
akuma06 946f02d0fc Use of validator pkg now
Use of validator pkg replacing modelHelper.

ValidateForm adds translated errors in messages context. To know if we have errors, we have to call messages.HasErrors() after the validation check.

New translation strings for some field check. I didn't add every tag as an error since it seems we won't use them (isbn, ...). This would overload the translation files that are already big.
2017-07-01 01:25:11 +02:00

179 lignes
5,8 Kio
Go

package messages
import (
"errors"
"fmt"
"github.com/NyaaPantsu/nyaa/util/publicSettings"
"github.com/gin-gonic/gin"
"github.com/gorilla/context"
"github.com/nicksnyder/go-i18n/i18n"
)
// MessagesKey : use for context
const MessagesKey = "nyaapantsu.messages"
// Messages struct
type Messages struct {
Errors map[string][]string
Infos map[string][]string
c *gin.Context
T i18n.TranslateFunc
}
// GetMessages : Initialize or return the messages object from context
func GetMessages(c *gin.Context) *Messages {
if rv := context.Get(c.Request, MessagesKey); rv != nil {
mes := rv.(*Messages)
T, _ := publicSettings.GetTfuncAndLanguageFromRequest(c)
mes.T = T
mes.c = c
return mes
}
context.Set(c.Request, MessagesKey, &Messages{})
T, _ := publicSettings.GetTfuncAndLanguageFromRequest(c)
return &Messages{make(map[string][]string), make(map[string][]string), c, T}
}
// AddError : Add an error in category name with message msg
func (mes *Messages) AddError(name string, msg string) error {
if mes.Errors == nil {
mes.Errors = make(map[string][]string)
}
mes.Errors[name] = append(mes.Errors[name], msg)
mes.setMessagesInContext()
return errors.New(msg)
}
// AddErrorf : Add an error in category name with message msg formatted with args
func (mes *Messages) AddErrorf(name string, msg string, args ...interface{}) error {
return mes.AddError(name, fmt.Sprintf(msg, args...))
}
// AddErrorTf : Add an error in category name with translation string id formatted with args
func (mes *Messages) AddErrorTf(name string, id string, args ...interface{}) error {
return mes.AddErrorf(name, mes.T(id), args...)
}
// AddErrorT : Add an error in category name with translation string id
func (mes *Messages) AddErrorT(name string, id string) error {
return mes.AddError(name, mes.T(id))
}
// ImportFromError : Add an error in category name with message msg imported from type error
func (mes *Messages) ImportFromError(name string, err error) error {
return mes.AddError(name, err.Error())
}
// ImportFromErrorT : Add an error in category name with message msg imported from type error
func (mes *Messages) ImportFromErrorT(name string, err error) error {
return mes.AddError(name, mes.T(err.Error()))
}
// ImportFromErrorTf : Add an error in category name with message msg imported from type error
func (mes *Messages) ImportFromErrorTf(name string, err error, args ...interface{}) error {
return mes.AddError(name, fmt.Sprintf(mes.T(err.Error()), args...))
}
// ImportFromError : Aliases to import directly an error in "errors" map index
func (mes *Messages) Error(err error) error {
return mes.ImportFromError("errors", err)
}
// ErrorT : Aliases to import directly an error in "errors" map index and translate the error
func (mes *Messages) ErrorT(err error) error {
return mes.ImportFromErrorT("errors", err)
}
// ErrorTf : Aliases to import directly an error in "errors" map index and translate the error with args
func (mes *Messages) ErrorTf(err error, args ...interface{}) error {
return mes.ImportFromErrorTf("errors", err)
}
// AddInfo : Add an info in category name with message msg
func (mes *Messages) AddInfo(name string, msg string) {
if mes.Infos == nil {
mes.Infos = make(map[string][]string)
}
mes.Infos[name] = append(mes.Infos[name], msg)
mes.setMessagesInContext()
}
// AddInfof : Add an info in category name with message msg formatted with args
func (mes *Messages) AddInfof(name string, msg string, args ...interface{}) {
mes.AddInfo(name, fmt.Sprintf(msg, args...))
}
// AddInfoTf : Add an info in category name with translation string id formatted with args
func (mes *Messages) AddInfoTf(name string, id string, args ...interface{}) {
mes.AddInfof(name, mes.T(id), args...)
}
// AddInfoT : Add an info in category name with translation string id
func (mes *Messages) AddInfoT(name string, id string) {
mes.AddInfo(name, mes.T(id))
}
// ClearAllErrors : Erase all errors in messages
func (mes *Messages) ClearAllErrors() {
mes.Errors = nil
mes.setMessagesInContext()
}
// ClearAllInfos : Erase all infos in messages
func (mes *Messages) ClearAllInfos() {
mes.Infos = nil
mes.setMessagesInContext()
}
// ClearErrors : Erase all errors in messages
func (mes *Messages) ClearErrors(name string) {
delete(mes.Errors, name)
mes.setMessagesInContext()
}
// ClearInfos : Erase all infos in messages
func (mes *Messages) ClearInfos(name string) {
delete(mes.Infos, name)
mes.setMessagesInContext()
}
// GetAllErrors : Get all errors
func (mes *Messages) GetAllErrors() map[string][]string {
mes = GetMessages(mes.c) // We need to look if any new errors from other functions has updated context
return mes.Errors
}
// GetErrors : Get all errors in category name
func (mes *Messages) GetErrors(name string) []string {
mes = GetMessages(mes.c) // We need to look if any new errors from other functions has updated context
return mes.Errors[name]
}
// GetAllInfos : Get all infos
func (mes *Messages) GetAllInfos() map[string][]string {
mes = GetMessages(mes.c) // We need to look if any new errors from other functions has updated context
return mes.Infos
}
// GetInfos : Get all infos in category name
func (mes *Messages) GetInfos(name string) []string {
mes = GetMessages(mes.c) // We need to look if any new errors from other functions has updated context
return mes.Infos[name]
}
// HasErrors : Check if there are errors
func (mes *Messages) HasErrors() bool {
mes = GetMessages(mes.c) // We need to look if any new errors from other functions has updated context
return len(mes.Errors) > 0
}
// HasInfos : Check if there are infos
func (mes *Messages) HasInfos() bool {
mes = GetMessages(mes.c) // We need to look if any new errors from other functions has updated context
return len(mes.Infos) > 0
}
func (mes *Messages) setMessagesInContext() {
context.Set(mes.c.Request, MessagesKey, mes)
}