public function onSearch(&$query, &$where, $search) { if ($search !== "") { $_query = array(); $searchColumns = array('address', 'postcode', 'description'); $db = JFactory::getDbo(); foreach ($searchColumns as $searchColumn) { if (isset($search[$searchColumn]) && $search[$searchColumn] !== '') { $_query[] = $db->quoteName($searchColumn) . " LIKE " . $db->quote("%" . $search[$searchColumn] . "%"); } } $addressIds = array(); if (isset($search['address_id']) && $search['address_id'] > 1) { $addresses = JUDirectoryHelper::getAddressTree($search['address_id'], true, true); if ($addresses) { foreach ($addresses as $address) { $addressIds[] = $address->id; } } } if ($addressIds) { $_query[] = 'address.id IN (' . implode(',', $db->quote($addressIds)) . ')'; } if ($_query) { $query->join('LEFT', '#__judirectory_locations AS location ON location.listing_id = listing.id'); if ($addressIds) { $query->join('LEFT', '#__judirectory_addresses AS address ON address.id = location.address_id'); } $search_operator = $this->params->get("search_operator", 0); if ($search_operator == 0) { $search_operator = $search['condition']; } $condition = $search_operator == 1 ? 'AND' : 'OR'; $where[] = '(' . implode($_query, ' ' . $condition . ' ') . ')'; } } }