diff --git a/application/Order/OrderModel.php b/application/Order/OrderModel.php index caee15c8a..f5e8ce0f2 100644 --- a/application/Order/OrderModel.php +++ b/application/Order/OrderModel.php @@ -240,15 +240,28 @@ class OrderModel { $where .= " AND `Order`.owner_id=$ownerid"; } } - - if(array_key_exists("owner", $filter)) { - $owner = FronkDB::singleton()->escape($filter['owner']); - if($owner) { - $where .= " AND (Address.customer_number like '$owner' OR Address.company like '%$owner%' OR Address.firstname like '%$owner%' OR Address.lastname like '%$owner%' OR Address.customer_number like '%$owner%')"; + + if (!empty($filter['owner'])) { + $db = FronkDB::singleton(); + $fields = [ + 'Address.customer_number', + 'Address.company', + 'Address.firstname', + 'Address.lastname', + 'Order.partner_number' + ]; + + $searchTerms = preg_split('/\s+/', $filter['owner'], -1, PREG_SPLIT_NO_EMPTY); + + foreach ($searchTerms as $term) { + if ($escapedTerm = $db->escape($term)) { + $likes = array_map(fn($field) => "$field LIKE '%$escapedTerm%'", $fields); + $where .= " AND (" . implode(' OR ', $likes) . ")"; + } + } } - } - - if(array_key_exists("owner_address", $filter)) { + + if(array_key_exists("owner_address", $filter)) { $owner_address = FronkDB::singleton()->escape($filter['owner_address']); if($owner_address) { $where .= " AND (Address.street like '%$owner_address%' OR Address.zip like '%$owner_address%' OR Address.city like '%$owner_address%')";