8000 feature #15301 [Form][Type Date/Time] added choice_translation_domain… · symfony/symfony@3909460 · GitHub
[go: up one dir, main page]

Skip to content

Commit 3909460

Browse files
committed
feature #15301 [Form][Type Date/Time] added choice_translation_domain option. (aitboudad)
This PR was squashed before being merged into the 2.8 branch (closes #15301). Discussion ---------- [Form][Type Date/Time] added choice_translation_domain option. | Q | A | ------------- | --- | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | #15222 and #15298 | License | MIT - [x] add test Commits ------- 1f3af26 [Form][Type Date/Time] added choice_translation_domain option.
2 parents e610b41 + 1f3af26 commit 3909460

File tree

7 files changed

+176
-0
lines changed

7 files changed

+176
-0
lines changed

src/Symfony/Component/Form/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ CHANGELOG
44
2.8.0
55
-----
66

7+
* added option "choice_translation_domain" to DateType, TimeType and DateTimeType.
78
* deprecated option "read_only" in favor of "attr['readonly']"
89
* added the html5 "range" FormType
910
* deprecated the "cascade_validation" option in favor of setting "constraints"

E29B src/Symfony/Component/Form/Extension/Core/Type/DateTimeType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)
116116
'days',
117117
'empty_value',
118118
'placeholder',
119+
'choice_translation_domain',
119120
'required',
120121
'translation_domain',
121122
'html5',
@@ -131,6 +132,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)
131132
'with_seconds',
132133
'empty_value',
133134
'placeholder',
135+
'choice_translation_domain',
134136
'required',
135137
'translation_domain',
136138
'html5',
@@ -245,6 +247,7 @@ public function configureOptions(OptionsResolver $resolver)
245247
$resolver->setDefined(array(
246248
'empty_value', // deprecated
247249
'placeholder',
250+
'choice_translation_domain',
248251
'years',
249252
'months',
250253
'days',

src/Symfony/Component/Form/Extension/Core/Type/DateType.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,13 @@ public function buildForm(FormBuilderInterface $builder, array $options)
9494
// Only pass a subset of the options to children
9595
$yearOptions['choices'] = $this->formatTimestamps($formatter, '/y+/', $this->listYears($options['years']));
9696
$yearOptions['placeholder'] = $options['placeholder']['year'];
97+
$yearOptions['choice_translation_domain'] = $options['choice_translation_domain']['year'];
9798
$monthOptions['choices'] = $this->formatTimestamps($formatter, '/[M|L]+/', $this->listMonths($options['months']));
9899
$monthOptions['placeholder'] = $options['placeholder']['month'];
100+
$monthOptions['choice_translation_domain'] = $options['choice_translation_domain']['month'];
99101
$dayOptions['choices'] = $this->formatTimestamps($formatter, '/d+/', $this->listDays($options['days']));
100102
$dayOptions['placeholder'] = $options['placeholder']['day'];
103+
$dayOptions['choice_translation_domain'] = $options['choice_translation_domain']['day'];
101104
}
102105

103106
// Append generic carry-along options
@@ -205,6 +208,23 @@ public function configureOptions(OptionsResolver $resolver)
205208
);
206209
};
207210

211+
$choiceTranslationDomainNormalizer = function (Options $options, $choiceTranslationDomain) {
212+
if (is_array($choiceTranslationDomain)) {
213+
$default = false;
214+
215+
return array_replace(
216+
array('year' => $default, 'month' => $default, 'day' => $default),
217+
$choiceTranslationDomain
218+
);
219+
};
220+
221+
return array(
222+
'year' => $choiceTranslationDomain,
223+
'month' => $choiceTranslationDomain,
224+
'day' => $choiceTranslationDomain,
225+
);
226+
};
227+
208228
$format = function (Options $options) {
209229
return $options['widget'] === 'single_text' ? DateType::HTML5_FORMAT : DateType::DEFAULT_FORMAT;
210230
};
@@ -231,10 +251,12 @@ public function configureOptions(OptionsResolver $resolver)
231251
// this option.
232252
'data_class' => null,
233253
'compound' => $compound,
254+
'choice_translation_domain' => false,
234255
));
235256

236257
$resolver->setNormalizer('empty_value', $placeholderNormalizer);
237258
$resolver->setNormalizer('placeholder', $placeholderNormalizer);
259+
$resolver->setNormalizer('choice_translation_domain', $choiceTranslationDomainNormalizer);
238260

239261
$resolver->setAllowedValues('input', array(
240262
'datetime',

src/Symfony/Component/Form/Extension/Core/Type/TimeType.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)
6969
// Only pass a subset of the options to children
7070
$hourOptions['choices'] = $hours;
7171
$hourOptions['placeholder'] = $options['placeholder']['hour'];
72+
$hourOptions['choice_translation_domain'] = $options['choice_translation_domain']['hour'];
7273

7374
if ($options['with_minutes']) {
7475
foreach ($options['minutes'] as $minute) {
@@ -77,6 +78,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)
7778

7879
$minuteOptions['choices'] = $minutes;
7980
$minuteOptions['placeholder'] = $options['placeholder']['minute'];
81+
$minuteOptions['choice_translation_domain'] = $options['choice_translation_domain']['minute'];
8082
}
8183

8284
if ($options['with_seconds']) {
@@ -88,6 +90,7 @@ public function buildForm(FormBuilderInterface $builder, array $options)
8890

8991
$secondOptions['choices'] = $seconds;
9092
$secondOptions['placeholder'] = $options['placeholder']['second'];
93+
$secondOptions['choice_translation_domain'] = $options['choice_translation_domain']['second'];
9194
}
9295

9396
// Append generic carry-along options
@@ -194,6 +197,23 @@ public function configureOptions(OptionsResolver $resolver)
194197
);
195198
};
196199

200+
$choiceTranslationDomainNormalizer = function (Options $options, $choiceTranslationDomain) {
201+
if (is_array($choiceTranslationDomain)) {
202+
$default = false;
203+
204+
return array_replace(
205+
array('hour' => $default, 'minute' => $default, 'second' => $default),
206+
$choiceTranslationDomain
207+
);
208+
};
209+
210+
return array(
211+
'hour' => $choiceTranslationDomain,
212+
'minute' => $choiceTranslationDomain,
213+
'second' => $choiceTranslationDomain,
214+
);
215+
};
216+
197217
$resolver->setDefaults(array(
198218
'hours' => range(0, 23),
199219
'minutes' => range(0, 59),
@@ -217,10 +237,12 @@ public function configureOptions(OptionsResolver $resolver)
217237
// this option.
218238
'data_class' => null,
219239
'compound' => $compound,
240+
'choice_translation_domain' => false,
220241
));
221242

222243
$resolver->setNormalizer('empty_value', $placeholderNormalizer);
223244
$resolver->setNormalizer('placeholder', $placeholderNormalizer);
245+
$resolver->setNormalizer('choice_translation_domain', $choiceTranslationDomainNormalizer);
224246

225247
$resolver->setAllowedValues('input', array(
226248
'datetime',

src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTimeTypeTest.php

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,4 +519,57 @@ public function testTimeTypeSingleTextErrorsBubbleUp()
519519
$this->assertSame(array(), iterator_to_array($form['time']->getErrors()));
520520
$this->assertSame(array($error), iterator_to_array($form->getErrors()));
521521
}
522+
523+
public function testPassDefaultChoiceTranslationDomain()
524+
{
525+
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateTimeType', null, array(
526+
'with_seconds' => true,
527+
));
528+
529+
$view = $form->createView();
530+
531+
$this->assertFalse($view['date']['year']->vars['choice_translation_domain']);
532+
$this->assertFalse($view['date']['month']->vars['choice_translation_domain']);
533+
$this->assertFalse($view['date']['day']->vars['choice_translation_domain']);
534+
$this->assertFalse($view['time']['hour']->vars['choice_translation_domain']);
535+
$this->assertFalse($view['time']['minute']->vars['choice_translation_domain']);
536+
$this->assertFalse($view['time']['second']->vars['choice_translation_domain']);
537+
}
538+
539+
public function testPassChoiceTranslationDomainAsString()
540+
{
541+
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateTimeType', null, array(
542+
'choice_translation_domain' => 'messages',
543+
'with_seconds' => true,
544+
));
545+
546+
$view = $form->createView();
547+
$this->assertSame('messages', $view['date']['year']->vars['choice_translation_domain']);
548+
$this->assertSame('messages', $view['date']['month']->vars['choice_translation_domain']);
549+
$this->assertSame('messages', $view['date']['day']->vars['choice_translation_domain']);
550+
$this->assertSame('messages', $view['time']['hour']->vars['choice_translation_domain']);
551+
$this->assertSame('messages', $view['time']['minute']->vars['choice_translation_domain']);
552+
$this->assertSame('messages', $view['time']['second']->vars['choice_translation_domain']);
553+
}
554+
555+
public function testPassChoiceTranslationDomainAsArray()
556+
{
557+
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateTimeType', null, array(
558+
'choice_translation_domain' => array(
559+
'year' => 'foo',
560+
'month' => 'test',
561+
'hour' => 'foo',
562+
'second' => 'test',
563+
),
564+
'with_seconds' => true,
565+
));
566+
567+
$view = $form->createView();
568+
$this->assertSame('foo', $view['date']['year']->vars['choice_translation_domain']);
569+
$this->assertSame('test', $view['date']['month']->vars['choice_translation_domain']);
570+
$this->assertFalse($view['date']['day']->vars['choice_translation_domain']);
571+
$this->assertSame('foo', $view['time']['hour']->vars['choice_translation_domain']);
572+
$this->assertFalse($view['time']['minute']->vars['choice_translation_domain']);
573+
$this->assertSame('test', $view['time']['second']->vars['choice_translation_domain']);
574+
}
522575
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/DateTypeTest.php

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -950,4 +950,41 @@ public function testYearsFor32BitsMachines()
950950

951951
$this->assertEquals($listChoices, $view['year']->vars['choices']);
952952
}
953+
954+
public function testPassDefaultChoiceTranslationDomain()
955+
{
956+
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateType');
957+
958+
$view = $form->createView();
959+
$this->assertFalse($view['year']->vars['choice_translation_domain']);
960+
$this->assertFalse($view['month']->vars['choice_translation_domain']);
961+
$this->assertFalse($view['day']->vars['choice_translation_domain']);
962+
}
963+
964+
public function testPassChoiceTranslationDomainAsString()
965+
{
966+
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateType', null, array(
967+
'choice_translation_domain' => 'messages',
968+
));
969+
970+
$view = $form->createView();
971+
$this->assertSame('messages', $view['year']->vars['choice_translation_domain']);
972+
$this->assertSame('messages', $view['month']->vars['choice_translation_domain']);
973+
$this->assertSame('messages', $view['day']->vars['choice_translation_domain']);
974+
}
975+
976+
public function testPassChoiceTranslationDomainAsArray()
977+
{
978+
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\DateType', null, array(
979+
'choice_translation_domain' => array(
980+
'year' => 'foo',
981+
'day' => 'test',
982+
),
983+
));
984+
985+
$view = $form->createView();
986+
$this->assertSame('foo', $view['year']->vars['choice_translation_domain']);
987+
$this->assertFalse($view['month']->vars['choice_translation_domain']);
988+
$this->assertSame('test', $view['day']->vars['choice_translation_domain']);
989+
}
953990
}

src/Symfony/Component/Form/Tests/Extension/Core/Type/TimeTypeTest.php

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -736,4 +736,42 @@ public function testThrowExceptionIfSecondsIsInvalid()
736736
'seconds' => 'bad value',
737737
));
738738
}
739+
740+
public function testPassDefaultChoiceTranslationDomain()
741+
{
742+
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\TimeType');
743+
744+
$view = $form->createView();
745+
$this->assertFalse($view['hour']->vars['choice_translation_domain']);
746+
$this->assertFalse($view['minute']->vars['choice_translation_domain']);
747+
}
748+
749+
public function testPassChoiceTranslationDomainAsString()
750+
{
751+
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\TimeType', null, array(
752+
'choice_translation_domain' => 'messages',
753+
'with_seconds' => true,
754+
));
755+
756+
$view = $form->createView();
757+
$this->assertSame('messages', $view['hour']->vars['choice_translation_domain']);
758+
$this->assertSame('messages', $view['minute']->vars['choice_translation_domain']);
759+
$this->assertSame('messages', $view['second']->vars['choice_translation_domain']);
760+
}
761+
762+
public function testPassChoiceTranslationDomainAsArray()
763+
{
764+
$form = $this->factory->create('Symfony\Component\Form\Extension\Core\Type\TimeType', null, array(
765+
'choice_translation_domain' => array(
766+
'hour' => 'foo',
767+
'second' => 'test',
768+
),
769+
'with_seconds' => true,
770+
));
771+
772+
$view = $form->createView();
773+
$this->assertSame('foo', $view['hour']->vars['choice_translation_domain']);
774+
$this->assertFalse($view['minute']->vars['choice_translation_domain']);
775+
$this->assertSame('test', $view['second']->vars['choice_translation_domain']);
776+
}
739777
}

0 commit comments

Comments
 (0)
0