Mercurial > gemma
changeset 3776:6521c962a7b6
Add 'cc' parameter to search imports for a comma separated list of country codes for the the importing person.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Tue, 02 Jul 2019 16:44:04 +0200 |
parents | 33fa76994b8a |
children | c373758ca2df b330e014c655 c1be6beafb54 |
files | pkg/controllers/common.go pkg/controllers/importqueue.go |
diffstat | 2 files changed, 31 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/pkg/controllers/common.go Tue Jul 02 11:43:12 2019 +0200 +++ b/pkg/controllers/common.go Tue Jul 02 16:44:04 2019 +0200 @@ -100,6 +100,18 @@ return &ia } +func sliceToTextArray(s []string) *pgtype.TextArray { + if len(s) == 0 { + return nil + } + var ta pgtype.TextArray + if err := ta.Set(s); err != nil { + log.Printf("warn: %v\n", err) + return nil + } + return &ta +} + func toTextArray(txt string, allowed []string) *pgtype.TextArray { parts := strings.Split(txt, ",") var accepted []string @@ -114,13 +126,15 @@ } } } - if len(accepted) == 0 { - return nil - } - var ta pgtype.TextArray - if err := ta.Set(accepted); err != nil { - log.Printf("warn: %v\n", err) - return nil - } - return &ta + return sliceToTextArray(accepted) } + +func splitUpper(s string) []string { + s = strings.Map(func(r rune) rune { + if ('A' <= r && r <= 'Z') || r == ',' { + return r + } + return -1 + }, strings.ToUpper(s)) + return strings.FieldsFunc(s, func(r rune) bool { return r != ',' }) +}
--- a/pkg/controllers/importqueue.go Tue Jul 02 11:43:12 2019 +0200 +++ b/pkg/controllers/importqueue.go Tue Jul 02 16:44:04 2019 +0200 @@ -112,6 +112,14 @@ query, query, query, query) } + if cc := req.FormValue("cc"); cc != "" { + codes := sliceToTextArray(splitUpper(cc)) + cond(" username IN "+ + "(SELECT username FROM internal.user_profiles "+ + "WHERE country = ANY($%d)) ", + codes) + } + if st := req.FormValue("states"); st != "" { states := toTextArray(st, imports.ImportStateNames) cond(" state = ANY($%d) ", states)