diff --git a/src/Bundle/ChillPersonBundle/Controller/PersonController.php b/src/Bundle/ChillPersonBundle/Controller/PersonController.php index 03da97d5f..570b51f8d 100644 --- a/src/Bundle/ChillPersonBundle/Controller/PersonController.php +++ b/src/Bundle/ChillPersonBundle/Controller/PersonController.php @@ -268,7 +268,7 @@ final class PersonController extends AbstractController ) { $this->em->persist($person); - $this->em->flush(); + // $this->em->flush(); $this->lastPostDataReset(); if ($form->get('createPeriod')->isClicked()) { diff --git a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php index d597e3572..bc3b798fa 100644 --- a/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php +++ b/src/Bundle/ChillPersonBundle/DependencyInjection/ChillPersonExtension.php @@ -84,6 +84,7 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac $loader->load('services/repository.yaml'); $loader->load('services/serializer.yaml'); $loader->load('services/security.yaml'); + $loader->load('services/doctrineEventListener.yaml'); // load service advanced search only if configure if ($config['search']['search_by_phone'] != 'never') { diff --git a/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php b/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php new file mode 100644 index 000000000..6c9b746d7 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php @@ -0,0 +1,39 @@ +getObject() instanceof Person){ + + $person = $event->getObject(); + $firstnameCaps = mb_convert_case(mb_strtolower($person->getFirstName()), MB_CASE_TITLE, 'UTF-8'); + $firstnameCaps = ucwords(strtolower($firstnameCaps), " \t\r\n\f\v'-"); + $person->setFirstName($firstnameCaps); + + $lastnameCaps = mb_strtoupper($person->getLastName(), 'UTF-8'); + $person->setLastName($lastnameCaps); + + } elseif ($event->getObject() instanceof PersonAltName){ + + $altname = $event->getObject(); + $altnameCaps = mb_strtoupper($altname->getLabel(), 'UTF-8'); + $altname->setLabel($altnameCaps); + + } else { + + throw new LogicException('Entity must be a person or an altname'); + + } + } +} \ No newline at end of file diff --git a/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php b/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php new file mode 100644 index 000000000..c8690a237 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php @@ -0,0 +1,69 @@ +setFirstName($firstname); + $person->setLastName($lastname); + + $args = $this->createMock(LifecycleEventArgs::class); + $args->method('getObject') + ->willReturn($person); + + $listener->onPrePersist($args); + + $this->assertEquals($firstnameExpected, $person->getFirstName()); + $this->assertEquals($lastnameExpected, $person->getLastName()); + } + + /** + * @dataProvider generateAltNames + */ + public function testAltNamesOnPrePersist($altname, $altnameExpected) + { + $listener = new PersonEventListener(); + + $personAltname = new PersonAltName(); + + $personAltname->setLabel($altname); + + $args = $this->createMock(LifecycleEventArgs::class); + $args->method('getObject') + ->willReturn($personAltname); + + $listener->onPrePersist($args); + + $this->assertEquals($altnameExpected, $personAltname->getLabel()); + } + + public function generateNames(): iterator + { + yield ['émelie-marie', 'Émelie-Marie', 'lenaerts', 'LENAERTS']; + yield ['jean-marie', 'Jean-Marie', 'lenaerts', 'LENAERTS']; + yield ['vinCENT', 'Vincent', 'fastré', 'FASTRÉ']; + yield ['Vincent', 'Vincent', 'van Gogh', 'VAN GOGH']; + yield ['André marie', 'André Marie', 'Bah', 'BAH']; + } + + public function generateAltNames(): iterator + { + yield ['vinCENT', 'VINCENT']; + yield ['jean-marie', 'JEAN-MARIE']; + yield ['fastré', 'FASTRÉ']; + yield ['émile', 'ÉMILE']; + } +} \ No newline at end of file diff --git a/src/Bundle/ChillPersonBundle/config/services/doctrineEventListener.yaml b/src/Bundle/ChillPersonBundle/config/services/doctrineEventListener.yaml new file mode 100644 index 000000000..6d038d7a5 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/config/services/doctrineEventListener.yaml @@ -0,0 +1,12 @@ +services: + Chill\PersonBundle\EventListener\PersonEventListener: + autoconfigure: true + tags: + - + name: 'doctrine.orm.entity_listener' + event: 'onPrePersist' + entity: 'Chill\PersonBundle\Entity\Person' + - + name: 'doctrine.orm.entity_listener' + event: 'onPrePersist' + entity: 'Chill\PersonBundle\Entity\PersonAltName' \ No newline at end of file