Commit Graph

41017 Commits

Author SHA1 Message Date
Alexander M. Turek
1055a7f29b [Validator] Fix PhpUnitBridge version constraint. 2020-08-31 11:01:51 +02:00
Fabien Potencier
0b65634439 Bump Symfony version to 5.1.5 2020-08-31 08:22:19 +02:00
Fabien Potencier
94ca568810 Update VERSION for 5.1.4 2020-08-31 08:18:12 +02:00
Fabien Potencier
6e59396ff9 Bump Symfony version to 4.4.13 2020-08-31 08:14:12 +02:00
Fabien Potencier
529eac9795 Update VERSION for 4.4.12 2020-08-31 08:09:42 +02:00
Fabien Potencier
f4f7683861 Bump Symfony version to 3.4.45 2020-08-31 07:58:19 +02:00
Fabien Potencier
b1e65241ca Update VERSION for 3.4.44 2020-08-31 07:53:42 +02:00
Fabien Potencier
63d7b222e6 minor #37989 Remove unneeded code (fabpot)
This PR was merged into the 5.2-dev branch.

Discussion
----------

Remove unneeded code

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | n/a<!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License       | MIT
| Doc PR        | n/a

Commits
-------

5ed8ebe50e Remove unneeded code
2020-08-30 13:55:14 +02:00
Fabien Potencier
5ed8ebe50e Remove unneeded code 2020-08-30 12:31:26 +02:00
Fabien Potencier
cbbca0e6ea Fix Composer constraint 2020-08-30 12:30:32 +02:00
Fabien Potencier
2ffb6ba7e3 Merge branch '5.1'
* 5.1:
  [FrameworkBundle] fix tests
2020-08-30 11:59:17 +02:00
Fabien Potencier
96151f391a Merge branch '4.4' into 5.1
* 4.4:
  [FrameworkBundle] fix tests
2020-08-30 11:59:07 +02:00
Christian Flothmann
19015ec404 [FrameworkBundle] fix tests 2020-08-30 11:40:10 +02:00
Christian Flothmann
a9cbac77eb fix the deprecation message 2020-08-30 11:27:09 +02:00
Fabien Potencier
e23a06400d bug #37986 [Translation] Fix logic (fabpot)
This PR was merged into the 5.2-dev branch.

Discussion
----------

[Translation] Fix logic

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | n/a<!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License       | MIT
| Doc PR        | n/a

Commits
-------

19f8cd423a [Translation] Fix logic
2020-08-30 10:30:45 +02:00
Fabien Potencier
0885ebb706 Merge branch '5.1'
* 5.1:
  Revert "bug #37622 [PropertyAccess] Fix accessing dynamic properties (andreyserdjuk)"
2020-08-30 10:30:09 +02:00
Fabien Potencier
47b9b5cf21 Revert "bug #37622 [PropertyAccess] Fix accessing dynamic properties (andreyserdjuk)"
This reverts commit 92cb709222, reversing
changes made to fc3095ff2f.
2020-08-30 10:29:58 +02:00
Fabien Potencier
19f8cd423a [Translation] Fix logic 2020-08-30 10:02:21 +02:00
Fabien Potencier
45329ab77d Merge branch '5.1'
* 5.1:
  Fix CS
  [HttpClient][MockHttpClient][DX] Throw when the response factory callable does not return a valid response
  [FrameworkBundle] Do not pass the base uri twice to scoped http clients
2020-08-30 09:26:26 +02:00
Fabien Potencier
c367e26e3e Merge branch '4.4' into 5.1
* 4.4:
  Fix CS
  [HttpClient][MockHttpClient][DX] Throw when the response factory callable does not return a valid response
  [FrameworkBundle] Do not pass the base uri twice to scoped http clients
2020-08-30 09:26:18 +02:00
Fabien Potencier
ba48f00516 feature #37979 [Workflow] Expose the Metadata Store in the DIC (lyrixx)
This PR was merged into the 5.2-dev branch.

Discussion
----------

[Workflow] Expose the Metadata Store in the DIC

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #37955
| License       | MIT
| Doc PR        |

I did not updated the CHANGELOG, because IMHO it not worth it

Commits
-------

aa7a444c86 [Workflow] Expose the Metadata Store in the DIC
2020-08-30 09:24:06 +02:00
Fabien Potencier
2adacbcff8 Fix CS 2020-08-30 09:21:38 +02:00
Fabien Potencier
4affb4622f Fix CS 2020-08-30 09:20:37 +02:00
Fabien Potencier
241af8057f feature #37371 [Translation] Add support for calling 'trans' with ICU formatted messages (someonewithpc)
This PR was squashed before being merged into the 5.2-dev branch.

Discussion
----------

[Translation] Add support for calling 'trans' with ICU formatted messages

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | maybe, see https://github.com/symfony/symfony/issues/37228
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix #37228
| License       | MIT
| Doc PR        | symfony/symfony-docs#13875

Motivation:

```
$apples = [0 => 'No apples', 1 => '1 apple', '# apples'];
echo _m($apples, ['count' => 0]); // Outputs 'No apples'
echo _m($apples, ['count' => 2]); // Outputs '2 apples'
```

where `_m` is a wrapper my application is using, but we obviously don't want to replicate many of the effort of the translation component, so it relies on `trans`.

This wrapper itself could be integrated into Symfony, if deemed appropriate.

See #37228

Commits
-------

d2ec41f4ef [Translation] Add support for calling 'trans' with ICU formatted messages
2020-08-30 09:19:50 +02:00
Hugo Sales
d2ec41f4ef [Translation] Add support for calling 'trans' with ICU formatted messages 2020-08-30 09:19:43 +02:00
Fabien Potencier
4d6ea775b7 bug #37966 [HttpClient][MockHttpClient][DX] Throw when the response factory callable does not return a valid response (fancyweb)
This PR was merged into the 4.4 branch.

Discussion
----------

[HttpClient][MockHttpClient][DX] Throw when the response factory callable does not return a valid response

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

The current message is `TypeError: Argument 4 passed to Symfony\Component\HttpClient\Response\MockResponse::fromRequest() must implement interface Symfony\Contracts\HttpClient\ResponseInterface, instance of Generator given`.

I lost some time with this because I was passing a callable that returns a \Generator instead of passing the resulting \Generator directly. We could support that case but I guess with the added exception message, it is clear we don't support it at all.

Commits
-------

564dce39f8 [HttpClient][MockHttpClient][DX] Throw when the response factory callable does not return a valid response
2020-08-30 08:55:38 +02:00
Fabien Potencier
943cbd804e minor #37967 [FrameworkBundle] Do not pass the base uri twice to scoped http clients (fancyweb)
This PR was merged into the 4.4 branch.

Discussion
----------

[FrameworkBundle] Do not pass the base uri twice to scoped http clients

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

I looked at my dumped scoped http client PHP file and I noticed the base uri was passed two times. I thought there was a bug somewhere in my configuration. Actually, we only need to pass it as the method argument here.

Commits
-------

e2fce0d89f [FrameworkBundle] Do not pass the base uri twice to scoped http clients
2020-08-30 08:53:37 +02:00
Nate Wiebe
dc6b3bf62d [Translation] Translatable objects 2020-08-28 18:48:14 +02:00
Fabien Potencier
6c094cce73 bug #37983 [PropertyInfo] Fix ReflectionExtractor::getTypesFromConstructor (ogizanagi)
This PR was merged into the 5.2-dev branch.

Discussion
----------

[PropertyInfo] Fix ReflectionExtractor::getTypesFromConstructor

| Q             | A
| ------------- | ---
| Branch?       | master <!-- see below -->
| Bug fix?      | yes
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | N/A <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License       | MIT
| Doc PR        | N/A

Fixes https://travis-ci.org/github/symfony/symfony/jobs/721953907#L4274-L4296

Relates to #30335

Commits
-------

6423d8a827 [PropertyInfo] Fix ReflectionExtractor::getTypesFromConstructor
2020-08-28 18:21:59 +02:00
Fabien Potencier
5189571300 Merge branch '4.4' into 5.1
* 4.4:
  Fix typo
2020-08-28 18:19:35 +02:00
Fabien Potencier
4dc9ac0acc Fix typo 2020-08-28 18:19:28 +02:00
Fabien Potencier
5b3ebdc7e6 Merge branch '5.1'
* 5.1:
  [PhpUnitBridge] Create a predictable symlink pointing to the local install
  [PropertyInfo] Backport support for typed properties (PHP 7.4)
  [PhpUnitBridge] Polyfill new phpunit 9.1 assertions
  [PhpUnitBridge] Move assertMatchesRegularExpression in PolyfillAssertTrait
  [PhpUnit] Add polyfill for assertMatchesRegularExpression()
  Update Notifier bridge readme
  [TwigBridge] Fix #37931: BC break where filter method `trans` did not allow null values for `$message` parameter anymore
  [PropertyAccess] Fix accessing dynamic properties
2020-08-28 18:19:10 +02:00
Fabien Potencier
f6c0706762 Merge branch '4.4' into 5.1
* 4.4:
  [PhpUnitBridge] Create a predictable symlink pointing to the local install
  [PropertyInfo] Backport support for typed properties (PHP 7.4)
  [PhpUnitBridge] Polyfill new phpunit 9.1 assertions
  [PhpUnitBridge] Move assertMatchesRegularExpression in PolyfillAssertTrait
  [PhpUnit] Add polyfill for assertMatchesRegularExpression()
2020-08-28 18:18:32 +02:00
Maxime Steinhausser
6423d8a827 [PropertyInfo] Fix ReflectionExtractor::getTypesFromConstructor 2020-08-28 18:07:48 +02:00
Grégoire Pineau
aa7a444c86 [Workflow] Expose the Metadata Store in the DIC 2020-08-28 16:51:18 +02:00
Grégoire Pineau
3c943b94ed [Semaphore] Fixed some bugs 2020-08-28 16:01:04 +02:00
Thomas Calvet
564dce39f8 [HttpClient][MockHttpClient][DX] Throw when the response factory callable does not return a valid response 2020-08-28 14:30:47 +02:00
Fabien Potencier
03d494ddde bug #37971 [PropertyInfo] Backport support for typed properties (PHP 7.4) (dunglas)
This PR was merged into the 4.4 branch.

Discussion
----------

[PropertyInfo] Backport support for typed properties (PHP 7.4)

| Q             | A
| ------------- | ---
| Branch?       | 4.4 <!-- see below -->
| Bug fix?      | yes
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | N/A. <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License       | MIT
| Doc PR        | https://github.com/symfony/symfony-docs/pull/13719 to be fixed

Backports #34557 as suggested.

One of my workmate hit this issue with the Serializer component and it was not obvious for him why it was not working, without hint.

Commits
-------

1b19f255a3 [PropertyInfo] Backport support for typed properties (PHP 7.4)
2020-08-28 12:27:56 +02:00
Fabien Potencier
ac96fdacd3 minor #37974 [PhpUnitBridge] Create a predictable symlink pointing to the local install (dunglas)
This PR was squashed before being merged into the 4.4 branch.

Discussion
----------

[PhpUnitBridge] Create a predictable symlink pointing to the local install

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | no
| New feature?  | yes <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | n/a
| License       | MIT
| Doc PR        | n/a

Static analysis tools such as PHPStan need to be able to autoload classes provided by to work. It's also useful to use the assertions provided by PHPUnit with other testing tools such as Behat.
When using `simple-phpunit`, PHPUnit isn't installed in the `vendor/` directory, consequently other tools cannot autoload its classes.

A workaround is to configure these tools to load the autoloader installed by `simple-phpunit`. Example with PHPstan:

```neon
parameters:
	bootstrapFiles:
		- vendor/bin/.phpunit/phpunit-9.2-0/vendor/autoload.php
```

However, the path of the autoloader isn't predictable: it depends of PHPUnit version.

This PR changes `simple-phpunit` to create a symlink with a predictable path (`vendor/.phpunit/phpunit`) pointing to the currently used version of PHPUnit, so it is possible to hardcode this value in config files.

The symlink is recreated before every run, so if a different version of PHPUnit must be used because the PHP version in use is different from the previous run (frequent when developing libraries compatible with multiple PHP versions), it still works.

Commits
-------

bf7654f245 [PhpUnitBridge] Create a predictable symlink pointing to the local install
2020-08-28 12:27:13 +02:00
Kévin Dunglas
bf7654f245 [PhpUnitBridge] Create a predictable symlink pointing to the local install 2020-08-28 12:27:07 +02:00
Wouter de Jong
176aef63d9 Also mark the authenticator security system experimental in 5.2 2020-08-28 10:27:42 +02:00
Kévin Dunglas
1b19f255a3 [PropertyInfo] Backport support for typed properties (PHP 7.4) 2020-08-28 10:21:30 +02:00
Mohammad Emran Hasan
d945b88c1a [PhpUnitBridge] Polyfill new phpunit 9.1 assertions 2020-08-28 09:39:33 +02:00
Thomas Calvet
e2fce0d89f [FrameworkBundle] Do not pass the base uri twice to scoped http clients 2020-08-27 18:01:08 +02:00
Fabien Potencier
ba98fd74d6 feature #37432 [Mailer] Implement additional mailer transport options (fritzmg)
This PR was squashed before being merged into the 5.2-dev branch.

Discussion
----------

[Mailer] Implement additional mailer transport options

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix #37300
| License       | MIT
| Doc PR        | https://github.com/symfony/symfony-docs/pull/13911

This implements additional transport configuration options mentioned in #37300. It also adds a `command` option to be able to define the command used by the `sendmail` transport.

Examples:

```yml
framework:
  mailer:
    transports:
      sendmail: sendmail://default?command=/usr/sbin/sendmail%%20-oi%%20-t
      local_domain: smtps://smtp.example.com?local_domain=example.org
      restart_threshold: smtps://smtp.example.com?restart_threshold=10&restart_threshold_sleep=1
      ping_threshold: smtps://smtp.example.com?ping_threshold=200
```

Commits
-------

665d1cd3fa [Mailer] Implement additional mailer transport options
2020-08-27 16:56:03 +02:00
Fritz Michael Gschwantner
665d1cd3fa [Mailer] Implement additional mailer transport options 2020-08-27 16:55:56 +02:00
Fabien Potencier
df84e2263b minor #37965 Update Notifier bridge DSN in readme (jeremyFreeAgent)
This PR was merged into the 5.2-dev branch.

Discussion
----------

Update Notifier bridge DSN in readme

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

Add missing DSN documentation in README for 5.2

Commits
-------

eedd72cd98 Update Notifier bridge DSN in readme
2020-08-27 16:51:53 +02:00
Fabien Potencier
40022972f6 bug #37578 [HttpClient] fix pausing AmpResponse (kelunik)
This PR was merged into the 5.2-dev branch.

Discussion
----------

[HttpClient] fix pausing AmpResponse

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | None
| License       | MIT
| Doc PR        | None

This fixes the pause handler while streaming bodies in `AmpHttpClient`.

Needs to be rebased onto the target branch and needs some test fixes. @nicolas-grekas FYI.

Commits
-------

bf2d1cf6e7 Improve pause handler
2020-08-27 16:48:24 +02:00
Jérémy Romey
eedd72cd98
Update Notifier bridge DSN in readme 2020-08-27 16:44:35 +02:00
Fabien Potencier
fe4d92806b feature #35893 [HttpClient][DI] Add an option to use the MockClient in functional tests (GaryPEGEOT)
This PR was squashed before being merged into the 5.2-dev branch.

Discussion
----------

[HttpClient][DI] Add an option to use the MockClient in functional tests

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        | TODO

Let's say you want to mock HTTP responses in your test or dev environment:

First, you create an invokable class responsible of generating the response:
```php
namespace App\Tests;

use Symfony\Contracts\HttpClient\ResponseInterface;

class MyAwesomeCallback
{
    public function __invoke(string $method, string $url, array $options = []): ResponseInterface
    {
        // load a fixture file or generate dynamic data
    }
}
```

Then configure it:
```yaml

# config/services_test.yaml
services:
   # ...
   App\Tests\MyAwesomeCallback: ~

# config/packages/test/framework.yaml
framework:
    http_client:
        mock_response_factory: App\Tests\MyAwesomeCallback
```

The HttpClient will now be using MockHttpClient in your functional test:
```php
$client = static::createClient();

// No live HTTP connection made
$client->request('GET', '/path-with-http-call');
```

Commits
-------

b53739c79d [HttpClient][DI] Add an option to use the MockClient in functional tests
2020-08-27 16:44:19 +02:00
Gary PEGEOT
b53739c79d [HttpClient][DI] Add an option to use the MockClient in functional tests 2020-08-27 16:44:13 +02:00
Kévin Dunglas
0426113eda
[PhpUnitBridge] Move assertMatchesRegularExpression in PolyfillAssertTrait 2020-08-27 16:43:53 +02:00
Fabien Potencier
ce8b497824 feature #35780 [Semaphore] Added the component (lyrixx)
This PR was merged into the 5.2-dev branch.

Discussion
----------

[Semaphore] Added the component

| Q             | A
| ------------- | ---
| Branch?       | yes
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

---

[Semaphore] Added the component

Few years ago, we have introduced the Lock component. This is a very nice component, but sometime it is not enough. Sometime you need semaphore.

This is why I'm introducing this new component.

## What is a Semaphore ?

From wikipedia:

> In computer science, a semaphore is a variable or abstract data type used to control access to a common resource by multiple processes in a concurrent system such as a multitasking operating system. A semaphore is simply a variable. This variable is used to solve critical section problems and to achieve process synchronization in the multi processing environment. A trivial semaphore is a plain variable that is changed (for example, incremented or decremented, or toggled) depending on programmer-defined conditions.

This new component is more than a variable. This is an abstraction on top of different storage.

To make a quick comparison with a lock:

 * A lock allows only 1 process to access a resource;
 * A semaphore allow N process to access a resource.

Basically, a lock is a semaphore where `N = 1`.

### Possible confusion

PHP exposes some `sem_*` functions like [`sem_acquire`](http://php.net/sem_acquire). This module provides wrappers for the System V IPC family of functions. It includes semaphores, shared memory and inter-process messaging (IPC).

The Lock component has a storage that works with theses functions. It uses it with `N = 1`.

## What are the use-cases ?

Wikipedia has some [examples](https://en.wikipedia.org/wiki/Semaphore_(programming)#Examples)

But I can add one more commun use case.

If you are building an async system that process user data, you may want to priorise all jobs. You can achieve that by running at maximum N jobs per user at the same time. If the user has more resources, you give him more concurrent jobs (so a bigger `N`).

Thanks to semaphores, it's pretty easy to know if a new job can be run.

### Some concrete use-cases

I'm not saying the following services are using semaphore, but they may solve the previous problematic with semaphores. Here is some examples:

 * services like testing platform where a user can test N projects concurrently (travis, circle, appveyor, insight, ...)
 * services that ingest lots of data (newrelic, datadog, blackfire, segment.io, ...))
 * services that send email in batch (campaign monitor, mailchimp, ...)
 * etc...

## How to use it ?

To do so, since PHP is mono-threaded, you run M PHP workers. And in each worker, you look for for the next job. When you grab a job, you try to acquires a semaphore. If you got it, you process the job. If not you try another job.

FTR in other language, like Go, there are no need to run M workers, one is enough.

### With Symfony

```php
<?php

use Symfony\Component\Lock\LockFactory;
use Symfony\Component\Lock\Store\RedisStore as LockRedisStore;
use Symfony\Component\Semaphore\SemaphoreFactory;
use Symfony\Component\Semaphore\Store\RedisStore;

require __DIR__.'/vendor/autoload.php';

$redis = new Redis();
$redis->connect('172.17.0.2');

// Internally, Semaphore needs a lock
$lock = (new LockFactory(new LockRedisStore($redis)))->createLock('test:lock', 1);

// Create a semaphore:
// * name = test
// * limit = 3 (it means only 3 process are allowed)
// * ttl = 10 seconds : Maximum expected semaphore duration in seconds
$semaphore = (new SemaphoreFactory($lock, new RedisStore($redis)))->createSemaphore('test', 3, 10);

if (!$semaphore->acquire()) {
    echo "Could not acquire the semaphore\n";
    exit(1);
}

// The semaphore has been acquired

// Do the heavy job
for ($i = 0; $i < 100; ++$i) {
    sleep(1);
    // Before the expiration, refresh the semaphore if the job is not finished yet
    if ($i % 9 === 0) {
        $semaphore->refresh();
    }
}

// Release it when finished
$semaphore->release();
```

## Prior art

I looked at [packagist](https://packagist.org/?query=semaphore) and:

 * most of packages are using a semaphore storage for creating a lock. So there are not relevant here;
 * some packages need an async framework to be used (amphp for example);
 * the only packages really implementing a semaphore, has a really low code quality and some bugs.

## Current implementation

1. I initially copied the Lock component since the external API is quite similar;
1. I simplified it a lot for the current use case;
1. I implemented the RedisStorage according the [redis book](https://redislabs.com/ebook/part-2-core-concepts/chapter-6-application-components-in-redis/6-3-counting-semaphores/;)
1. I forced a TTL on the storage.

---

TODO:

 * [ ] documentation
 * [x] test
 * [x] ~~move the lock requirements to the redis storage only ?~~ Not needed anymore

Commits
-------

891285475e [Semaphore] Added the component
2020-08-27 16:33:10 +02:00
Wouter de Jong
907ef311bf Lazily load the user during the check passport event 2020-08-27 16:28:46 +02:00
Fabien Potencier
53a8f7d490 Fix tests 2020-08-27 16:13:35 +02:00
Fabien Potencier
d24f040389 feature #37934 [Mailer] Mailjet Add ability to pass custom headers to API (tcheymol)
This PR was squashed before being merged into the 5.2-dev branch.

Discussion
----------

[Mailer] Mailjet Add ability to pass custom headers to API

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | no
| License       | MIT
| Doc PR        | no

Mailjet mailer now forwards headers from original email removes forbidden headers, and sends them to Maijlet Api

Additionally (see https://symfony.com/releases):
 - Always add tests and ensure they pass.
 - Never break backward compatibility (see https://symfony.com/bc).
 - Bug fixes must be submitted against the lowest maintained branch where they apply
   (lowest branches are regularly merged to upper ones so they get the fixes too.)
 - Features and deprecations must be submitted against branch master.
-->

Commits
-------

7b14ef3678 [Mailer] Mailjet Add ability to pass custom headers to API
2020-08-27 16:08:10 +02:00
Thibaut Cheymol
7b14ef3678 [Mailer] Mailjet Add ability to pass custom headers to API 2020-08-27 16:08:03 +02:00
Kévin Dunglas
33eccd2a00 [PhpUnit] Add polyfill for assertMatchesRegularExpression() 2020-08-27 16:03:04 +02:00
Jérémy Romey
17c0784c44
Update Notifier bridge readme 2020-08-27 14:59:47 +02:00
Grégoire Pineau
891285475e [Semaphore] Added the component
Few years ago, we have introduced the Lock component. This is a very nice component, but sometime it is not enough. Sometime you need semaphore.

This is why I'm introducing this new component.

From wikipedia:

> In computer science, a semaphore is a variable or abstract data type used to control access to a common resource by multiple processes in a concurrent system such as a multitasking operating system. A semaphore is simply a variable. This variable is used to solve critical section problems and to achieve process synchronization in the multi processing environment. A trivial semaphore is a plain variable that is changed (for example, incremented or decremented, or toggled) depending on programmer-defined conditions.

This new component is more than a variable. This is an abstraction on top of different storage.

To make a quick comparison with a lock:

 * A lock allows only 1 process to access a resource;
 * A semaphore allow N process to access a resource.

Basically, a lock is a semaphore where `N = 1`.

PHP exposes some `sem_*` functions like [`sem_acquire`](http://php.net/sem_acquire). This module provides wrappers for the System V IPC family of functions. It includes semaphores, shared memory and inter-process messaging (IPC).

The Lock component has a storage that works with theses functions. It uses it with `N = 1`.

Wikipedia has some [examples](https://en.wikipedia.org/wiki/Semaphore_(programming)#Examples)

But I can add one more commun use case.

If you are building an async system that process user data, you may want to priorise all jobs. You can achieve that by running at maximum N jobs per user at the same time. If the user has more resources, you give him more concurrent jobs (so a bigger `N`).

Thanks to semaphores, it's pretty easy to know if a new job can be run.

I'm not saying the following services are using semaphore, but they may solve the previous problematic with semaphores. Here is some examples:

 * services like testing platform where a user can test N projects concurrently (travis, circle, appveyor, insight, ...)
 * services that ingest lots of data (newrelic, datadog, blackfire, segment.io, ...))
 * services that send email in batch (campaign monitor, mailchimp, ...)
 * etc...

To do so, since PHP is mono-threaded, you run M PHP workers. And in each worker, you look for for the next job. When you grab a job, you try to acquires a semaphore. If you got it, you process the job. If not you try another job.

FTR in other language, like Go, there are no need to run M workers, one is enough.

```php
<?php

use Symfony\Component\Lock\LockFactory;
use Symfony\Component\Lock\Store\RedisStore as LockRedisStore;
use Symfony\Component\Semaphore\SemaphoreFactory;
use Symfony\Component\Semaphore\Store\RedisStore;

require __DIR__.'/vendor/autoload.php';

$redis = new Redis();
$redis->connect('172.17.0.2');

// Internally, Semaphore needs a lock
$lock = (new LockFactory(new LockRedisStore($redis)))->createLock('test:lock', 1);

// Create a semaphore:
// * name = test
// * limit = 3 (it means only 3 process are allowed)
// * ttl = 10 seconds : Maximum expected semaphore duration in seconds
$semaphore = (new SemaphoreFactory($lock, new RedisStore($redis)))->createSemaphore('test', 3, 10);

if (!$semaphore->acquire()) {
    echo "Could not acquire the semaphore\n";
    exit(1);
}

// The semaphore has been acquired

// Do the heavy job
for ($i = 0; $i < 100; ++$i) {
    sleep(1);
    // Before the expiration, refresh the semaphore if the job is not finished yet
    if ($i % 9 === 0) {
        $semaphore->refresh();
    }
}

// Release it when finished
$semaphore->release();
```

I looked at [packagist](https://packagist.org/?query=semaphore) and:

 * most of packages are using a semaphore storage for creating a lock. So there are not relevant here;
 * some packages need an async framework to be used (amphp for example);
 * the only packages really implementing a semaphore, has a really low code quality and some bugs.

1. I initially copied the Lock component since the external API is quite similar;
1. I simplified it a lot for the current use case;
1. I implemented the RedisStorage according the [redis book](https://redislabs.com/ebook/part-2-core-concepts/chapter-6-application-components-in-redis/6-3-counting-semaphores/;)
1. I forced a TTL on the storage.
2020-08-27 14:35:29 +02:00
Fabien Potencier
6d521d4072 feature #37942 [Security] Renamed provider key to firewall name (wouterj)
This PR was merged into the 5.2-dev branch.

Discussion
----------

[Security] Renamed provider key to firewall name

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | no
| Deprecations? | yes
| Tickets       | Fix #15207
| License       | MIT
| Doc PR        | tbd

This fixes the `$providerKey` argument names on the classes that will remain in use, even when the new Security system will take over. @fabpot do you think these changes are worth it?

Officially, all token classes are not marked as `@final`. Do I need to take into account when someone is overriding the `getProviderKey()` method? Also, I couldn't find a way to trigger a deprecation notice for deprecated properties, is this a problem?

Commits
-------

91b276326d Renamed $providerKey to $firewallName
2020-08-26 17:45:58 +02:00
Wouter de Jong
91b276326d Renamed $providerKey to $firewallName 2020-08-26 17:34:05 +02:00
Flinsch
039fc80d6c [TwigBridge] Fix #37931: BC break where filter method trans did not allow null values for $message parameter anymore 2020-08-26 16:33:04 +02:00
Andrii Serdiuk
47bd0180d1 [PropertyAccess] Fix accessing dynamic properties 2020-08-26 15:25:42 +02:00
Fabien Potencier
c642b8fb71 Merge branch '5.1'
* 5.1:
  [HttpClient] fix chaining promises returned by HttplugClient
  [DI] fix dumping lazy non-shared services
2020-08-26 13:35:34 +02:00
Fabien Potencier
fc3095ff2f bug #37927 [HttpClient] fix chaining promises returned by HttplugClient (CthulhuDen)
This PR was merged into the 5.1 branch.

Discussion
----------

[HttpClient] fix chaining promises returned by HttplugClient

| Q             | A
| ------------- | ---
| Branch?       | 5.1
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #37925
| License       | MIT

Guzzle runtime does not play too well with foreign promises, which can be fixed by wrapping them with `promise_for`.
Added failing test case from #37925 and suggested fix.
Should not break BC because `then` callback results get resolved before being passed to next `then` callback or returned from `wait`.

Commits
-------

75043a1fb0 [HttpClient] fix chaining promises returned by HttplugClient
2020-08-26 13:34:52 +02:00
cthulhu
75043a1fb0 [HttpClient] fix chaining promises returned by HttplugClient 2020-08-26 12:50:35 +02:00
Niklas Keller
bf2d1cf6e7 Improve pause handler 2020-08-26 12:30:57 +02:00
Fabien Potencier
885390fbaf bug #37953 [DI] fix dumping lazy non-shared services (nicolas-grekas)
This PR was merged into the 5.1 branch.

Discussion
----------

[DI] fix dumping lazy non-shared services

| Q             | A
| ------------- | ---
| Branch?       | 5.1
| Bug fix?      | yes
| New feature?  | no
| Deprecations? | no
| Tickets       | Fix #37665
| License       | MIT
| Doc PR        | -

Commits
-------

a4f4ca74a7 [DI] fix dumping lazy non-shared services
2020-08-26 11:10:33 +02:00
Nicolas Grekas
a4f4ca74a7 [DI] fix dumping lazy non-shared services 2020-08-26 10:54:37 +02:00
Fabien Potencier
27bb2828e3 Merge branch '5.1'
* 5.1:
  Backport: Improve link script with rollback when using symlink
  fix more numeric cases changing in PHP 8
  Fixed autoLogin() returning null
  [Notifier] add doc for free mobile dsn
2020-08-26 10:31:06 +02:00
Fabien Potencier
216f2fa94e Merge branch '4.4' into 5.1
* 4.4:
  Backport: Improve link script with rollback when using symlink
  fix more numeric cases changing in PHP 8
2020-08-26 10:30:57 +02:00
Fabien Potencier
6d850e04be Merge branch '3.4' into 4.4
* 3.4:
  Backport: Improve link script with rollback when using symlink
  fix more numeric cases changing in PHP 8
2020-08-26 10:30:46 +02:00
Gocha Ossinkine
a0fb44238e Make AbstractPhpFileCacheWarmer public 2020-08-26 09:58:02 +02:00
karser
5049e25b01 Added ConstructorExtractor which has higher priority than PhpDocExtractor and ReflectionExtractor 2020-08-26 09:35:07 +02:00
Fabien Potencier
12330e8ee6 feature #37926 [lock] Lazy create table in lock PDO store (jderusse)
This PR was merged into the 5.2-dev branch.

Discussion
----------

[lock] Lazy create table in lock PDO store

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | /
| License       | MIT
| Doc PR        | TODO

With this PR, the table used by PdoStore is automatically created (similar to Cache and Messenger componenents)

Commits
-------

eaa52bae96 Lazy create table in lock PDO store
2020-08-26 09:17:10 +02:00
Christian Flothmann
7cd5106041 fix more numeric cases changing in PHP 8 2020-08-26 08:32:27 +02:00
Olivier Dolbeau
34fc8c3fc2 [Notifier] Add Esendex bridge 2020-08-25 21:06:21 +02:00
Wouter de Jong
93aea910d9 Fixed autoLogin() returning null 2020-08-25 17:26:05 +02:00
Niels Robin-Aubertin
54e24a8999 [Serializer] Add special '*' serialization group that allows any group 2020-08-25 08:52:02 +02:00
Jérémy Derussé
eaa52bae96
Lazy create table in lock PDO store 2020-08-24 00:21:27 +02:00
Fabien Potencier
704c648ba5 feature #37708 Allow Drupal to wrap the Symfony test listener (alexpott)
This PR was squashed before being merged into the 5.2-dev branch.

Discussion
----------

Allow Drupal to wrap the Symfony test listener

| Q             | A
| ------------- | ---
| Branch?       | 5.1
| Bug fix?      | kinda
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License       | MIT
| Doc PR        | symfony/symfony-docs#... <!-- required for new features -->

Drupal has a test listener that wraps the Symfony listener as we need to manipulate deprecation testing to skip specific deprecations. We've managed to remove some how custom stuff and reaching into Symfony's privates via reflection recently (and fix a bug or two) but now we're getting output like:
```
  2x: a:4:{s:11:"deprecation";s:191:"Calling Drupal\Tests\WebAssert::responseNotMatches with more than one argument is deprecated in drupal:9.1.0 and will throw an exception in drupal:10.0.0. See https://www.drupal.org/node/TODO";s:5:"class";s:52:"Drupal\Tests\comment\Functional\CommentAnonymousTest";s:6:"method";s:13:"testAnonymous";s:15:"triggering_file";s:74:"/Users/alex/dev/sites/drupal8alt.dev/core/tests/Drupal/Tests/WebAssert.php";}
    2x in DrupalListener::endTest from Drupal\Tests\Listeners
```
instead of
```
  2x: Calling Drupal\Tests\WebAssert::responseNotMatches with more than one argument is deprecated in drupal:9.1.0 and will throw an exception in drupal:10.0.0. See https://www.drupal.org/node/TODO
    2x in CommentAnonymousTest::testAnonymous from Drupal\Tests\comment\Functional
```

We can fix this by aliasing and copying the \Symfony\Bridge\PhpUnit\DeprecationErrorHandler\Deprecation class but ideally that class could be a bit more liberal in its implementation.

Commits
-------

91de46da3f Allow Drupal to wrap the Symfony test listener
2020-08-23 19:24:34 +02:00
Alex Pott
91de46da3f Allow Drupal to wrap the Symfony test listener 2020-08-23 19:24:26 +02:00
YaFou
dcb8d8b05d
[Serializer] Adds FormErrorNormalizer 2020-08-23 18:18:18 +02:00
Fabien Potencier
9f0eee1cb8 Fix Composer constraint 2020-08-23 12:05:10 +02:00
Fabien Potencier
32ca714e93 minor #37922 [Notifier] backport documentation changes (noniagriconomie)
This PR was merged into the 5.1 branch.

Discussion
----------

[Notifier] backport documentation changes

| Q             | A
| ------------- | ---
| Branch?       | 5.1
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       |
| License       | MIT
| Doc PR        |

I think #37809 should have been merged into the `5.1` branch.

Commits
-------

ff768fbdd9 [Notifier] add doc for free mobile dsn
2020-08-23 11:47:18 +02:00
Fabien Potencier
7b0d5e3e82 Merge branch '5.1'
* 5.1:
  account for is_numeric() behavior changes in PHP 8
  fix expected exception messages on PHP 8
2020-08-23 11:22:43 +02:00
Fabien Potencier
d24a181e55 Merge branch '4.4' into 5.1
* 4.4:
  account for is_numeric() behavior changes in PHP 8
  fix expected exception messages on PHP 8
2020-08-23 11:22:34 +02:00
Fabien Potencier
77418e712e Merge branch '3.4' into 4.4
* 3.4:
  account for is_numeric() behavior changes in PHP 8
  fix expected exception messages on PHP 8
2020-08-23 11:22:13 +02:00
Fabien Potencier
e0ed56b5f0 Merge branch '5.1'
* 5.1:
  Fix constraint
  [Mailer] Support Return-Path in SesApiAsyncAwsTransport
2020-08-23 11:13:44 +02:00
Fabien Potencier
7b865eaeba Fix constraint 2020-08-23 11:12:48 +02:00
noniagriconomie
ff768fbdd9 [Notifier] add doc for free mobile dsn 2020-08-23 11:06:47 +02:00
Fabien Potencier
12f8631cfa feature #37087 [Messenger] Add FlattenException Normalizer (monteiro)
This PR was squashed before being merged into the 5.2-dev branch.

Discussion
----------

[Messenger] Add FlattenException Normalizer

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | Fix #32719  ... <!-- prefix each issue number with "Fix #", if any -->
| License       | MIT
| Doc PR        | No docs ... <!-- required for new features -->
<!--
Replace this notice by a short README for your feature/bugfix. This will help people
understand your PR and can be used as a start for the documentation.

Additionally (see https://symfony.com/releases):
 - Always add tests and ensure they pass.
 - Never break backward compatibility (see https://symfony.com/bc).
 - Bug fixes must be submitted against the lowest maintained branch where they apply
   (lowest branches are regularly merged to upper ones so they get the fixes too.)
 - Features and deprecations must be submitted against branch master.
-->

I have just duplicated the PR https://github.com/symfony/symfony/pull/33650 (from @skalpa) but using the new component ErrorHandler and removing the priority.

Project that reproduces the bug on Symfony 5.2: https://github.com/monteiro/serializer-pr37087 (all steps are on the README).

Since this adds a new class and changes behavior, we add this new feature on the 5.2 branch.

Commits
-------

78fbd0ac77 [Messenger] Add FlattenException Normalizer
2020-08-23 10:56:12 +02:00
Hugo Monteiro
78fbd0ac77 [Messenger] Add FlattenException Normalizer 2020-08-23 10:56:06 +02:00
Fabien Potencier
a8abd81840 feature #37917 [Security] Pass Passport to LoginFailureEvent (ihmels)
This PR was merged into the 5.2-dev branch.

Discussion
----------

[Security] Pass Passport to LoginFailureEvent

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix #37585
| License       | MIT
| Doc PR        | -

This changes passes a `Passport` to the `LoginFailureEvent`.

Commits
-------

d23434bc23 [Security] Pass Passport to LoginFailureEvent
2020-08-23 09:59:17 +02:00
Christian Flothmann
05db8e0fef account for is_numeric() behavior changes in PHP 8 2020-08-23 09:58:10 +02:00
Yannick Ihmels
d23434bc23 [Security] Pass Passport to LoginFailureEvent 2020-08-22 19:11:43 +02:00
Clara van Miert
61754cb891
[Mailer] Support Return-Path in SesApiAsyncAwsTransport
Enable sending `SendEmailRequest`s with a `Return-Path` configured in
`SesApiAsyncAwsTransport`.
2020-08-22 13:41:45 +02:00
Fabien Potencier
24af7dfb08 Fix CHANGELOG 2020-08-22 08:38:27 +02:00
Fabien Potencier
c281867227 feature #37734 [HttpFoundation] add support for X_FORWARDED_PREFIX header (jeff1985)
This PR was squashed before being merged into the 5.2-dev branch.

Discussion
----------

[HttpFoundation] add support for X_FORWARDED_PREFIX header

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| Deprecations? | no
| Tickets       | Fix #36809
| License       | MIT

Add support for `X-Forwarded-Prefix` header added by the popular Traefik HTTP LoadBalancer and Reverse Proxy. This ensures that the links rendered by symfony application deployed behind LB are valid even if the application is deployed via prefix URL.

Example routing setup:
route `/admin/(.*)` => symfony backend `/$1`
in this case links rendered by symfony backend must start with `/admin/`

To accept traefik prefix in your symfony app, you must modify index.php to allow accepting this header:

    Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_TRAEFIK ^ Request::HEADER_X_FORWARDED_HOST );`

Commits
-------

109e0a9f1a [HttpFoundation] add support for X_FORWARDED_PREFIX header
2020-08-22 08:37:35 +02:00