<?php
namespace App\Entity\Content;
use App\Entity\Content\Common\DiscriminatorInterface;
use App\Entity\Content\Common\DiscriminatorTrait;
use App\Entity\Content\Common\Props\HeadlineTrait;
use App\Entity\Content\Common\Props\TimestampTrait;
use App\Entity\Shared\UlidIdentifiableInterface;
use App\Entity\Shared\UlidIdentifiableTrait;
use App\Model\Content\ContentInterface;
use App\Model\Content\DraftInterface;
use App\Model\Content\RevisionInterface;
use Cms\CoreBundle\Model\Interfaces\Blameable;
use Cms\CoreBundle\Model\Interfaces\Timestampable;
use Cms\TenantBundle\Model as Tenantable;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(
* repositoryClass = "App\Doctrine\Repository\Content\RevisionRepository",
* )
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(
* name = DiscriminatorInterface::COLUMN__NAME,
* type = DiscriminatorInterface::COLUMN__TYPE,
* length = 64,
* )
* @ORM\DiscriminatorMap(AbstractRevision::DISCRS)
* @ORM\Table(
* name = "sn__content__revision",
* indexes = {
* @ORM\Index(
* name = "idx__discr",
* columns = {
* "discr",
* },
* ),
* },
* )
*/
abstract class AbstractRevision
implements
Tenantable\TenantableInterface,
UlidIdentifiableInterface,
Timestampable\TimestampableInterface,
Blameable\BlameableInterface,
DiscriminatorInterface,
RevisionInterface
{
const DISCR = null;
const DISCRS = [
Alerts\Alert\AlertRevision::DISCR => Alerts\Alert\AlertRevision::class,
Events\Event\EventRevision::DISCR => Events\Event\EventRevision::class,
Exhibits\Gallery\GalleryRevision::DISCR => Exhibits\Gallery\GalleryRevision::class,
Exhibits\Video\VideoRevision::DISCR => Exhibits\Video\VideoRevision::class,
Posts\Post\PostRevision::DISCR => Posts\Post\PostRevision::class,
];
use Tenantable\TenantableTrait;
use UlidIdentifiableTrait;
use Timestampable\TimestampableTrait;
use Blameable\BlameableTrait;
use DiscriminatorTrait;
use HeadlineTrait;
use TimestampTrait;
/**
* @var AbstractDraft|null
*/
protected ?AbstractDraft $draft = null;
/**
* @param ContentInterface|null $content
*/
public function __construct(?ContentInterface $content = null)
{
if ($content) {
$this->copy($content);
}
}
/**
* {@inheritDoc}
* @return AbstractDraft
*/
public function getDraft(): ?DraftInterface
{
return $this->draft;
}
/**
* @param DraftInterface|null $draft
* @return $this
*/
public function setDraft(?DraftInterface $draft): self
{
$this->draft = $draft;
return $this;
}
}