Compare commits

..

No commits in common. "aa2e0e9b4ade30d54987d6d49887eb9babbed676" and "e122248a971b96bff4f02d4afcc5b34c37b51f7b" have entirely different histories.

7 changed files with 67 additions and 58 deletions

View File

@ -68,16 +68,17 @@ class EventController implements IAuthenticationRequired, ISecured
{ {
$itemsPerPage = 10; $itemsPerPage = 10;
$numberOfEvents = $this->eventRepository->countAllByCommunity($this->community); $numberOfEvents = $this->eventRepository->countAllByCommunity($this->community);
$currentPage = Container::$request->query('page') ?: 1; $pages = ceil($numberOfEvents / $itemsPerPage);
$currentPage = Container::$request->query('page') ?: 0;
$events = $this->eventRepository->getPagedByCommunity( $events = $this->eventRepository->getPagedByCommunity(
$this->community, $this->community,
$currentPage, $currentPage * $itemsPerPage,
$itemsPerPage $itemsPerPage
); );
return new HtmlContent('events/events', [ return new HtmlContent('events/events', [
'community' => $this->community, 'community' => $this->community,
'pages' => ceil($numberOfEvents / $itemsPerPage), 'pages' => $pages,
'currentPage' => $currentPage, 'currentPage' => $currentPage,
'numberOfEvents' => $numberOfEvents, 'numberOfEvents' => $numberOfEvents,
'events' => $events 'events' => $events

View File

@ -84,18 +84,19 @@ class TransactionController implements IAuthenticationRequired, ISecured
$numberOfTransactions = $event ? $numberOfTransactions = $event ?
$this->transactionRepository->countAllByEvent($event) : $this->transactionRepository->countAllByEvent($event) :
$this->transactionRepository->countAllByCommunity($this->community); $this->transactionRepository->countAllByCommunity($this->community);
$currentPage = Container::$request->query('page') ?: 1; $pages = ceil($numberOfTransactions / $itemsPerPage);
$currentPage = Container::$request->query('page') ?: 0;
$transactions = $event ? $transactions = $event ?
$this->transactionRepository->getPagedByEvent( $this->transactionRepository->getPagedByEvent(
$event, $event,
$currentPage, $currentPage * $itemsPerPage,
$itemsPerPage, $itemsPerPage,
true, true,
['currency', 'payer_user', 'payee_user'] ['currency', 'payer_user', 'payee_user']
) : ) :
$this->transactionRepository->getPagedByCommunity( $this->transactionRepository->getPagedByCommunity(
$this->community, $this->community,
$currentPage, $currentPage * $itemsPerPage,
$itemsPerPage, $itemsPerPage,
true, true,
['event', 'currency', 'payer_user', 'payee_user'] ['event', 'currency', 'payer_user', 'payee_user']
@ -105,7 +106,7 @@ class TransactionController implements IAuthenticationRequired, ISecured
'community' => $this->community, 'community' => $this->community,
'event' => $event, 'event' => $event,
'exchangeRateCalculator' => $exchangeRateCalculator, 'exchangeRateCalculator' => $exchangeRateCalculator,
'pages' => ceil($numberOfTransactions / $itemsPerPage), 'pages' => $pages,
'currentPage' => $currentPage, 'currentPage' => $currentPage,
'numberOfTransactions' => $numberOfTransactions, 'numberOfTransactions' => $numberOfTransactions,
'transactions' => $transactions 'transactions' => $transactions

View File

@ -52,11 +52,11 @@ class EventRepository
yield from Container::$persistentDataManager->selectMultipleFromDb($select, Event::class, $useRelations, $withRelations); yield from Container::$persistentDataManager->selectMultipleFromDb($select, Event::class, $useRelations, $withRelations);
} }
public function getPagedByCommunity(Community $community, int $page, int $itemsPerPage, bool $useRelations = false, array $withRelations = []): Generator public function getPagedByCommunity(Community $community, int $start, int $limit, bool $useRelations = false, array $withRelations = []): Generator
{ {
$select = $this->selectAllByCommunity($community); $select = $this->selectAllByCommunity($community);
$select->orderBy('start', 'DESC'); $select->orderBy('start', 'DESC');
$select->paginate($page, $itemsPerPage); $select->limit($limit, $start);
yield from Container::$persistentDataManager->selectMultipleFromDb($select, Event::class, $useRelations, $withRelations); yield from Container::$persistentDataManager->selectMultipleFromDb($select, Event::class, $useRelations, $withRelations);
} }

View File

@ -66,20 +66,20 @@ class TransactionRepository
return $select->count() > 0; return $select->count() > 0;
} }
public function getPagedByCommunity(Community $community, int $page, int $itemsPerPage, bool $useRelations = false, array $withRelations = []): Generator public function getPagedByCommunity(Community $community, int $start, int $limit, bool $useRelations = false, array $withRelations = []): Generator
{ {
$select = $this->selectAllByCommunity($community); $select = $this->selectAllByCommunity($community);
$select->orderBy('time', 'DESC'); $select->orderBy('time', 'DESC');
$select->paginate($page, $itemsPerPage); $select->limit($limit, $start);
yield from Container::$persistentDataManager->selectMultipleFromDb($select, Transaction::class, $useRelations, $withRelations); yield from Container::$persistentDataManager->selectMultipleFromDb($select, Transaction::class, $useRelations, $withRelations);
} }
public function getPagedByEvent(Event $event, int $page, int $itemsPerPage, bool $useRelations = false, array $withRelations = []): Generator public function getPagedByEvent(Event $event, int $start, int $limit, bool $useRelations = false, array $withRelations = []): Generator
{ {
$select = $this->selectAllByEvent($event); $select = $this->selectAllByEvent($event);
$select->orderBy('time', 'DESC'); $select->orderBy('time', 'DESC');
$select->paginate($page, $itemsPerPage); $select->limit($limit, $start);
yield from Container::$persistentDataManager->selectMultipleFromDb($select, Transaction::class, $useRelations, $withRelations); yield from Container::$persistentDataManager->selectMultipleFromDb($select, Transaction::class, $useRelations, $withRelations);
} }

View File

@ -13,13 +13,20 @@
<p class="marginTop"><a href="<?= Container::$routeCollection->getRoute('community.transactions.new')->generateLink(['communitySlug' => $community->getSlug(), 'event' => isset($event) ? $event->getSlug() : null]) ?>">New transaction</a></p> <p class="marginTop"><a href="<?= Container::$routeCollection->getRoute('community.transactions.new')->generateLink(['communitySlug' => $community->getSlug(), 'event' => isset($event) ? $event->getSlug() : null]) ?>">New transaction</a></p>
<?php if ($numberOfTransactions > 0): ?> <?php if ($numberOfTransactions > 0): ?>
<?php
$paginationRouteId = 'community.transactions';
$paginationRouteParams = ['communitySlug' => $community->getSlug()];
?>
<?php if ($pages > 1): ?> <?php if ($pages > 1): ?>
@include(templates/pagination) <p class="paginateContainer marginTop">
<a href="<?= Container::$routeCollection->getRoute('community.transactions')->generateLink(['communitySlug' => $community->getSlug(), 'page' => 0]) ?>">«</a>
<a href="<?= Container::$routeCollection->getRoute('community.transactions')->generateLink(['communitySlug' => $community->getSlug(), 'page' => max(0, $currentPage - 1)]) ?>"></a>
<?php for ($i = 0; $i < $pages; $i++): ?>
<?php if ($currentPage == $i): ?>
<span class="selected"><?= $i + 1 ?></span>
<?php else: ?>
<a href="<?= Container::$routeCollection->getRoute('community.transactions')->generateLink(['communitySlug' => $community->getSlug(), 'page' => $i]) ?>"><?= $i + 1 ?></a>
<?php endif; ?>
<?php endfor; ?>
<a href="<?= Container::$routeCollection->getRoute('community.transactions')->generateLink(['communitySlug' => $community->getSlug(), 'page' => min($pages - 1, $currentPage + 1)]) ?>"></a>
<a href="<?= Container::$routeCollection->getRoute('community.transactions')->generateLink(['communitySlug' => $community->getSlug(), 'page' => $pages - 1]) ?>">»</a>
</p>
<?php endif; ?> <?php endif; ?>
<?php foreach ($transactions as $transaction): ?> <?php foreach ($transactions as $transaction): ?>
@ -44,7 +51,19 @@
<?php endforeach; ?> <?php endforeach; ?>
<?php if ($pages > 1): ?> <?php if ($pages > 1): ?>
@include(templates/pagination) <p class="paginateContainer marginTop">
<a href="<?= Container::$routeCollection->getRoute('community.transactions')->generateLink(['communitySlug' => $community->getSlug(), 'page' => 0]) ?>">«</a>
<a href="<?= Container::$routeCollection->getRoute('community.transactions')->generateLink(['communitySlug' => $community->getSlug(), 'page' => max(0, $currentPage - 1)]) ?>"></a>
<?php for ($i = 0; $i < $pages; $i++): ?>
<?php if ($currentPage == $i): ?>
<span class="selected"><?= $i + 1 ?></span>
<?php else: ?>
<a href="<?= Container::$routeCollection->getRoute('community.transactions')->generateLink(['communitySlug' => $community->getSlug(), 'page' => $i]) ?>"><?= $i + 1 ?></a>
<?php endif; ?>
<?php endfor; ?>
<a href="<?= Container::$routeCollection->getRoute('community.transactions')->generateLink(['communitySlug' => $community->getSlug(), 'page' => min($pages - 1, $currentPage + 1)]) ?>"></a>
<a href="<?= Container::$routeCollection->getRoute('community.transactions')->generateLink(['communitySlug' => $community->getSlug(), 'page' => $pages - 1]) ?>">»</a>
</p>
<?php endif; ?> <?php endif; ?>
<p class="marginTop"><a href="<?= Container::$routeCollection->getRoute('community.transactions.new')->generateLink(['communitySlug' => $community->getSlug(), 'event' => isset($event) ? $event->getSlug() : null]) ?>">New transaction</a></p> <p class="marginTop"><a href="<?= Container::$routeCollection->getRoute('community.transactions.new')->generateLink(['communitySlug' => $community->getSlug(), 'event' => isset($event) ? $event->getSlug() : null]) ?>">New transaction</a></p>

View File

@ -9,13 +9,20 @@
<p class="marginTop"><a href="<?= Container::$routeCollection->getRoute('community.events.new')->generateLink(['communitySlug' => $community->getSlug()]) ?>">New event</a></p> <p class="marginTop"><a href="<?= Container::$routeCollection->getRoute('community.events.new')->generateLink(['communitySlug' => $community->getSlug()]) ?>">New event</a></p>
<?php if ($numberOfEvents > 0): ?> <?php if ($numberOfEvents > 0): ?>
<?php
$paginationRouteId = 'community.events';
$paginationRouteParams = ['communitySlug' => $community->getSlug()];
?>
<?php if ($pages > 1): ?> <?php if ($pages > 1): ?>
@include(templates/pagination) <p class="paginateContainer marginTop">
<a href="<?= Container::$routeCollection->getRoute('community.events')->generateLink(['communitySlug' => $community->getSlug(), 'page' => 0]) ?>">«</a>
<a href="<?= Container::$routeCollection->getRoute('community.events')->generateLink(['communitySlug' => $community->getSlug(), 'page' => max(0, $currentPage - 1)]) ?>"></a>
<?php for ($i = 0; $i < $pages; $i++): ?>
<?php if ($currentPage == $i): ?>
<span class="selected"><?= $i + 1 ?></span>
<?php else: ?>
<a href="<?= Container::$routeCollection->getRoute('community.events')->generateLink(['communitySlug' => $community->getSlug(), 'page' => $i]) ?>"><?= $i + 1 ?></a>
<?php endif; ?>
<?php endfor; ?>
<a href="<?= Container::$routeCollection->getRoute('community.events')->generateLink(['communitySlug' => $community->getSlug(), 'page' => min($pages - 1, $currentPage + 1)]) ?>"></a>
<a href="<?= Container::$routeCollection->getRoute('community.events')->generateLink(['communitySlug' => $community->getSlug(), 'page' => $pages - 1]) ?>">»</a>
</p>
<?php endif; ?> <?php endif; ?>
<?php foreach ($events as $event): ?> <?php foreach ($events as $event): ?>
@ -29,7 +36,19 @@
<?php endforeach; ?> <?php endforeach; ?>
<?php if ($pages > 1): ?> <?php if ($pages > 1): ?>
@include(templates/pagination) <p class="paginateContainer marginTop">
<a href="<?= Container::$routeCollection->getRoute('community.events')->generateLink(['communitySlug' => $community->getSlug(), 'page' => 0]) ?>">«</a>
<a href="<?= Container::$routeCollection->getRoute('community.events')->generateLink(['communitySlug' => $community->getSlug(), 'page' => max(0, $currentPage - 1)]) ?>"></a>
<?php for ($i = 0; $i < $pages; $i++): ?>
<?php if ($currentPage == $i): ?>
<span class="selected"><?= $i + 1 ?></span>
<?php else: ?>
<a href="<?= Container::$routeCollection->getRoute('community.events')->generateLink(['communitySlug' => $community->getSlug(), 'page' => $i]) ?>"><?= $i + 1 ?></a>
<?php endif; ?>
<?php endfor; ?>
<a href="<?= Container::$routeCollection->getRoute('community.events')->generateLink(['communitySlug' => $community->getSlug(), 'page' => min($pages - 1, $currentPage + 1)]) ?>"></a>
<a href="<?= Container::$routeCollection->getRoute('community.events')->generateLink(['communitySlug' => $community->getSlug(), 'page' => $pages - 1]) ?>">»</a>
</p>
<?php endif; ?> <?php endif; ?>
<p class="marginTop"><a href="<?= Container::$routeCollection->getRoute('community.events.new')->generateLink(['communitySlug' => $community->getSlug()]) ?>">New event</a></p> <p class="marginTop"><a href="<?= Container::$routeCollection->getRoute('community.events.new')->generateLink(['communitySlug' => $community->getSlug()]) ?>">New event</a></p>

View File

@ -1,31 +0,0 @@
<p class="paginateContainer marginTop">
<a href="<?= Container::$routeCollection->getRoute($paginationRouteId)->generateLink(array_merge($paginationRouteParams, ['page' => 1])) ?>">«</a>
<a href="<?= Container::$routeCollection->getRoute($paginationRouteId)->generateLink(array_merge($paginationRouteParams, ['page' => max(1, $currentPage - 1)])) ?>"></a>
<?php
$maxPages = 7;
if ($pages <= $maxPages) {
$start = 1;
$end = $pages;
} else {
$maxAdditionalPages = $maxPages - 1;
$maxAdditionalPagesHalf = ceil($maxAdditionalPages / 2);
$start = $currentPage - $maxAdditionalPagesHalf > 1 ?
($currentPage - $maxAdditionalPagesHalf < $pages - $maxAdditionalPages ?
$currentPage - $maxAdditionalPagesHalf :
$pages - $maxAdditionalPages) :
1;
$end = $start + $maxAdditionalPages < $pages ?
$start + $maxAdditionalPages :
$pages;
}
?>
<?php for ($i = $start; $i <= $end; $i++): ?>
<?php if ($currentPage == $i): ?>
<span class="selected"><?= $i ?></span>
<?php else: ?>
<a href="<?= Container::$routeCollection->getRoute($paginationRouteId)->generateLink(array_merge($paginationRouteParams, ['page' => $i])) ?>"><?= $i ?></a>
<?php endif; ?>
<?php endfor; ?>
<a href="<?= Container::$routeCollection->getRoute($paginationRouteId)->generateLink(array_merge($paginationRouteParams, ['page' => min($pages, $currentPage + 1)])) ?>"></a>
<a href="<?= Container::$routeCollection->getRoute($paginationRouteId)->generateLink(array_merge($paginationRouteParams, ['page' => $pages])) ?>">»</a>
</p>