Merge branch '2.8' into 3.1

* 2.8:
  [TwigBridge] fix tests
  Tag the FormFieldRegistry as being internal
  [Form] Fix Date\TimeType marked as invalid on request with single_text and zero seconds
  [Validator] Added missing swedish translation
  [TranslationDebug] workaround for getFallbackLocales.
  [Translation] fixed nested fallback catalogue  using multiple locales.
  fixed phpdoc
  [Command] Fixed method comments as phpDoc syntax
  Added single quotes for upgrade guides.
This commit is contained in:
Fabien Potencier 2016-11-14 08:20:02 -08:00
commit 61fea5a3f1
17 changed files with 120 additions and 21 deletions

View File

@ -1902,5 +1902,5 @@ UPGRADE FROM 2.x to 3.0
After:
```php
$request->query->get('foo')[bar];
$request->query->get('foo')['bar'];
```

View File

@ -80,7 +80,12 @@ if ($this->env->isDebug()) {
}
EOTXT;
$expected = preg_replace('/%(.*?)%/', '(isset($context["$1"]) ? $context["$1"] : null)', $expected);
if (PHP_VERSION_ID >= 70000) {
$expected = preg_replace('/%(.*?)%/', '($context["$1"] ?? null)', $expected);
} else {
$expected = preg_replace('/%(.*?)%/', '(isset($context["$1"]) ? $context["$1"] : null)', $expected);
}
$this->assertSame($expected, $compiler->compile($node)->getSource());
}
@ -106,7 +111,12 @@ if ($this->env->isDebug()) {
}
EOTXT;
$expected = preg_replace('/%(.*?)%/', '(isset($context["$1"]) ? $context["$1"] : null)', $expected);
if (PHP_VERSION_ID >= 70000) {
$expected = preg_replace('/%(.*?)%/', '($context["$1"] ?? null)', $expected);
} else {
$expected = preg_replace('/%(.*?)%/', '(isset($context["$1"]) ? $context["$1"] : null)', $expected);
}
$this->assertSame($expected, $compiler->compile($node)->getSource());
}

View File

@ -66,6 +66,10 @@ class FormThemeTest extends \PHPUnit_Framework_TestCase
protected function getVariableGetter($name)
{
if (PHP_VERSION_ID >= 70000) {
return sprintf('($context["%s"] ?? null)', $name, $name);
}
return sprintf('(isset($context["%s"]) ? $context["%s"] : null)', $name, $name);
}
}

View File

@ -263,6 +263,10 @@ class SearchAndRenderBlockNodeTest extends \PHPUnit_Framework_TestCase
protected function getVariableGetter($name)
{
if (PHP_VERSION_ID >= 70000) {
return sprintf('($context["%s"] ?? null)', $name, $name);
}
return sprintf('(isset($context["%s"]) ? $context["%s"] : null)', $name, $name);
}
}

View File

@ -39,15 +39,23 @@ class TransNodeTest extends \PHPUnit_Framework_TestCase
protected function getVariableGetterWithoutStrictCheck($name)
{
if (PHP_VERSION_ID >= 70000) {
return sprintf('($context["%s"] ?? null)', $name, $name);
}
return sprintf('(isset($context["%s"]) ? $context["%s"] : null)', $name, $name);
}
protected function getVariableGetterWithStrictCheck($name)
{
if (version_compare(\Twig_Environment::VERSION, '2.0.0-DEV', '>=')) {
if (\Twig_Environment::MAJOR_VERSION >= 2) {
return sprintf('(isset($context["%s"]) || array_key_exists("%s", $context) ? $context["%s"] : $this->notFound("%s", 0))', $name, $name, $name, $name);
}
return sprintf('(isset($context["%1$s"]) ? $context["%1$s"] : $this->getContext($context, "%1$s"))', $name);
if (PHP_VERSION_ID >= 70000) {
return sprintf('($context["%s"] ?? $this->getContext($context, "%s"))', $name, $name, $name);
}
return sprintf('(isset($context["%s"]) ? $context["%s"] : $this->getContext($context, "%s"))', $name, $name, $name);
}
}

View File

@ -17,7 +17,7 @@
],
"require": {
"php": ">=5.5.9",
"twig/twig": "~1.27|~2.0"
"twig/twig": "~1.28|~2.0"
},
"require-dev": {
"symfony/asset": "~2.8|~3.0",

View File

@ -21,6 +21,8 @@ use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Translation\Catalogue\MergeOperation;
use Symfony\Component\Translation\MessageCatalogue;
use Symfony\Component\Translation\Translator;
use Symfony\Component\Translation\DataCollectorTranslator;
use Symfony\Component\Translation\LoggingTranslator;
/**
* Helps finding unused or missing translation messages in a given locale
@ -295,7 +297,7 @@ EOF
{
$fallbackCatalogues = array();
$translator = $this->getContainer()->get('translator');
if ($translator instanceof Translator) {
if ($translator instanceof Translator || $translator instanceof DataCollectorTranslator || $translator instanceof LoggingTranslator) {
foreach ($translator->getFallbackLocales() as $fallbackLocale) {
if ($fallbackLocale === $locale) {
continue;

View File

@ -202,8 +202,6 @@ class Command
*
* @return int The command exit code
*
* @throws \Exception
*
* @see setCode()
* @see execute()
*/

View File

@ -15,6 +15,8 @@ use Symfony\Component\DomCrawler\Field\FormField;
/**
* This is an internal class that must not be used directly.
*
* @internal
*/
class FormFieldRegistry
{

View File

@ -12,6 +12,8 @@
namespace Symfony\Component\Form\Extension\Core\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormEvent;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\ReversedTransformer;
@ -54,6 +56,17 @@ class TimeType extends AbstractType
if ('single_text' === $options['widget']) {
$builder->addViewTransformer(new DateTimeToStringTransformer($options['model_timezone'], $options['view_timezone'], $format));
// handle seconds ignored by user's browser when with_seconds enabled
// https://codereview.chromium.org/450533009/
if ($options['with_seconds']) {
$builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $e) {
$data = $e->getData();
if ($data && preg_match('/^\d{2}:\d{2}$/', $data)) {
$e->setData($data.':00');
}
});
}
} else {
$hourOptions = $minuteOptions = $secondOptions = array(
'error_bubbling' => true,

View File

@ -221,6 +221,22 @@ class TimeTypeTest extends TestCase
$this->assertEquals('03', $form->getViewData());
}
public function testSubmitWithSecondsAndBrowserOmissionSeconds()
{
$form = $this->factory->create('time', null, array(
'model_timezone' => 'UTC',
'view_timezone' => 'UTC',
'input' => 'string',
'widget' => 'single_text',
'with_seconds' => true,
));
$form->submit('03:04');
$this->assertEquals('03:04:00', $form->getData());
$this->assertEquals('03:04:00', $form->getViewData());
}
public function testSetDataWithoutMinutes()
{
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\TimeType', null, array(

View File

@ -88,6 +88,20 @@ class DataCollectorTranslator implements TranslatorInterface, TranslatorBagInter
return $this->translator->getCatalogue($locale);
}
/**
* Gets the fallback locales.
*
* @return array $locales The fallback locales
*/
public function getFallbackLocales()
{
if ($this->translator instanceof Translator) {
return $this->translator->getFallbackLocales();
}
return array();
}
/**
* Passes through all unknown calls onto the translator object.
*/

View File

@ -88,6 +88,20 @@ class LoggingTranslator implements TranslatorInterface, TranslatorBagInterface
return $this->translator->getCatalogue($locale);
}
/**
* Gets the fallback locales.
*
* @return array $locales The fallback locales
*/
public function getFallbackLocales()
{
if ($this->translator instanceof Translator) {
return $this->translator->getFallbackLocales();
}
return array();
}
/**
* Passes through all unknown calls onto the translator object.
*/

View File

@ -273,6 +273,16 @@ class TranslatorTest extends \PHPUnit_Framework_TestCase
$translator->trans('foo');
}
public function testNestedFallbackCatalogueWhenUsingMultipleLocales()
{
$translator = new Translator('fr');
$translator->setFallbackLocales(array('ru', 'en'));
$translator->getCatalogue('fr');
$this->assertNotNull($translator->getCatalogue('ru')->getFallbackCatalogue());
}
public function testFallbackCatalogueResources()
{
$translator = new Translator('en_GB', new MessageSelector());

View File

@ -380,7 +380,7 @@ EOF
foreach ($this->computeFallbackLocales($locale) as $fallback) {
if (!isset($this->catalogues[$fallback])) {
$this->doLoadCatalogue($fallback);
$this->loadCatalogue($fallback);
}
$fallbackCatalogue = new MessageCatalogue($fallback, $this->catalogues[$fallback]->all());

View File

@ -310,6 +310,10 @@
<source>This value does not match the expected {{ charset }} charset.</source>
<target>Detta värde har inte den förväntade teckenkodningen {{ charset }}.</target>
</trans-unit>
<trans-unit id="81">
<source>This is not a valid Business Identifier Code (BIC).</source>
<target>Detta är inte en giltig BIC-kod.</target>
</trans-unit>
</body>
</file>
</xliff>

View File

@ -30,13 +30,13 @@ class Inline
private static $objectForMap = false;
/**
* Converts a YAML string to a PHP array.
* Converts a YAML string to a PHP value.
*
* @param string $value A YAML string
* @param int $flags A bit field of PARSE_* constants to customize the YAML parser behavior
* @param array $references Mapping of variable names to values
*
* @return array A PHP array representing the YAML string
* @return mixed A PHP value
*
* @throws ParseException
*/
@ -121,7 +121,7 @@ class Inline
* @param mixed $value The PHP variable to convert
* @param int $flags A bit field of Yaml::DUMP_* constants to customize the dumped YAML string
*
* @return string The YAML string representing the PHP array
* @return string The YAML string representing the PHP value
*
* @throws DumpException When trying to dump PHP resource
*/
@ -266,7 +266,7 @@ class Inline
}
/**
* Parses a scalar to a YAML string.
* Parses a YAML scalar.
*
* @param string $scalar
* @param int $flags
@ -276,7 +276,7 @@ class Inline
* @param bool $evaluate
* @param array $references
*
* @return string A YAML string
* @return string
*
* @throws ParseException When malformed inline YAML string is parsed
*
@ -329,12 +329,12 @@ class Inline
}
/**
* Parses a quoted scalar to YAML.
* Parses a YAML quoted scalar.
*
* @param string $scalar
* @param int &$i
*
* @return string A YAML string
* @return string
*
* @throws ParseException When malformed inline YAML string is parsed
*/
@ -359,14 +359,14 @@ class Inline
}
/**
* Parses a sequence to a YAML string.
* Parses a YAML sequence.
*
* @param string $sequence
* @param int $flags
* @param int &$i
* @param array $references
*
* @return string A YAML string
* @return array
*
* @throws ParseException When malformed inline YAML string is parsed
*/
@ -419,14 +419,14 @@ class Inline
}
/**
* Parses a mapping to a YAML string.
* Parses a YAML mapping.
*
* @param string $mapping
* @param int $flags
* @param int &$i
* @param array $references
*
* @return string A YAML string
* @return array|\stdClass
*
* @throws ParseException When malformed inline YAML string is parsed
*/