<?php declare(strict_types=1);
namespace Sq\Entity\Schema\ORM;
use Doctrine\ORM\Mapping AS ORM;
use Sq\Entity\Enum;
use Sq\Entity\Schema\Column;
#[ORM\Entity]
#[ORM\Table(name: 'workspace_settings')]
class WorkspaceSettings
{
/**
*
* @var int|null
*/
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'AUTO')]
#[ORM\Column(name: 'wss_id', type: 'integer', nullable: false, options: ['unsigned' => true])]
private $id;
/**
*
* @var Workspace
*/
#[ORM\OneToOne(targetEntity: Workspace::class, inversedBy: 'settings', cascade: ['persist'])]
#[ORM\JoinColumn(name: 'wss_ws_id', referencedColumnName: 'ws_id', nullable: false)]
private $workspace;
/**
* @var bool
*/
#[ORM\Column(name: 'wss_evergreen_recycling', type: 'boolean', nullable: false)]
private $evergreenRecycling = false;
/**
* @var string
*/
#[ORM\Column(name: 'wss_minimum_recycle_time', type: 'string', nullable: false)]
private $minimumRecycleTime = Enum\WorkspaceSettings\MinimumRecycleTime::WEEKS_1;
/**
* @var string
*/
#[ORM\Column(name: 'wss_multiple_media_behavior', type: 'string', nullable: false)]
private $multiMediaAttachMode = Column\WorkspaceSettingsMultipleMediaBehavior::MULTI;
/**
* @var string
*/
#[ORM\Column(name: 'wss_queue_position', type: 'string', nullable: false)]
private $queuePosition = Column\WorkspaceSettingsQueuePosition::TOP;
/**
* @var string
*/
#[ORM\Column(name: 'wss_fb_link_preview', type: 'string', nullable: false)]
private $fbLinkPreview = Column\WorkspaceSettingsFbLinkPreview::USE;
/**
* @var string
*/
#[ORM\Column(name: 'wss_yt_privacy', type: 'string', nullable: false)]
private $ytPrivacy = Column\PostYouTubePrivacy::ASK;
/**
* @var string
*/
#[ORM\Column(name: 'wss_import_media_behavior', type: 'string', nullable: false)]
private $importMediaBehavior = Column\WorkspaceSettingsImportMediaBehavior::USE;
/**
* @var bool
*/
#[ORM\Column(name: 'wss_attribution_tw', type: 'boolean', nullable: false)]
private $attributionTwitter = false;
/**
* @var bool
*/
#[ORM\Column(name: 'wss_attribution_ig', type: 'boolean', nullable: false)]
private $attributionInstagram = false;
#[ORM\Embedded(class: WorkspaceLinkSettings::class, columnPrefix: 'wss_ga_')]
private WorkspaceLinkSettings $linkTrackingSettings;
#[ORM\ManyToOne(targetEntity: Bitly::class)]
#[ORM\JoinColumn(name: 'wss_bitly_id', referencedColumnName: 'bit_id', nullable: true)]
private ?Bitly $bitly = null;
#[ORM\Column(name: 'wss_bitly_domain', type: 'string', length: 128, nullable: true)]
private ?string $bitlyDomain = null;
#[ORM\Column(name: 'wss_pause_queues', type: 'boolean', nullable: false)]
private ?bool $pauseQueues = false;
#[ORM\Column(name: 'wss_pause_auto_imports', type: 'boolean', nullable: false)]
private ?bool $pauseAutoImports = false;
public function __construct(Workspace $workspace)
{
$this->workspace = $workspace;
$this->linkTrackingSettings = new WorkspaceLinkSettings;
}
public function getId(): ?int
{
return $this->id;
}
public function getWorkspace(): Workspace
{
return $this->workspace;
}
public function getLinkTrackingSettings(): WorkspaceLinkSettings
{
return $this->linkTrackingSettings;
}
public function isEvergreenRecycling(): bool
{
return $this->evergreenRecycling;
}
public function setEvergreenRecycling(bool $evergreenRecycling): self
{
$this->evergreenRecycling = $evergreenRecycling;
return $this;
}
public function getMinimumRecycleTime(): Enum\WorkspaceSettings\MinimumRecycleTime
{
return new Enum\WorkspaceSettings\MinimumRecycleTime($this->minimumRecycleTime);
}
public function setMinimumRecycleTime(Enum\WorkspaceSettings\MinimumRecycleTime $enum): self
{
$this->minimumRecycleTime = $enum->getValue();
return $this;
}
public function getMultiMediaAttachMode(): Enum\Post\PostMultiMediaAttachMode
{
return match ($this->multiMediaAttachMode)
{
Column\WorkspaceSettingsMultipleMediaBehavior::MULTI => Enum\Post\PostMultiMediaAttachMode::MULTIPLE(),
Column\WorkspaceSettingsMultipleMediaBehavior::VARY => Enum\Post\PostMultiMediaAttachMode::ALTERNATE(),
};
}
public function setMultiMediaAttachmode(Enum\Post\PostMultiMediaAttachMode $enum): self
{
$this->multiMediaAttachMode = match ($enum->getValue())
{
Enum\Post\PostMultiMediaAttachMode::MULTIPLE => Column\WorkspaceSettingsMultipleMediaBehavior::MULTI,
Enum\Post\PostMultiMediaAttachMode::ALTERNATE => Column\WorkspaceSettingsMultipleMediaBehavior::VARY,
};
return $this;
}
public function getDefaultQueuePosition(): Enum\Post\PostQueuePosition
{
return match ($this->queuePosition)
{
Column\WorkspaceSettingsQueuePosition::BOTTOM => Enum\Post\PostQueuePosition::BOTTOM(),
Column\WorkspaceSettingsQueuePosition::TOP => Enum\Post\PostQueuePosition::TOP(),
};
}
public function setDefaultQueuePosition(Enum\Post\PostQueuePosition $enum): self
{
$this->queuePosition = match ($enum->getValue())
{
Enum\Post\PostQueuePosition::BOTTOM => Column\WorkspaceSettingsQueuePosition::BOTTOM,
Enum\Post\PostQueuePosition::TOP => Column\WorkspaceSettingsQueuePosition::TOP,
};
return $this;
}
public function getFbLinkPreview(): Enum\WorkspaceSettings\FbLinkPreview
{
return new Enum\WorkspaceSettings\FbLinkPreview($this->fbLinkPreview);
}
public function setFbLinkPreview(Enum\WorkspaceSettings\FbLinkPreview $enum): self
{
$this->fbLinkPreview = $enum->getValue();
return $this;
}
public function getYtPrivacy(): Enum\Post\WorkspacePostYouTubePrivacy
{
return match ($this->ytPrivacy)
{
Column\PostYouTubePrivacy::ASK => Enum\Post\WorkspacePostYouTubePrivacy::ASK(),
Column\PostYouTubePrivacy::PUBLIC => Enum\Post\WorkspacePostYouTubePrivacy::PUBLIC(),
Column\PostYouTubePrivacy::PRIVATE => Enum\Post\WorkspacePostYouTubePrivacy::PRIVATE(),
Column\PostYouTubePrivacy::UNLISTED => Enum\Post\WorkspacePostYouTubePrivacy::UNLISTED(),
};
}
public function setYtPrivacy(Enum\Post\WorkspacePostYouTubePrivacy $enum): self
{
$this->ytPrivacy = match ($enum->getValue())
{
Enum\Post\WorkspacePostYouTubePrivacy::ASK => Column\PostYouTubePrivacy::ASK,
Enum\Post\WorkspacePostYouTubePrivacy::PUBLIC => Column\PostYouTubePrivacy::PUBLIC,
Enum\Post\WorkspacePostYouTubePrivacy::PRIVATE => Column\PostYouTubePrivacy::PRIVATE,
Enum\Post\WorkspacePostYouTubePrivacy::UNLISTED => Column\PostYouTubePrivacy::UNLISTED,
};
return $this;
}
public function getImportMediaBehavior(): Enum\WorkspaceSettings\ImportMediaBehavior
{
return new Enum\WorkspaceSettings\ImportMediaBehavior($this->importMediaBehavior);
}
public function setImportMediaBehavior(Enum\WorkspaceSettings\ImportMediaBehavior $enum): self
{
$this->importMediaBehavior = $enum->getValue();
return $this;
}
public function isAttributionTwitter(): bool
{
return $this->attributionTwitter;
}
public function setAttributionTwitter(bool $attributionTwitter): self
{
$this->attributionTwitter = $attributionTwitter;
return $this;
}
public function isAttributionInstagram(): bool
{
return $this->attributionInstagram;
}
public function setAttributionInstagram(bool $attributionInstagram): self
{
$this->attributionInstagram = $attributionInstagram;
return $this;
}
public function getBitly(): ?Bitly
{
return $this->bitly;
}
public function setBitly(?Bitly $bitly): self
{
$this->bitly = $bitly;
return $this;
}
public function getBitlyDomain(): ?string
{
return $this->bitlyDomain;
}
public function setBitlyDomain(?string $domain): self
{
$this->bitlyDomain = $domain;
return $this;
}
public function areQueuesPaused(): bool
{
return (bool) $this->pauseQueues;
}
public function pauseQueues(bool $pauseQueues): WorkspaceSettings
{
$this->pauseQueues = $pauseQueues;
return $this;
}
public function areAutoImportsPaused(): bool
{
return (bool) $this->pauseAutoImports;
}
public function pauseAutoImports(bool $pauseAutoImports): WorkspaceSettings
{
$this->pauseAutoImports = $pauseAutoImports;
return $this;
}
}