From b0ecdfe01d8c28b990187f3d7d6a620c0b311ace Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 21 Dec 2017 21:18:30 +0100 Subject: [PATCH] Fix pagination of account lists for issue #1040 --- app/Http/Controllers/AccountController.php | 19 +++++++++++++++---- app/Http/Controllers/BillController.php | 2 +- app/Http/Controllers/BudgetController.php | 6 +++--- app/Http/Controllers/CategoryController.php | 4 ++-- .../Controllers/PreferencesController.php | 12 ++++++------ app/Http/Controllers/TagController.php | 2 +- .../Controllers/TransactionController.php | 2 +- resources/lang/en_US/firefly.php | 6 +++--- resources/lang/en_US/list.php | 2 +- resources/views/accounts/index.twig | 3 ++- resources/views/list/accounts.twig | 8 +++++++- resources/views/preferences/index.twig | 6 +++--- 12 files changed, 45 insertions(+), 27 deletions(-) diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 13bfee352e..e098741689 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -36,6 +36,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Http\Request; +use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Log; use Preferences; @@ -214,18 +215,24 @@ class AccountController extends Controller } /** + * @param Request $request * @param AccountRepositoryInterface $repository * @param string $what * * @return View */ - public function index(AccountRepositoryInterface $repository, string $what) + public function index(Request $request, AccountRepositoryInterface $repository, string $what) { $what = $what ?? 'asset'; $subTitle = trans('firefly.' . $what . '_accounts'); $subTitleIcon = config('firefly.subIconsByIdentifier.' . $what); $types = config('firefly.accountTypesByIdentifier.' . $what); - $accounts = $repository->getAccountsByType($types); + $collection = $repository->getAccountsByType($types); + $total = $collection->count(); + $page = intval($request->get('page')) === 0 ? 1 : intval($request->get('page')); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); + $accounts = $collection->slice(($page-1) * $pageSize, $pageSize); + unset($collection); /** @var Carbon $start */ $start = clone session('start', Carbon::now()->startOfMonth()); /** @var Carbon $end */ @@ -246,7 +253,11 @@ class AccountController extends Controller } ); - return view('accounts.index', compact('what', 'subTitleIcon', 'subTitle', 'accounts')); + // make paginator: + $accounts = new LengthAwarePaginator($accounts, $total, $pageSize, $page); + $accounts->setPath(route('accounts.index', [$what])); + + return view('accounts.index', compact('what', 'subTitleIcon', 'subTitle', 'page', 'accounts')); } /** @@ -273,7 +284,7 @@ class AccountController extends Controller $range = Preferences::get('viewRange', '1M')->data; $subTitleIcon = config('firefly.subIconsByIdentifier.' . $account->accountType->type); $page = intval($request->get('page')); - $pageSize = intval(Preferences::get('transactionPageSize', 50)->data); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); $chartUri = route('chart.account.single', [$account->id]); $start = null; $end = null; diff --git a/app/Http/Controllers/BillController.php b/app/Http/Controllers/BillController.php index 9d44ff4a9f..7286a09551 100644 --- a/app/Http/Controllers/BillController.php +++ b/app/Http/Controllers/BillController.php @@ -234,7 +234,7 @@ class BillController extends Controller $end = session('end'); $year = $date->year; $page = intval($request->get('page')); - $pageSize = intval(Preferences::get('transactionPageSize', 50)->data); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); $yearAverage = $repository->getYearAverage($bill, $date); $overallAverage = $repository->getOverallAverage($bill); diff --git a/app/Http/Controllers/BudgetController.php b/app/Http/Controllers/BudgetController.php index b1b145b07b..9d6b36ef78 100644 --- a/app/Http/Controllers/BudgetController.php +++ b/app/Http/Controllers/BudgetController.php @@ -379,7 +379,7 @@ class BudgetController extends Controller } $page = intval($request->get('page')); - $pageSize = intval(Preferences::get('transactionPageSize', 50)->data); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); /** @var JournalCollectorInterface $collector */ $collector = app(JournalCollectorInterface::class); @@ -421,7 +421,7 @@ class BudgetController extends Controller $start = session('first', Carbon::create()->startOfYear()); $end = new Carbon; $page = intval($request->get('page')); - $pageSize = intval(Preferences::get('transactionPageSize', 50)->data); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); $limits = $this->getLimits($budget, $start, $end); $repetition = null; // collector: @@ -452,7 +452,7 @@ class BudgetController extends Controller } $page = intval($request->get('page')); - $pageSize = intval(Preferences::get('transactionPageSize', 50)->data); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); $subTitle = trans( 'firefly.budget_in_period', [ diff --git a/app/Http/Controllers/CategoryController.php b/app/Http/Controllers/CategoryController.php index 3cca1d4ed2..fbaede5e46 100644 --- a/app/Http/Controllers/CategoryController.php +++ b/app/Http/Controllers/CategoryController.php @@ -164,7 +164,7 @@ class CategoryController extends Controller $end = null; $periods = new Collection; $page = intval($request->get('page')); - $pageSize = intval(Preferences::get('transactionPageSize', 50)->data); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); // prep for "all" view. if ('all' === $moment) { @@ -221,7 +221,7 @@ class CategoryController extends Controller $subTitle = $category->name; $subTitleIcon = 'fa-bar-chart'; $page = intval($request->get('page')); - $pageSize = intval(Preferences::get('transactionPageSize', 50)->data); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); $range = Preferences::get('viewRange', '1M')->data; $start = null; $end = null; diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php index 1ab248aa9b..62daa28097 100644 --- a/app/Http/Controllers/PreferencesController.php +++ b/app/Http/Controllers/PreferencesController.php @@ -96,7 +96,7 @@ class PreferencesController extends Controller $viewRange = $viewRangePref->data; $frontPageAccounts = Preferences::get('frontPageAccounts', []); $language = Preferences::get('language', config('firefly.default_language', 'en_US'))->data; - $transactionPageSize = Preferences::get('transactionPageSize', 50)->data; + $listPageSize = Preferences::get('listPageSize', 50)->data; $customFiscalYear = Preferences::get('customFiscalYear', 0)->data; $showDeps = Preferences::get('showDepositsFrontpage', false)->data; $fiscalYearStartStr = Preferences::get('fiscalYearStart', '01-01')->data; @@ -114,7 +114,7 @@ class PreferencesController extends Controller 'tjOptionalFields', 'viewRange', 'customFiscalYear', - 'transactionPageSize', + 'listPageSize', 'fiscalYearStart', 'is2faEnabled', 'has2faSecret', @@ -175,10 +175,10 @@ class PreferencesController extends Controller Preferences::set('showDepositsFrontpage', $showDepositsFrontpage); // save page size: - Preferences::set('transactionPageSize', 50); - $transactionPageSize = intval($request->get('transactionPageSize')); - if ($transactionPageSize > 0 && $transactionPageSize < 1337) { - Preferences::set('transactionPageSize', $transactionPageSize); + Preferences::set('listPageSize', 50); + $listPageSize = intval($request->get('listPageSize')); + if ($listPageSize > 0 && $listPageSize < 1337) { + Preferences::set('listPageSize', $listPageSize); } $twoFactorAuthEnabled = false; diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php index 8b84c8f3f6..5dce01ca3c 100644 --- a/app/Http/Controllers/TagController.php +++ b/app/Http/Controllers/TagController.php @@ -196,7 +196,7 @@ class TagController extends Controller $subTitle = $tag->tag; $subTitleIcon = 'fa-tag'; $page = intval($request->get('page')); - $pageSize = intval(Preferences::get('transactionPageSize', 50)->data); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); $range = Preferences::get('viewRange', '1M')->data; $start = null; $end = null; diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index 25c30b6aa1..7c144dbab2 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -77,7 +77,7 @@ class TransactionController extends Controller $subTitleIcon = config('firefly.transactionIconsByWhat.' . $what); $types = config('firefly.transactionTypesByWhat.' . $what); $page = intval($request->get('page')); - $pageSize = intval(Preferences::get('transactionPageSize', 50)->data); + $pageSize = intval(Preferences::get('listPageSize', 50)->data); $range = Preferences::get('viewRange', '1M')->data; $start = null; $end = null; diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index 05fefdea2f..4fc22f03e6 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -407,9 +407,9 @@ return [ 'pref_home_show_deposits_info' => 'The home screen already shows your expense accounts. Should it also show your revenue accounts?', 'pref_home_do_show_deposits' => 'Yes, show them', 'successful_count' => 'of which :count successful', - 'transaction_page_size_title' => 'Page size', - 'transaction_page_size_help' => 'Any list of transactions shows at most this many transactions', - 'transaction_page_size_label' => 'Page size', + 'list_page_size_title' => 'Page size', + 'list_page_size_help' => 'Any list of things (accounts, transactions, etc) shows at most this many per page.', + 'list_page_size_label' => 'Page size', 'between_dates' => '(:start and :end)', 'pref_optional_fields_transaction' => 'Optional fields for transactions', 'pref_optional_fields_transaction_help' => 'By default not all fields are enabled when creating a new transaction (because of the clutter). Below, you can enable these fields if you think they could be useful for you. Of course, any field that is disabled, but already filled in, will be visible regardless of the setting.', diff --git a/resources/lang/en_US/list.php b/resources/lang/en_US/list.php index 51df8d2814..0658280acf 100644 --- a/resources/lang/en_US/list.php +++ b/resources/lang/en_US/list.php @@ -35,7 +35,7 @@ return [ 'currentBalance' => 'Current balance', 'active' => 'Is active?', 'lastActivity' => 'Last activity', - 'balanceDiff' => 'Balance difference between :start and :end', + 'balanceDiff' => 'Balance difference', 'matchesOn' => 'Matched on', 'account_type' => 'Account type', 'created_at' => 'Created at', diff --git a/resources/views/accounts/index.twig b/resources/views/accounts/index.twig index 1585fd39b2..19a5507473 100644 --- a/resources/views/accounts/index.twig +++ b/resources/views/accounts/index.twig @@ -32,7 +32,8 @@ - {% else %} + {% endif %} + {% if accounts.count == 0 and page == 0 %} {% include 'partials.empty' with {what: what, type: 'accounts',route: route('accounts.create', [what])} %} {% endif %} {% endblock %} diff --git a/resources/views/list/accounts.twig b/resources/views/list/accounts.twig index 61b1295141..bffcb0d779 100644 --- a/resources/views/list/accounts.twig +++ b/resources/views/list/accounts.twig @@ -1,3 +1,6 @@ +
+ {{ accounts.render|raw }} +
@@ -11,7 +14,7 @@ + class="hidden-sm hidden-xs hidden-md">{{ trans('list.balanceDiff') }} @@ -63,3 +66,6 @@ {% endfor %}
+
+ {{ accounts.render|raw }} +
\ No newline at end of file diff --git a/resources/views/preferences/index.twig b/resources/views/preferences/index.twig index 55d9782bc2..e5eadeac8b 100644 --- a/resources/views/preferences/index.twig +++ b/resources/views/preferences/index.twig @@ -245,9 +245,9 @@
-

{{ 'transaction_page_size_title'|_ }}

-

{{ 'transaction_page_size_help'|_ }}

- {{ ExpandedForm.integer('transactionPageSize',transactionPageSize,{'label' : 'transaction_page_size_label'|_}) }} +

{{ 'list_page_size_title'|_ }}

+

{{ 'list_page_size_help'|_ }}

+ {{ ExpandedForm.integer('listPageSize',listPageSize,{'label' : 'list_page_size_label'|_}) }}