Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
25.00% |
1 / 4 |
CRAP | |
59.38% |
19 / 32 |
| UpdateFetcher | |
0.00% |
0 / 1 |
|
25.00% |
1 / 4 |
19.11 | |
59.38% |
19 / 32 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
4 / 4 |
|||
| fetchProjectData | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 8 |
|||
| buildFetchUrl | |
0.00% |
0 / 1 |
5.07 | |
85.71% |
12 / 14 |
|||
| getFetchBaseUrl | |
0.00% |
0 / 1 |
4.12 | |
50.00% |
3 / 6 |
|||
| <?php | |
| /** | |
| * @file | |
| * Contains \Drupal\update\UpdateFetcher. | |
| */ | |
| 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, array('headers' => array('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; | |
| } | |
| } |