feat: manually mark teamer as viewed

This commit is contained in:
Björn Fromme
2024-07-15 14:30:26 +02:00
parent e07238b983
commit dcaf338da8
3 changed files with 26 additions and 11 deletions
@@ -2,8 +2,11 @@
namespace App\Controller\Administrative\Teamer; namespace App\Controller\Administrative\Teamer;
use App\Entity\Teamer;
use App\Htmx\HxRedirectResponse;
use App\Repository\TeamerRepository; use App\Repository\TeamerRepository;
use App\Service\Common\TeamerFilterHandler; use App\Service\Common\TeamerFilterHandler;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface; use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Request;
@@ -16,7 +19,8 @@ class IndexController extends AbstractController
public function __construct( public function __construct(
protected readonly TeamerFilterHandler $filterHandler, protected readonly TeamerFilterHandler $filterHandler,
private readonly TeamerRepository $teamerRepository, private readonly TeamerRepository $teamerRepository,
private readonly PaginatorInterface $paginator private readonly PaginatorInterface $paginator,
private readonly EntityManagerInterface $entityManager
) { ) {
} }
@@ -25,11 +29,10 @@ class IndexController extends AbstractController
public function index(Request $request): Response public function index(Request $request): Response
{ {
$filterDto = $this->filterHandler->getFilterSettings(); $filterDto = $this->filterHandler->getFilterSettings();
$requestedSorting = $request->query->get('sort');
$query = $this $query = $this
->teamerRepository ->teamerRepository
->getListQuery($filterDto, $requestedSorting) ->getListQuery($filterDto)
; ;
$pagination = $this->paginator->paginate( $pagination = $this->paginator->paginate(
@@ -43,4 +46,14 @@ class IndexController extends AbstractController
'filterDto' => $filterDto, 'filterDto' => $filterDto,
]); ]);
} }
#[Route('/administrative/teamer/viewed/{uuid}', name: 'app_administrative_teamer_viewed', methods: ['POST'])]
#[IsGranted('ROLE_ADMINISTRATIVE')]
public function viewed(Teamer $teamer): Response
{
$teamer->setViewed(true);
$this->entityManager->flush();
return new HxRedirectResponse($this->generateUrl('app_administrative_teamer_index'));
}
} }
+3 -8
View File
@@ -27,7 +27,7 @@ class TeamerRepository extends ServiceEntityRepository
parent::__construct($registry, Teamer::class); parent::__construct($registry, Teamer::class);
} }
public function getListQuery(TeamerFilterDto $filterDto, ?string $requestedSorting = null): Query public function getListQuery(TeamerFilterDto $filterDto): Query
{ {
$qb = $this->createQueryBuilder('teamer'); $qb = $this->createQueryBuilder('teamer');
@@ -38,15 +38,10 @@ class TeamerRepository extends ServiceEntityRepository
->leftJoin('teamer.licenses', 'license') ->leftJoin('teamer.licenses', 'license')
->leftJoin('teamer.feedback', 'feedback') ->leftJoin('teamer.feedback', 'feedback')
->leftJoin('teamer.user', 'user') ->leftJoin('teamer.user', 'user')
->addOrderBy('teamer.viewed', 'asc')
->addOrderBy('teamer.lastName', 'asc')
; ;
if (null === $requestedSorting) {
$qb
->orderBy('teamer.viewed', 'asc')
->addOrderBy('teamer.lastName', 'asc')
;
}
if (null !== $filterDto->getName()) { if (null !== $filterDto->getName()) {
$qb $qb
->andWhere($qb->expr()->orX( ->andWhere($qb->expr()->orX(
@@ -94,6 +94,13 @@
</td> </td>
<td> <td>
<div class="flex items-center space-x-1 justify-end"> <div class="flex items-center space-x-1 justify-end">
{% if not teamer.viewed %}
<button type="button"
hx-post="{{ path('app_administrative_teamer_viewed', { 'uuid': teamer.uuid }) }}"
title="Teamer als gesichtet markieren">
{{ icon('check') }}
</button>
{% endif %}
{% if is_granted('CAN_IMPERSONATE', teamer.user) %} {% if is_granted('CAN_IMPERSONATE', teamer.user) %}
<a href="{{ path('app_teamer_index', { '_switch_user': teamer.user.email }) }}" title="Als Teamer:in maskieren"> <a href="{{ path('app_teamer_index', { '_switch_user': teamer.user.email }) }}" title="Als Teamer:in maskieren">
{{ icon('mask') }} {{ icon('mask') }}