Commit 8a503bef authored by Mike Decker's avatar Mike Decker Committed by Sam Oltz
Browse files

Issue #3310504: Doesn't evaluate each set of token_or conditions independently

parent 7c4032e1
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -40,8 +40,6 @@ class TokenOrTokensPreAlter {
        $match_clean = substr(substr($match, 1), 0, -1);
        $sub_tokens = explode('|', $match_clean);

        $multi_token_matches = [];

        foreach ($sub_tokens as $sub_token) {
          if (substr($sub_token, 0, 1) === '"' && substr($sub_token, -1, 1) === '"') {
            // This is a string replacement.
@@ -52,10 +50,11 @@ class TokenOrTokensPreAlter {
            $result = \Drupal::token()->replace('[' . $sub_token . ']', $data, $options);
          }
          if ($result) {
            $multi_token_matches[] = $result;
            $text = str_replace($match, $result, $text);
            break;
          }
        }
        $text = $multi_token_matches ? str_replace($match, $multi_token_matches[0], $text) : '';
        $text = str_replace($match, '', $text);
      }
    }
  }
+9 −0
Original line number Diff line number Diff line
@@ -52,6 +52,15 @@ class TokenOrTest extends KernelTestBase {

    $value = $this->tokenService->replace('[token_or:empty|token_or:empty2]');
    $this->assertEmpty($value);

    $value = $this->tokenService->replace('[token_or:empty|token_or:empty2]/[token_or:test]');
    $this->assertEquals('/test', $value);

    $value = $this->tokenService->replace('[token_or:empty|token_or:empty2]/[token_or:empty|token_or:test]/[token_or:test2]');
    $this->assertEquals('/test/test2', $value);

    $value = $this->tokenService->replace('[token_or:empty|token_or:empty2]/[token_or:empty2|token_or:empty]/[token_or:test2]');
    $this->assertEquals('//test2', $value);
  }

  /**