<?php
namespace Customize\Form\Type;
use Customize\Entity\Advances;
use Doctrine\ORM\Mapping\Entity;
use Eccube\Common\EccubeConfig;
use Eccube\Form\Type\Master\PrefType;
use Eccube\Form\Type\PostalType;
use Eccube\Form\Type\ToggleSwitchType;
use Plugin\CourcesManagerPlugin\Entity\TjoCourse;
use Plugin\CourcesManagerPlugin\Repository\Admin\TjoCourseRepository;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\RepeatedType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Choice;
use Symfony\Component\Validator\Constraints\LessThanOrEqual;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\Email;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\IsTrue;
class AdvanceType extends AbstractType
{
private $eccubeConfig;
private $courseRepository;
public function __construct(EccubeConfig $eccubeConfig, TjoCourseRepository $courseRepository)
{
$this->eccubeConfig = $eccubeConfig;
$this->courseRepository = $courseRepository;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$courses = $this->courseRepository->getCourses();
$allCourses = $this->courseRepository->getAllCourses();
if (!$options['is_logged_in']) {
$builder
->add('name01', TextType::class, [
'required' => true,
'mapped' => false,
'constraints' => [
new NotBlank(),
new Length(['max' => 255]),
],
])
->add('name02', TextType::class, [
'required' => true,
'mapped' => false,
'constraints' => [
new NotBlank(),
new Length(['max' => 255]),
],
])
->add('kana01', TextType::class, [
'required' => true,
'mapped' => false,
'constraints' => [
new NotBlank(),
new Length(['max' => 255]),
],
])
->add('kana02', TextType::class, [
'required' => true,
'mapped' => false,
'constraints' => [
new NotBlank(),
new Length(['max' => 255]),
],
])
->add('club_name', TextType::class, [
'required' => false,
'mapped' => false,
'constraints' => [
new Length(['max' => 255]),
],
])
->add('postal_code', PostalType::class, [
'required' => true,
'mapped' => false,
'constraints' => [
new NotBlank(),
new Length(['max' => 8]),
],
])
->add('pref', PrefType::class, [
'required' => true,
'mapped' => false,
])
->add('addr01', TextType::class, [
'required' => true,
'mapped' => false,
'constraints' => [
new NotBlank(),
new Length(['max' => 255]),
],
])
->add('addr02', TextType::class, [
'required' => true,
'mapped' => false,
'constraints' => [
new NotBlank(),
new Length(['max' => 255]),
],
])
->add('phone_number', TextType::class, [
'required' => true,
'mapped' => false,
'constraints' => [
new NotBlank(),
new Length(['max' => 14]),
],
])
->add('email', EmailType::class, [
'required' => true,
'mapped' => false,
'constraints' => [
new NotBlank(),
new Email(),
],
])
->add('plain_password', RepeatedType::class, [
'type' => PasswordType::class,
'mapped' => false,
'invalid_message' => 'パスワードが一致しません。',
'required' => true,
'first_options' => ['label' => 'パスワード'],
'second_options' => ['label' => 'パスワード(確認)'],
'constraints' => [
new NotBlank(),
new Length(['min' => 8, 'max' => 50]),
],
]);
}
$builder
->add('Courses1', EntityType::class, [
'required' => true,
'label' => 'コース名2',
'class' => TjoCourse::class,
'choice_label' => 'name',
'choices' => $allCourses,
'placeholder' => '指定コースを選択',
])
->add('Courses2', EntityType::class, [
'required' => false,
'label' => 'コース名2',
'class' => TjoCourse::class,
'choice_label' => 'name',
'choices' => $courses,
'placeholder' => '指定コースを選択',
])
->add('Courses3', EntityType::class, [
'required' => false,
'label' => 'コース名3',
'class' => TjoCourse::class,
'choice_label' => 'name',
'choices' => $courses,
'placeholder' => '指定コースを選択',
])
->add('course1_use',ChoiceType::class,[
'choices' => array_flip(Advances::COURSE_USE),
'required' => true,
'expanded' => false,
'multiple' => false,
'placeholder' => '使用目的を選択',
'attr' => [
'class' => 'course_use',
],
])
->add('course2_use',ChoiceType::class,[
'choices' => array_flip(Advances::COURSE_USE),
'required' => false,
'expanded' => false,
'multiple' => false,
'placeholder' => '使用目的を選択',
'attr' => [
'class' => 'course_use',
],
])
->add('course3_use',ChoiceType::class,[
'choices' => array_flip(Advances::COURSE_USE),
'required' => false,
'expanded' => false,
'multiple' => false,
'placeholder' => '使用目的を選択',
'attr' => [
'class' => 'course_use',
],
])
->add('hope_1', DateType::class, [
'required' => true,
'label' => '第一希望日',
'input' => 'datetime',
'years' => range(date('Y'), date('Y') + 1),
'widget' => 'single_text',
'constraints' => [
new NotBlank(),
new LessThanOrEqual([
'value' => date('Y-12-31', strtotime('next year')),
'message' => '翌年の年末までの日付を選択してください。',
]),
],
'attr' => [
'min' => date('Y-m-d', strtotime("+2 weeks")),
'max' => date('Y-12-31', strtotime('next year')),
],
])
->add('hope_2', DateType::class, [
'required' => false,
'label' => '第二希望日',
'input' => 'datetime',
'years' => range(date('Y'), date('Y') + 1),
'widget' => 'single_text',
'constraints' => [
new LessThanOrEqual([
'value' => date('Y-12-31', strtotime('next year')),
'message' => '翌年の年末までの日付を選択してください。',
]),
],
'attr' => [
'min' => date('Y-m-d', strtotime("+2 weeks")),
'max' => date('Y-12-31', strtotime('next year')),
],
])
->add('hope_3', DateType::class, [
'required' => false,
'label' => '第三希望日',
'input' => 'datetime',
'years' => range(date('Y'), date('Y') + 1),
'widget' => 'single_text',
'constraints' => [
new LessThanOrEqual([
'value' => date('Y-12-31', strtotime('next year')),
'message' => '翌年の年末までの日付を選択してください。',
]),
],
'attr' => [
'min' => date('Y-m-d', strtotime("+2 weeks")),
'max' => date('Y-12-31', strtotime('next year')),
],
])
->add('note', TextareaType::class, [
'required' => false,
'label' => '備考',
'constraints' => [
new Length([
'max' => $this->eccubeConfig['eccube_ltext_len'],
]),
],
'attr' => [
'placeholder' => '備考を入力してください',
'maxlength' => $this->eccubeConfig['eccube_ltext_len'],
],
])
->add('is_agreed', CheckboxType::class, [
'required' => true,
'constraints' => [
new IsTrue([
'message' => '利用規約に同意してください。',
]),
],
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Advances::class,
'is_logged_in' => false,
]);
$resolver->setAllowedTypes('is_logged_in', 'bool');
}
}