<?phpnamespace MedBrief\MSR\Entity;use Doctrine\ORM\Mapping as ORM;use MedBrief\MSR\Repository\VirusScanItemRepository;use MedBrief\MSR\Service\VirusScan\Async\VirusScannableInterface;/** * @ORM\Table(name="VirusScanItem") * * @ORM\Entity(repositoryClass=VirusScanItemRepository::class) */class VirusScanItem{ public const VIRUS_SCAN_STATUS__PENDING = 'pending'; public const VIRUS_SCAN_STATUS__IN_PROGRESS = 'in-progress'; public const VIRUS_SCAN_STATUS__OK = 'no-threat'; public const VIRUS_SCAN_STATUS__MALICIOUS = 'malicious'; /** * @ORM\Column(name="id", type="integer") * * @ORM\Id * * @ORM\GeneratedValue(strategy="IDENTITY") */ private ?int $id = null; /** * @ORM\Column(name="status", type="string", nullable=true) */ private ?string $status = self::VIRUS_SCAN_STATUS__PENDING; /** * @ORM\Column(name="scanDate", type="datetime", nullable=true) */ private ?\DateTimeImmutable $scanDate; /** * @ORM\OneToOne(targetEntity=Document::class, inversedBy="virusScanItem") */ private ?Document $document = null; /** * @ORM\OneToOne(targetEntity=Disc::class, inversedBy="virusScanItem") */ private ?Disc $disc = null; /** * @ORM\Column(name="path", type="string", nullable=true) */ private ?string $path = null; /** * @return int|null */ public function getId(): ?int { return $this->id; } /** * @return string|null */ public function getStatus(): ?string { return $this->status; } /** * @param string $status * * @return self */ public function setStatus(string $status): self { $this->status = $status; return $this; } /** * @return \DateTimeInterface|null */ public function getScanDate(): ?\DateTimeInterface { return $this->scanDate; } /** * @param \DateTimeInterface $scanDate * * @return self */ public function setScanDate(\DateTimeInterface $scanDate): self { $this->scanDate = $scanDate; return $this; } /** * @return Document|null */ public function getDocument(): ?Document { return $this->document; } /** * @param Document|null $document * * @return self */ public function setDocument(?Document $document): self { $this->document = $document; return $this; } /** * @return Disc|null */ public function getDisc(): ?Disc { return $this->disc; } /** * @param Disc|null $disc * * @return self */ public function setDisc(?Disc $disc): self { $this->disc = $disc; return $this; } /** * @param VirusScannableInterface $virusScannable * * @return self */ public function setVirusScannable(VirusScannableInterface $virusScannable): self { $virusScannable->setVirusScanItem($this); return $this; } /** * @return VirusScannableInterface|null */ public function getVirusScannable(): ?VirusScannableInterface { if ($this->getDocument() !== null) { return $this->getDocument(); } return $this->getDisc(); } /** * @return string|null */ public function getPath(): ?string { return $this->path; } /** * @param string|null $path * * @return self */ public function setPath(?string $path): self { $this->path = $path; return $this; } /** * @return bool */ public function isMalicious(): bool { return $this->getStatus() === self::VIRUS_SCAN_STATUS__MALICIOUS; } /** * @return bool */ public function isPending(): bool { return $this->getStatus() === self::VIRUS_SCAN_STATUS__PENDING; }}