commit f59e5ba5dd0fbec890e093bdfbb8a38f4bc43a95 Author: smarcet Date: Fri Oct 2 11:22:43 2020 -0300 Fixed registration request orphan Change-Id: I1c8664d6a175ef4c58145798fe7699466bcbaab7 Signed-off-by: smarcet diff --git a/app/Models/Foundation/Summit/Speakers/PresentationSpeaker.php b/app/Models/Foundation/Summit/Speakers/PresentationSpeaker.php index 4780d92..f489960 100644 --- a/app/Models/Foundation/Summit/Speakers/PresentationSpeaker.php +++ b/app/Models/Foundation/Summit/Speakers/PresentationSpeaker.php @@ -128,7 +128,7 @@ class PresentationSpeaker extends SilverstripeBaseModel private $phone_number; /** - * @ORM\ManyToOne(targetEntity="SpeakerRegistrationRequest", cascade={"persist"}), orphanRemoval=true + * @ORM\ManyToOne(targetEntity="SpeakerRegistrationRequest", cascade={"persist","remove"}), orphanRemoval=true * @ORM\JoinColumn(name="RegistrationRequestID", referencedColumnName="ID") * @var SpeakerRegistrationRequest */ diff --git a/app/Models/Foundation/Summit/Speakers/SpeakerRegistrationRequest.php b/app/Models/Foundation/Summit/Speakers/SpeakerRegistrationRequest.php index c09ad9c..9f2b7b9 100644 --- a/app/Models/Foundation/Summit/Speakers/SpeakerRegistrationRequest.php +++ b/app/Models/Foundation/Summit/Speakers/SpeakerRegistrationRequest.php @@ -16,6 +16,8 @@ use models\utils\RandomGenerator; use models\utils\SilverstripeBaseModel; use Doctrine\ORM\Mapping AS ORM; use Doctrine\Common\Collections\ArrayCollection; +use phpDocumentor\Reflection\Types\Parent_; + /** * Class SpeakerRegistrationRequest * @ORM\Entity(repositoryClass="App\Repositories\Summit\DoctrineSpeakerRegistrationRequestRepository") @@ -125,6 +127,29 @@ class SpeakerRegistrationRequest extends SilverstripeBaseModel } /** + * @return int + */ + public function getSpeakerId(){ + try { + return is_null($this->speaker) ? 0 : $this->speaker->getId(); + } + catch(\Exception $ex){ + return 0; + } + } + + /** + * @return bool + */ + public function hasSpeaker():bool{ + return $this->getSpeakerId() > 0; + } + + public function clearSpeaker(){ + $this->speaker = null; + } + + /** * @param PresentationSpeaker $speaker */ public function setSpeaker($speaker) @@ -184,4 +209,10 @@ class SpeakerRegistrationRequest extends SilverstripeBaseModel $this->confirmation_date = new \DateTime('now', new \DateTimeZone('UTC')); $this->is_confirmed = true; } + + public function __construct() + { + parent::__construct(); + $this->is_confirmed = false; + } } \ No newline at end of file diff --git a/app/Services/Model/Imp/MemberService.php b/app/Services/Model/Imp/MemberService.php index 71a0c1a..038e86e 100644 --- a/app/Services/Model/Imp/MemberService.php +++ b/app/Services/Model/Imp/MemberService.php @@ -331,7 +331,7 @@ final class MemberService // check speaker registration request by email and no member set Log::debug(sprintf("MemberService::registerExternalUserById trying to get former registration request by email %s", $email)); $request = $this->speaker_registration_request_repository->getByEmail($email); - if(!is_null($request)){ + if(!is_null($request) && $request->hasSpeaker()){ Log::debug(sprintf("MemberService::registerExternalUserById got former registration request by email %s", $email)); $speaker = $request->getSpeaker(); if(!is_null($speaker)) @@ -340,6 +340,7 @@ final class MemberService $speaker->setMember($member); } } + if($is_new) Event::fire(new NewMember($member->getId())); diff --git a/tests/DoctrineTest.php b/tests/DoctrineTest.php index 83efee2..e9f1ee0 100644 --- a/tests/DoctrineTest.php +++ b/tests/DoctrineTest.php @@ -216,4 +216,25 @@ final class DoctrineTest extends TestCase $con2->rollBack(); } + + public function testRegistrationSpeaker(){ + $speaker_repo = EntityManager::getRepository(\models\summit\PresentationSpeaker::class); + $speaker = new \models\summit\PresentationSpeaker(); + $registration_request = new \models\summit\SpeakerRegistrationRequest(); + $speaker->setTitle("test title"); + $speaker->setBio("this is the bio"); + $speaker->setFirstName("this is the name"); + $speaker->setLastName("this is the last name"); + $registration_request->setEmail("test2@test.com"); + + $speaker->setRegistrationRequest($registration_request); + + $em = Registry::getManager(SilverstripeBaseModel::EntityManager); + $em->persist($speaker); + $em->flush(); + + $speaker_repo->delete($speaker); + + $em->flush(); + } } \ No newline at end of file