diff --git a/src/LocationInput/LocationInputInterface.php b/src/LocationInput/LocationInputInterface.php index 9f687c8..f72b90e 100644 --- a/src/LocationInput/LocationInputInterface.php +++ b/src/LocationInput/LocationInputInterface.php @@ -15,7 +15,7 @@ interface LocationInputInterface extends PluginFormInterface { /** * Returns the parsed user input. * - * @param string $input + * @param array $input * The text entered by the user. * * @return mixed diff --git a/src/Plugin/search_api_location/location_input/Geocode.php b/src/Plugin/search_api_location/location_input/Geocode.php index 552299a..b06a7e1 100644 --- a/src/Plugin/search_api_location/location_input/Geocode.php +++ b/src/Plugin/search_api_location/location_input/Geocode.php @@ -20,14 +20,20 @@ class Geocode extends LocationInputPluginBase { * {@inheritdoc} */ public function getParsedInput($input) { - $active_plugins = $this->getActivePlugins(); - /** @var \Geocoder\Model\AddressCollection $geocoded_addresses */ - $geocoded_addresses = \Drupal::service('geocoder')->geocode($input, $active_plugins); - - if ($geocoded_addresses) { - return $geocoded_addresses->first()->getLatitude() . ',' . $geocoded_addresses->first()->getLongitude(); + if (!isset($input['value'])) { + throw new \InvalidArgumentException('Input doesn\'t contain a location value.'); + } + else { + $active_plugins = $this->getActivePlugins(); + /** @var \Geocoder\Model\AddressCollection $geocoded_addresses */ + $geocoded_addresses = \Drupal::service('geocoder') + ->geocode($input['value'], $active_plugins); + if ($geocoded_addresses) { + return $geocoded_addresses->first() + ->getLatitude() . ',' . $geocoded_addresses->first() + ->getLongitude(); + } } - return NULL; } @@ -36,11 +42,11 @@ class Geocode extends LocationInputPluginBase { */ public function getActivePlugins() { $plugins = $this->configuration['plugins']; - - $active_plugins = []; + uasort($plugins, function($a,$b){return ($a["weight"] < $b["weight"]) ? -1 : 1;}); + $active_plugins = array(); foreach ($plugins as $id => $plugin) { if ($plugin['checked']) { - $active_plugins[(int) $plugin['weight']] = $id; + $active_plugins[$id] = $id; } }