static function lookup($exhibit_id, $address_field, $datum_id, $address) { global $wpdb; $table = WpExhibitConfig::table_name(WpExhibitConfig::$GEOCODE_TABLE_KEY); $sql = "SELECT lat, lng FROM {$table} WHERE exhibit_id = %d AND addressField = %s AND datum_id = %s AND address = %s;"; $query = $wpdb->prepare($sql, $exhibit_id, $address_field, $datum_id, $address); $row = $wpdb->get_row($query, ARRAY_A); if ($row != NULL) { return array($row['lat'], $row['lng']); } else { try { // Delete any old address for <ExhibitID, AddressField, DatumID, *> $deleteSQL = "DELETE FROM {$table} WHERE exhibit_id = %d AND addressField = %s AND datum_id = %s;"; $deleteQuery = $wpdb->prepare($deleteSQL, $exhibit_id, $address_field, $datum_id); $wpdb->query($deleteQuery); $geo_results = json_decode(WpExhibitGeocoder::geocode($address), true); $latlng = $geo_results['results'][0]['geometry']['location']; if ($latlng['lat'] == 0 && $latlng['lng'] == 0) { return false; } $query = "INSERT INTO {$table}(lat, lng, exhibit_id, addressField, datum_id, address) VALUES(%f, %f, %d, %s, %s, %s)"; $query = $wpdb->prepare($query, $latlng['lat'], $latlng['lng'], $exhibit_id, $address_field, $datum_id, $address); $wpdb->query($query); } catch (Exception $e) { return null; } return $latlng; } }