diff --git a/application/libraries/SearchBarLib.php b/application/libraries/SearchBarLib.php index c682d2262..7197eae6a 100644 --- a/application/libraries/SearchBarLib.php +++ b/application/libraries/SearchBarLib.php @@ -156,9 +156,13 @@ class SearchBarLib (stdkst.bezeichnung IS NULL OR org.bezeichnung IS NULL) AND ( - b.uid ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' - OR p.vorname ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' - OR p.nachname ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' + ' . + $this->buildSearchClause( + $dbModel, + array('b.uid', 'p.vorname', 'p.nachname'), + $searchstr + ) . + ' ) GROUP BY type, b.uid, p.person_id, name, email, m.telefonklappe, phone '; @@ -171,7 +175,26 @@ class SearchBarLib // Otherwise return an empty array return array(); } + + protected function buildSearchClause(DB_Model $dbModel, array $columns, $searchstr) + { + $document = implode(' || \' \' || ', $columns); + $query = '\'' . implode(':* & ', explode(' ', trim($searchstr))) . ':*\''; + $reversequery = '\'*:' . implode(' & *:', explode(' ', trim($searchstr))) . '\''; + $nospacequery = '\'' . implode('', explode(' ', trim($searchstr))) . ':*\''; + + $searchclause = <<escapeLike($searchstr).'%\' - OR p.vorname ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' - OR p.nachname ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' - OR org.bezeichnung ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' - OR stdkst.bezeichnung ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' + WHERE ' . + $this->buildSearchClause( + $dbModel, + array('b.uid', 'p.vorname', 'p.nachname', 'org.bezeichnung', 'stdkst.bezeichnung'), + $searchstr + ) . + ' GROUP BY type, b.uid, p.person_id, name, email, m.telefonklappe, phone '); @@ -272,9 +297,13 @@ class SearchBarLib AND (datum_bis IS NULL OR datum_bis >= NOW()) AND b.aktiv = TRUE ) bfLeader ON(bfLeader.oe_kurzbz = o.oe_kurzbz) - WHERE o.oe_kurzbz ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' - OR o.bezeichnung ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' - OR ot.bezeichnung ILIKE \'%'.$dbModel->escapeLike($searchstr).'%\' + WHERE ' . + $this->buildSearchClause( + $dbModel, + array('o.oe_kurzbz', 'o.bezeichnung', 'ot.bezeichnung'), + $searchstr + ) . + ' GROUP BY type, o.oe_kurzbz, o.bezeichnung, ot.bezeichnung, oParent.oe_kurzbz, oParent.bezeichnung, otParent.bezeichnung '); diff --git a/public/js/components/searchbar/employee.js b/public/js/components/searchbar/employee.js index 333cf0224..afb947874 100644 --- a/public/js/components/searchbar/employee.js +++ b/public/js/components/searchbar/employee.js @@ -15,7 +15,7 @@ export default {
+ class="rounded" style="max-height: 120px; max-width: 90px;" />
diff --git a/public/js/components/searchbar/person.js b/public/js/components/searchbar/person.js index ca7229185..4f267cbd4 100644 --- a/public/js/components/searchbar/person.js +++ b/public/js/components/searchbar/person.js @@ -15,7 +15,7 @@ export default {
+ class="rounded" style="max-height: 120px; max-width: 90px;" />
diff --git a/public/js/components/searchbar/searchbar.js b/public/js/components/searchbar/searchbar.js index 277566f8d..be3ebec7a 100644 --- a/public/js/components/searchbar/searchbar.js +++ b/public/js/components/searchbar/searchbar.js @@ -85,7 +85,7 @@ export default { if( this.searchtimer !== null ) { clearTimeout(this.searchtimer); } - if( this.searchsettings.searchstr.length >= 3 ) { + if( this.searchsettings.searchstr.length >= 2 ) { this.calcSearchResultExtent(); this.searchtimer = setTimeout( this.callsearchapi,