entityManager = $entityManager; $this->hydrator = $hydrator; } /** * @return Awardee[]|null */ public function getAwardees(): ?array { return $this->entityManager->getRepository(Awardee::class)->findBy([], [ 'year' => 'DESC', ]); } /** * @param int $year * @return Awardee[] */ public function getAwardeesByYear(int $year): ?array { return $this->entityManager->getRepository(Awardee::class)->findBy([ 'year' => $year, ]); } /** * @param int $id * @return Awardee|null */ public function getAwardee(int $id): ?Awardee { /** @var Awardee $awardee */ $awardee = $this->entityManager->getRepository(Awardee::class)->find($id); return $awardee; } /** * @param string $slug * @return Awardee|null */ public function getAwardeeFromSlug(string $slug): ?Awardee { /** @var Awardee $awardee */ $awardee = $this->entityManager->getRepository(Awardee::class)->findOneBy([ 'slug' => $slug, ]); return $awardee; } /** * @param $data * @return Awardee * @throws \Doctrine\ORM\ORMException * @throws \Doctrine\ORM\OptimisticLockException */ public function create($data): Awardee { unset($data['slug']); /** @var Awardee $awardee */ $awardee = $this->hydrator->hydrate($data, new Awardee()); $this->entityManager->persist($awardee); $this->entityManager->flush(); return $awardee; } /** * @param int $id * @param $data * @return Awardee * @throws \Doctrine\ORM\ORMException * @throws \Doctrine\ORM\OptimisticLockException */ public function update(int $id, $data): Awardee { unset($data['slug']); $awardee = $this->entityManager->getRepository(Awardee::class)->find($id); /** @var Awardee $awardee */ $awardee = $this->hydrator->hydrate($data, $awardee); $this->entityManager->persist($awardee); $this->entityManager->flush(); return $awardee; } /** * @param int $id * @return bool * @throws \Doctrine\ORM\ORMException * @throws \Doctrine\ORM\OptimisticLockException */ public function delete(int $id): bool { if (null !== ($entity = $this->getAwardee($id))) { $this->entityManager->remove($entity); $this->entityManager->flush(); return true; } return false; } /** * @param string $slug * @param string $type * @return string */ public function getProfileImage(string $slug, string $type): string { /** @var Awardee $entity */ $entity = $this->entityManager->getRepository(Awardee::class)->findOneBy([ 'slug' => $slug, ]); $fileName = $this->getImageFileName($entity->getId(), $type); if (file_exists($fileName)) { return file_get_contents($fileName); } throw new \InvalidArgumentException("$fileName not found"); } /** * @param string $slug * @param string $imageData * @param string $type * @return bool */ public function setProfileImage(string $slug, string $imageData, string $type): bool { /** @var Awardee $entity */ $entity = $this->entityManager->getRepository(Awardee::class)->findOneBy([ 'slug' => $slug, ]); $this->ensureImageDirectoryExists(); $fileName = $this->getImageFileName($entity->getId(), $type); return false !== file_put_contents($fileName, $imageData); } /** * @param string $slug * @param string $type * @return bool */ public function deleteProfileImage(string $slug, string $type): bool { /** @var Awardee $entity */ $entity = $this->entityManager->getRepository(Awardee::class)->findOneBy([ 'slug' => $slug, ]); $fileName = $this->getImageFileName($entity->getId(), $type); if (file_exists($fileName)) { return unlink($fileName); } throw new \InvalidArgumentException(); } public function ensureImageDirectoryExists() { if (!is_dir(self::IMAGE_DIRECTORY)) { mkdir(self::IMAGE_DIRECTORY, 0755, true); } } private function getImageFileName(int $id, string $type): string { return sprintf('%s/%s-%s.jpg', self::IMAGE_DIRECTORY, $id, $type); } }