<?php
namespace Sq\Entity\Schema\ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* LinkedIn Token.
*/
#[ORM\Entity]
#[ORM\Table(name: 'linkedin_token')]
#[ORM\Index(name: 'lit_token', columns: ['lit_token'])]
#[ORM\Index(name: 'lit_m_id', columns: ['lit_m_id'])]
#[ORM\UniqueConstraint(name: 'lit_user_id__m_id', columns: ['lit_user_id', 'lit_m_id'])]
class LinkedInToken
{
/**
* @var int
*/
#[ORM\Column(name: 'lit_id', type: 'integer', nullable: false, options: ['unsigned' => true])]
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')]
private $id;
/**
* @var Member|null
*/
#[ORM\ManyToOne(targetEntity: Member::class)]
#[ORM\JoinColumn(name: 'lit_m_id', referencedColumnName: 'm_id', nullable: true)]
private $member;
/**
* The SmarterQueue users.
*
* @var Collection|User[]
*/
#[ORM\ManyToMany(targetEntity: User::class, inversedBy: 'linkedInTokens')]
#[ORM\JoinTable(name: 'linkedin_token_users', joinColumns: [new ORM\JoinColumn(name: 'litu_lit_id', referencedColumnName: 'lit_id', onDelete: 'CASCADE')], inverseJoinColumns: [new ORM\JoinColumn(name: 'litu_u_id', referencedColumnName: 'u_id', onDelete: 'CASCADE')])]
private $users;
/**
* @deprecated Kept for Doctrine mapping purposes, use $users collection instead
*
* @var User|null
*/
#[ORM\Column(name: 'lit_sq_u_id', type: 'integer', nullable: true, options: ['unsigned' => true])]
private $user;
/**
* The Linkedin external user ID.
*
* @var string
*/
#[ORM\Column(name: 'lit_user_id', type: 'string', length: 32, nullable: false)]
private $externalUserId;
/**
* @var string
*/
#[ORM\Column(name: 'lit_token', type: 'text', length: 16777215, nullable: false)]
private $token;
/**
* @var string|null
*/
#[ORM\Column(name: 'lit_token_owner_display_name', type: 'string', length: 128, nullable: true)]
private $tokenOwnerDisplayName;
/**
* @var \DateTimeInterface
*/
#[ORM\Column(name: 'lit_token_expiry', type: 'datetime', nullable: true)]
private $tokenExpiry;
/**
* @var \DateTime|null
*/
#[ORM\Column(name: 'lit_token_last_checked', type: 'datetime', nullable: true)]
private $tokenLastChecked;
/**
* @var string|null
*/
#[ORM\Column(name: 'lit_refresh_token', type: 'text', nullable: true)]
private $refreshToken;
/**
* @var \DateTimeInterface|null
*/
#[ORM\Column(name: 'lit_refresh_token_expiry', type: 'datetime', nullable: true)]
private $refreshTokenExpiry;
/**
* @var bool|null
*/
#[ORM\Column(name: 'lit_deleted', type: 'boolean', nullable: true)]
private $deleted = false;
/**
* @var bool|null
*/
#[ORM\Column(name: 'lit_login_enabled', type: 'boolean', nullable: true, options: ['default' => '1'])]
private $loginEnabled = true;
#[ORM\OneToMany(targetEntity: LinkedIn::class, mappedBy: 'token')]
private $linkedInEntities;
public function __construct(
?Member $member,
string $externalUserId,
string $token,
\DateTimeInterface $tokenExpiry,
?string $tokenOwnerDisplayName,
?User $user = null
) {
$this->member = $member;
$this->externalUserId = $externalUserId;
$this->token = $token;
$this->tokenExpiry = $tokenExpiry;
$this->tokenOwnerDisplayName = $tokenOwnerDisplayName;
$this->linkedInEntities = new ArrayCollection();
$this->users = new ArrayCollection();
if ($user !== null)
{
$this->addUser($user);
}
// Forcefully disable login for the Overhaul for security reasons.
$this->loginEnabled = false;
}
public function getId(): ?int
{
return $this->id;
}
public function getMember(): ?Member
{
return $this->member;
}
public function setMember(?Member $member): self
{
$this->member = $member;
return $this;
}
/**
* @return Collection|User[]
*/
public function getUsers(): Collection
{
return $this->users;
}
public function addUser(User $user): self
{
if (!$this->users->contains($user))
{
$this->users->add($user);
}
return $this;
}
public function removeUser(User $user): self
{
$this->users->removeElement($user);
return $this;
}
public function getExternalUserId(): string
{
return $this->externalUserId;
}
public function setExternalUserId(string $userId): self
{
$this->externalUserId = $userId;
return $this;
}
public function getToken(): string
{
return $this->token;
}
public function setToken(string $token): self
{
$this->token = $token;
return $this;
}
public function getTokenOwnerDisplayName(): ?string
{
return $this->tokenOwnerDisplayName;
}
public function setTokenOwnerDisplayName(?string $tokenOwnerDisplayName): self
{
$this->tokenOwnerDisplayName = $tokenOwnerDisplayName;
return $this;
}
public function getTokenExpiry(): \DateTimeInterface
{
return $this->tokenExpiry;
}
public function setTokenExpiry(\DateTimeInterface $tokenExpiry): self
{
$this->tokenExpiry = $tokenExpiry;
return $this;
}
public function getTokenLastChecked(): ?\DateTimeInterface
{
return $this->tokenLastChecked;
}
public function setTokenLastChecked(?\DateTimeInterface $tokenLastChecked): self
{
$this->tokenLastChecked = $tokenLastChecked;
return $this;
}
public function getRefreshToken(): ?string
{
return $this->refreshToken;
}
public function setRefreshToken(?string $refreshToken): self
{
$this->refreshToken = $refreshToken;
return $this;
}
public function getRefreshTokenExpiry(): ?\DateTimeInterface
{
return $this->refreshTokenExpiry;
}
public function setRefreshTokenExpiry(?\DateTimeInterface $refreshTokenExpiry): self
{
$this->refreshTokenExpiry = $refreshTokenExpiry;
return $this;
}
public function isDeleted(): bool
{
return $this->deleted;
}
public function setDeleted(bool $deleted): void
{
$this->deleted = $deleted;
}
public function isLoginEnabled(): bool
{
return $this->loginEnabled;
}
public function setLoginEnabled(bool $loginEnabled): self
{
$this->loginEnabled = $loginEnabled;
return $this;
}
/**
* Get all connected social profiles for this user token.
*
* @param bool $onlyActive
* If it should filter out all deleted profiles.
*
* @return \Doctrine\Common\Collections\Collection<LinkedInSocialProfile>
*/
public function getSocialProfiles(bool $onlyActive = false): Collection
{
return $this->linkedInEntities
->filter(fn (LinkedIn $linkedInEntity): bool => !$onlyActive || !$linkedInEntity->isDeleted())
->map(fn (LinkedIn $linkedInEntity): LinkedInSocialProfile => $linkedInEntity->getSocialProfile());
}
public function addLinkedInEntity(LinkedIn $linkedInEntity): self
{
if (!$this->linkedInEntities->contains($linkedInEntity))
{
$this->linkedInEntities->add($linkedInEntity);
}
return $this;
}
public function removeLinkedInEntity(LinkedIn $linkedInEntity): self
{
$this->linkedInEntities->removeElement($linkedInEntity);
return $this;
}
}