diff --git a/CHANGELOG.md b/CHANGELOG.md index d64c9d10..46cde0b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -204,3 +204,7 @@ - Added timeframes to shipment request - Fixed phone area code, city and street select width rendering as 0px when switching carriers in checkout - Fixed DPDBaltics menu item disappearing from sidebar when navigating to module pages + +## [3.3.2] +- Fixed checkout pickup point selection returning a 500 error when the selected city and street do not match an imported pickup point +- Fixed pickup point error messages not being displayed in checkout when a request fails diff --git a/controllers/front/Ajax.php b/controllers/front/Ajax.php index 0a911b87..a6e62d58 100644 --- a/controllers/front/Ajax.php +++ b/controllers/front/Ajax.php @@ -334,15 +334,20 @@ private function saveParcelShop($countryCode, $city, $street) $pudoId = $pudoService->getPudoIdByCityAndAddress($city, $street); $parcelShops = $pudoService->getClosestParcelShops($pudoId); - $coordinates = []; - $selectedPudo = null; - if (isset($parcelShops[0])) { - $coordinates = [ - 'lat' => $parcelShops[0]->getLatitude(), - 'lng' => $parcelShops[0]->getLongitude(), - ]; - $selectedPudo = $parcelShops[0]; + + if (!isset($parcelShops[0])) { + $this->messages[] = $this->module->l('No pickup points found for the selected address.', self::FILENAME); + $this->ajaxDie(json_encode([ + 'template' => $this->getMessageTemplate('danger'), + 'status' => false + ])); } + + $selectedPudo = $parcelShops[0]; + $coordinates = [ + 'lat' => $selectedPudo->getLatitude(), + 'lng' => $selectedPudo->getLongitude(), + ]; $pudoServices = $pudoService->setPudoServiceTypes($parcelShops); $pudoServices = $pudoService->formatPudoServicesWorkHours($pudoServices); diff --git a/src/Service/GoogleApiService.php b/src/Service/GoogleApiService.php index 57fffa62..1307a90b 100644 --- a/src/Service/GoogleApiService.php +++ b/src/Service/GoogleApiService.php @@ -51,9 +51,9 @@ class GoogleApiService public function __construct(Language $language, Shop $shop) { $apiKey = Configuration::get(Config::GOOGLE_API_KEY); - $this->geolocationApi = $this->getGeolocationUrl($apiKey); $this->isSslEnabled = (Configuration::get('PS_SSL_ENABLED')) && Configuration::get('PS_SSL_ENABLED_EVERYWHERE'); + $this->geolocationApi = $this->getGeolocationUrl($apiKey); $this->language = $language; $this->shop = $shop; } @@ -191,13 +191,8 @@ public function getResultFromGoogleApiService($requestStringified) private function getGeolocationUrl($apiKey) { - $url = 'https'; - if ($this->isSslEnabled) { - $url .='s'; - } - $url .= '://maps.googleapis.com/maps/api/geocode/json?key='. + return 'https://maps.googleapis.com/maps/api/geocode/json?key='. $apiKey.'&sensor=false&address='; - return $url; } diff --git a/src/Service/PudoService.php b/src/Service/PudoService.php index 3f0c5641..81aca942 100644 --- a/src/Service/PudoService.php +++ b/src/Service/PudoService.php @@ -43,6 +43,7 @@ use Language; use Smarty; use Tools; +use Validate; if (!defined('_PS_VERSION_')) { exit; @@ -325,6 +326,10 @@ public function getClosestParcelShops($pudoId) /** @var DPDShop $pudo */ $pudo = DPDShop::getShopByPudoId($pudoId); + if (!Validate::isLoadedObject($pudo)) { + return []; + } + $parcelShops = $this->parcelShopRepository->getClosestPudoShops( $pudo->longitude, $pudo->latitude, @@ -332,6 +337,10 @@ public function getClosestParcelShops($pudoId) Config::PARCEL_SHOP_MAP_POINTS_LIMIT ); + if (!is_array($parcelShops)) { + return []; + } + return $this->shopFactory->createShop($parcelShops); } diff --git a/views/js/front/pudo-search.js b/views/js/front/pudo-search.js index 431fc6c9..e1eb8b4f 100644 --- a/views/js/front/pudo-search.js +++ b/views/js/front/pudo-search.js @@ -81,8 +81,6 @@ $( document ).ajaxComplete(function( event, request, settings ) { }); function updateStreetSelect(city) { - var $container = $(this).closest('.dpd-pudo-container'); - $.ajax(dpdHookAjaxUrl, { type: 'POST', data: { @@ -109,10 +107,17 @@ function updateStreetSelect(city) { } }, error: function (response) { - var responseText = JSON.parse(response.responseText); + var $parent = $('.dpd-pudo-container'); + var responseText = null; - if (responseText) { - DPDdisplayMessage($container, responseText.template); + try { + responseText = JSON.parse(response.responseText); + } catch (e) { + responseText = null; + } + + if (responseText && responseText.template) { + DPDdisplayMessage($parent, responseText.template); } } }); @@ -146,10 +151,17 @@ function saveSelectedStreet(city, street) { } }, error: function (response) { - var responseText = JSON.parse(response.responseText); + var $parent = $('.dpd-pudo-container'); + var responseText = null; - if (responseText) { - DPDdisplayMessage($container, responseText.template); + try { + responseText = JSON.parse(response.responseText); + } catch (e) { + responseText = null; + } + + if (responseText && responseText.template) { + DPDdisplayMessage($parent, responseText.template); } } }); @@ -178,10 +190,17 @@ function updateParcelBlock(city, street, idCarrier) { } }, error: function (response) { - var responseText = JSON.parse(response.responseText); + var $parent = $('.dpd-pudo-container'); + var responseText = null; + + try { + responseText = JSON.parse(response.responseText); + } catch (e) { + responseText = null; + } - if (responseText) { - DPDdisplayMessage($container, responseText.template); + if (responseText && responseText.template) { + DPDdisplayMessage($parent, responseText.template); } } });