- $provider = Civi::settings()->get('geoProvider');
- if (!class_exists($provider)) {
- if (strlen($provider)) {
- Civi::log()->error('Configured geocoder has been removed from the system', ['geocode_class' => $provider]);
+ if (self::$providerClassName === NULL) {
+ $provider = Civi::settings()->get('geoProvider');
+ if (!class_exists($provider)) {
+ if (class_exists('CRM_Utils_Geocode_' . $provider)) {
+ $provider = 'CRM_Utils_Geocode_' . $provider;
+ }
+ else {
+ if (strlen($provider)) {
+ Civi::log()
+ ->error('Configured geocoder has been removed from the system', ['geocode_class' => $provider]);
+ }
+ $provider = FALSE;
+ }
+ }
+
+ // Ideally geocoding providers would be required to implement an interface
+ // or extend a base class. While we identify and implement a geocoding
+ // abstraction library (rather than continue to roll our own), we settle for
+ // this check.
+ if (!method_exists($provider, 'format')) {
+ Civi::log()->error('Configured geocoder is invalid, must provide a format method', ['geocode_class' => $provider]);
+ $provider = FALSE;