Updated all the contrib modules to their latest versions.
[yaffs-website] / web / modules / contrib / redirect / src / RedirectRepository.php
index 6c791990d66cc372dfb01354dd4bf0d9bf373159..236c927f6349c5724c3b2f5d63e559fbfd872ceb 100644 (file)
@@ -63,6 +63,7 @@ class RedirectRepository {
    * @throws \Drupal\redirect\Exception\RedirectLoopException
    */
   public function findMatchingRedirect($source_path, array $query = [], $language = Language::LANGCODE_NOT_SPECIFIED) {
+    $source_path = ltrim($source_path, '/');
     $hashes = [Redirect::generateHash($source_path, $query, $language)];
     if ($language != Language::LANGCODE_NOT_SPECIFIED) {
       $hashes[] = Redirect::generateHash($source_path, $query, Language::LANGCODE_NOT_SPECIFIED);
@@ -111,10 +112,12 @@ class RedirectRepository {
    */
   protected function findByRedirect(Redirect $redirect, $language) {
     $uri = $redirect->getRedirectUrl();
-    $baseUrl = \Drupal::request()->getBaseUrl();
-    $path = ltrim(substr($uri->toString(), strlen($baseUrl)), '/');
+    $base_url = \Drupal::request()->getBaseUrl();
+    $generated_url = $uri->toString(TRUE);
+    $path = ltrim(substr($generated_url->getGeneratedUrl(), strlen($base_url)), '/');
     $query = $uri->getOption('query') ?: [];
-    return $this->findMatchingRedirect($path, $query, $language);
+    $return_value = $this->findMatchingRedirect($path, $query, $language);
+    return $return_value ? $return_value->addCacheableDependency($generated_url) : $return_value;
   }
 
   /**
@@ -133,6 +136,23 @@ class RedirectRepository {
     return $this->manager->getStorage('redirect')->loadMultiple($ids);
   }
 
+  /**
+   * Finds redirects based on the destination URI.
+   *
+   * @param string[] $destination_uri
+   *   List of destination URIs, for example ['internal:/node/123'].
+   *
+   * @return \Drupal\redirect\Entity\Redirect[]
+   *   Array of redirect entities.
+   */
+  public function findByDestinationUri(array $destination_uri) {
+    $storage = $this->manager->getStorage('redirect');
+    $ids = $storage->getQuery()
+      ->condition('redirect_redirect.uri', $destination_uri, 'IN')
+      ->execute();
+    return $storage->loadMultiple($ids);
+  }
+
   /**
    * Load redirect entity by id.
    *