<?php
namespace App\Entity;
use App\Entity\ExternalPartner\IntegratedExternalPartnerCustomer;
use App\Entity\Profile\JoboffererProfile;
use App\Entity\Profile\JobseekerProfile;
use App\Utility\GuidUtility;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
*
* @ORM\Table(
* name="profile_blocks",
* uniqueConstraints={
*
* @ORM\UniqueConstraint(name="jobseeker_profiles_id_jobofferer_profiles_id_blocker_unique_idx", columns={"jobseeker_profiles_id", "jobofferer_profiles_id", "blocker"})
* },
* indexes={
*
* @ORM\Index(name="idx_jobseeker_profiles_id", columns={"jobseeker_profiles_id"}),
* @ORM\Index(name="idx_jobofferer_profiles_id", columns={"jobofferer_profiles_id"}),
* @ORM\Index(name="idx_integrated_external_partner_customers_id", columns={"integrated_external_partner_customers_id"})
* }
* )
*
* The unique constraint ensures only one block from a jobseeker to a jobofferer or vice versa.
*/
class ProfileBlock
{
public const BLOCKER_JOBSEEKER = 0;
public const BLOCKER_JOBOFFERER = 1;
/**
* @var string
*
* @ORM\GeneratedValue(strategy="CUSTOM")
*
* @ORM\CustomIdGenerator(class="App\Utility\DatabaseIdGenerator")
*
* @ORM\Column(name="id", type="guid")
*
* @ORM\Id
*/
protected $id;
/**
* @var JobseekerProfile
*
* @ORM\ManyToOne(targetEntity="App\Entity\Profile\JobseekerProfile", inversedBy="profileBlocks", cascade={"persist"})
*
* @ORM\JoinColumn(name="jobseeker_profiles_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
protected $jobseekerProfile;
/**
* @var JoboffererProfile
*
* @ORM\ManyToOne(targetEntity="App\Entity\Profile\JoboffererProfile", inversedBy="profileBlocks", cascade={"persist"})
*
* @ORM\JoinColumn(name="jobofferer_profiles_id", referencedColumnName="id", nullable=true, onDelete="CASCADE")
*/
protected $joboffererProfile;
/**
* @var int
*
* @ORM\Column(name="blocker", type="smallint", nullable=false)
*/
protected $blocker;
/**
* @var DateTime
*
* @ORM\Column(name="created_at", type="datetime", nullable=false)
*/
protected $createdAt;
/**
* @var IntegratedExternalPartnerCustomer
*
* @ORM\ManyToOne(targetEntity="App\Entity\ExternalPartner\IntegratedExternalPartnerCustomer", inversedBy="profileBlocks", cascade={"persist"})
*
* @ORM\JoinColumn(name="integrated_external_partner_customers_id", referencedColumnName="id", nullable=true, onDelete="CASCADE")
*/
protected $integratedExternalPartnerCustomer;
public function isBlocker(Profile $profile)
{
if (($this->blocker === self::BLOCKER_JOBSEEKER
&& $profile instanceof JobseekerProfile
&& $profile->getId() === $this->getJobseekerProfile()->getId())
|| ($this->blocker === self::BLOCKER_JOBOFFERER
&& $profile instanceof JoboffererProfile
&& $profile->getId() === $this->getJoboffererProfile()->getId())
) {
return true;
} else {
return false;
}
}
public function getId()
{
return $this->id;
}
public function setId(string $id)
{
GuidUtility::validOrThrow($id);
$this->id = $id;
}
/**
* @return JobseekerProfile
*/
public function getJobseekerProfile()
{
return $this->jobseekerProfile;
}
public function setJobseekerProfile(JobseekerProfile $jobseekerProfile)
{
$this->jobseekerProfile = $jobseekerProfile;
}
public function getJoboffererProfile(): ?JoboffererProfile
{
return $this->joboffererProfile;
}
public function setJoboffererProfile(?JoboffererProfile $joboffererProfile)
{
$this->joboffererProfile = $joboffererProfile;
}
public function getIntegratedExternalPartnerCustomer(): ?IntegratedExternalPartnerCustomer
{
return $this->integratedExternalPartnerCustomer;
}
public function setIntegratedExternalPartnerCustomer(?IntegratedExternalPartnerCustomer $integratedExternalPartnerCustomer)
{
$this->integratedExternalPartnerCustomer = $integratedExternalPartnerCustomer;
}
/**
* @return int
*/
public function getBlocker()
{
return $this->blocker;
}
public function setBlocker(int $blocker)
{
$this->blocker = $blocker;
}
/**
* @return DateTime
*/
public function getCreatedAt()
{
return $this->createdAt;
}
public function setCreatedAt(DateTime $createdAt)
{
$this->createdAt = $createdAt;
}
public function __toString()
{
return $this->getId();
}
}