From 05b36453213009b107850d5804844e1865daff0e Mon Sep 17 00:00:00 2001 From: Alasdair Campbell Date: Tue, 6 Jan 2015 14:45:10 +0000 Subject: [PATCH] Allow filtering array field types. fixes #17 --- application/Espo/Core/SelectManagers/Base.php | 2 +- .../Espo/Resources/metadata/fields/array.json | 2 +- frontend/client/src/views/fields/array.js | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/application/Espo/Core/SelectManagers/Base.php b/application/Espo/Core/SelectManagers/Base.php index 0994a90b80..1cf653aca3 100644 --- a/application/Espo/Core/SelectManagers/Base.php +++ b/application/Espo/Core/SelectManagers/Base.php @@ -290,7 +290,7 @@ class Base $a = $this->getWherePart($i); foreach ($a as $left => $right) { if (!empty($right)) { - $arr[$left] = $right; + $arr[] = array($left => $right); } } } diff --git a/application/Espo/Resources/metadata/fields/array.json b/application/Espo/Resources/metadata/fields/array.json index dcc2077d83..c098e9d1c0 100644 --- a/application/Espo/Resources/metadata/fields/array.json +++ b/application/Espo/Resources/metadata/fields/array.json @@ -15,7 +15,7 @@ "hidden": true } ], - "filter": false, + "filter": true, "notCreatable": false, "fieldDefs":{ "type":"jsonArray" diff --git a/frontend/client/src/views/fields/array.js b/frontend/client/src/views/fields/array.js index 4a0d5fd5e3..e6061fc3d3 100644 --- a/frontend/client/src/views/fields/array.js +++ b/frontend/client/src/views/fields/array.js @@ -201,6 +201,24 @@ Espo.define('Views.Fields.Array', 'Views.Fields.Enum', function (Dep) { return data; }, + fetchSearch: function () { + var field = this.name; + var arr = []; + $.each(this.$el.find('[name="' + this.name + '"]').find('option:selected'), function (i, el) { + arr.push( {type: 'like', field: field, value: "%" + $(el).val() + "%"} ); + }); + + if (arr.length == 0) { + return false; + } + + var data = { + type: 'or', + value: arr + }; + return data; + }, + validateRequired: function () { if (this.params.required || this.model.isRequired(this.name)) { var value = this.model.get(this.name);