Version 1
[yaffs-website] / web / core / lib / Drupal / Core / Authentication / AuthenticationCollector.php
diff --git a/web/core/lib/Drupal/Core/Authentication/AuthenticationCollector.php b/web/core/lib/Drupal/Core/Authentication/AuthenticationCollector.php
new file mode 100644 (file)
index 0000000..616e936
--- /dev/null
@@ -0,0 +1,84 @@
+<?php
+
+namespace Drupal\Core\Authentication;
+
+/**
+ * A collector class for authentication providers.
+ */
+class AuthenticationCollector implements AuthenticationCollectorInterface {
+
+  /**
+   * Array of all registered authentication providers, keyed by ID.
+   *
+   * @var \Drupal\Core\Authentication\AuthenticationProviderInterface[]
+   */
+  protected $providers;
+
+  /**
+   * Array of all providers and their priority.
+   *
+   * @var array
+   */
+  protected $providerOrders = [];
+
+  /**
+   * Sorted list of registered providers.
+   *
+   * @var \Drupal\Core\Authentication\AuthenticationProviderInterface[]
+   */
+  protected $sortedProviders;
+
+  /**
+   * List of providers which are allowed on routes with no _auth option.
+   *
+   * @var string[]
+   */
+  protected $globalProviders;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function addProvider(AuthenticationProviderInterface $provider, $provider_id, $priority = 0, $global = FALSE) {
+    $this->providers[$provider_id] = $provider;
+    $this->providerOrders[$priority][$provider_id] = $provider;
+    // Force the providers to be re-sorted.
+    $this->sortedProviders = NULL;
+
+    if ($global) {
+      $this->globalProviders[$provider_id] = TRUE;
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isGlobal($provider_id) {
+    return isset($this->globalProviders[$provider_id]);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getProvider($provider_id) {
+    return isset($this->providers[$provider_id]) ? $this->providers[$provider_id] : NULL;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getSortedProviders() {
+    if (!isset($this->sortedProviders)) {
+      // Sort the providers according to priority.
+      krsort($this->providerOrders);
+
+      // Merge nested providers from $this->providers into $this->sortedProviders.
+      $this->sortedProviders = [];
+      foreach ($this->providerOrders as $providers) {
+        $this->sortedProviders = array_merge($this->sortedProviders, $providers);
+      }
+    }
+
+    return $this->sortedProviders;
+  }
+
+}