Skip to content

Commit 71c3c80

Browse files
committed
feat(pagination): add pagination to list controllers
fix merge conflicts composer update to fix composer synchro between lock and json fix(ci): remove --configuration for phpstan as it is deprecated
1 parent 1a23e70 commit 71c3c80

27 files changed

Lines changed: 1077 additions & 1617 deletions

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ jobs:
102102
if: always()
103103

104104
- name: Run PHPStan
105-
run: vendor/bin/phpstan analyse --configuration phpstan.neon --level max --no-progress . --error-format=checkstyle | cs2pr
105+
run: vendor/bin/phpstan analyse --level max --no-progress . --error-format=checkstyle | cs2pr
106106
if: always()
107107

108108
- name: Bootstrap database

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
"beberlei/assert": "^3.2",
1212
"doctrine/annotations": "^1.8",
1313
"doctrine/doctrine-fixtures-bundle": "^3.3",
14+
"knplabs/knp-paginator-bundle": "^5.2",
1415
"friendsofsymfony/jsrouting-bundle": "^2.5",
1516
"martin-georgiev/postgresql-for-doctrine": "^1.3",
1617
"odolbeau/phone-number-bundle": "^3.0",

composer.lock

Lines changed: 889 additions & 1583 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/bundles.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
Fidry\AliceDataFixtures\Bridge\Symfony\FidryAliceDataFixturesBundle::class => ['dev' => true, 'test' => true, 'panther' => true],
2222
Hautelook\AliceBundle\HautelookAliceBundle::class => ['dev' => true, 'test' => true, 'panther' => true],
2323
Misd\PhoneNumberBundle\MisdPhoneNumberBundle::class => ['all' => true],
24+
Knp\Bundle\PaginatorBundle\KnpPaginatorBundle::class => ['all' => true],
2425
Symfony\Bundle\DebugBundle\DebugBundle::class => ['dev' => true, 'test' => true],
2526
FOS\JsRoutingBundle\FOSJsRoutingBundle::class => ['all' => true],
2627
];

config/packages/knp_paginator.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
knp_paginator:
2+
template:
3+
pagination: '@KnpPaginator/Pagination/twitter_bootstrap_v4_pagination.html.twig'

config/parameters.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Put parameters here that don't need to change on each machine where the app is deployed
22
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
33
parameters:
4+
app.pagination_default_limit: 30
45
app.most_important_skills_limit: 6 # used for separing data in the planning
56
app.most_important_skills_to_display: [ch_vpsp, ch_vl] # used for displaying a badge near the user name
67
app.slot_interval: '%env(APP_SLOT_INTERVAL)%'

config/services.yaml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,64 @@
11
# This file is the entry point to configure your own services.
22
# Files in the packages/ subdirectory configure your dependencies.
3+
# Put parameters here that don't need to change on each machine where the app is deployed
4+
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
5+
parameters:
6+
app.pagination_default_limit: 30
7+
app.most_important_skills_limit: 6 # used for separing data in the planning
8+
app.most_important_skills_to_display: [ch_vpsp, ch_vl] # used for displaying a badge near the user name
9+
app.slot_interval: '%env(APP_SLOT_INTERVAL)%'
10+
app.available_skills:
11+
# Caution: the order matters for the planning display
12+
ci_bspp:
13+
label: CI Réseau BSPP
14+
includes: [ci_samu]
15+
ci_samu:
16+
label: CI Réseau Samu
17+
includes: [ci]
18+
ch_vpsp:
19+
label: Chauffeur VPSP
20+
includes: [pse2, ch_vl]
21+
ci:
22+
label: CI
23+
includes: [pse2]
24+
pse2:
25+
label: PSE2
26+
includes: [pse1]
27+
pse1:
28+
label: PSE1
29+
includes: [psc1]
30+
ch_vl:
31+
label: Chauffeur VL
32+
includes: [benevole]
33+
infirmier:
34+
label: Infirmier.e local.e
35+
includes: [benevole]
36+
ce_maraude:
37+
label: Chef.fe d'équipe maraudes
38+
includes: [solidar]
39+
solidar:
40+
label: Solidar
41+
includes: [maraudeur]
42+
maraudeur:
43+
label: Maraudeur.se
44+
includes: [benevole]
45+
tsa_coreg:
46+
label: TSA / Coreg
47+
includes: [pse2]
48+
logisticien:
49+
label: Logisticien.ne Croix-Rouge
50+
includes: [benevole]
51+
resp_perm_soc:
52+
label: Responsable Permanence Sociale
53+
includes: [benevole]
54+
anim_fle:
55+
label: Animateur.rice de cours de FLE
56+
includes: [benevole]
57+
psc1:
58+
label: PSC1
59+
includes: [benevole]
60+
benevole:
61+
label: Bénévole
362

463
services:
564
# default configuration for services in *this* file

src/Controller/Organization/AssetType/AssetTypeListController.php

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@
66

77
use App\Entity\Organization;
88
use App\Repository\AssetTypeRepository;
9+
use Knp\Component\Pager\PaginatorInterface;
910
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
1011
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
12+
use Symfony\Component\HttpFoundation\Request;
1113
use Symfony\Component\HttpFoundation\Response;
1214
use Symfony\Component\Routing\Annotation\Route;
1315

@@ -18,19 +20,26 @@
1820
class AssetTypeListController extends AbstractController
1921
{
2022
private AssetTypeRepository $assetTypeRepository;
23+
private PaginatorInterface $paginator;
2124

22-
public function __construct(AssetTypeRepository $assetTypeRepository)
25+
public function __construct(AssetTypeRepository $assetTypeRepository, PaginatorInterface $paginator)
2326
{
2427
$this->assetTypeRepository = $assetTypeRepository;
28+
$this->paginator = $paginator;
2529
}
2630

27-
public function __invoke(): Response
31+
public function __invoke(Request $request): Response
2832
{
2933
/** @var Organization $organization */
3034
$organization = $this->getUser();
35+
$assetTypes = $this->paginator->paginate(
36+
$this->assetTypeRepository->findByOrganization($organization),
37+
$request->query->getInt('page', 1),
38+
$this->getParameter('app.pagination_default_limit')
39+
);
3140

3241
return $this->render('organization/assetType/list.html.twig', [
33-
'assetTypes' => $this->assetTypeRepository->findByOrganization($organization),
42+
'assetTypes' => $assetTypes,
3443
]);
3544
}
3645
}

src/Controller/Organization/Children/ListController.php

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66

77
use App\Entity\Organization;
88
use App\Repository\OrganizationRepository;
9+
use Knp\Component\Pager\PaginatorInterface;
910
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
11+
use Symfony\Component\HttpFoundation\Request;
1012
use Symfony\Component\HttpFoundation\Response;
1113
use Symfony\Component\Routing\Annotation\Route;
1214
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
@@ -17,20 +19,26 @@
1719
class ListController extends AbstractController
1820
{
1921
protected OrganizationRepository $organizationRepository;
22+
private PaginatorInterface $paginator;
2023

21-
public function __construct(OrganizationRepository $organizationRepository)
24+
public function __construct(OrganizationRepository $organizationRepository, PaginatorInterface $paginator)
2225
{
2326
$this->organizationRepository = $organizationRepository;
27+
$this->paginator = $paginator;
2428
}
2529

26-
public function __invoke(): Response
30+
public function __invoke(Request $request): Response
2731
{
2832
$organization = $this->getUser();
2933
if (!$organization instanceof Organization || !$organization->isParent()) {
3034
throw new AccessDeniedException();
3135
}
3236

33-
$organizations = $this->organizationRepository->findBy(['parent' => $organization], ['name' => 'ASC']);
37+
$organizations = $this->paginator->paginate(
38+
$this->organizationRepository->findChildrenQueryBuilder($organization),
39+
$request->query->getInt('page', 1),
40+
$this->getParameter('app.pagination_default_limit')
41+
);
3442

3543
return $this->render('organization/list.html.twig', [
3644
'organizations' => $organizations,

src/Controller/Organization/CommissionableAsset/AssetsListController.php

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use App\Form\Factory\OrganizationSelectorFormFactory;
99
use App\Repository\CommissionableAssetRepository;
1010
use App\Security\Voter\OrganizationVoter;
11+
use Knp\Component\Pager\PaginatorInterface;
1112
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
1213
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
1314
use Symfony\Component\HttpFoundation\Request;
@@ -22,23 +23,30 @@ class AssetsListController extends AbstractController
2223
{
2324
private CommissionableAssetRepository $assetRepository;
2425
private OrganizationSelectorFormFactory $organizationSelectorFormFactory;
26+
private PaginatorInterface $paginator;
2527

26-
public function __construct(CommissionableAssetRepository $assetRepository, OrganizationSelectorFormFactory $organizationSelectorFormFactory)
28+
public function __construct(CommissionableAssetRepository $assetRepository, OrganizationSelectorFormFactory $organizationSelectorFormFactory, PaginatorInterface $paginator)
2729
{
2830
$this->assetRepository = $assetRepository;
2931
$this->organizationSelectorFormFactory = $organizationSelectorFormFactory;
32+
$this->paginator = $paginator;
3033
}
3134

3235
public function __invoke(Request $request, Organization $organization): Response
3336
{
3437
/** @var Organization $currentOrganization */
3538
$currentOrganization = $this->getUser();
39+
$assets = $this->paginator->paginate(
40+
$this->assetRepository->findByOrganizationAndChildrenQb($organization),
41+
$request->query->getInt('page', 1),
42+
$this->getParameter('app.pagination_default_limit')
43+
);
3644

3745
return $this->render(
3846
'organization/commissionable_asset/list.html.twig',
3947
[
4048
'organization' => $organization,
41-
'assets' => $this->assetRepository->findByOrganization($organization),
49+
'assets' => $assets,
4250
'organization_selector_form' => $this->organizationSelectorFormFactory->createForm(
4351
$organization,
4452
$currentOrganization

0 commit comments

Comments
 (0)