<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use App\Traits\CreatedUpdatedTrait;
use Gedmo\Mapping\Annotation as Gedmo;
use JMS\Serializer\Annotation\Expose;
use JMS\Serializer\Annotation\Exclude;
use JMS\Serializer\Annotation\ExclusionPolicy;
use Doctrine\Common\Collections\ArrayCollection;
use JMS\Serializer\Annotation\VirtualProperty;
/**
* @ORM\Table(name="v_article")
* @ORM\Entity(repositoryClass="App\Repository\ArticleRepository")
* @ORM\HasLifecycleCallbacks()
* @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=true)
*/
class Article
{
const ARTICLE_LINK_TYPE_AUDIO = 'AUDIO';
const ARTICLE_LINK_TYPE_VIDEO = 'VIDEO';
const ARTICLE_LINK_TYPE_GLOBAL = 'GLOBAL';
const ARTICLE_TYPE_IN_APP = 'IN_APP';
const ARTICLE_TYPE_EXTERNAL = 'EXTERNAL';
public static function getArticleLinkTypeDefinitions(){
return [
self::ARTICLE_LINK_TYPE_AUDIO => 'Audio',
self::ARTICLE_LINK_TYPE_VIDEO => 'Video',
self::ARTICLE_LINK_TYPE_GLOBAL => 'Global',
];
}
public static function getArticleTypeDefinitions(){
return [
self::ARTICLE_TYPE_IN_APP => 'In App',
self::ARTICLE_TYPE_EXTERNAL => 'External',
];
}
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string", length=55)
*/
private $title;
/**
* @var string
* @Gedmo\Slug(fields={"title"}, updatable=false)
* @ORM\Column(type="string", length=255)
*/
private $slug;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $image;
/**
* @ORM\Column(name="detail_image", type="string", length=255, nullable=true)
*/
private $detailImage;
/**
*
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $caption;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $content;
/**
* @ORM\Column(type="boolean")
*/
private $enabled = true ;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\ArticleCategory", inversedBy="articles")
* @Exclude
*/
private $category;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $link;
/**
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $linkType;
/**
* @var string
*
* @ORM\Column(name="button_text", type="string", length=28, nullable=true)
*/
private $buttonText;
/**
* @var string
*
* @ORM\Column(name="tracking_code", type="string", length=255, nullable=true)
*/
private $trackingCode;
/**
*
* @ORM\Column(type="string", length=255, nullable=true)
*/
private $articleType;
/**
* @Gedmo\SortablePosition
* @ORM\Column(type="integer")
*/
private $position=0;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $previewText;
/**
* @ORM\Column(type="text", nullable=true)
*/
private $freeText;
/**
* @ORM\Column(name="deleted_at", type="datetime", nullable=true)
*/
private $deletedAt;
/**
* @ORM\Column(name="read_time", type="integer", nullable=true)
*/
private $readTime;
/**
* @ORM\Column(type="string", length=20, nullable=true)
*/
private $language;
public function __construct()
{
$this->setTrackingCode('iom-article-'.date('Ymdhis').'-'.rand(1000,9999));
}
use CreatedUpdatedTrait;
public function __toString()
{
return (string) $this->title;
}
public function getId(): ?int
{
return $this->id;
}
public function getTitle(): ?string
{
return $this->title;
}
public function setTitle(string $title): self
{
$this->title = $title;
return $this;
}
/**
* @return string|null
*/
public function getSlug(): ?string
{
return $this->slug;
}
/**
* @param string|null $slug
* @return Article
*/
public function setSlug(?string $slug): self
{
$this->slug = $slug;
return $this;
}
public function getImage(): ?string
{
return $this->image;
}
public function setImage(?string $image): self
{
$this->image = $image;
return $this;
}
/**
* @return mixed
*/
public function getDetailImage()
{
return $this->detailImage;
}
/**
* @param mixed $detailImage
*/
public function setDetailImage($detailImage): void
{
$this->detailImage = $detailImage;
}
public function getCaption(): ?string
{
return $this->caption;
}
public function setCaption(?string $caption): self
{
$this->caption = $caption;
return $this;
}
public function getContent(): ?string
{
return $this->content;
}
public function setContent(?string $content): self
{
$this->content = $content;
return $this;
}
public function getEnabled(): ?bool
{
return $this->enabled;
}
public function setEnabled(bool $enabled): self
{
$this->enabled = $enabled;
return $this;
}
/**
* @param mixed
*/
public function getCategory(): ?ArticleCategory
{
return $this->category;
}
/**
* @param mixed $category
*/
public function setCategory(?ArticleCategory $category): self
{
$this->category = $category;
return $this;
}
public function getLink(): ?string
{
return $this->link;
}
public function setLink(?string $link): self
{
$this->link = $link;
return $this;
}
public function getLinkType(): ?string
{
return $this->linkType;
}
public function setLinkType(?string $linkType): self
{
$this->linkType = $linkType;
return $this;
}
/**
* @return string
*/
public function getButtonText()
{
return $this->buttonText;
}
/**
* @param string $buttonText
*/
public function setButtonText($buttonText)
{
$this->buttonText = $buttonText;
}
/**
* @return string
*/
public function getTrackingCode()
{
return $this->trackingCode;
}
/**
* @param string $trackingCode
*/
public function setTrackingCode(?string $trackingCode)
{
$this->trackingCode = $trackingCode;
}
public function getArticleType(): ?string
{
return $this->articleType;
}
public function setArticleType(?string $articleType): self
{
$this->articleType = $articleType;
return $this;
}
/**
* @return mixed
*/
public function getPosition()
{
return $this->position;
}
/**
* @param mixed $position
*/
public function setPosition($position): void
{
$this->position = $position;
}
public function getPreviewText(): ?string
{
return $this->previewText;
}
public function setPreviewText(?string $previewText): self
{
$this->previewText = $previewText;
return $this;
}
/**
* @return mixed
*/
public function getFreeText()
{
return $this->freeText;
}
/**
* @param mixed $freeText
*/
public function setFreeText($freeText): void
{
$this->freeText = $freeText;
}
/**
* @return mixed
*/
public function getDeletedAt()
{
return $this->deletedAt;
}
/**
* @param mixed $deletedAt
*/
public function setDeletedAt($deletedAt): void
{
$this->deletedAt = $deletedAt;
$this->updated = $deletedAt;
}
/**
* @return mixed
*/
public function getReadTime()
{
return $this->readTime;
}
/**
* @param mixed $readTime
*/
public function setReadTime($readTime): void
{
$this->readTime = $readTime;
}
/**
* @return mixed
*/
public function getLanguage()
{
return $this->language;
}
/**
* @param mixed $language
*/
public function setLanguage($language): void
{
$this->language = $language;
}
}