<?php
namespace App\Entity;
use App\Application\Sonata\MediaBundle\Entity\Media;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Gedmo\Timestampable\Traits\TimestampableEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* To use in many templates
* @ORM\Entity(repositoryClass="App\Repository\EventArticleRepository")
* @ORM\HasLifecycleCallbacks()
*/
class EventArticle implements EntityInterface
{
use TimestampableEntity;
use BlameableEntity;
const DRAFT = "DRAFT";
const PUBLISHED = "PUBLISHED";
const BANNER_VISIBILITY_NO = "NO";
const BANNER_VISIBILITY_YES = "YES";
const BANNER_VISIBILITY_YES_BY_EVENT_TYPE = "YES_BY_EVENT_TYPE";
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @var Event
* @ORM\ManyToOne(targetEntity="Event", inversedBy="articles")
* @ORM\JoinColumn(name="event_id", referencedColumnName="id")
*/
private $event;
/**
* @var string
* @ORM\Column(name="title", type="string", length=255)
*/
private $title;
/**
* @var string
* @ORM\Column(name="photo_credit",type="string", length=255, nullable=true)
*/
private $photoCredit;
/**
* @var string
* @Gedmo\Slug(fields={"title"}, updatable=false)
* @ORM\Column(name="url", type="string", length=255, unique=true)
*/
private $url;
/**
* @var string
* @Assert\NotBlank(message="Text cannot be blank",groups={"new"})
* @ORM\Column(name="text", type="text", nullable=false)
*/
private $text;
/**
* @var string
* @ORM\Column(name="category", type="string", length=255, nullable=true)
*/
private $category;
/**
* @var string $status
*
* @ORM\Column(name="status", type="string", length=50, nullable=false)
* @Assert\NotBlank(message="Status cannot be blank",groups={"new"})
* @Assert\Choice(
* choices = {
* EventArticle::DRAFT: "Draft",
* EventArticle::PUBLISHED: "Published"
* },
* message = "Choose a valid status.", groups={"new"}
* )
*/
private $status;
/**
* @var DateTime
*
* @ORM\Column(name="date", type="datetime", nullable=false)
*/
private $date;
/**
* @ORM\ManyToOne(targetEntity="App\Application\Sonata\MediaBundle\Entity\Media", cascade={"persist"}, fetch="LAZY")
*/
private $smallPicture;
/**
* @ORM\ManyToOne(targetEntity="App\Application\Sonata\MediaBundle\Entity\Media", cascade={"persist"}, fetch="LAZY")
*/
private $bigPicture;
/**
* @var boolean
* @ORM\Column(name="send_mail", type="boolean")
*/
private $sendMail = false;
/**
* @var DateTime
*
* @ORM\Column(name="date_email_sent", type="datetime", nullable=true)
*/
private $dateEmailSent;
/**
* @var string $type
*
* @ORM\Column(name="banner_visibility", type="string", length=50, nullable=true)
* @Assert\Choice(
* choices = {
* EventArticle::BANNER_VISIBILITY_NO: "No",
* EventArticle::BANNER_VISIBILITY_YES: "Yes - this event page",
* EventArticle::BANNER_VISIBILITY_YES_BY_EVENT_TYPE: "Yes - all event pages for this event type"
* },
* message = "Choose a visibility.", groups={"new"}
* )
*/
private $bannerVisibility;
/**
* @var DateTime
*
* @ORM\Column(name="banner_start_date", type="datetime", nullable=true)
*/
private $bannerStartDate;
/**
* @var DateTime
*
* @ORM\Column(name="banner_end_date", type="datetime", nullable=true)
*/
private $bannerEndDate;
/**
* @var string
* @Assert\Length(max=280)
* @ORM\Column(name="banner_text", type="string", length=280, nullable=true)
*/
private $bannerText;
/**
* @var string
* @ORM\Column(name="banner_link", type="string", length=500, nullable=true)
*/
private $bannerLink;
/**
* @var string
* @ORM\Column(name="banner_category", type="string", length=255, nullable=true)
*/
private $bannerCategory;
/**
* @return string
*/
public function getPhotoCredit(): ?string
{
return $this->photoCredit;
}
/**
* @param string $photoCredit
*/
public function setPhotoCredit(string $photoCredit = null): void
{
$this->photoCredit = $photoCredit;
}
/**
* @return bool true if article is published and visible
*/
public function isPublishedAndVisible(): bool
{
return $this->getStatus() == EventArticle::PUBLISHED && $this->getDate()->getTimestamp() < time();
}
/**
* @return string
*/
public function getStatus()
{
return $this->status;
}
/**
* @param string $status
*/
public function setStatus(string $status)
{
$this->status = $status;
}
/**
* @return DateTime
*/
public function getDate()
{
return $this->date;
}
/**
* @param DateTime $date
*/
public function setDate(DateTime $date = null)
{
$this->date = $date;
}
/**
* @return int|null
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @param int $id
*/
public function setId(int $id)
{
$this->id = $id;
}
/**
* @return string
*/
public function getTitle()
{
return $this->title;
}
/**
* @param string $title
*/
public function setTitle(string $title)
{
$this->title = $title;
}
/**
* @return string
*/
public function getUrl()
{
return $this->url;
}
/**
* @param string $url
*/
public function setUrl(string $url)
{
$this->url = $url;
}
/**
* @return string
*/
public function getText()
{
return $this->text;
}
/**
* @param string $text
*/
public function setText(string $text)
{
$this->text = $text;
}
/**
* @return string
*/
public function getCategory()
{
return $this->category;
}
/**
* @param string $category
*/
public function setCategory(string $category)
{
$this->category = $category;
}
/**
* Get sendMail
*
* @return boolean
*/
public function getSendMail()
{
return $this->sendMail;
}
/**
* Set sendMail
*
* @param boolean $sendMail
*
* @return EventArticle
*/
public function setSendMail($sendMail)
{
$this->sendMail = $sendMail;
return $this;
}
public function getDateEmailSent()
{
return $this->dateEmailSent;
}
public function setDateEmailSent($dateEmailSent)
{
$this->dateEmailSent = $dateEmailSent;
return $this;
}
/**
* @return Media
*/
public function getSmallPicture(): ?Media
{
return $this->smallPicture;
}
/**
* @param Media $smallPicture
* @return EventArticle
*/
public function setSmallPicture(Media $smallPicture = null)
{
$this->smallPicture = $smallPicture;
return $this;
}
/**
* @return Media
*/
public function getBigPicture(): ?Media
{
return $this->bigPicture;
}
/**
* @param Media $bigPicture
* @return $this
*/
public function setBigPicture(Media $bigPicture = null)
{
$this->bigPicture = $bigPicture;
return $this;
}
public function toString(): string
{
return (string)$this->title;
}
public function __toString()
{
return (string)$this->title;
}
public function uploadSmallPicture()
{
}
public function uploadBigPicture()
{
}
/**
* Get event
*
* @return Event
*/
public function getEvent()
{
return $this->event;
}
/**
* Set event
*
* @param Event $event
*
* @return EventArticle
*/
public function setEvent(Event $event = null)
{
$this->event = $event;
return $this;
}
/**
* @return string|null
*/
public function getBannerVisibility(): ?string
{
return $this->bannerVisibility;
}
/**
* @param string $bannerVisibility
*/
public function setBannerVisibility(string $bannerVisibility)
{
$this->bannerVisibility = $bannerVisibility;
}
/**
* @return DateTime|null
*/
public function getBannerStartDate(): ?DateTime
{
return $this->bannerStartDate;
}
/**
* @param DateTime $bannerStartDate
*/
public function setBannerStartDate(DateTime $bannerStartDate)
{
$this->bannerStartDate = $bannerStartDate;
}
/**
* @return DateTime|null
*/
public function getBannerEndDate(): ?DateTime
{
return $this->bannerEndDate;
}
/**
* @param DateTime $bannerEndDate
*/
public function setBannerEndDate(DateTime $bannerEndDate)
{
$this->bannerEndDate = $bannerEndDate;
}
/**
* @return string|null
*/
public function getBannerText(): ?string
{
return $this->bannerText;
}
/**
* @param string|null $bannerText
*/
public function setBannerText(?string $bannerText)
{
$this->bannerText = $bannerText;
}
/**
* @return string|null
*/
public function getBannerCategory(): ?string
{
return $this->bannerCategory;
}
/**
* @param null|string $bannerCategory
*/
public function setBannerCategory(?string $bannerCategory)
{
$this->bannerCategory = $bannerCategory;
}
/**
* @return string|null
*/
public function getBannerLink(): ?string
{
return $this->bannerLink;
}
/**
* @param string|null $bannerLink
*/
public function setBannerLink(string $bannerLink)
{
$this->bannerLink = $bannerLink;
}
}