Skip to content

Commit 3e5b9ab

Browse files
tbialczalbozek
authored andcommitted
IBX-9060: Refactored notification query building
1 parent 38f9411 commit 3e5b9ab

File tree

2 files changed

+25
-16
lines changed

2 files changed

+25
-16
lines changed

src/bundle/Controller/NotificationController.php

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
use Ibexa\Bundle\AdminUi\Form\Type\SearchType;
1919
use Ibexa\Contracts\AdminUi\Controller\Controller;
2020
use Ibexa\Contracts\Core\Repository\NotificationService;
21+
use Ibexa\Contracts\Core\Repository\Values\Notification\Query\Criterion\NotificationQuery;
2122
use Ibexa\Contracts\Core\SiteAccess\ConfigResolverInterface;
2223
use Ibexa\Core\Notification\Renderer\Registry;
2324
use InvalidArgumentException;
@@ -95,15 +96,18 @@ public function renderNotificationsPageAction(Request $request, int $page): Resp
9596
]);
9697
$searchForm->handleRequest($request);
9798

98-
$query = [];
99+
$query = new NotificationQuery();
99100
if ($searchForm->isSubmitted() && $searchForm->isValid()) {
100101
$query = $this->buildQuery($searchForm->getData());
101102
}
102103

104+
$query->offset = ($page - 1) * $this->configResolver->getParameter('pagination.notification_limit');
105+
$query->limit = $this->configResolver->getParameter('pagination.notification_limit');
106+
103107
$pagerfanta = new Pagerfanta(
104108
new NotificationAdapter($this->notificationService, $query)
105109
);
106-
$pagerfanta->setMaxPerPage($this->configResolver->getParameter('pagination.notification_limit'));
110+
$pagerfanta->setMaxPerPage($query->limit);
107111
$pagerfanta->setCurrentPage(min($page, $pagerfanta->getNbPages()));
108112

109113
$notifications = [];
@@ -127,35 +131,39 @@ public function renderNotificationsPageAction(Request $request, int $page): Resp
127131
]);
128132
}
129133

130-
private function buildQuery(SearchQueryData $data): array
134+
private function buildQuery(SearchQueryData $data): NotificationQuery
131135
{
132-
$query = [];
136+
$criteria = [];
133137

134138
if ($data->getType()) {
135-
$query['type'] = $data->getType();
139+
$criteria[] = new Criterion\Type($data->getType());
136140
}
137141

138142
if (!empty($data->getStatuses())) {
139-
$query['status'] = [];
143+
$statuses = [];
140144
if (in_array('read', $data->getStatuses(), true)) {
141-
$query['status'][] = 'read';
145+
$statuses[] = 'read';
142146
}
143147
if (in_array('unread', $data->getStatuses(), true)) {
144-
$query['status'][] = 'unread';
148+
$statuses[] = 'unread';
149+
}
150+
151+
if (!empty($statuses)) {
152+
$criteria[] = new Criterion\Status($statuses);
145153
}
146154
}
147155

148156
$range = $data->getCreatedRange();
149157
if ($range !== null) {
150-
if ($range->getMin() instanceof DateTimeInterface) {
151-
$query['created_from'] = $range->getMin()->getTimestamp();
152-
}
153-
if ($range->getMax() instanceof DateTimeInterface) {
154-
$query['created_to'] = $range->getMax()->getTimestamp();
158+
$min = $range->getMin() instanceof DateTimeInterface ? $range->getMin() : null;
159+
$max = $range->getMax() instanceof DateTimeInterface ? $range->getMax() : null;
160+
161+
if ($min !== null || $max !== null) {
162+
$criteria[] = new Criterion\DateCreated($min, $max);
155163
}
156164
}
157165

158-
return $query;
166+
return new NotificationQuery($criteria);
159167
}
160168

161169
private function createNotificationSelectionData(Pagerfanta $pagerfanta): NotificationSelectionData

src/lib/Pagination/Pagerfanta/NotificationAdapter.php

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

1010
use Ibexa\Contracts\Core\Repository\NotificationService;
1111
use Ibexa\Contracts\Core\Repository\Values\Notification\NotificationList;
12+
use Ibexa\Contracts\Core\Repository\Values\Notification\Query\Criterion\NotificationQuery;
1213
use Pagerfanta\Adapter\AdapterInterface;
1314

1415
/**
@@ -19,13 +20,13 @@ class NotificationAdapter implements AdapterInterface
1920
{
2021
private NotificationService $notificationService;
2122

22-
private array $query;
23+
private NotificationQuery $query;
2324

2425
private int $nbResults;
2526

2627
public function __construct(
2728
NotificationService $notificationService,
28-
array $query = []
29+
NotificationQuery $query
2930
) {
3031
$this->notificationService = $notificationService;
3132
$this->query = $query;

0 commit comments

Comments
 (0)