/
CompanyUserForm.php
135 lines (119 loc) · 4.15 KB
/
CompanyUserForm.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
<?php
/**
* Copyright © 2016-present Spryker Systems GmbH. All rights reserved.
* Use of this software requires acceptance of the Evaluation License Agreement. See LICENSE file.
*/
namespace Spryker\Zed\CompanyUserGui\Communication\Form;
use Generated\Shared\Transfer\CompanyUserTransfer;
use Generated\Shared\Transfer\CustomerTransfer;
use Spryker\Zed\Kernel\Communication\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\NotBlank;
/**
* @method \Spryker\Zed\CompanyUserGui\Communication\CompanyUserGuiCommunicationFactory getFactory()
* @method \Spryker\Zed\CompanyUserGui\CompanyUserGuiConfig getConfig()
*/
class CompanyUserForm extends AbstractType
{
public const OPTION_COMPANY_CHOICES = 'company_choices';
public const FIELD_ID_COMPANY_USER = 'id_company_user';
public const FIELD_FK_COMPANY = 'fk_company';
/**
* @return string
*/
public function getBlockPrefix(): string
{
return 'company-user';
}
/**
* @param \Symfony\Component\OptionsResolver\OptionsResolver $resolver
*
* @return void
*/
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefined(static::OPTION_COMPANY_CHOICES);
$resolver->setDefined(CompanyUserCustomerForm::OPTION_SALUTATION_CHOICES);
$resolver->setDefined(CompanyUserCustomerForm::OPTION_GENDER_CHOICES);
$resolver->setDefaults([
'data_class' => CompanyUserTransfer::class,
]);
}
/**
* @param \Symfony\Component\Form\FormBuilderInterface $builder
* @param array $options
*
* @return void
*/
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$this
->addIdCompanyUserField($builder)
->addCustomerSubForm($builder, $options)
->addCompanyField($builder, $options[static::OPTION_COMPANY_CHOICES])
->executeCompanyUserExpanderFormPlugins($builder);
}
/**
* @param \Symfony\Component\Form\FormBuilderInterface $builder
* @param array $options
*
* @return $this
*/
protected function addCustomerSubForm(FormBuilderInterface $builder, array $options)
{
$builder->add(
CompanyUserTransfer::CUSTOMER,
CompanyUserCustomerForm::class,
[
'data_class' => CustomerTransfer::class,
'label' => false,
CompanyUserCustomerForm::OPTION_GENDER_CHOICES => $options[CompanyUserCustomerForm::OPTION_GENDER_CHOICES],
CompanyUserCustomerForm::OPTION_SALUTATION_CHOICES => $options[CompanyUserCustomerForm::OPTION_SALUTATION_CHOICES],
]
);
return $this;
}
/**
* @param \Symfony\Component\Form\FormBuilderInterface $builder
*
* @return $this
*/
protected function addIdCompanyUserField(FormBuilderInterface $builder)
{
$builder->add(static::FIELD_ID_COMPANY_USER, HiddenType::class);
return $this;
}
/**
* @param \Symfony\Component\Form\FormBuilderInterface $builder
* @param array $choices
*
* @return $this
*/
protected function addCompanyField(FormBuilderInterface $builder, array $choices)
{
$builder->add(static::FIELD_FK_COMPANY, ChoiceType::class, [
'label' => 'Company',
'placeholder' => 'Company name',
'choices' => $choices,
'constraints' => [
new NotBlank(),
],
]);
return $this;
}
/**
* @param \Symfony\Component\Form\FormBuilderInterface $builder
*
* @return $this
*/
protected function executeCompanyUserExpanderFormPlugins(FormBuilderInterface $builder)
{
foreach ($this->getFactory()->getCompanyUserFormPlugins() as $companyUserFormExpanderPlugin) {
$builder = $companyUserFormExpanderPlugin->expand($builder);
}
return $this;
}
}