diff --git a/src/Plugin/ProjectBrowserSource/DrupalDotOrgJsonApi.php b/src/Plugin/ProjectBrowserSource/DrupalDotOrgJsonApi.php index 90ba986b642075a9ccd9a7402b4d689c981b0b1b..8eff2b332aba2a20f4bc14b99d47ce46ccd2a2a9 100644 --- a/src/Plugin/ProjectBrowserSource/DrupalDotOrgJsonApi.php +++ b/src/Plugin/ProjectBrowserSource/DrupalDotOrgJsonApi.php @@ -16,6 +16,7 @@ use Drupal\project_browser\ProjectBrowser\Project; use Drupal\project_browser\ProjectBrowser\ProjectsResultsPage; use GuzzleHttp\ClientInterface; use GuzzleHttp\Exception\GuzzleException; +use GuzzleHttp\Exception\RequestException; use Psr\Log\LoggerInterface; use Symfony\Component\DependencyInjection\ContainerInterface; use Symfony\Component\HttpFoundation\Response; @@ -171,6 +172,11 @@ class DrupalDotOrgJsonApi extends ProjectBrowserSourceBase { } } } + catch (RequestException $exception) { + $this->logger->error($exception->getMessage()); + $result['message'] = $exception->getMessage(); + $result['code'] = $exception->getCode(); + } catch (GuzzleException $exception) { $this->logger->error($exception->getMessage()); $result['message'] = $exception->getMessage(); @@ -290,6 +296,11 @@ class DrupalDotOrgJsonApi extends ProjectBrowserSourceBase { } $api_response = $this->fetchProjects($query); + if (!is_array($api_response) || $api_response['code'] !== Response::HTTP_OK) { + $error_message = $api_response['message'] ?? $this->t('Error querying data.'); + return $this->createResultsPage([], 0, $error_message); + } + $returned_list = []; if (is_array($api_response) && !empty($api_response['list'])) { $related = !empty($api_response['related']) ? $api_response['related'] : NULL; @@ -515,6 +526,7 @@ class DrupalDotOrgJsonApi extends ProjectBrowserSourceBase { $result = $this->fetchData($endpoint, $query_params); $return = [ + 'code' => $result['code'], 'total_results' => 0, 'list' => [], ]; @@ -527,6 +539,10 @@ class DrupalDotOrgJsonApi extends ProjectBrowserSourceBase { $return['list'] = $result['data']; } + if ($result['code'] !== Response::HTTP_OK) { + $return['message'] = $result['message'] ?? $this->t('Error when fetching the data.'); + } + return $return; }