123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\ReleaseNotification\Model\ContentProvider\Http;
- use Magento\ReleaseNotification\Model\ContentProviderInterface;
- use Magento\Setup\Module\I18n\Locale;
- use Psr\Log\LoggerInterface;
- use Magento\Framework\HTTP\ClientInterface;
- /**
- * Requests the release notification content data via an HTTP call to a REST API
- */
- class HttpContentProvider implements ContentProviderInterface
- {
- /**
- * @var ClientInterface
- */
- private $httpClient;
- /**
- * @var LoggerInterface
- */
- private $logger;
- /**
- * @var UrlBuilder
- */
- private $urlBuilder;
- /**
- * HttpContentProvider constructor.
- * @param ClientInterface $httpClient
- * @param UrlBuilder $urlBuilder
- * @param LoggerInterface $logger
- */
- public function __construct(
- ClientInterface $httpClient,
- UrlBuilder $urlBuilder,
- LoggerInterface $logger
- ) {
- $this->httpClient = $httpClient;
- $this->urlBuilder = $urlBuilder;
- $this->logger = $logger;
- }
- /**
- * @inheritdoc
- */
- public function getContent($version, $edition, $locale)
- {
- $result = false;
- try {
- $result = $this->retrieveContent($version, $edition, $locale);
- if (!$result) {
- $result = $this->retrieveContent($version, $edition, Locale::DEFAULT_SYSTEM_LOCALE);
- if (!$result) {
- $result = $this->retrieveContent($version, '', 'default');
- }
- }
- } catch (\Exception $e) {
- $this->logger->warning(
- sprintf(
- 'Failed to retrieve the release notification content. The response is: %s',
- empty($result) ? 'Response body is empty.' : $result
- )
- );
- }
- return $result;
- }
- /**
- * Retrieve content from given url
- *
- * @param string $version
- * @param string $edition
- * @param string $locale
- * @return bool|string
- */
- private function retrieveContent($version, $edition, $locale)
- {
- $url = $this->urlBuilder->getUrl($version, $edition, $locale);
- return empty($url) ? false : $this->getResponse($url);
- }
- /**
- * Returns the response body from the HTTP client
- *
- * @param $url
- * @return string
- */
- private function getResponse($url)
- {
- $this->httpClient->get($url);
- $responseBody = $this->httpClient->getBody();
- if ($this->httpClient->getStatus() === 200 && !empty($responseBody)) {
- return $responseBody;
- }
- return false;
- }
- }
|