69 lines
1.9 KiB
PHP
69 lines
1.9 KiB
PHP
<?php
|
|
|
|
/*
|
|
* This file is part of the Symfony package.
|
|
*
|
|
* (c) Fabien Potencier <fabien@symfony.com>
|
|
*
|
|
* For the full copyright and license information, please view the LICENSE
|
|
* file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace App\Form\Type;
|
|
|
|
use App\Utils\MomentFormatConverter;
|
|
use Symfony\Component\Form\AbstractType;
|
|
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
|
|
use Symfony\Component\Form\FormInterface;
|
|
use Symfony\Component\Form\FormView;
|
|
use Symfony\Component\OptionsResolver\OptionsResolver;
|
|
use function Symfony\Component\String\u;
|
|
|
|
/**
|
|
* Defines the custom form field type used to manipulate datetime values across
|
|
* Bootstrap Date\Time Picker javascript plugin.
|
|
*
|
|
* See https://symfony.com/doc/current/form/create_custom_field_type.html
|
|
*
|
|
* @author Yonel Ceruto <yonelceruto@gmail.com>
|
|
*/
|
|
class DateTimePickerType extends AbstractType
|
|
{
|
|
private $formatConverter;
|
|
|
|
public function __construct(MomentFormatConverter $converter)
|
|
{
|
|
$this->formatConverter = $converter;
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function buildView(FormView $view, FormInterface $form, array $options): void
|
|
{
|
|
$view->vars['attr']['data-date-format'] = $this->formatConverter->convert($options['format']);
|
|
$view->vars['attr']['data-date-locale'] = u(\Locale::getDefault())->replace('_', '-')->lower();
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function configureOptions(OptionsResolver $resolver): void
|
|
{
|
|
$resolver->setDefaults([
|
|
'widget' => 'single_text',
|
|
// if true, the browser will display the native date picker widget
|
|
// however, this app uses a custom JavaScript widget, so it must be set to false
|
|
'html5' => false,
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* {@inheritdoc}
|
|
*/
|
|
public function getParent(): ?string
|
|
{
|
|
return DateTimeType::class;
|
|
}
|
|
}
|