<?php
namespace AdminBundle\Entity;
use DateTime;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\HttpFoundation\File\UploadedFile;
#[ORM\Table(name: 'ticket_message')]
#[ORM\Entity(repositoryClass: \AdminBundle\Repository\TicketsMessageRepository::class)]
#[ORM\HasLifecycleCallbacks]
class TicketMessage extends BaseEntity
{
const FILE_FOLDER = 'upload/ticketsMessages/';
/**
* @var integer
*/
#[ORM\Column(name: 'id', type: 'integer', nullable: false)]
#[ORM\Id]
#[ORM\GeneratedValue(strategy: 'IDENTITY')]
protected $id;
/**
* @var string
*/
#[ORM\Column(name: 'message', type: 'text', nullable: false)]
protected $message;
/**
* @var string
*/
#[ORM\Column(name: 'created_date', type: 'datetime', nullable: true)]
protected $createdDate;
#[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id')]
#[ORM\ManyToOne(targetEntity: \AdminBundle\Entity\User::class)]
protected $user;
#[ORM\JoinColumn(name: 'ticket_id', referencedColumnName: 'id')]
#[ORM\ManyToOne(targetEntity: \AdminBundle\Entity\Ticket::class, inversedBy: 'ticketMessages')]
protected $ticket;
/**
* @var string
*/
#[ORM\Column(name: 'filename', type: 'string', length: 255, nullable: true)]
protected $filename;
private $attachmentFile;
public function __construct()
{
$this->createdDate = new DateTime();
}
/**
* @return int
*/
public function getId(): ?int
{
return $this->id;
}
/**
* @return string
*/
public function getMessage(): ?string
{
return $this->message;
}
/**
* @param string $message
*/
public function setMessage(string $message)
{
$this->message = $message;
return $this;
}
/**
* @return DateTime
*/
public function getCreatedDate()
{
return $this->createdDate;
}
/**
* @param DateTime $createdDate
*/
public function setCreatedDate(DateTime $createdDate)
{
$this->createdDate = $createdDate;
return $this;
}
/**
* @return User
*/
public function getUser()
{
return $this->user;
}
/**
* @param User $user
*/
public function setUser(User $user)
{
$this->user = $user;
return $this;
}
/**
* @return Ticket
*/
public function getTicket()
{
return $this->ticket;
}
/**
* @param Ticket $ticket
*/
public function setTicket(Ticket $ticket = null)
{
$this->ticket = $ticket;
return $this;
}
/**
* @param UploadedFile $attachmentFile
*/
public function setAttachmentFile(UploadedFile $attachmentFile = null)
{
$this->attachmentFile = $attachmentFile;
return $this;
}
/**
* @return UploadedFile
*/
public function getAttachmentFile()
{
return $this->attachmentFile;
}
public function getUploadFilePath()
{
if (!is_dir(self::FILE_FOLDER . $this->id)) {
mkdir(self::FILE_FOLDER . $this->id, 0777, true);
}
return self::FILE_FOLDER . $this->id . '/';
}
public function getAttachmentFilePath()
{
if (!$this->filename) {
return;
}
return $this->getUploadFilePath() . $this->filename;
}
public function uploadFile()
{
$attachmentFile = $this->getAttachmentFile();
if (!$attachmentFile) {
return;
}
$this->removeAttachmentFile();
$nDate = new \DateTime();
$filename = 'TICKET_MESSAGE_FILE_' . $nDate->format('Y-m-d-H:i:s');
$this->filename = $filename . '.' . $attachmentFile->guessExtension();
$attachmentFile->move(
$this->getUploadFilePath(),
$this->filename
);
$this->setAttachmentFile(null);
}
#[ORM\PreUpdate]
#[ORM\PrePersist]
public function lifecycleFileUpload()
{
$this->uploadFile();
}
#[ORM\PostRemove]
public function removeUpload()
{
$this->removeAttachmentFile();
}
#[ORM\PostPersist]
public function onPostPersist()
{
rename(
self::FILE_FOLDER . $this->filename,
$this->getUploadFilePath() . $this->filename
);
}
public function removeAttachmentFile()
{
if ($attachmentFile = $this->getAttachmentFilePath()) {
@unlink($attachmentFile);
}
}
/**
* @return string
*/
public function getFilename()
{
return $this->filename;
}
}