From af4cf550467e4496af8945ab23b0c4c1b36968d6 Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Mon, 4 Oct 2021 19:33:12 +0200 Subject: [PATCH 1/7] start of entity listener for person name capitalization --- .../Config/services/eventlisteners.yaml | 8 +++++ .../Controller/PersonController.php | 2 +- .../EventListener/PersonCreateEvent.php | 36 +++++++++++++++++++ 3 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 src/Bundle/ChillPersonBundle/Config/services/eventlisteners.yaml create mode 100644 src/Bundle/ChillPersonBundle/EventListener/PersonCreateEvent.php diff --git a/src/Bundle/ChillPersonBundle/Config/services/eventlisteners.yaml b/src/Bundle/ChillPersonBundle/Config/services/eventlisteners.yaml new file mode 100644 index 000000000..7a555afd8 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/Config/services/eventlisteners.yaml @@ -0,0 +1,8 @@ +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/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/EventListener/PersonCreateEvent.php b/src/Bundle/ChillPersonBundle/EventListener/PersonCreateEvent.php new file mode 100644 index 000000000..26413f332 --- /dev/null +++ b/src/Bundle/ChillPersonBundle/EventListener/PersonCreateEvent.php @@ -0,0 +1,36 @@ +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 From 7d8f38005044b9e0c6c5305ee72f4c9e9c4a3a4a Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Tue, 5 Oct 2021 13:57:04 +0200 Subject: [PATCH 2/7] entity listener added to person to capitalize names --- src/Bundle/ChillPersonBundle/Entity/Person.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/Bundle/ChillPersonBundle/Entity/Person.php b/src/Bundle/ChillPersonBundle/Entity/Person.php index 9aaad8c04..61e6f17ed 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Person.php +++ b/src/Bundle/ChillPersonBundle/Entity/Person.php @@ -1775,4 +1775,18 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI return $this; } + /** + * @ORM\PrePersist + */ + + public function nameToCaps(): void + { + $firstNameCaps = ucfirst(strtolower($this->firstName)); + $this->setFirstName($firstNameCaps); + + $lastNameCaps = strtoupper($this->lastName); + $this->setLastName($lastNameCaps); + + } + } From 0c4ea8155059ce79ebc1ed4807ac1e89ba9a1cc1 Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Wed, 6 Oct 2021 12:16:45 +0200 Subject: [PATCH 3/7] eventListener created and tested for firstname, lastname and altnames --- .../Config/services/eventlisteners.yaml | 8 --- .../ChillPersonExtension.php | 1 + .../ChillPersonBundle/Entity/Person.php | 8 +++ .../EventListener/PersonCreateEvent.php | 36 ---------- .../EventListener/PersonEventListener.php | 46 +++++++++++++ .../EventListener/PersonCreateEventTest.php | 68 +++++++++++++++++++ .../services/doctrineEventListener.yaml | 12 ++++ 7 files changed, 135 insertions(+), 44 deletions(-) delete mode 100644 src/Bundle/ChillPersonBundle/Config/services/eventlisteners.yaml delete mode 100644 src/Bundle/ChillPersonBundle/EventListener/PersonCreateEvent.php create mode 100644 src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php create mode 100644 src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php create mode 100644 src/Bundle/ChillPersonBundle/config/services/doctrineEventListener.yaml 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 From 72d67624a2107a05536ac4243e39df0b737ca406 Mon Sep 17 00:00:00 2001 From: julielenaerts Date: Wed, 6 Oct 2021 12:49:15 +0200 Subject: [PATCH 4/7] minor fixes --- .../ChillPersonBundle/Entity/Person.php | 22 ------------------- .../services/doctrineEventListener.yaml | 4 ++-- 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/Entity/Person.php b/src/Bundle/ChillPersonBundle/Entity/Person.php index e202e9404..9aaad8c04 100644 --- a/src/Bundle/ChillPersonBundle/Entity/Person.php +++ b/src/Bundle/ChillPersonBundle/Entity/Person.php @@ -1775,26 +1775,4 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI return $this; } - /** - * @ORM\PrePersist - */ - - public function nameToCaps(): void - { - $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/config/services/doctrineEventListener.yaml b/src/Bundle/ChillPersonBundle/config/services/doctrineEventListener.yaml index a73545391..6d038d7a5 100644 --- a/src/Bundle/ChillPersonBundle/config/services/doctrineEventListener.yaml +++ b/src/Bundle/ChillPersonBundle/config/services/doctrineEventListener.yaml @@ -4,9 +4,9 @@ services: tags: - name: 'doctrine.orm.entity_listener' - event: 'prePersist' + event: 'onPrePersist' entity: 'Chill\PersonBundle\Entity\Person' - name: 'doctrine.orm.entity_listener' - event: 'prePersist' + event: 'onPrePersist' entity: 'Chill\PersonBundle\Entity\PersonAltName' \ No newline at end of file From 7dd42c3fa273a809a7e46045fc5dd71836edb6ae Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Wed, 6 Oct 2021 15:52:11 +0200 Subject: [PATCH 5/7] accented letters in majascule --- .../EventListener/PersonEventListener.php | 15 ++++++++------- .../Tests/EventListener/PersonCreateEventTest.php | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php b/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php index bd2f6acd0..95dcbc888 100644 --- a/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php +++ b/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php @@ -13,20 +13,21 @@ class PersonEventListener { public function onPrePersist(LifecycleEventArgs $event): void { - $em = $event->getObjectManager(); + // $em = $event->getObjectManager(); if($event->getObject() instanceof Person){ $person = $event->getObject(); - $firstnameCaps = ucwords(strtolower($person->getFirstName()), " \t\r\n\f\v'-"); + $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 = strtoupper($person->getLastName()); + $lastnameCaps = mb_strtoupper($person->getLastName(), 'UTF-8'); $person->setLastName($lastnameCaps); - $em->persist($person); - $em->flush(); + // $em->persist($person); + // $em->flush(); } elseif ($event->getObject() instanceof PersonAltName){ @@ -34,8 +35,8 @@ class PersonEventListener $altnameCaps = ucwords(strtolower($altname->getLabel()), " \t\r\n\f\v'-"); $altname->setLabel($altnameCaps); - $em->persist($altname); - $em->flush(); + // $em->persist($altname); + // $em->flush(); } else { diff --git a/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php b/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php index b4d3fb92c..b8ab4c0fd 100644 --- a/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php +++ b/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php @@ -52,9 +52,9 @@ class PersonCreateEventTest extends TestCase public function generateNames(): iterator { - yield ['julie', 'Julie', 'lenaerts', 'LENAERTS']; + yield ['émelie-marie', 'Émelie-Marie', 'lenaerts', 'LENAERTS']; yield ['jean-marie', 'Jean-Marie', 'lenaerts', 'LENAERTS']; - yield ['vinCENT', 'Vincent', 'van gogh', 'VAN GOGH']; + yield ['vinCENT', 'Vincent', 'fastré', 'FASTRÉ']; yield ['Vincent', 'Vincent', 'van Gogh', 'VAN GOGH']; yield ['André marie', 'André Marie', 'Bah', 'BAH']; } From aa852ec92469009bfa435531a21f654c1d269206 Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Thu, 7 Oct 2021 11:13:38 +0200 Subject: [PATCH 6/7] minor changes review: comments removed, logicexception, more test cases passed --- .../EventListener/PersonEventListener.php | 17 +++++------------ .../EventListener/PersonCreateEventTest.php | 2 ++ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php b/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php index 95dcbc888..68504504f 100644 --- a/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php +++ b/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php @@ -7,14 +7,13 @@ namespace Chill\PersonBundle\EventListener; use Chill\PersonBundle\Entity\Person; use Chill\PersonBundle\Entity\PersonAltName; use Doctrine\Persistence\Event\LifecycleEventArgs; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; +use LogicException; +use Symfony\Component\Validator\Exception\LogicException as ExceptionLogicException; class PersonEventListener { public function onPrePersist(LifecycleEventArgs $event): void { - // $em = $event->getObjectManager(); - if($event->getObject() instanceof Person){ $person = $event->getObject(); @@ -25,22 +24,16 @@ class PersonEventListener $lastnameCaps = mb_strtoupper($person->getLastName(), 'UTF-8'); $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'-"); + $altnameCaps = mb_convert_case(mb_strtolower($altname->getLabel()), MB_CASE_TITLE, 'UTF-8'); + $altnameCaps = ucwords(strtolower($altnameCaps), " \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'); + throw new LogicException('Entity must be a person or an altname'); } } diff --git a/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php b/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php index b8ab4c0fd..00f2e3ea8 100644 --- a/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php +++ b/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php @@ -63,6 +63,8 @@ class PersonCreateEventTest extends TestCase { yield ['vinCENT', 'Vincent']; yield ['jean-marie', 'Jean-Marie']; + yield ['fastré', 'Fastré']; + yield ['émile', 'Émile']; } } \ No newline at end of file From 8fca704f74f350d4e9a6de839488d308e79a8b1f Mon Sep 17 00:00:00 2001 From: Julie Lenaerts Date: Thu, 7 Oct 2021 17:05:09 +0200 Subject: [PATCH 7/7] adjustment so that altnames are fully capitalized --- .../EventListener/PersonEventListener.php | 3 +-- .../Tests/EventListener/PersonCreateEventTest.php | 9 ++++----- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php b/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php index 68504504f..6c9b746d7 100644 --- a/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php +++ b/src/Bundle/ChillPersonBundle/EventListener/PersonEventListener.php @@ -27,8 +27,7 @@ class PersonEventListener } elseif ($event->getObject() instanceof PersonAltName){ $altname = $event->getObject(); - $altnameCaps = mb_convert_case(mb_strtolower($altname->getLabel()), MB_CASE_TITLE, 'UTF-8'); - $altnameCaps = ucwords(strtolower($altnameCaps), " \t\r\n\f\v'-"); + $altnameCaps = mb_strtoupper($altname->getLabel(), 'UTF-8'); $altname->setLabel($altnameCaps); } else { diff --git a/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php b/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php index 00f2e3ea8..c8690a237 100644 --- a/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php +++ b/src/Bundle/ChillPersonBundle/Tests/EventListener/PersonCreateEventTest.php @@ -61,10 +61,9 @@ class PersonCreateEventTest extends TestCase public function generateAltNames(): iterator { - yield ['vinCENT', 'Vincent']; - yield ['jean-marie', 'Jean-Marie']; - yield ['fastré', 'Fastré']; - yield ['émile', 'Émile']; + yield ['vinCENT', 'VINCENT']; + yield ['jean-marie', 'JEAN-MARIE']; + yield ['fastré', 'FASTRÉ']; + yield ['émile', 'ÉMILE']; } - } \ No newline at end of file