<?php
namespace App\Service\Content;
use App\Entity\CategoryGroup;
use App\Repository\CategoryGroupRepository;
use App\Response\EntityRemoved;
use App\Service\AbstractService;
use App\Service\Media\FileUploader\CategoryGroupImageUploader;
use Doctrine\ORM\Tools\Pagination\Paginator;
use Symfony\Component\HttpFoundation\FileBag;
use Symfony\Component\HttpFoundation\ParameterBag;
class CategoryGroupService extends AbstractService
{
protected CategoryGroupImageUploader $fileUploader;
/**
* CategoryGroupService constructor.
*/
public function __construct(CategoryGroupRepository $repository, CategoryGroupImageUploader $uploader)
{
parent::__construct($repository);
$this->setFileUploader($uploader);
}
/**
* @return $this
*/
public function setFileUploader(CategoryGroupImageUploader $uploader): self
{
$this->fileUploader = $uploader;
return $this;
}
public function getFileUploader(): CategoryGroupImageUploader
{
return $this->fileUploader;
}
public function findCategoryGroupBySlug(string $slug): ?CategoryGroup
{
return $this->repo->findOneBy([
'slug' => $slug,
]);
}
public function applyValuesToEntity(ParameterBag $bag, FileBag $files, CategoryGroup $entity): CategoryGroup
{
if ($bag->has('name')) {
$entity->setName($bag->get('name'));
}
if ($bag->has('slug')) {
$entity->setSlug($bag->get('slug'));
}
if ($bag->has('sorting')) {
$entity->setSorting($bag->getInt('sorting'));
}
if ($files->has('image')) {
$uploader = $this->getFileUploader();
$filename = $uploader->upload($files->get('image'));
$entity->setFilename($filename);
}
return $entity;
}
/**
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function storeCategoryGroup(CategoryGroup $entity): CategoryGroup
{
return $this->storeEntity($entity);
}
public function getTree(): Paginator
{
$qb = $this->getRepository()->getTreeQueryBuilder();
return new Paginator($qb->getQuery());
}
public function deleteCategoryGroup(CategoryGroup $entity): EntityRemoved
{
if ($filename = $entity->getFilename()) {
// delete image also
$path = $this->getFileUploader()->getTargetDirectory();
if (file_exists($path.'/'.$filename)) {
unlink($path.'/'.$filename);
}
}
return $this->deleteEntity($entity->getId());
}
}