Further modules included.
[yaffs-website] / web / modules / contrib / libraries / src / ExternalLibrary / Definition / DefinitionDiscoveryFactory.php
diff --git a/web/modules/contrib/libraries/src/ExternalLibrary/Definition/DefinitionDiscoveryFactory.php b/web/modules/contrib/libraries/src/ExternalLibrary/Definition/DefinitionDiscoveryFactory.php
new file mode 100644 (file)
index 0000000..970385e
--- /dev/null
@@ -0,0 +1,104 @@
+<?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;
+  }
+
+}