@@ -40,28 +40,7 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
4040 $ availableLocales = $ options ['available_locales ' ];
4141
4242 $ builder ->addEventListener (FormEvents::PRE_SET_DATA , function (PreSetDataEvent $ event ) use ($ availableLocales ) {
43- $ data = $ event ->getData ();
44-
45- $ initialValue = array_combine ($ availableLocales , array_fill (0 , count ($ availableLocales ), true ));
46-
47- if (null === $ data ) {
48- $ data = $ initialValue ;
49- }
50-
51- foreach ($ data as $ key => $ value ) {
52- if (is_int ($ key ) && is_string ($ value )) {
53- unset($ data [$ key ]);
54- $ data [$ value ] = true ;
55- }
56- }
57-
58- foreach ($ availableLocales as $ locale ) {
59- if (!array_key_exists ($ locale , $ data )) {
60- $ data [$ locale ] = true ;
61- }
62- }
63-
64- $ event ->setData ($ data );
43+ self ::onPreSetData ($ event , $ availableLocales );
6544 });
6645
6746 $ builder ->addModelTransformer (new CallbackTransformer (function ($ data ) {
@@ -88,4 +67,33 @@ public function buildForm(FormBuilderInterface $builder, array $options): void
8867 return $ data ;
8968 }));
9069 }
70+
71+ public static function onPreSetData (PreSetDataEvent $ event , array $ availableLocales ): void
72+ {
73+ $ data = $ event ->getData ();
74+
75+ $ initialValue = array_combine ($ availableLocales , array_fill (0 , count ($ availableLocales ), true ));
76+
77+ if (null === $ data ) {
78+ $ data = $ initialValue ;
79+ }
80+
81+ // migrate legacy format to new one
82+ $ isLegacy = 0 === sizeof ($ data );
83+ foreach ($ data as $ key => $ value ) {
84+ if (is_int ($ key ) && is_string ($ value )) {
85+ unset($ data [$ key ]);
86+ $ data [$ value ] = true ;
87+ $ isLegacy = true ;
88+ }
89+ }
90+
91+ foreach ($ availableLocales as $ locale ) {
92+ if (!array_key_exists ($ locale , $ data )) {
93+ $ data [$ locale ] = !$ isLegacy ;
94+ }
95+ }
96+
97+ $ event ->setData ($ data );
98+ }
9199}
0 commit comments