<?php
namespace Sq\Entity\Schema\ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* Bitly.
*/
#[ORM\Entity]
#[ORM\Table(name: 'bitly')]
#[ORM\UniqueConstraint(name: 'bit_login', columns: ['bit_login'])]
class Bitly implements SocialProfileInterface, BelongsToOrganizationInterface
{
public const DEFAULT_BITLY_DOMAINS = ['bit.ly'];
/**
* @var int
*/
#[ORM\Column(name: 'bit_id', type: 'integer', nullable: false, options: ['unsigned' => true])]
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')]
private $id;
#[ORM\ManyToOne(targetEntity: Member::class, inversedBy: 'bitlyAccounts')]
#[ORM\JoinColumn(name: 'bit_m_id', referencedColumnName: 'm_id', nullable: true)]
private ?Member $member = null;
#[ORM\ManyToOne(targetEntity: Workspace::class, inversedBy: 'bitlyAccounts')]
#[ORM\JoinColumn(name: 'bit_ws_id', referencedColumnName: 'ws_id', nullable: true)]
private ?Workspace $workspace = null;
#[ORM\ManyToOne(targetEntity: Organization::class, inversedBy: 'bitlyAccounts')]
#[ORM\JoinColumn(name: 'bit_o_id', referencedColumnName: 'o_id', nullable: true)]
private ?Organization $organization = null;
/**
* @var string|null
*/
#[ORM\Column(name: 'bit_login', type: 'string', length: 30, nullable: true)]
private $login;
/**
* @var string|null
*/
#[ORM\Column(name: 'bit_full_name', type: 'string', length: 255, nullable: true)]
private $fullName;
/**
* @var string|null
*/
#[ORM\Column(name: 'bit_display_name', type: 'string', length: 255, nullable: true)]
private $displayName;
/**
* @var string|null
*/
#[ORM\Column(name: 'bit_access_token', type: 'text', length: 65535, nullable: true)]
private $accessToken;
/**
* @var string|null
*/
#[ORM\Column(name: 'bit_domain_options', type: 'string', length: 255, nullable: true)]
private $domainOptions;
/**
* @var string|null
*/
#[ORM\Column(name: 'bit_custom_short_domain', type: 'string', length: 255, nullable: true)]
private $customShortDomain;
/**
* @var bool|null
*/
#[ORM\Column(name: 'bit_error', type: 'boolean', nullable: true)]
private $error = false;
/**
* @var \DateTime|null
*/
#[ORM\Column(name: 'bit_connected', type: 'datetime', nullable: true, options: ['default' => '1970-01-01 00:00:00'])]
private $connected;
/**
* @var Collection
*/
#[ORM\OneToMany(targetEntity: CustomBitly::class, mappedBy: 'bitly', cascade: ['remove'], orphanRemoval: true)]
private $customBitlyAccounts;
public function __construct(?Member $member, ?Organization $organization = null)
{
$this->member = $member;
$this->organization = $organization;
$this->connected = new \DateTimeImmutable;
$this->customBitlyAccounts = new ArrayCollection;
}
public function getId(): ?int
{
return $this->id;
}
public function getMember(): ?Member
{
return $this->member;
}
public function getOrganization(): Organization
{
return $this->organization;
}
public function setOrganization(Organization $organization): self
{
$this->organization = $organization;
return $this;
}
public function isLegacyWithoutOrganization(): bool
{
return $this->organization === null;
}
public function getLogin(): ?string
{
return $this->login;
}
public function setLogin(?string $login): self
{
$this->login = $login;
return $this;
}
public function getFullName(): ?string
{
return $this->fullName;
}
public function setFullName(?string $fullName): self
{
$this->fullName = $fullName;
return $this;
}
public function getDisplayName(): string
{
return $this->displayName ?? '';
}
public function setDisplayName(?string $displayName): self
{
$this->displayName = $displayName;
return $this;
}
public function getAccessToken(): ?string
{
return $this->accessToken;
}
public function setAccessToken(?string $accessToken): self
{
$this->accessToken = $accessToken;
return $this;
}
public function getDomainOptions(): ?string
{
return $this->domainOptions;
}
public function setDomainOptions(?string $domainOptions): self
{
$this->domainOptions = $domainOptions;
return $this;
}
public function getDomainsArray(): array
{
$domains = json_decode($this->getDomainOptions() ?? 'null', true);
return is_array($domains)
? array_filter($domains, fn ($domain): bool => is_string($domain) && !empty($domain))
: static::DEFAULT_BITLY_DOMAINS;
}
public function setDomainsArray(array $domains): self
{
$domains = array_filter($domains, fn ($domain): bool => is_string($domain) && !empty($domain));
$this->setDomainOptions(json_encode($domains));
return $this;
}
public function getCustomShortDomain(): ?string
{
return $this->customShortDomain;
}
public function setCustomShortDomain(?string $customShortDomain): self
{
$this->customShortDomain = $customShortDomain;
return $this;
}
public function hasError(): bool
{
return (bool) $this->error;
}
public function setError(bool $error): self
{
$this->error = $error;
return $this;
}
public function getConnected(): ?\DateTimeInterface
{
return $this->connected;
}
public function setConnected(?\DateTimeInterface $connected): self
{
$this->connected = $connected;
return $this;
}
public function getCustomBitlyAccounts(): Collection
{
return $this->customBitlyAccounts;
}
public function isDeleted(): bool
{
// Bitly accounts don't get marked as deleted, they just get deleted.
return false;
}
public function setDeleted(bool $deleted): SocialProfileInterface
{
// Bitly accounts don't get marked as deleted, they just get deleted.
return $this;
}
public function getPhotoUrl(): string
{
// Bitly doesn't have profile photos.
return '';
}
public function setPhotoUrl(string $photoUrl): SocialProfileInterface
{
// Bitly doesn't have profile photos.
return $this;
}
public function isMediaLinkPreviewFallbackSupported(): bool
{
return false;
}
}