mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-06-13 05:44:24 +00:00
88 lines
2.7 KiB
PHP
88 lines
2.7 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
/*
|
|
* Chill is a software for social workers
|
|
*
|
|
* For the full copyright and license information, please view
|
|
* the LICENSE file that was distributed with this source code.
|
|
*/
|
|
|
|
namespace Chill\AsideActivityBundle\Controller;
|
|
|
|
use Chill\AsideActivityBundle\Entity\AsideActivity;
|
|
use Chill\AsideActivityBundle\Repository\AsideActivityCategoryRepository;
|
|
use Chill\MainBundle\CRUD\Controller\CRUDController;
|
|
use Chill\MainBundle\Entity\User;
|
|
use Chill\MainBundle\Pagination\PaginatorInterface;
|
|
use Chill\MainBundle\Templating\Listing\FilterOrderHelper;
|
|
use Symfony\Component\HttpFoundation\Request;
|
|
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
|
|
use Symfony\Component\Security\Core\Security;
|
|
|
|
final class AsideActivityController extends CRUDController
|
|
{
|
|
public function __construct(
|
|
private readonly AsideActivityCategoryRepository $categoryRepository,
|
|
private readonly Security $security,
|
|
) {}
|
|
|
|
public function createEntity(string $action, Request $request): object
|
|
{
|
|
$user = $this->security->getUser();
|
|
|
|
if (!$this->security->isGranted('ROLE_USER') || !$user instanceof User) {
|
|
throw new AccessDeniedHttpException();
|
|
}
|
|
|
|
$asideActivity = new AsideActivity();
|
|
|
|
$asideActivity->setAgent($user);
|
|
$asideActivity->setLocation($user->getCurrentLocation());
|
|
|
|
$duration = $request->query->get('duration', '300');
|
|
$duration = \DateTime::createFromFormat('U', $duration);
|
|
$asideActivity->setDuration($duration);
|
|
|
|
$categoryId = $request->query->get('type', 7);
|
|
|
|
if (null === $categoryId) {
|
|
return $this->createNotFoundException('You must give a valid category id');
|
|
}
|
|
$category = $this->categoryRepository->find($categoryId);
|
|
$asideActivity->setType($category);
|
|
|
|
$note = $request->query->get('note', null);
|
|
$asideActivity->setNote($note);
|
|
|
|
return $asideActivity;
|
|
}
|
|
|
|
protected function buildQueryEntities(string $action, Request $request, ?FilterOrderHelper $filterOrder = null)
|
|
{
|
|
$qb = parent::buildQueryEntities($action, $request);
|
|
|
|
if ('index' === $action) {
|
|
$qb->where($qb->expr()->eq('e.agent', ':user'));
|
|
$qb->orWhere($qb->expr()->eq('e.createdBy', ':user'));
|
|
$qb->setParameter('user', $this->getUser());
|
|
}
|
|
|
|
return $qb;
|
|
}
|
|
|
|
protected function orderQuery(
|
|
string $action,
|
|
$query,
|
|
Request $request,
|
|
PaginatorInterface $paginator,
|
|
) {
|
|
if ('index' === $action) {
|
|
return $query->orderBy('e.date', 'DESC');
|
|
}
|
|
|
|
return parent::orderQuery($action, $query, $request, $paginator);
|
|
}
|
|
}
|