222 lines
4.8 KiB
PHP
222 lines
4.8 KiB
PHP
<?php
|
|
|
|
namespace App\Entity;
|
|
|
|
use JsonSerializable;
|
|
use App\Repository\NoteRepository;
|
|
use Doctrine\DBAL\Types\Types;
|
|
use Doctrine\ORM\Mapping as ORM;
|
|
use Symfony\Bridge\Doctrine\Types\UuidType;
|
|
use Symfony\Component\Uid\Uuid;
|
|
|
|
#[ORM\Entity(repositoryClass: NoteRepository::class)]
|
|
class Note implements JsonSerializable
|
|
{
|
|
#[ORM\Id]
|
|
#[ORM\Column(type: UuidType::NAME, unique: true)]
|
|
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
|
|
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
|
|
private ?Uuid $id = null;
|
|
|
|
#[ORM\Column(length: 255)]
|
|
private ?string $title = null;
|
|
|
|
#[ORM\Column(type: Types::DATE_MUTABLE)]
|
|
private ?\DateTimeInterface $date = null;
|
|
|
|
#[ORM\Column(length: 255)]
|
|
private ?string $passage = null;
|
|
|
|
#[ORM\Column(type: Types::JSON, nullable: true)]
|
|
private ?array $refs = null;
|
|
|
|
#[ORM\Column(type: Types::TEXT, nullable: true)]
|
|
private ?string $text = null;
|
|
|
|
#[ORM\ManyToOne(inversedBy: 'notes')]
|
|
private ?Speaker $speaker = null;
|
|
|
|
#[ORM\ManyToOne(inversedBy: 'notes')]
|
|
private ?Series $series = null;
|
|
|
|
#[ORM\ManyToOne(inversedBy: 'notes')]
|
|
private ?User $user = null;
|
|
|
|
#[ORM\Column(length: 255, nullable: true)]
|
|
private ?string $recording = null;
|
|
|
|
public function getId(): ?Uuid
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
public function setId(?Uuid $id): static
|
|
{
|
|
$this->id = $id;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public static function idFromString(string $id): Uuid
|
|
{
|
|
return Uuid::fromString($id);
|
|
}
|
|
|
|
public function getTitle(): ?string
|
|
{
|
|
return $this->title;
|
|
}
|
|
|
|
public function setTitle(string $title): static
|
|
{
|
|
$this->title = $title;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getDate(): ?\DateTimeInterface
|
|
{
|
|
return $this->date;
|
|
}
|
|
|
|
public function setDate(\DateTimeInterface $date): static
|
|
{
|
|
$this->date = $date;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getPassage(): ?string
|
|
{
|
|
return $this->passage;
|
|
}
|
|
|
|
public function setPassage(string $passage): static
|
|
{
|
|
$this->passage = $passage;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getRefs(): ?array
|
|
{
|
|
return $this->refs;
|
|
}
|
|
|
|
public function setRefs(?array $refs): static
|
|
{
|
|
$this->refs = $refs;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function addRef(Reference $ref): static
|
|
{
|
|
$this->refs[] = $ref;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getText(): ?string
|
|
{
|
|
return $this->text;
|
|
}
|
|
|
|
public function setText(?string $text): static
|
|
{
|
|
$this->text = $text;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getSpeaker(): ?Speaker
|
|
{
|
|
return $this->speaker;
|
|
}
|
|
|
|
public function setSpeaker(?Speaker $speaker): static
|
|
{
|
|
$this->speaker = $speaker;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getSeries(): ?Series
|
|
{
|
|
return $this->series;
|
|
}
|
|
|
|
public function setSeries(?Series $series): static
|
|
{
|
|
$this->series = $series;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getUser(): ?User
|
|
{
|
|
return $this->user;
|
|
}
|
|
|
|
public function setUser(?User $user): static
|
|
{
|
|
$this->user = $user;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function toLink(): string
|
|
{
|
|
return "<a href='#' onclick=\"retrieveNote('{$this->id}')\">".
|
|
$this->title.
|
|
"</a> ".
|
|
"<a href='#' onclick=\"deleteNote('{$this->id}', this)\">".
|
|
"<i class='fas fa-trash-alt'></i>".
|
|
"</a>".
|
|
(
|
|
$this->recording ? "<br/>".
|
|
"<a href='{$this->recording}' target='_blank' class='recording-link'>".
|
|
"<i class='fa fa-play-circle'></i>".
|
|
"</a>" : null
|
|
);
|
|
}
|
|
|
|
public function toTableRow(): string
|
|
{
|
|
return "<tr data-id='row-{$this->id->toHex()}'>".
|
|
"<td>{$this->toLink()}</td>".
|
|
"<td>{$this->speaker->getName()}</td>".
|
|
"<td>{$this->passage}</td>".
|
|
"<td>{$this->date->format('M j, Y')}</td>".
|
|
"</tr>";
|
|
}
|
|
|
|
public function jsonSerialize(): array
|
|
{
|
|
return [
|
|
'id' => $this->getId(),
|
|
'link' => $this->toLink(),
|
|
'title' => $this->getTitle(),
|
|
'date' => $this->getDate(),
|
|
'passage' => $this->getPassage(),
|
|
'refs' => $this->getRefs(),
|
|
'text' => $this->getText(),
|
|
'speaker' => $this->getSpeaker(),
|
|
'series' => $this->getSeries(),
|
|
'user' => $this->getUser(),
|
|
];
|
|
}
|
|
|
|
public function getRecording(): ?string
|
|
{
|
|
return $this->recording;
|
|
}
|
|
|
|
public function setRecording(?string $recording): static
|
|
{
|
|
$this->recording = $recording;
|
|
|
|
return $this;
|
|
}
|
|
}
|