Skip to content
This repository has been archived by the owner on Sep 30, 2021. It is now read-only.

Commit

Permalink
Merge remote-tracking branch 'origin/3.x'
Browse files Browse the repository at this point in the history
  • Loading branch information
greg0ire committed May 23, 2018
2 parents 6ccddd2 + e183ad0 commit 3559536
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 8 deletions.
16 changes: 13 additions & 3 deletions src/Form/Type/BasePickerType.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,21 +56,31 @@ public function finishView(FormView $view, FormInterface $form, array $options):
if (isset($options['date_format']) && is_string($options['date_format'])) {
$format = $options['date_format'];
} elseif (is_int($format)) {
$timeFormat = ($options['dp_pick_time']) ? DateTimeType::DEFAULT_TIME_FORMAT : \IntlDateFormatter::NONE;
$timeFormat = \IntlDateFormatter::NONE;
if ($options['dp_pick_time']) {
$timeFormat = $options['dp_use_seconds'] ? DateTimeType::DEFAULT_TIME_FORMAT : \IntlDateFormatter::SHORT;
}
$intlDateFormatter = new \IntlDateFormatter(
\Locale::getDefault(),
$this->locale,
$format,
$timeFormat,
null,
\IntlDateFormatter::GREGORIAN,
null
''
);
$format = $intlDateFormatter->getPattern();
}

// use seconds if it's allowed in format
$options['dp_use_seconds'] = false !== strpos($format, 's');

if ($options['dp_min_date'] instanceof \DateTime) {
$options['dp_min_date'] = \IntlDateFormatter::formatObject($options['dp_min_date'], $format, $this->locale);
}
if ($options['dp_max_date'] instanceof \DateTime) {
$options['dp_max_date'] = \IntlDateFormatter::formatObject($options['dp_max_date'], $format, $this->locale);
}

$view->vars['moment_format'] = $this->formatConverter->convert($format);

$view->vars['type'] = 'text';
Expand Down
4 changes: 3 additions & 1 deletion src/Form/Type/DateRangePickerType.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@ public function configureOptions(OptionsResolver $resolver): void
$resolver->setDefaults([
'field_options' => [],
'field_options_start' => [],
'field_options_end' => [],
'field_options_end' => [
'dp_use_current' => false,
],
'field_type' => DatePickerType::class,
]);
}
Expand Down
4 changes: 3 additions & 1 deletion src/Form/Type/DateTimeRangePickerType.php
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@ public function configureOptions(OptionsResolver $resolver): void
$resolver->setDefaults([
'field_options' => [],
'field_options_start' => [],
'field_options_end' => [],
'field_options_end' => [
'dp_use_current' => false,
],
'field_type' => DateTimePickerType::class,
]);
}
Expand Down
30 changes: 30 additions & 0 deletions src/Resources/views/Form/datepicker.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -67,3 +67,33 @@ file that was distributed with this source code.
</script>
{% endspaceless %}
{% endblock sonata_type_datetime_picker_widget %}

{% block sonata_type_datetime_range_script_block %}
{% spaceless %}
{{ block('form_widget') }}
<script type="text/javascript">
jQuery(function ($) {
var $startDateTimePicker = $('#{{ startId }}');
var $endDateTimePicker = $('#{{ endId }}');
$startDateTimePicker.on("dp.change", function (e) {
$endDateTimePicker.data("DateTimePicker").setMinDate(e.date);
});
$endDateTimePicker.on("dp.change", function (e) {
$startDateTimePicker.data("DateTimePicker").setMaxDate(e.date);
});
});
</script>
{% endspaceless %}
{% endblock sonata_type_datetime_range_script_block %}

{% block sonata_type_datetime_range_picker_widget %}
{% set startId = (form.children.start.vars.datepicker_use_button ? 'dtp_' : '') ~ form.children.start.vars.id %}
{% set endId = (form.children.end.vars.datepicker_use_button ? 'dtp_' : '') ~ form.children.end.vars.id %}
{{ block('sonata_type_datetime_range_script_block') }}
{% endblock sonata_type_datetime_range_picker_widget %}

{% block sonata_type_date_range_picker_widget %}
{% set startId = (form.children.start.vars.datepicker_use_button ? 'dp_' : '') ~ form.children.start.vars.id %}
{% set endId = (form.children.end.vars.datepicker_use_button ? 'dp_' : '') ~ form.children.end.vars.id %}
{{ block('sonata_type_datetime_range_script_block') }}
{% endblock sonata_type_date_range_picker_widget %}
34 changes: 33 additions & 1 deletion tests/Form/Type/BasePickerTypeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,19 @@ public function testFinishView(): void
$view = new FormView();
$form = new Form($this->createMock(FormConfigInterface::class));

$type->finishView($view, $form, ['format' => 'yyyy-MM-dd']);
$type->finishView($view, $form, [
'format' => 'yyyy-MM-dd',
'dp_min_date' => '1/1/1900',
'dp_max_date' => new \DateTime('1/1/2001'),
'dp_use_seconds' => true,
]);

$this->assertArrayHasKey('moment_format', $view->vars);
$this->assertArrayHasKey('dp_options', $view->vars);
$this->assertArrayHasKey('datepicker_use_button', $view->vars);
$this->assertFalse($view->vars['dp_options']['useSeconds']);
$this->assertSame('1/1/1900', $view->vars['dp_options']['minDate']);
$this->assertSame('2001-01-01', $view->vars['dp_options']['maxDate']);

foreach ($view->vars['dp_options'] as $dpKey => $dpValue) {
$this->assertFalse(strpos($dpKey, '_'));
Expand All @@ -63,4 +71,28 @@ public function testFinishView(): void

$this->assertSame('text', $view->vars['type']);
}

public function testTimePickerIntlFormater(): void
{
$translator = $this->createMock(TranslatorInterface::class);
$translator->method('getLocale')->willReturn('ru');

$type = new BasePickerTest(new MomentFormatConverter(), $translator);

$view = new FormView();
$form = new Form($this->createMock(FormConfigInterface::class));

$type->finishView($view, $form, [
'format' => \IntlDateFormatter::NONE,
'dp_min_date' => '1/1/1900',
'dp_max_date' => new \DateTime('3/1/2001'),
'dp_use_seconds' => false,
'dp_pick_time' => true,
'dp_pick_date' => false,
]);

$this->assertFalse($view->vars['dp_options']['useSeconds']);
$this->assertSame('H:mm', $view->vars['moment_format']);
$this->assertSame('0:00', $view->vars['dp_options']['maxDate']);
}
}
4 changes: 3 additions & 1 deletion tests/Form/Type/DateRangePickerTypeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ public function testGetDefaultOptions(): void
[
'field_options' => [],
'field_options_start' => [],
'field_options_end' => [],
'field_options_end' => [
'dp_use_current' => false,
],
'field_type' => DatePickerType::class,
], $options);
}
Expand Down
4 changes: 3 additions & 1 deletion tests/Form/Type/DateTimeRangePickerTypeTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,9 @@ public function testGetDefaultOptions(): void
[
'field_options' => [],
'field_options_start' => [],
'field_options_end' => [],
'field_options_end' => [
'dp_use_current' => false,
],
'field_type' => DateTimePickerType::class,
], $options);
}
Expand Down

0 comments on commit 3559536

Please sign in to comment.