<?php
namespace App\Entity;
use App\Business\Context;
use App\Business\ContextableEntity;
use App\Utils\Helper;
use App\Application\Sonata\MediaBundle\Entity\Media;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Timestampable\Traits\TimestampableEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
* To use in many templates
* @ORM\Entity(repositoryClass="App\Repository\AlertRepository")
*/
class Alert implements ContextableEntity
{
use TimestampableEntity;
use BlameableEntity;
const ALERT_EVENT = "event";
const ALERT_GLOBAL = "global";
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @var string $type
*
* @ORM\Column(name="reference_type", type="string", length=50, nullable=false)
* @Assert\NotBlank(message="Type cannot be blank",groups={"new"})
* @Assert\Choice(
* choices = {
* Alert::ALERT_EVENT: "event",
* Alert::ALERT_GLOBAL: "global"
* },
* message = "Choose a valid type.", groups={"new"}
* )
*/
private $referenceType;
/**
* @var string $referenceId
* @ORM\Column(name="reference_id", type="text", length=256, nullable = true)
*/
private $referenceId;
/**
* @var string
* @Assert\NotBlank(message="Text cannot be blank",groups={"new"})
* @Assert\Length(max=280)
* @ORM\Column(name="text", type="string", length=280, nullable=false)
*/
private $text;
/**
* @var string
* @ORM\Column(name="url", type="string", length=255, nullable=true)
*/
private $url;
/**
* @var string
* @ORM\Column(name="twitter_id", type="string", length=50, nullable=true)
*/
private $twitterId;
/**
* @var DateTime
*
* @ORM\Column(name="start_date", type="datetime", nullable=false)
*/
private $startDate;
/**
* @var DateTime
*
* @ORM\Column(name="end_date", type="datetime", nullable=false)
*/
private $endDate;
/**
* @var DateTime
*
* @ORM\Column(name="date_email_sent", type="datetime", nullable=true)
*/
private $dateEmailSent;
/**
* @var DateTime
*
* @ORM\Column(name="date_twitter_done", type="datetime", nullable=true)
*/
private $dateTwitterDone;
/**
* @var boolean
* @ORM\Column(name="show_banner", type="boolean", nullable = true)
*/
private $showBanner = true;
/**
* @var boolean
* @ORM\Column(name="send_mail", type="boolean", nullable = true)
*/
private $sendMail = false;
/**
* @var boolean
* @ORM\Column(name="create_tweet", type="boolean", nullable = true)
*/
private $createTweet = false;
/**
* @ORM\OneToOne(targetEntity="App\Application\Sonata\MediaBundle\Entity\Media", cascade={"persist"})
*/
private $image;
/**
* @return bool
*/
public function isShowBanner(): bool
{
return $this->showBanner === null ? false : $this->showBanner;
}
/**
* @param bool $showBanner
*/
public function setShowBanner(bool $showBanner): void
{
$this->showBanner = $showBanner;
}
/**
* @return string Context::ALERTS
*/
public function getContextId(): string
{
return Context::ALERTS;
}
public function getContextCategoryId(): string
{
return "";
}
public function getContextMainCategoryId(): string
{
return "Alerts";
}
public function getId()
{
return $this->id;
}
public function setId($id)
{
$this->id = $id;
return $this;
}
public function getReferenceId()
{
return $this->referenceId;
}
/**
* @param string $referenceId
* @return Alert
*/
public function setReferenceId(string $referenceId)
{
$this->referenceId = $referenceId;
return $this;
}
/**
* @return string
*/
public function getUrl()
{
return $this->url;
}
/**
* @param string $url
* @return Alert
*/
public function setUrl(string $url)
{
$this->url = $url;
return $this;
}
public function postedOnTwitter(): bool
{
return !empty($this->getTwitterId());
}
/**
* @return string
*/
public function getTwitterId()
{
return $this->twitterId;
}
/**
* @param string $twitterId
* @return Alert
*/
public function setTwitterId(string $twitterId = null)
{
$this->twitterId = $twitterId;
return $this;
}
public function isEvent(): bool
{
return $this->getReferenceType() == Alert::ALERT_EVENT;
}
public function getReferenceType()
{
return $this->referenceType;
}
/**
* @param string $referenceType
* @return Alert
*/
public function setReferenceType(string $referenceType)
{
$this->referenceType = $referenceType;
return $this;
}
public function getText()
{
return $this->text;
}
public function setText($text)
{
$this->text = $text;
return $this;
}
public function getDateEmailSent()
{
return $this->dateEmailSent;
}
public function setDateEmailSent($dateEmailSent)
{
$this->dateEmailSent = $dateEmailSent;
return $this;
}
public function getDateTwitterDone()
{
return $this->dateTwitterDone;
}
public function setDateTwitterDone($dateTwitterDone)
{
$this->dateTwitterDone = $dateTwitterDone;
return $this;
}
public function getStartDate()
{
return $this->startDate;
}
public function setStartDate($startDate)
{
$this->startDate = $startDate;
return $this;
}
public function getEndDate()
{
return $this->endDate;
}
public function setEndDate($endDate)
{
$this->endDate = $endDate;
return $this;
}
public function toString(): string
{
return "{id=" . $this->id . ", text=" . $this->text . ", start_date=" . Helper::toString($this->startDate) .
", end_date=" . Helper::toString($this->endDate) . "}";
}
public function __toString()
{
return $this->text . " [" . Helper::toString($this->startDate) . " - " . Helper::toString($this->endDate) . "]";
}
/**
* Get sendMail
*
* @return boolean
*/
public function getSendMail()
{
return $this->sendMail;
}
/**
* Set sendMail
*
* @param boolean $sendMail
*
* @return Alert
*/
public function setSendMail(bool $sendMail = null)
{
$this->sendMail = $sendMail === null ? false : $sendMail;
return $this;
}
/**
* Get createTweet
*
* @return boolean
*/
public function getCreateTweet()
{
return $this->createTweet;
}
/**
* Set createTweet
*
* @param boolean $createTweet
*
* @return Alert
*/
public function setCreateTweet(bool $createTweet = null)
{
$this->createTweet = $createTweet === null ? false : $createTweet;
return $this;
}
/**
* Get image
*
* @return Media
*/
public function getImage()
{
return $this->image;
}
/**
* Set image
*
* @param Media $image
*
* @return Alert
*/
public function setImage(Media $image = null)
{
$this->image = $image;
return $this;
}
/**
* @return string|null
*/
public function getBannerText(): ?string
{
return $this->text;
}
/**
* @return string|null
*/
public function getBannerLink(): ?string
{
return $this->url;
}
}