Further modules included.
[yaffs-website] / web / modules / contrib / libraries / src / ExternalLibrary / Definition / DefinitionDiscoveryFactory.php
1 <?php
2
3 namespace Drupal\libraries\ExternalLibrary\Definition;
4
5 use Drupal\Component\Serialization\SerializationInterface;
6 use Drupal\Core\Config\ConfigFactoryInterface;
7 use GuzzleHttp\ClientInterface;
8
9 /**
10  * Instantiates a library definition discovery based on configuration.
11  */
12 class DefinitionDiscoveryFactory {
13
14   /**
15    * The configuration factory.
16    *
17    * @var \Drupal\Core\Config\ConfigFactoryInterface
18    */
19   protected $configFactory;
20
21   /**
22    * The serializer for local definition files.
23    *
24    * @var \Drupal\Component\Serialization\SerializationInterface
25    */
26   protected $localSerializer;
27
28   /**
29    * The HTTP client used to fetch remote definitions.
30    *
31    * @var \GuzzleHttp\ClientInterface
32    */
33   protected $httpClient;
34
35   /**
36    * The serializer for remote definitions.
37    *
38    * @var \Drupal\Component\Serialization\SerializationInterface
39    */
40   protected $remoteSerializer;
41
42   /**
43    * Constructs a definition discovery factory.
44    *
45    * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
46    *   The configuration factory.
47    * @param \Drupal\Component\Serialization\SerializationInterface $local_serializer
48    *   The serializer for local definition files.
49    * @param \GuzzleHttp\ClientInterface $http_client
50    *   The HTTP client used to fetch remote definitions.
51    * @param \Drupal\Component\Serialization\SerializationInterface $remote_serializer
52    *   The serializer for remote definitions.
53    */
54   public function __construct(
55     ConfigFactoryInterface $config_factory,
56     SerializationInterface $local_serializer,
57     ClientInterface $http_client,
58     SerializationInterface $remote_serializer
59   ) {
60     $this->configFactory = $config_factory;
61     $this->localSerializer = $local_serializer;
62     $this->httpClient = $http_client;
63     $this->remoteSerializer = $remote_serializer;
64   }
65
66   /**
67    * Gets a library definition discovery.
68    *
69    * @return \Drupal\libraries\ExternalLibrary\Definition\DefinitionDiscoveryInterface
70    *   The library definition discovery.
71    */
72   public function get() {
73     $config = $this->configFactory->get('libraries.settings');
74
75     if ($config->get('definition.remote.enable')) {
76       $discovery = new ChainDefinitionDiscovery();
77
78       $local_discovery = new WritableFileDefinitionDiscovery(
79         $this->localSerializer,
80         $config->get('definition.local.path')
81       );
82       $discovery->addDiscovery($local_discovery);
83
84       foreach ($config->get('definition.remote.urls') as $remote_url) {
85         $remote_discovery = new GuzzleDefinitionDiscovery(
86           $this->httpClient,
87           $this->remoteSerializer,
88           $remote_url
89         );
90
91         $discovery->addDiscovery($remote_discovery);
92       }
93     }
94     else {
95       $discovery = new FileDefinitionDiscovery(
96         $this->localSerializer,
97         $config->get('definition.local.path')
98       );
99     }
100
101     return $discovery;
102   }
103
104 }