<?php
namespace App\Service\Content;
use App\Entity\Category;
use App\Entity\CategoryGroup;
use App\Repository\CategoryRepository;
use App\Response\EntityRemoved;
use App\Service\AbstractService;
use App\Service\Media\FileUploader\CategoryImageUploader;
use Symfony\Component\HttpFoundation\FileBag;
use Symfony\Component\HttpFoundation\ParameterBag;
class CategoryService extends AbstractService
{
/**
* @var CategoryRepository
*/
protected $repo;
/**
* @var CategoryImageUploader
*/
protected $fileUploader;
/**
* CategoryService constructor.
*/
public function __construct(CategoryRepository $repository, CategoryImageUploader $uploader)
{
parent::__construct($repository);
$this->setFileUploader($uploader);
}
public function getFileUploader(): CategoryImageUploader
{
return $this->fileUploader;
}
/**
* @return $this
*/
public function setFileUploader(CategoryImageUploader $fileUploader): self
{
$this->fileUploader = $fileUploader;
return $this;
}
public function createCategoryForGroup(CategoryGroup $group): Category
{
$entity = new Category();
$entity->setGroup($group);
return $entity;
}
public function applyValuesToEntity(ParameterBag $bag, FileBag $files, Category $entity): Category
{
if ($bag->has('group') && $bag->get('group') instanceof CategoryGroup) {
$entity->setGroup($bag->get('group'));
}
if ($bag->has('imageset_slug')) {
$entity->setImagesetSlug($bag->get('imageset_slug'));
}
if ($bag->has('video_slug')) {
$entity->setVideoSlug($bag->get('video_slug'));
}
if ($bag->has('name')) {
$entity->setName($bag->get('name'));
}
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;
}
public function getCategory(int $id): ?Category
{
/**
* @var $entity Category
*/
$entity = $this->getRepository()->find($id);
return $entity;
}
public function findBySlug(string $slug): ?Category
{
$qb = $this->repo->findBySlugQueryBuilder($slug);
$qb->setMaxResults(1);
$result = $qb->getQuery()->getResult();
if (count($result)) {
return $result[0];
}
return null;
}
public function deleteCategory(Category $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());
}
}