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)