Fixed registration request orphan

Change-Id: I1c8664d6a175ef4c58145798fe7699466bcbaab7
Signed-off-by: smarcet <smarcet@gmail.com>
This commit is contained in:
smarcet 2020-10-02 11:22:43 -03:00
parent 789d8eede1
commit f59e5ba5dd
4 changed files with 55 additions and 2 deletions

View File

@ -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
*/

View File

@ -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")
@ -124,6 +126,29 @@ class SpeakerRegistrationRequest extends SilverstripeBaseModel
return $this->speaker;
}
/**
* @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
*/
@ -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;
}
}

View File

@ -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()));

View File

@ -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();
}
}