Merge branch '4.4' into 5.1

* 4.4:
  [Mailer] Fixed mandrill api header structure
  [HttpClient][ResponseTrait] Fix typo
  [Mailer] Reorder headers used to determine Sender
  [Validator] Add Lithuanian translation for ISIN constraint
This commit is contained in:
Fabien Potencier 2020-08-21 11:48:22 +02:00
commit eec66a26de
6 changed files with 33 additions and 11 deletions

View File

@ -316,7 +316,7 @@ trait ResponseTrait
} }
$lastActivity = microtime(true); $lastActivity = microtime(true);
$enlapsedTimeout = 0; $elapsedTimeout = 0;
while (true) { while (true) {
$hasActivity = false; $hasActivity = false;
@ -338,7 +338,7 @@ trait ResponseTrait
} elseif (!isset($multi->openHandles[$j])) { } elseif (!isset($multi->openHandles[$j])) {
unset($responses[$j]); unset($responses[$j]);
continue; continue;
} elseif ($enlapsedTimeout >= $timeoutMax) { } elseif ($elapsedTimeout >= $timeoutMax) {
$multi->handlesActivity[$j] = [new ErrorChunk($response->offset, sprintf('Idle timeout reached for "%s".', $response->getInfo('url')))]; $multi->handlesActivity[$j] = [new ErrorChunk($response->offset, sprintf('Idle timeout reached for "%s".', $response->getInfo('url')))];
} else { } else {
continue; continue;
@ -346,7 +346,7 @@ trait ResponseTrait
while ($multi->handlesActivity[$j] ?? false) { while ($multi->handlesActivity[$j] ?? false) {
$hasActivity = true; $hasActivity = true;
$enlapsedTimeout = 0; $elapsedTimeout = 0;
if (\is_string($chunk = array_shift($multi->handlesActivity[$j]))) { if (\is_string($chunk = array_shift($multi->handlesActivity[$j]))) {
if (null !== $response->inflate && false === $chunk = @inflate_add($response->inflate, $chunk)) { if (null !== $response->inflate && false === $chunk = @inflate_add($response->inflate, $chunk)) {
@ -380,7 +380,7 @@ trait ResponseTrait
} }
} elseif ($chunk instanceof ErrorChunk) { } elseif ($chunk instanceof ErrorChunk) {
unset($responses[$j]); unset($responses[$j]);
$enlapsedTimeout = $timeoutMax; $elapsedTimeout = $timeoutMax;
} elseif ($chunk instanceof FirstChunk) { } elseif ($chunk instanceof FirstChunk) {
if ($response->logger) { if ($response->logger) {
$info = $response->getInfo(); $info = $response->getInfo();
@ -448,11 +448,11 @@ trait ResponseTrait
continue; continue;
} }
if (-1 === self::select($multi, min($timeoutMin, $timeoutMax - $enlapsedTimeout))) { if (-1 === self::select($multi, min($timeoutMin, $timeoutMax - $elapsedTimeout))) {
usleep(min(500, 1E6 * $timeoutMin)); usleep(min(500, 1E6 * $timeoutMin));
} }
$enlapsedTimeout = microtime(true) - $lastActivity; $elapsedTimeout = microtime(true) - $lastActivity;
} }
} }
} }

View File

@ -65,7 +65,7 @@ class MandrillApiTransportTest extends TestCase
$this->assertArrayHasKey('message', $payload); $this->assertArrayHasKey('message', $payload);
$this->assertArrayHasKey('headers', $payload['message']); $this->assertArrayHasKey('headers', $payload['message']);
$this->assertCount(1, $payload['message']['headers']); $this->assertCount(1, $payload['message']['headers']);
$this->assertEquals('foo: bar', $payload['message']['headers'][0]); $this->assertEquals('bar', $payload['message']['headers']['foo']);
} }
public function testSend() public function testSend()

View File

@ -125,7 +125,7 @@ class MandrillApiTransport extends AbstractApiTransport
continue; continue;
} }
$payload['message']['headers'][] = $name.': '.$header->getBodyAsString(); $payload['message']['headers'][$name] = $header->getBodyAsString();
} }
return $payload; return $payload;

View File

@ -83,15 +83,15 @@ final class DelayedEnvelope extends Envelope
private static function getSenderFromHeaders(Headers $headers): Address private static function getSenderFromHeaders(Headers $headers): Address
{ {
if ($return = $headers->get('Return-Path')) {
return $return->getAddress();
}
if ($sender = $headers->get('Sender')) { if ($sender = $headers->get('Sender')) {
return $sender->getAddress(); return $sender->getAddress();
} }
if ($from = $headers->get('From')) { if ($from = $headers->get('From')) {
return $from->getAddresses()[0]; return $from->getAddresses()[0];
} }
if ($return = $headers->get('Return-Path')) {
return $return->getAddress();
}
throw new LogicException('Unable to determine the sender of the message.'); throw new LogicException('Unable to determine the sender of the message.');
} }

View File

@ -81,6 +81,24 @@ class EnvelopeTest extends TestCase
$this->assertEquals($from, $e->getSender()); $this->assertEquals($from, $e->getSender());
} }
public function testSenderFromHeadersWithMulitpleHeaders()
{
$headers = new Headers();
$headers->addMailboxListHeader('From', [$from = new Address('from@symfony.com', 'from'), 'some@symfony.com']);
$headers->addPathHeader('Return-Path', $return = new Address('return@symfony.com', 'return'));
$headers->addMailboxHeader('Sender', $sender = new Address('sender@symfony.com', 'sender'));
$headers->addMailboxListHeader('To', ['to@symfony.com']);
$e = Envelope::create(new Message($headers));
$this->assertEquals($sender, $e->getSender());
$headers = new Headers();
$headers->addMailboxListHeader('From', [$from = new Address('from@symfony.com', 'from'), 'some@symfony.com']);
$headers->addPathHeader('Return-Path', $return = new Address('return@symfony.com', 'return'));
$headers->addMailboxListHeader('To', ['to@symfony.com']);
$e = Envelope::create(new Message($headers));
$this->assertEquals($from, $e->getSender());
}
public function testRecipientsFromHeaders() public function testRecipientsFromHeaders()
{ {
$headers = new Headers(); $headers = new Headers();

View File

@ -382,6 +382,10 @@
<source>Each element of this collection should satisfy its own set of constraints.</source> <source>Each element of this collection should satisfy its own set of constraints.</source>
<target>Kiekvienas šio sąrašo elementas turi atitikti savo nurodymų rinkinį.</target> <target>Kiekvienas šio sąrašo elementas turi atitikti savo nurodymų rinkinį.</target>
</trans-unit> </trans-unit>
<trans-unit id="99">
<source>This value is not a valid International Securities Identification Number (ISIN).</source>
<target>Ši reišmė neatitinka tarptautinio vertybinių popierių identifikavimo numerio formato (ISIN).</target>
</trans-unit>
</body> </body>
</file> </file>
</xliff> </xliff>