mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-07 18:44:08 +00:00
eventListener created and tested for firstname, lastname and altnames
This commit is contained in:
parent
7d8f380050
commit
0c4ea81550
@ -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'
|
|
@ -84,6 +84,7 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
|
|||||||
$loader->load('services/repository.yaml');
|
$loader->load('services/repository.yaml');
|
||||||
$loader->load('services/serializer.yaml');
|
$loader->load('services/serializer.yaml');
|
||||||
$loader->load('services/security.yaml');
|
$loader->load('services/security.yaml');
|
||||||
|
$loader->load('services/doctrineEventListener.yaml');
|
||||||
|
|
||||||
// load service advanced search only if configure
|
// load service advanced search only if configure
|
||||||
if ($config['search']['search_by_phone'] != 'never') {
|
if ($config['search']['search_by_phone'] != 'never') {
|
||||||
|
@ -1784,6 +1784,14 @@ class Person implements HasCenterInterface, TrackCreationInterface, TrackUpdateI
|
|||||||
$firstNameCaps = ucfirst(strtolower($this->firstName));
|
$firstNameCaps = ucfirst(strtolower($this->firstName));
|
||||||
$this->setFirstName($firstNameCaps);
|
$this->setFirstName($firstNameCaps);
|
||||||
|
|
||||||
|
$altNamesCaps = [];
|
||||||
|
foreach($this->altNames as $altName)
|
||||||
|
{
|
||||||
|
$altNamesCaps[] = ucfirst(strtolower($altName));
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->setAltNames($altNamesCaps);
|
||||||
|
|
||||||
$lastNameCaps = strtoupper($this->lastName);
|
$lastNameCaps = strtoupper($this->lastName);
|
||||||
$this->setLastName($lastNameCaps);
|
$this->setLastName($lastNameCaps);
|
||||||
|
|
||||||
|
@ -1,36 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace Chill\PersonBundle\EventListener;
|
|
||||||
|
|
||||||
use Chill\PersonBundle\Entity\Person;
|
|
||||||
use Doctrine\ORM\EntityManager;
|
|
||||||
use Doctrine\Persistence\Event\LifecycleEventArgs;
|
|
||||||
|
|
||||||
class PersonCreateEvent
|
|
||||||
{
|
|
||||||
public EntityManager $em;
|
|
||||||
|
|
||||||
public function __construct(EntityManager $em)
|
|
||||||
{
|
|
||||||
$this->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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
class PersonEventListener
|
||||||
|
{
|
||||||
|
public function onPrePersist(LifecycleEventArgs $event): void
|
||||||
|
{
|
||||||
|
$em = $event->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');
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
|
use Chill\PersonBundle\EventListener\PersonEventListener;
|
||||||
|
use Chill\PersonBundle\Entity\Person;
|
||||||
|
use Chill\PersonBundle\Entity\PersonAltName;
|
||||||
|
use Doctrine\Persistence\Event\LifecycleEventArgs;
|
||||||
|
|
||||||
|
class PersonCreateEventTest extends TestCase
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @dataProvider generateNames
|
||||||
|
*/
|
||||||
|
public function testOnPrePersist($firstname, $firstnameExpected, $lastname, $lastnameExpected)
|
||||||
|
{
|
||||||
|
$listener = new PersonEventListener();
|
||||||
|
|
||||||
|
$person = new Person();
|
||||||
|
|
||||||
|
$person->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'];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -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'
|
Loading…
x
Reference in New Issue
Block a user