diff --git a/src/Bundle/ChillPersonBundle/Config/services/eventlisteners.yaml b/src/Bundle/ChillPersonBundle/Config/services/eventlisteners.yaml deleted file mode 100644 index 7a555afd8..000000000 --- a/src/Bundle/ChillPersonBundle/Config/services/eventlisteners.yaml +++ /dev/null @@ -1,8 +0,0 @@ -services: - Chill\PersonBundle\EventListener\: - autowire: true - autoconfigure: true - tags: - - name: "doctrine.orm.entity_listener" - event: "prePersist" - entity: 'Chill\PersonBundle\Entity\Person' 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/Entity/Person.php b/src/Bundle/ChillPersonBundle/Entity/Person.php index 61e6f17ed..e202e9404 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Person.php +++ b/src/Bundle/ChillPersonBundle/Entity/Person.php @@ -1784,6 +1784,14 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI $firstNameCaps = ucfirst(strtolower($this->firstName)); $this->setFirstName($firstNameCaps); + $altNamesCaps = []; + foreach($this->altNames as $altName) + { + $altNamesCaps[] = ucfirst(strtolower($altName)); + } + + $this->setAltNames($altNamesCaps); + $lastNameCaps = strtoupper($this->lastName); $this->setLastName($lastNameCaps); diff --git a/src/Bundle/ChillPersonBundle/EventListener/PersonCreateEvent.php b/src/Bundle/ChillPersonBundle/EventListener/PersonCreateEvent.php deleted file mode 100644 index 26413f332..000000000 --- a/src/Bundle/ChillPersonBundle/EventListener/PersonCreateEvent.php +++ /dev/null @@ -1,36 +0,0 @@ -em = $em; - } - - public function onPrePersist(LifecycleEventArgs $event): void - { - $person = $event->getObject(); - - if ($person instanceof Person){ - $firstnameCaps = ucfirst(strtolower($person->getFirstName())); - $person->setFirstName($firstnameCaps); - - $lastnameCaps = strtoupper($person->getLastName()); - $person->setLastName($lastnameCaps); - - dump($person); - // $this->em->persist($person); - // $this->em->flush(); - } - } -} \ No newline at end of file diff --git a/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php b/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php new file mode 100644 index 000000000..bd2f6acd0 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php @@ -0,0 +1,46 @@ +getObjectManager(); + + if($event->getObject() instanceof Person){ + + $person = $event->getObject(); + $firstnameCaps = ucwords(strtolower($person->getFirstName()), " \t\r\n\f\v'-"); + $person->setFirstName($firstnameCaps); + + $lastnameCaps = strtoupper($person->getLastName()); + $person->setLastName($lastnameCaps); + + + $em->persist($person); + $em->flush(); + + } elseif ($event->getObject() instanceof PersonAltName){ + + $altname = $event->getObject(); + $altnameCaps = ucwords(strtolower($altname->getLabel()), " \t\r\n\f\v'-"); + $altname->setLabel($altnameCaps); + + $em->persist($altname); + $em->flush(); + + } else { + + throw new NotFoundHttpException('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..b4d3fb92c --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php @@ -0,0 +1,68 @@ +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 ['julie', 'Julie', 'lenaerts', 'LENAERTS']; + yield ['jean-marie', 'Jean-Marie', 'lenaerts', 'LENAERTS']; + yield ['vinCENT', 'Vincent', 'van gogh', 'VAN GOGH']; + 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']; + } + +} \ 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..a73545391 --- /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: 'prePersist' + entity: 'Chill\PersonBundle\Entity\Person' + - + name: 'doctrine.orm.entity_listener' + event: 'prePersist' + entity: 'Chill\PersonBundle\Entity\PersonAltName' \ No newline at end of file