Skip to content

Commit 48ff343

Browse files
committed
Update BootstrapCollection for sf2.8|3.0
1 parent ae14508 commit 48ff343

18 files changed

+126
-90
lines changed

DependencyInjection/AdmingeneratorFormExtensionsExtension.php

-18
Original file line numberDiff line numberDiff line change
@@ -38,24 +38,6 @@ public function load(array $configs, ContainerBuilder $container)
3838
$container->setParameter('admingenerator.form.include_gmaps', $config['include_gmaps']);
3939

4040
$this->loadUploadCollectionListener($config['upload_collection'], $container);
41-
$this->loadBootstrapCollectionTypes($container);
42-
}
43-
44-
private function loadBootstrapCollectionTypes(ContainerBuilder $container)
45-
{
46-
$serviceId = 'admingenerator.form.extensions.type.bootstrap_collection';
47-
48-
$bootstrapCollectionTypes = array('fieldset', 'table');
49-
50-
foreach ($bootstrapCollectionTypes as $type) {
51-
$typeDef = new DefinitionDecorator($serviceId);
52-
$typeDef
53-
->addArgument($type)
54-
->addTag('form.type', array('alias' => 's2a_collection_'.$type))
55-
;
56-
57-
$container->setDefinition($serviceId.'.'.$type, $typeDef);
58-
}
5941
}
6042

6143
/**

Form/EventListener/SingleUploadSubscriber.php

+10-3
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ class SingleUploadSubscriber implements EventSubscriberInterface
1717
* @var array Single upload field configs
1818
*/
1919
protected $configs = array();
20-
20+
21+
/**
22+
* @var array
23+
*/
2124
protected $files = array();
2225

2326
public static function getSubscribedEvents()
@@ -154,8 +157,12 @@ public function postSubmit(FormEvent $event)
154157

155158
private function isFieldSingleUpload(ResolvedFormTypeInterface $formTypeInterface = null)
156159
{
157-
if ($formTypeInterface == null) return false;
158-
if ($formTypeInterface->getName() == 's2a_single_upload') return true;
160+
if ($formTypeInterface == null) {
161+
return false;
162+
}
163+
if (get_class($formTypeInterface->getInnerType()) == 'Admingen\FormExtensionsBundle\Form\Type\SingleUploadType') {
164+
return true;
165+
}
159166

160167
return $this->isFieldSingleUpload($formTypeInterface->getParent());
161168
}

Form/EventListener/UploadCollectionSubscriber.php

+60-61
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class UploadCollectionSubscriber implements EventSubscriberInterface
3030
/**
3131
* @var boolean Primary Key field
3232
*/
33-
protected $primary_key;
33+
protected $primaryKey;
3434

3535
/**
3636
* @var boolean Is file nameable
@@ -40,7 +40,7 @@ class UploadCollectionSubscriber implements EventSubscriberInterface
4040
/**
4141
* @var string Nameable field name
4242
*/
43-
protected $nameable_field;
43+
protected $nameableField;
4444

4545
/**
4646
* Used to revert changes if form is not valid.
@@ -61,17 +61,17 @@ class UploadCollectionSubscriber implements EventSubscriberInterface
6161
/**
6262
* @var array Submitted primary keys
6363
*/
64-
protected $submitted_pk;
64+
protected $submittedPk;
6565

6666
/**
6767
* @var boolean
6868
*/
69-
protected $allow_add;
69+
protected $allowAdd;
7070

7171
/**
7272
* @var boolean
7373
*/
74-
protected $allow_delete;
74+
protected $allowDelete;
7575

7676
/**
7777
* @var FileStorageInterface
@@ -88,14 +88,14 @@ public function __construct($propertyName, array $options, FileStorageInterface
8888
{
8989
$this->propertyName = $propertyName;
9090
$this->dataClass = $options['options']['data_class'];
91-
$this->primary_key = $options['primary_key'];
91+
$this->primaryKey = $options['primary_key'];
9292
$this->nameable = $options['nameable'];
93-
$this->nameable_field = $options['nameable_field'];
93+
$this->nameableField = $options['nameable_field'];
9494
$this->uploads = array();
9595
$this->editable = array();
96-
$this->submitted_pk = array();
97-
$this->allow_add = $options['allow_add'];
98-
$this->allow_delete = $options['allow_delete'];
96+
$this->submittedPk = array();
97+
$this->allowAdd = $options['allow_add'];
98+
$this->allowDelete = $options['allow_delete'];
9999
$this->storage = $storage;
100100
}
101101

@@ -110,7 +110,6 @@ public static function getSubscribedEvents()
110110

111111
public function preSubmit(FormEvent $event)
112112
{
113-
$form = $event->getForm();
114113
$data = $event->getData();
115114

116115
$data = $data ?: array();
@@ -142,8 +141,8 @@ public function preSubmit(FormEvent $event)
142141

143142
// save submitted primary keys for onSubmit event
144143
foreach ($data as $file) {
145-
if (is_array($file) && array_key_exists($this->primary_key, $file)) {
146-
$this->submitted_pk[] = $file[$this->primary_key];
144+
if (is_array($file) && array_key_exists($this->primaryKey, $file)) {
145+
$this->submittedPk[] = $file[$this->primaryKey];
147146
}
148147
}
149148

@@ -159,17 +158,17 @@ public function onSubmit(FormEvent $event)
159158
$getter = 'get'.ucfirst($this->propertyName);
160159
$this->originalFiles = $data->$getter();
161160

162-
if ($this->allow_delete) {
161+
if ($this->allowDelete) {
163162
// remove files not present in submitted pk
164-
$pkGetter = 'get'.ucfirst($this->primary_key);
163+
$pkGetter = 'get'.ucfirst($this->primaryKey);
165164
foreach ($data->$getter() as $file) {
166-
if (!in_array($file->$pkGetter(), $this->submitted_pk)) {
165+
if (!in_array($file->$pkGetter(), $this->submittedPk)) {
167166
$data->$getter()->removeElement($file);
168167
}
169168
}
170169
}
171170

172-
if ($this->allow_add) {
171+
if ($this->allowAdd) {
173172
// create file entites for each file
174173
foreach ($this->uploads as $upload) {
175174
if (!is_object($upload) && !is_null($this->storage)) {
@@ -196,8 +195,8 @@ public function onSubmit(FormEvent $event)
196195
}
197196

198197
// if nameable field specified - set normalized name
199-
if ($this->nameable && $this->nameable_field) {
200-
$setNameable = 'set'.ucfirst($this->nameable_field);
198+
if ($this->nameable && $this->nameableField) {
199+
$setNameable = 'set'.ucfirst($this->nameableField);
201200

202201
// this value is unsafe
203202
$name = $upload->getClientOriginalName();
@@ -235,70 +234,70 @@ public function postSubmit(FormEvent $event)
235234
private function normalizeUtf8String($s)
236235
{
237236
// save original string
238-
$original_string = $s;
237+
$originalString = $s;
239238

240239
// Normalizer-class missing!
241240
if (!class_exists('\Normalizer')) {
242241
// remove all non-whitelisted characters
243-
return preg_replace( '@[^a-zA-Z0-9._\-\s ]@u' , "", $original_string );
242+
return preg_replace( '@[^a-zA-Z0-9._\-\s ]@u' , '', $originalString );
244243
}
245244

246245
$normalizer = new \Normalizer();
247246

248247
// maps German (umlauts) and other European characters onto two characters before just removing diacritics
249-
$s = preg_replace('@\x{00c4}@u', "AE", $s); // umlaut Ä => AE
250-
$s = preg_replace('@\x{00d6}@u', "OE", $s); // umlaut Ö => OE
251-
$s = preg_replace('@\x{00dc}@u', "UE", $s); // umlaut Ü => UE
252-
$s = preg_replace('@\x{00e4}@u', "ae", $s); // umlaut ä => ae
253-
$s = preg_replace('@\x{00f6}@u', "oe", $s); // umlaut ö => oe
254-
$s = preg_replace('@\x{00fc}@u', "ue", $s); // umlaut ü => ue
255-
$s = preg_replace('@\x{00f1}@u', "ny", $s); // ñ => ny
256-
$s = preg_replace('@\x{00ff}@u', "yu", $s); // ÿ => yu
248+
$s = preg_replace('@\x{00c4}@u', 'AE', $s); // umlaut Ä => AE
249+
$s = preg_replace('@\x{00d6}@u', 'OE', $s); // umlaut Ö => OE
250+
$s = preg_replace('@\x{00dc}@u', 'UE', $s); // umlaut Ü => UE
251+
$s = preg_replace('@\x{00e4}@u', 'ae', $s); // umlaut ä => ae
252+
$s = preg_replace('@\x{00f6}@u', 'oe', $s); // umlaut ö => oe
253+
$s = preg_replace('@\x{00fc}@u', 'ue', $s); // umlaut ü => ue
254+
$s = preg_replace('@\x{00f1}@u', 'ny', $s); // ñ => ny
255+
$s = preg_replace('@\x{00ff}@u', 'yu', $s); // ÿ => yu
257256

258257
// maps special characters (characters with diacritics) on their base-character followed by the diacritical mark
259258
// exmaple: Ú => U´, á => a`
260259
$s = $normalizer->normalize($s, $normalizer::FORM_D);
261260

262261
$s = preg_replace('@\pM@u', "", $s); // removes diacritics
263262

264-
$s = preg_replace('@\x{00df}@u', "ss", $s); // maps German ß onto ss
265-
$s = preg_replace('@\x{00c6}@u', "AE", $s); // Æ => AE
266-
$s = preg_replace('@\x{00e6}@u', "ae", $s); // æ => ae
267-
$s = preg_replace('@\x{0132}@u', "IJ", $s); // ? => IJ
268-
$s = preg_replace('@\x{0133}@u', "ij", $s); // ? => ij
269-
$s = preg_replace('@\x{0152}@u', "OE", $s); // Œ => OE
270-
$s = preg_replace('@\x{0153}@u', "oe", $s); // œ => oe
271-
272-
$s = preg_replace('@\x{00d0}@u', "D", $s); // Ð => D
273-
$s = preg_replace('@\x{0110}@u', "D", $s); // Ð => D
274-
$s = preg_replace('@\x{00f0}@u', "d", $s); // ð => d
275-
$s = preg_replace('@\x{0111}@u', "d", $s); // d => d
276-
$s = preg_replace('@\x{0126}@u', "H", $s); // H => H
277-
$s = preg_replace('@\x{0127}@u', "h", $s); // h => h
278-
$s = preg_replace('@\x{0131}@u', "i", $s); // i => i
279-
$s = preg_replace('@\x{0138}@u', "k", $s); // ? => k
280-
$s = preg_replace('@\x{013f}@u', "L", $s); // ? => L
281-
$s = preg_replace('@\x{0141}@u', "L", $s); // L => L
282-
$s = preg_replace('@\x{0140}@u', "l", $s); // ? => l
283-
$s = preg_replace('@\x{0142}@u', "l", $s); // l => l
284-
$s = preg_replace('@\x{014a}@u', "N", $s); // ? => N
285-
$s = preg_replace('@\x{0149}@u', "n", $s); // ? => n
286-
$s = preg_replace('@\x{014b}@u', "n", $s); // ? => n
287-
$s = preg_replace('@\x{00d8}@u', "O", $s); // Ø => O
288-
$s = preg_replace('@\x{00f8}@u', "o", $s); // ø => o
289-
$s = preg_replace('@\x{017f}@u', "s", $s); // ? => s
290-
$s = preg_replace('@\x{00de}@u', "T", $s); // Þ => T
291-
$s = preg_replace('@\x{0166}@u', "T", $s); // T => T
292-
$s = preg_replace('@\x{00fe}@u', "t", $s); // þ => t
293-
$s = preg_replace('@\x{0167}@u', "t", $s); // t => t
263+
$s = preg_replace('@\x{00df}@u', 'ss', $s); // maps German ß onto ss
264+
$s = preg_replace('@\x{00c6}@u', 'AE', $s); // Æ => AE
265+
$s = preg_replace('@\x{00e6}@u', 'ae', $s); // æ => ae
266+
$s = preg_replace('@\x{0132}@u', 'IJ', $s); // ? => IJ
267+
$s = preg_replace('@\x{0133}@u', 'ij', $s); // ? => ij
268+
$s = preg_replace('@\x{0152}@u', 'OE', $s); // Œ => OE
269+
$s = preg_replace('@\x{0153}@u', 'oe', $s); // œ => oe
270+
271+
$s = preg_replace('@\x{00d0}@u', 'D', $s); // Ð => D
272+
$s = preg_replace('@\x{0110}@u', 'D', $s); // Ð => D
273+
$s = preg_replace('@\x{00f0}@u', 'd', $s); // ð => d
274+
$s = preg_replace('@\x{0111}@u', 'd', $s); // d => d
275+
$s = preg_replace('@\x{0126}@u', 'H', $s); // H => H
276+
$s = preg_replace('@\x{0127}@u', 'h', $s); // h => h
277+
$s = preg_replace('@\x{0131}@u', 'i', $s); // i => i
278+
$s = preg_replace('@\x{0138}@u', 'k', $s); // ? => k
279+
$s = preg_replace('@\x{013f}@u', 'L', $s); // ? => L
280+
$s = preg_replace('@\x{0141}@u', 'L', $s); // L => L
281+
$s = preg_replace('@\x{0140}@u', 'l', $s); // ? => l
282+
$s = preg_replace('@\x{0142}@u', 'l', $s); // l => l
283+
$s = preg_replace('@\x{014a}@u', 'N', $s); // ? => N
284+
$s = preg_replace('@\x{0149}@u', 'n', $s); // ? => n
285+
$s = preg_replace('@\x{014b}@u', 'n', $s); // ? => n
286+
$s = preg_replace('@\x{00d8}@u', 'O', $s); // Ø => O
287+
$s = preg_replace('@\x{00f8}@u', 'o', $s); // ø => o
288+
$s = preg_replace('@\x{017f}@u', 's', $s); // ? => s
289+
$s = preg_replace('@\x{00de}@u', 'T', $s); // Þ => T
290+
$s = preg_replace('@\x{0166}@u', 'T', $s); // T => T
291+
$s = preg_replace('@\x{00fe}@u', 't', $s); // þ => t
292+
$s = preg_replace('@\x{0167}@u', 't', $s); // t => t
294293

295294
// remove all non-ASCii characters
296-
$s = preg_replace('@[^\0-\x80]@u', "", $s);
295+
$s = preg_replace('@[^\0-\x80]@u', '', $s);
297296

298297
// possible errors in UTF8-regular-expressions
299298
if (empty($s)) {
300299
// remove all non-whitelisted characters
301-
return preg_replace('@[^a-zA-Z0-9._\-\s ]@u' , "", $original_string);
300+
return preg_replace('@[^a-zA-Z0-9._\-\s ]@u' , '', $originalString);
302301
}
303302

304303
// return normalized string

Form/Type/BootstrapCollectionType.php

+13-3
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,26 @@
1313
* See `Resources/doc/bootstrap-collection/overview.md` for documentation
1414
*
1515
* @author Piotr Gołębiewski <[email protected]>
16+
* @author Stéphane Escandell <[email protected]>
1617
*/
17-
class BootstrapCollectionType extends AbstractType
18+
abstract class BootstrapCollectionType extends AbstractType
1819
{
20+
/**
21+
* @var string
22+
*/
1923
private $widget;
2024

25+
/**
26+
* @param string $widget Type of the form (used as a suffix fot he blocprefix)
27+
*/
2128
public function __construct($widget)
2229
{
2330
$this->widget = $widget;
2431
}
2532

33+
/**
34+
* {@inheritdoc}
35+
*/
2636
public function buildForm(FormBuilderInterface $builder, array $options)
2737
{
2838
$builder->addEventSubscriber(new ReorderCollectionSubscriber());
@@ -70,13 +80,13 @@ public function configureOptions(OptionsResolver $resolver)
7080
*/
7181
public function getParent()
7282
{
73-
return 'collection';
83+
return 'Symfony\Component\Form\Extension\Core\Type\CollectionType';
7484
}
7585

7686
/**
7787
* {@inheritdoc}
7888
*/
79-
public function getName()
89+
public function getBlockPrefix()
8090
{
8191
return 's2a_collection_' . $this->widget;
8292
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace Admingenerator\FormExtensionsBundle\Form\Type;
4+
5+
/**
6+
* See `Resources/doc/bootstrap-collection/overview.md` for documentation
7+
*
8+
* @author Stéphane Escandell <[email protected]>
9+
*/
10+
class BootstrapFieldsetCollectionType extends BootstrapCollectionType
11+
{
12+
public function __construct()
13+
{
14+
parent::__construct('fieldset');
15+
}
16+
}
+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace Admingenerator\FormExtensionsBundle\Form\Type;
4+
5+
/**
6+
* See `Resources/doc/bootstrap-collection/overview.md` for documentation
7+
*
8+
* @author Stéphane Escandell <[email protected]>
9+
*/
10+
class BootstrapTableCollectionType extends BootstrapCollectionType
11+
{
12+
public function __construct()
13+
{
14+
parent::__construct('table');
15+
}
16+
}

Resources/config/services.xml

+7-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,13 @@
1010

1111
<services>
1212
<!-- Form types -->
13-
<service id="admingenerator.form.extensions.type.bootstrap_collection" class="Admingenerator\FormExtensionsBundle\Form\Type\BootstrapCollectionType" abstract="true" />
13+
<service id="admingenerator.form.extensions.type.bootstrap_table_collection" class="Admingenerator\FormExtensionsBundle\Form\Type\BootstrapTableCollectionType">
14+
<tag name="form.type" />
15+
</service>
16+
17+
<service id="admingenerator.form.extensions.type.bootstrap_fieldset_collection" class="Admingenerator\FormExtensionsBundle\Form\Type\BootstrapFieldsetCollectionType">
18+
<tag name="form.type" />
19+
</service>
1420

1521
<service id="admingenerator.form.extensions.type.bootstrap_money" class="Admingenerator\FormExtensionsBundle\Form\Type\MoneyType">
1622
<tag name="form.type" />

Resources/views/javascripts.html.twig

+1-1
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
'bundles/admingeneratorformextensions/datetime-picker/js/bootstrap-datetimepicker.js'
6363
'bundles/admingeneratorformextensions/daterange-picker/js/daterangepicker.js'
6464
'bundles/admingeneratorformextensions/bootstrap-select/js/bootstrap-select.js'
65-
'bundles/admingeneratorformextensions/collection-upload/js/collection-upload.js'
65+
'bundles/admingeneratorformextensions/upload-collection/js/upload-collection.js'
6666
'bundles/admingeneratorformextensions/double-list/js/double-list.js'
6767
'bundles/admingeneratorformextensions/elastic/js/jquery.elastic.js'
6868
'bundles/admingeneratorformextensions/google-map/js/google-map.js'

Resources/views/javascripts_assetic_less.html.twig

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
<script type="text/javascript" src="{{ asset('bundles/admingeneratorformextensions/datetime-picker/js/bootstrap-datetimepicker.min.js') }}"></script>
3838
<script type="text/javascript" src="{{ asset('bundles/admingeneratorformextensions/daterange-picker/js/daterangepicker.min.js') }}"></script>
3939
<script type="text/javascript" src="{{ asset('bundles/admingeneratorformextensions/bootstrap-select/js/bootstrap-select.min.js') }}"></script>
40-
<script type="text/javascript" src="{{ asset('bundles/admingeneratorformextensions/collection-upload/js/collection-upload.min.js') }}"></script>
40+
<script type="text/javascript" src="{{ asset('bundles/admingeneratorformextensions/collection-upload/js/upload-collection.min.js') }}"></script>
4141
<script type="text/javascript" src="{{ asset('bundles/admingeneratorformextensions/double-list/js/double-list.min.js') }}"></script>
4242
<script type="text/javascript" src="{{ asset('bundles/admingeneratorformextensions/elastic/js/jquery.elastic.min.js') }}"></script>
4343
<script type="text/javascript" src="{{ asset('bundles/admingeneratorformextensions/google-map/js/google-map.min.js') }}"></script>

Resources/views/stylesheets.html.twig

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
'bundles/admingeneratorformextensions/datetime-picker/css/customized.css'
88
'bundles/admingeneratorformextensions/daterange-picker/css/daterangepicker-bs3.css'
99
'bundles/admingeneratorformextensions/bootstrap-select/css/bootstrap-select.css'
10-
'bundles/admingeneratorformextensions/collection-upload/css/collection-upload.css'
10+
'bundles/admingeneratorformextensions/upload-collection/css/upload-collection.css'
1111
'bundles/admingeneratorformextensions/double-list/css/double-list.css'
1212
'bundles/admingeneratorformextensions/google-map/css/google-map.css'
1313
'bundles/admingeneratorformextensions/minicolors/css/jquery.minicolors.css'

0 commit comments

Comments
 (0)