/** * Does different searches depending on the indexes of the $query * * @query['address'] Will do a search in CRM and a search for addresses in Master Address * @query['street'] Will do a search in CRM and a search for streets in Master Address * @query['text'] Will only do a search in CRM * * Addresses will be return as $array['location text'] = $flag * where $flag is true if returned by AddressService * * @param array $query * @return array */ public static function search($query) { $results = array(); $crm_query = ''; if (isset($query['address']) && $query['address']) { $crm_query = $query['address']; } elseif (isset($query['text']) && $query['text']) { $crm_query = $query['text']; } if ($crm_query) { $zend_db = Database::getConnection(); $sql = "select location, addressId, city,\n\t\t\t\t\t'database' as source,\n\t\t\t\t\tcount(*) as ticketCount\n\t\t\t\t\tfrom tickets where location like ?\n\t\t\t\t\tgroup by location, addressId, city"; $q = $zend_db->query($sql)->execute(["{$crm_query}%"]); foreach ($q as $row) { $results[$row['location']] = $row; } } if (isset($query['address']) && $query['address']) { foreach (AddressService::searchAddresses($query['address']) as $location => $data) { if (!isset($results[$location])) { $results[$location] = $data; } else { $results[$location] = array_merge($results[$location], $data); } $results[$location]['source'] = 'Master Address'; } } elseif (isset($query['street']) && $query['street']) { foreach (AddressService::searchStreets($query['street']) as $location => $street_id) { $results[$location]['addressId'] = $street_id; $results[$location]['source'] = 'Master Address'; } } return $results; }
public function testSearchAddresses() { $result = AddressService::searchAddresses('Somersbe Pl'); $this->assertEquals(40, count($result)); }