This PR was squashed before being merged into the 5.2-dev branch.
Discussion
----------
[ErrorHandler] Allow override of the default non-debug template
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes - a very tiny one
| Deprecations? | no
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
Add new feature to allow the default hardcoded non-debug template to be overridden when `symfony/error-handler`used as a component in other projects.
Currently, when used as a component, its not possible (that I could see) to override the standard default template of `views/error.html.php` therefore the look and feel, and text is hard coded. There is much written on how to customise the error pages when using the full symfony stack, but not when using individual `symfony/error-handler` component on its own.
This PR is related to the use of `symfony/error-handler` as a component in other projects - specifically the Joomla Content Management System, where, in non debug mode, a generic template **needs to be translatable, and customisable** even though most of the time when the error occurs will bt at boot time and not much available to it. https://github.com/joomla/joomla-cms/issues/29968
This PR allows the use of code such as
```php
<?php
require 'vendor/autoload.php';
use Symfony\Component\ErrorHandler\ErrorHandler;
use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer;
ErrorHandler::register();
HtmlErrorRenderer::setTemplate('/path/to/custom/mine.php');
throw new Exception('myException is this', 500);
```
and then for further customisation of the "look and feel" to be done in `mine.php`
Due to the unique way the error handler component is init'ed, the use of static calls has been employed rather than any DI approach, I hope this is ok.
Commits
-------
6e1d16b44d [ErrorHandler] Allow override of the default non-debug template
* 5.1:
minor #37121 [Contracts] Add missing "extra.thanks" entries in composer.json (nicolas-grekas)
[Process] Fix Permission Denied error when writing sf_proc_00 lock files on Windows
fix handling null as empty data
[Security\Http] Skip remember-me logout on empty token
Missing return in loadValuesForChoices method
No need to create an issue when creating a PR
Use ">=" for the "php" requirement
[HttpClient] Fix promise behavior in HttplugClient
[Console] Fixes question input encoding on Windows
* 5.0:
minor #37121 [Contracts] Add missing "extra.thanks" entries in composer.json (nicolas-grekas)
[Process] Fix Permission Denied error when writing sf_proc_00 lock files on Windows
fix handling null as empty data
No need to create an issue when creating a PR
Use ">=" for the "php" requirement
[HttpClient] Fix promise behavior in HttplugClient
[Console] Fixes question input encoding on Windows
* 4.4:
minor #37121 [Contracts] Add missing "extra.thanks" entries in composer.json (nicolas-grekas)
[Process] Fix Permission Denied error when writing sf_proc_00 lock files on Windows
fix handling null as empty data
No need to create an issue when creating a PR
[Console] Fixes question input encoding on Windows
This PR was merged into the 5.2-dev branch.
Discussion
----------
[Contracts] Add missing "extra.thanks" entries in composer.json
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | no
| Deprecations? | no
| Tickets | -
| License | MIT
| Doc PR | -
Something we forgot and that might help give some more visibility to symfony/contracts.
Commits
-------
bd04f0cce6 [Contracts] Add missing "extra.thanks" entries in composer.json
* 3.4:
[Process] Fix Permission Denied error when writing sf_proc_00 lock files on Windows
fix handling null as empty data
No need to create an issue when creating a PR
[Console] Fixes question input encoding on Windows
This PR was merged into the 3.4 branch.
Discussion
----------
[Process] Fix Permission Denied error when writing sf_proc_00 lock files on Windows
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? |no
| Deprecations? | no
| Tickets | Fix#37294
| License | MIT
| Doc PR |
Passes current Process unit tests.
On Windows systems, a new set of sf_proc_## files are generated in the system temp directory for each WindowsPipes object. These files are removed when the WindowsPipes object is destroyed.
This avoids receiving a permission denied error when attempting to write to sf_proc_## files between multiple sites running as different users, when the users do not have permissions to modify each others files.
Changes
- [Process] WindowsPipes always creates new sf_proc_## files in constructor
- [Process] WindowsPipes removes its sf_proc_## files in destructor
Commits
-------
220be89f5c [Process] Fix Permission Denied error when writing sf_proc_00 lock files on Windows
This PR was merged into the 3.4 branch.
Discussion
----------
[Form] fix handling null as empty data
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | Fix#37493
| License | MIT
| Doc PR |
Commits
-------
b5aa55dab9 fix handling null as empty data
This PR was merged into the 3.4 branch.
Discussion
----------
[Console] Fixes question input encoding on Windows
| Q | A
| ------------- | ---
| Branch? | 3.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 | Fix#35842, Fix#36324, Fix#37495 and Fix#37278 <!-- prefix each issue number with "Fix #", if any -->
| License | MIT
| Doc PR | no <!-- 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.
-->
To ask a question to a user, the [QuestionHelper](https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Console/Helper/QuestionHelper.php) use [`fgets`](https://www.php.net/manual/en/function.fgets.php). However, special characters are not supported on Windows with this function (like accents: `é`, `à`, `ö`). The solution is to set a special encoding with [`sapi_windows_cp_get`](https://www.php.net/manual/en/function.sapi-windows-cp-get).
> Before
```php
$stream = fopen('php://stdin', 'r');
$input = fgets($stream);
echo $input;
// input: "Bonjour à tous"
// output: 'Bonjour \ tous" or "Bonjour tous"
```
> After
```php
// Check if the function exists because it only exists on Windows
if(function_exists('sapi_windows_cp_set')) {
sapi_windows_cp_get(437);
}
$stream = fopen('php://stdin', 'r');
$input = fgets($stream);
echo $input;
// input: "Bonjour à tous"
// output: 'Bonjour à tous"
```
*Thanks to @bnjmnfnk for the solution 😉*
Commits
-------
4288df4f74 [Console] Fixes question input encoding on Windows
This PR was merged into the 3.4 branch.
Discussion
----------
No need to create an issue when creating a PR
| Q | A
| ------------- | ---
| Branch? | 3.4
| 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 #", if any -->
| License | MIT
| Doc PR | n/a
No need to create an issue before creating a PR.
Commits
-------
b5b146de2c No need to create an issue when creating a PR
This PR was merged into the 4.4 branch.
Discussion
----------
Use ">=" for the "php" requirement
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | kinda - prevents projects from installing on PHP 8.0 unnecessarily.
| New feature? | no
| Deprecations? | no
| Tickets | Fix #... <!-- prefix each issue number with "Fix #", if any -->
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
Making the same change as f8aa0873cf but for a couple of places where it seems to have been missed.
Commits
-------
4a360766cc Use ">=" for the "php" requirement
This PR was squashed before being merged into the 4.4 branch.
Discussion
----------
[HttpClient] Fix promise behavior in HttplugClient
| Q | A
| ------------- | ---
| Branch? | 4.4 & up <!-- 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 | Fix#37488 <!-- prefix each issue number with "Fix #", if any -->
| License | MIT
| Doc PR | symfony/symfony-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.
-->
## The Problem
Promises have 2 important methods: `then` and `wait`.
To implement Httplug's promise interface, we built `HttplugPromise` on top of Guzzle promise.
However, when an error occurred (Httplug `NetworkException` thrown) while init the request/before actually sending the request,
`HttplugClient::sendAsyncRequest` will return a `Http\Promise\RejectedPromise`, which is a dummy implementation.
If the `then` callable returns a promise-like object, `Http\Promise\RejectedPromise` will treat it as plain value.
Guzzle promise will try to resolve the promise-like value, which is an object that has `then` method on it.
bbf3b200bc/src/Promise.php (L116)
To fix this, I edited `src/Symfony/Component/HttpClient/HttplugClient.php`.
Next, let me explain why to edit `src/Symfony/Component/HttpClient/Response/HttplugPromise.php`.
After the previous fix, when a Guzzle promise returned by the `then` callable, things will work.
However, If I return a `HttplugPromiseInterface`, it doesn't work, because Guzzle promise `wait` the return value (result)
only if it's a Guzzle promise.
bbf3b200bc/src/Promise.php (L63)
To fix this, I referenced the `wait` code of Guzzle promise and edited our `HttplugPromise`.
## How this fix make sense
So, why to return a promise from the `then` callable?
This let us change the promise chain according to current promise's result (fulfilled/rejected).
For example, we can retry an HTTP request if it failed.
Please take a look at my test code.
Commits
-------
147b6adc39 [HttpClient] Fix promise behavior in HttplugClient
* 5.1:
[HttpClient][CurlHttpClient] Fix http_version option usage
[HttpClient] fix parsing response headers in CurlResponse
[PropertyAccess] Remove inflector component
[Console] Do not check for "stty" using "exec" if that function is disabled
[Console] always use stty when possible to ask hidden questions
* 5.0:
[HttpClient][CurlHttpClient] Fix http_version option usage
[HttpClient] fix parsing response headers in CurlResponse
[Console] Do not check for "stty" using "exec" if that function is disabled
[Console] always use stty when possible to ask hidden questions
* 4.4:
[HttpClient][CurlHttpClient] Fix http_version option usage
[HttpClient] fix parsing response headers in CurlResponse
[Console] Do not check for "stty" using "exec" if that function is disabled
[Console] always use stty when possible to ask hidden questions
This PR was merged into the 4.4 branch.
Discussion
----------
[Console] always use stty when possible to ask hidden questions
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | Fix#36565, replaces #36590
| License | MIT
| Doc PR | -
The current code doesn't make much sense: we check `hasSttyAvailable()`, and if the answer is `false`, we still use `stty` directly.
This PR relies on `stream_isatty` and equivalent fallback checks to decide if the password can be hidden or not.
Best reviewed [ignoring whitespaces](https://github.com/symfony/symfony/pull/37469/files?w=1).
Commits
-------
055b605e30 [Console] always use stty when possible to ask hidden questions
This PR was merged into the 5.1 branch.
Discussion
----------
[PropertyAccess] Remove inflector component
Remove inflector component as a requirements since the component is deprecated.
| Q | A
| ------------- | ---
| Branch? | 5.1
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| License | MIT
I hope I didn't miss something. I could not find a use of inflector component inside the PropertyAccess component and the inflector contains only one class that is deprecated
Commits
-------
8942d5a5b8 [PropertyAccess] Remove inflector component
This PR was merged into the 4.4 branch.
Discussion
----------
[HttpClient] fix parsing response headers in CurlResponse
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | -
| License | MIT
| Doc PR | -
This fixes rare notices that look like:
`Argument 2 passed to Symfony\Component\HttpClient\Chunk\DataChunk::__construct() must be of the type string, null given`
I'm unable to provide a test case since I'm unable to provide a simple reproducer.
It happens that curl can call the header-function with multiple lines at once apparently, while most of the time it does so with one at a time.
Commits
-------
eb70fb2f26 [HttpClient] fix parsing response headers in CurlResponse
This PR was merged into the 4.4 branch.
Discussion
----------
[HttpClient][CurlHttpClient] Fix http_version option usage
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | https://github.com/symfony/symfony/issues/37402
| License | MIT
| Doc PR | -
Ref https://github.com/symfony/symfony/pull/36422
If the scheme is https, we should only set http version 2.0 if the http_version is not specified.
Commits
-------
2676902a77 [HttpClient][CurlHttpClient] Fix http_version option usage
This PR was merged into the 5.2-dev branch.
Discussion
----------
[HttpClient] always yield a LastChunk in AsyncResponse on destruction
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | -
| License | MIT
| Doc PR | -
This ensures that async decorators always "see" the destruction of an AsyncResponse, via an `isLast()` chunk + a "canceled" state.
[The diff](https://github.com/symfony/symfony/pull/37482/files?w=1) is hard to read, here are the hints to understand what changed:
- a __destructor has been added;
- the passthru logic has been moved to a new method but is essentially unchanged.
Commits
-------
3a4a58385e [HttpClient] always yield a LastChunk in AsyncResponse on destruction
This PR was squashed before being merged into the 3.4 branch.
Discussion
----------
[Console] Do not check for "stty" using "exec" if that function is disabled
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | no
| License | MIT
| Doc PR | no
fixes https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues/5030
Commits
-------
02124b6b3b [Console] Do not check for "stty" using "exec" if that function is disabled