You are here

DefinitionDiscoveryFactory.php in Libraries API 8.3

File

src/ExternalLibrary/Definition/DefinitionDiscoveryFactory.php
View source
<?php

namespace Drupal\libraries\ExternalLibrary\Definition;

use Drupal\Component\Serialization\SerializationInterface;
use Drupal\Core\Config\ConfigFactoryInterface;
use GuzzleHttp\ClientInterface;

/**
 * Instantiates a library definition discovery based on configuration.
 */
class DefinitionDiscoveryFactory {

  /**
   * The configuration factory.
   *
   * @var \Drupal\Core\Config\ConfigFactoryInterface
   */
  protected $configFactory;

  /**
   * The serializer for local definition files.
   *
   * @var \Drupal\Component\Serialization\SerializationInterface
   */
  protected $localSerializer;

  /**
   * The HTTP client used to fetch remote definitions.
   *
   * @var \GuzzleHttp\ClientInterface
   */
  protected $httpClient;

  /**
   * The serializer for remote definitions.
   *
   * @var \Drupal\Component\Serialization\SerializationInterface
   */
  protected $remoteSerializer;

  /**
   * Constructs a definition discovery factory.
   *
   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
   *   The configuration factory.
   * @param \Drupal\Component\Serialization\SerializationInterface $local_serializer
   *   The serializer for local definition files.
   * @param \GuzzleHttp\ClientInterface $http_client
   *   The HTTP client used to fetch remote definitions.
   * @param \Drupal\Component\Serialization\SerializationInterface $remote_serializer
   *   The serializer for remote definitions.
   */
  public function __construct(ConfigFactoryInterface $config_factory, SerializationInterface $local_serializer, ClientInterface $http_client, SerializationInterface $remote_serializer) {
    $this->configFactory = $config_factory;
    $this->localSerializer = $local_serializer;
    $this->httpClient = $http_client;
    $this->remoteSerializer = $remote_serializer;
  }

  /**
   * Gets a library definition discovery.
   *
   * @return \Drupal\libraries\ExternalLibrary\Definition\DefinitionDiscoveryInterface
   *   The library definition discovery.
   */
  public function get() {
    $config = $this->configFactory
      ->get('libraries.settings');
    if ($config
      ->get('definition.remote.enable')) {
      $discovery = new ChainDefinitionDiscovery();
      $local_discovery = new WritableFileDefinitionDiscovery($this->localSerializer, $config
        ->get('definition.local.path'));
      $discovery
        ->addDiscovery($local_discovery);
      foreach ($config
        ->get('definition.remote.urls') as $remote_url) {
        $remote_discovery = new GuzzleDefinitionDiscovery($this->httpClient, $this->remoteSerializer, $remote_url);
        $discovery
          ->addDiscovery($remote_discovery);
      }
    }
    else {
      $discovery = new FileDefinitionDiscovery($this->localSerializer, $config
        ->get('definition.local.path'));
    }
    return $discovery;
  }

}

Classes

Namesort descending Description
DefinitionDiscoveryFactory Instantiates a library definition discovery based on configuration.