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;
use App\Entity\Teamer;
use App\Htmx\HxRedirectResponse;
use App\Repository\TeamerRepository;
use App\Service\Common\TeamerFilterHandler;
use Doctrine\ORM\EntityManagerInterface;
use Knp\Component\Pager\PaginatorInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
@@ -16,7 +19,8 @@ class IndexController extends AbstractController
public function __construct(
protected readonly TeamerFilterHandler $filterHandler,
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
{
$filterDto = $this->filterHandler->getFilterSettings();
$requestedSorting = $request->query->get('sort');
$query = $this
->teamerRepository
->getListQuery($filterDto, $requestedSorting)
->getListQuery($filterDto)
;
$pagination = $this->paginator->paginate(
@@ -43,4 +46,14 @@ class IndexController extends AbstractController
'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);
}
public function getListQuery(TeamerFilterDto $filterDto, ?string $requestedSorting = null): Query
public function getListQuery(TeamerFilterDto $filterDto): Query
{
$qb = $this->createQueryBuilder('teamer');
@@ -38,15 +38,10 @@ class TeamerRepository extends ServiceEntityRepository
->leftJoin('teamer.licenses', 'license')
->leftJoin('teamer.feedback', 'feedback')
->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()) {
$qb
->andWhere($qb->expr()->orX(
@@ -94,6 +94,13 @@
</td>
<td>
<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) %}
<a href="{{ path('app_teamer_index', { '_switch_user': teamer.user.email }) }}" title="Als Teamer:in maskieren">
{{ icon('mask') }}