From ccb1ba1100601aa70179c431a3d1d7b0269dcf1f Mon Sep 17 00:00:00 2001 From: humancopy Date: Wed, 10 Oct 2018 15:25:57 +0200 Subject: [PATCH] Add the possibility to query for a list of string values in segment rules --- lib/models/segments.js | 36 +++++++++++++++++++------ views/lists/segments/rule-configure.hbs | 25 ++++++++++++++++- views/lists/segments/rule-edit.hbs | 25 ++++++++++++++++- 3 files changed, 76 insertions(+), 10 deletions(-) diff --git a/lib/models/segments.js b/lib/models/segments.js index a2e891f9..883625cc 100644 --- a/lib/models/segments.js +++ b/lib/models/segments.js @@ -156,7 +156,8 @@ module.exports.get = (id, callback) => { rule.formatted = rule.value.value ? _('Selected') : _('Not selected'); break; default: - rule.formatted = (rule.value.negate ? '!= ' : '') + (rule.value.value || ''); + let value = rule.value.value || rule.value.list || ''; + rule.formatted = (rule.value.negate ? '!= ' : '') + value; } return rule; @@ -491,10 +492,17 @@ module.exports.updateRule = (id, rule, callback) => { }; break; default: - value = { - negate: Number(rule.negate) ? 1 : 0, - value: rule.value - }; + if (rule.multiple) { + value = { + multiple: true, + list: rule.list + }; + } else { + value = { + value: rule.value + }; + } + value.negate = Number(rule.negate) ? true : false; } let keys = ['value']; @@ -575,9 +583,21 @@ module.exports.getQuery = (id, prefix, callback) => { segment.rules.forEach(rule => { switch (rule.columnType.type) { case 'string': { - let condition = rule.value.negate ? 'NOT LIKE' : 'LIKE'; - query.push(prefix + '`' + rule.columnType.column + '` ' + condition + ' ?'); - values.push(rule.value.value); + let condition, query_val; + if (rule.value.multiple) { + condition = rule.value.negate ? 'NOT IN' : 'IN'; + query_val = []; + rule.value.list.split(/\s*,\s*/).forEach(value => { + query_val.push('?'); + values.push(value); + }); + query_val = '(' + query_val.join(',') + ')'; + } else { + condition = rule.value.negate ? 'NOT LIKE' : 'LIKE'; + query_val = '?'; + values.push(rule.value.value); + } + query.push(prefix + '`' + rule.columnType.column + '` ' + condition + ' ' + query_val); break; } case 'boolean': diff --git a/views/lists/segments/rule-configure.hbs b/views/lists/segments/rule-configure.hbs index e7ffee6f..dcb1def8 100644 --- a/views/lists/segments/rule-configure.hbs +++ b/views/lists/segments/rule-configure.hbs @@ -39,11 +39,34 @@
-
+
+ +
+
+ +
+
{{#translate}}Use % for wildcard character, e.g. "%test" to match all values that end with "test"{{/translate}}
+ +
+
+ +
+
+ +
+
+ + {{#translate}}Use a list of comma separated values, e.g. "test,try,exam" to match either "test", "try" or "exam"{{/translate}} +
+
{{/if}} {{#if columnTypeNumber}} diff --git a/views/lists/segments/rule-edit.hbs b/views/lists/segments/rule-edit.hbs index fd6281f1..2f9084cf 100644 --- a/views/lists/segments/rule-edit.hbs +++ b/views/lists/segments/rule-edit.hbs @@ -44,11 +44,34 @@
-
+
+ +
+
+ +
+
{{#translate}}Use % for wildcard character, e.g. "%test" to match all values that end with "test"{{/translate}}
+ +
+
+ +
+
+ +
+
+ + {{#translate}}Use a list of comma separated values, e.g. "test,try,exam" to match either "test", "try" or "exam"{{/translate}} +
+
{{/if}} {{#if columnTypeNumber}}