Mercurial > hg > isophonics-drupal-site
view core/modules/update/src/UpdateFetcher.php @ 19:fa3358dc1485 tip
Add ndrum files
author | Chris Cannam |
---|---|
date | Wed, 28 Aug 2019 13:14:47 +0100 |
parents | 4c8ae668cc8c |
children |
line wrap: on
line source
<?php namespace Drupal\update; use Drupal\Core\Config\ConfigFactoryInterface; use Drupal\Core\DependencyInjection\DependencySerializationTrait; use GuzzleHttp\ClientInterface; use GuzzleHttp\Exception\RequestException; /** * Fetches project information from remote locations. */ class UpdateFetcher implements UpdateFetcherInterface { use DependencySerializationTrait; /** * URL to check for updates, if a given project doesn't define its own. */ const UPDATE_DEFAULT_URL = 'http://updates.drupal.org/release-history'; /** * The fetch url configured in the update settings. * * @var string */ protected $fetchUrl; /** * The update settings * * @var \Drupal\Core\Config\Config */ protected $updateSettings; /** * The HTTP client to fetch the feed data with. * * @var \GuzzleHttp\ClientInterface */ protected $httpClient; /** * Constructs a UpdateFetcher. * * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory * The config factory. * @param \GuzzleHttp\ClientInterface $http_client * A Guzzle client object. */ public function __construct(ConfigFactoryInterface $config_factory, ClientInterface $http_client) { $this->fetchUrl = $config_factory->get('update.settings')->get('fetch.url'); $this->httpClient = $http_client; $this->updateSettings = $config_factory->get('update.settings'); } /** * {@inheritdoc} */ public function fetchProjectData(array $project, $site_key = '') { $url = $this->buildFetchUrl($project, $site_key); $data = ''; try { $data = (string) $this->httpClient ->get($url, ['headers' => ['Accept' => 'text/xml']]) ->getBody(); } catch (RequestException $exception) { watchdog_exception('update', $exception); } return $data; } /** * {@inheritdoc} */ public function buildFetchUrl(array $project, $site_key = '') { $name = $project['name']; $url = $this->getFetchBaseUrl($project); $url .= '/' . $name . '/' . \Drupal::CORE_COMPATIBILITY; // Only append usage information if we have a site key and the project is // enabled. We do not want to record usage statistics for disabled projects. if (!empty($site_key) && (strpos($project['project_type'], 'disabled') === FALSE)) { // Append the site key. $url .= (strpos($url, '?') !== FALSE) ? '&' : '?'; $url .= 'site_key='; $url .= rawurlencode($site_key); // Append the version. if (!empty($project['info']['version'])) { $url .= '&version='; $url .= rawurlencode($project['info']['version']); } // Append the list of modules or themes enabled. $list = array_keys($project['includes']); $url .= '&list='; $url .= rawurlencode(implode(',', $list)); } return $url; } /** * {@inheritdoc} */ public function getFetchBaseUrl($project) { if (isset($project['info']['project status url'])) { $url = $project['info']['project status url']; } else { $url = $this->fetchUrl; if (empty($url)) { $url = static::UPDATE_DEFAULT_URL; } } return $url; } }