add filtering in task list

This commit is contained in:
2021-10-27 13:32:52 +02:00
parent 691c5ffd21
commit f4fb375fd1
4 changed files with 97 additions and 3 deletions

View File

@@ -5,6 +5,8 @@ namespace Chill\TaskBundle\Controller;
use Chill\MainBundle\Entity\Scope;
use Chill\MainBundle\Security\Resolver\CenterResolverDispatcher;
use Chill\MainBundle\Security\Resolver\CenterResolverInterface;
use Chill\MainBundle\Templating\Listing\FilterOrderHelper;
use Chill\MainBundle\Templating\Listing\FilterOrderHelperFactoryInterface;
use Chill\PersonBundle\Privacy\PrivacyEvent;
use Chill\TaskBundle\Repository\SingleTaskAclAwareRepositoryInterface;
use Psr\Log\LoggerInterface;
@@ -54,6 +56,7 @@ final class SingleTaskController extends AbstractController
private TranslatorInterface $translator;
private PaginatorFactory $paginatorFactory;
private SingleTaskAclAwareRepositoryInterface $singleTaskAclAwareRepository;
private FilterOrderHelperFactoryInterface $filterOrderHelperFactory;
public function __construct(
CenterResolverDispatcher $centerResolverDispatcher,
@@ -62,7 +65,8 @@ final class SingleTaskController extends AbstractController
TranslatorInterface $translator,
EventDispatcherInterface $eventDispatcher,
TimelineBuilder $timelineBuilder,
LoggerInterface $logger
LoggerInterface $logger,
FilterOrderHelperFactoryInterface $filterOrderHelperFactory
) {
$this->eventDispatcher = $eventDispatcher;
$this->timelineBuilder = $timelineBuilder;
@@ -71,6 +75,7 @@ final class SingleTaskController extends AbstractController
$this->centerResolverDispatcher = $centerResolverDispatcher;
$this->paginatorFactory = $paginatorFactory;
$this->singleTaskAclAwareRepository = $singleTaskAclAwareRepository;
$this->filterOrderHelperFactory = $filterOrderHelperFactory;
}
private function getEntityContext(Request $request)
@@ -526,19 +531,42 @@ final class SingleTaskController extends AbstractController
{
$this->denyAccessUnlessGranted('ROLE_USER');
$nb = $this->singleTaskAclAwareRepository->countByCurrentUsersTasks();
$filterOrder = $this->buildFilterOrder();
$nb = $this->singleTaskAclAwareRepository->countByCurrentUsersTasks(
$filterOrder->getQueryString(),
$filterOrder->getCheckbox('status')
);
$paginator = $this->paginatorFactory->create($nb);
$tasks = $this->singleTaskAclAwareRepository->findByCurrentUsersTasks(
null, [], $paginator->getCurrentPageFirstItemNumber(),
$filterOrder->getQueryString(),
$filterOrder->getCheckbox('status'),
$paginator->getCurrentPageFirstItemNumber(),
$paginator->getItemsPerPage()
);
return $this->render('@ChillTask/SingleTask/List/index.html.twig', [
'tasks' => $tasks,
'paginator' => $paginator,
'filter_order' => $filterOrder,
]);
}
private function buildFilterOrder(): FilterOrderHelper
{
$statuses = ['no-alert', 'warning', 'alert'];
$statusTrans = [
'Tasks near deadline',
'Tasks over deadline',
'Tasks without alert',
];
return $this->filterOrderHelperFactory
->create(self::class)
->addSearchBox()
->addCheckbox('status', $statuses, $statuses, $statusTrans)
->build()
;
}
/**
*
* Arguments: