<?php
namespace App\Entity\ExternalPartner;
use App\Entity\RecurrentJob;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use InvalidArgumentException;
/**
* @ORM\Entity
*
* @ORM\Table(
* name="external_joboffers",
* uniqueConstraints={
*
* @ORM\UniqueConstraint(name="external_partners_id_external_id_unique_idx", columns={"external_partners_id", "external_id"})
* }
* )
*/
class ExternalJoboffer
{
public const EMPLOYMENT_TYPE_PART_TIME = RecurrentJob::EMPLOYMENT_TYPE_PART_TIME;
public const EMPLOYMENT_TYPE_FULL_TIME = RecurrentJob::EMPLOYMENT_TYPE_FULL_TIME;
public function __construct(
ExternalPartner $externalPartner,
string $externalId,
string $url,
?string $logoUrl,
string $businessName,
string $title,
string $description,
string $zipcode,
string $city,
array $employmentTypes,
?float $cpc,
DateTime $createdAt
) {
$this->externalPartner = $externalPartner;
$this->externalId = mb_substr($externalId, 0, 255);
$this->setUrl($url);
$this->setLogoUrl($logoUrl);
$this->setBusinessName($businessName);
$this->setTitle($title);
$this->setDescription($description);
$this->setZipcode($zipcode);
$this->setCity($city);
$this->setEmploymentTypes($employmentTypes);
$this->setCpc($cpc);
$this->setCreatedAt($createdAt);
}
/**
* @ORM\GeneratedValue(strategy="CUSTOM")
*
* @ORM\CustomIdGenerator(class="App\Utility\DatabaseIdGenerator")
*
* @ORM\Column(name="id", type="guid")
*
* @ORM\Id
*/
private ?string $id = null;
public function getId(): ?string
{
return $this->id;
}
/**
* @ORM\Column(name="external_id", type="text", length=255)
*/
private string $externalId;
public function getExternalId(): string
{
return $this->externalId;
}
/**
* @ORM\ManyToOne(targetEntity="App\Entity\ExternalPartner\ExternalPartner", cascade={"persist"})
*
* @ORM\JoinColumn(name="external_partners_id", referencedColumnName="id", nullable=false, onDelete="CASCADE")
*/
private ExternalPartner $externalPartner;
public function getExternalPartner(): ExternalPartner
{
return $this->externalPartner;
}
public function getExternalPartnerId(): string
{
return $this->externalPartner->getId();
}
/**
* @ORM\Column(name="url", type="text", length=8192, nullable=false)
*/
private string $url;
public function getUrl(): string
{
return $this->url;
}
public function setUrl(string $url): void
{
$this->url = mb_substr($url, 0, 8192);
}
/**
* @ORM\Column(name="logo_url", type="text", length=8192, nullable=true)
*/
private ?string $logoUrl = null;
public function getLogoUrl(): ?string
{
return $this->logoUrl;
}
public function setLogoUrl(?string $url): void
{
if (is_null($url)) {
$this->logoUrl = $url;
} else {
$this->logoUrl = mb_substr($url, 0, 8192);
}
}
/**
* @ORM\Column(name="business_name", type="text", length=8192, nullable=false)
*/
private string $businessName;
public function getBusinessName(): string
{
return mb_ereg_replace('&', '&', $this->businessName);
}
public function setBusinessName(string $businessName): void
{
$this->businessName = mb_substr($businessName, 0, 8192);
}
/**
* @ORM\Column(name="title", type="text", length=8192, nullable=false)
*/
private string $title;
public function getTitle(): string
{
return mb_ereg_replace('&', '&', $this->title);
}
public function setTitle(string $title): void
{
$this->title = mb_substr($title, 0, 8192);
}
/**
* @ORM\Column(name="description", type="text", length=16384, nullable=false)
*/
private string $description;
public function getDescription(): string
{
return mb_ereg_replace('&', '&', $this->description);
}
public function getDescriptionPlainText(): string
{
$description = $this->getDescription();
$description = mb_eregi_replace('<', '<', $description);
$description = mb_eregi_replace('>', '>', $description);
$description = mb_eregi_replace('</', ' </', $description);
$description = strip_tags($description);
return $description;
}
public function setDescription(string $description): void
{
$this->description = mb_substr($description, 0, 16384);
}
/**
* @ORM\Column(name="zipcode", type="text", length=5, nullable=false)
*/
private string $zipcode;
public function getZipcode(): string
{
return $this->zipcode;
}
public function setZipcode(string $zipcode): void
{
$trimmedZipcode = trim($zipcode);
if (mb_strlen($trimmedZipcode) !== 5 || !is_numeric($trimmedZipcode)) {
throw new InvalidArgumentException("zipcode must be a string with 5 digits, but got '$zipcode'");
}
$zipcode = $trimmedZipcode;
$this->zipcode = $zipcode;
}
/**
* @ORM\Column(name="city", type="text", length=255, nullable=false)
*/
private string $city;
public function getCity(): string
{
return $this->city;
}
public function setCity(string $city): void
{
$this->city = mb_substr($city, 0, 255);
}
/**
* @var int[]
*
* @ORM\Column(name="employment_types", type="array", nullable=false)
*/
private array $employmentTypes;
/**
* @param int[] $employmentTypes
*
* @throws InvalidArgumentException
*/
public function setEmploymentTypes(array $employmentTypes)
{
$seen = [];
foreach ($employmentTypes as $employmentType) {
if (!is_int($employmentType) || $employmentType < self::EMPLOYMENT_TYPE_PART_TIME || $employmentType > self::EMPLOYMENT_TYPE_FULL_TIME) {
throw new InvalidArgumentException('Invalid value ' . $employmentType . ' for employmentType.');
}
if (in_array($employmentType, $seen)) {
throw new InvalidArgumentException('Duplicate value ' . $employmentType . ' for employmentType.');
}
$seen[] = $employmentType;
}
$this->employmentTypes = $employmentTypes;
}
/** @return int[] */
public function getEmploymentTypes(): array
{
return $this->employmentTypes;
}
/**
* @ORM\Column(name="cpc", type="float", nullable=true, options={"unsigned": true})
*/
private ?float $cpc;
public function setCpc(?float $cpc): void
{
$this->cpc = $cpc;
}
public function getCpc(): ?float
{
return $this->cpc;
}
/**
* @ORM\Column(name="created_at", type="datetime", nullable=true)
*/
private ?DateTime $createdAt;
public function setCreatedAt(?DateTime $createdAt): void
{
$this->createdAt = $createdAt;
}
public function getCreatedAt(): ?DateTime
{
return $this->createdAt;
}
}