diff --git a/app/Helpers/Collector/JournalCollector.php b/app/Helpers/Collector/JournalCollector.php index 7c67975c24..8af30e8030 100644 --- a/app/Helpers/Collector/JournalCollector.php +++ b/app/Helpers/Collector/JournalCollector.php @@ -37,6 +37,7 @@ use FireflyIII\Models\Category; use FireflyIII\Models\Tag; use FireflyIII\Models\Transaction; use FireflyIII\Repositories\Account\AccountRepositoryInterface; +use FireflyIII\Support\CacheProperties; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Query\JoinClause; @@ -243,6 +244,18 @@ class JournalCollector implements JournalCollectorInterface public function getJournals(): Collection { $this->run = true; + + // find query set in cache. + $hash = hash('sha256', $this->query->toSql()); + $key = 'query-' . substr($hash, -8); + $cache = new CacheProperties; + $cache->addProperty($key); + if ($cache->has()) { + Log::debug(sprintf('Return cache of query with ID "%s".', $key)); + + return $cache->get(); // @codeCoverageIgnore + } + /** @var Collection $set */ $set = $this->query->get(array_values($this->fields)); @@ -263,6 +276,8 @@ class JournalCollector implements JournalCollectorInterface $transaction->opposing_account_iban = app('steam')->tryDecrypt($transaction->opposing_account_iban); } ); + Log::debug(sprintf('Cached query with ID "%s".', $key)); + $cache->store($set); return $set; } @@ -284,6 +299,14 @@ class JournalCollector implements JournalCollectorInterface return $journals; } + /** + * @return EloquentBuilder + */ + public function getQuery(): EloquentBuilder + { + return $this->query; + } + /** * @param string $filter * diff --git a/app/Helpers/Collector/JournalCollectorInterface.php b/app/Helpers/Collector/JournalCollectorInterface.php index ce0def29a7..b5d8e4100c 100644 --- a/app/Helpers/Collector/JournalCollectorInterface.php +++ b/app/Helpers/Collector/JournalCollectorInterface.php @@ -27,6 +27,7 @@ use FireflyIII\Models\Budget; use FireflyIII\Models\Category; use FireflyIII\Models\Tag; use FireflyIII\User; +use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; @@ -78,6 +79,8 @@ interface JournalCollectorInterface */ public function getPaginatedJournals(): LengthAwarePaginator; + public function getQuery(): EloquentBuilder; + /** * @param string $filter * diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 370e0887e5..d1587d0824 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -202,8 +202,8 @@ class HomeController extends Controller 'rules.select', 'search.search', 'test-flash', 'transactions.link.delete', 'transactions.link.switch', 'two-factor.lost', 'reports.options', 'debug', 'import.create-job', 'import.download', 'import.start', 'import.status.json', 'preferences.delete-code', 'rules.test-triggers', 'piggy-banks.remove-money', 'piggy-banks.add-money', - 'accounts.reconcile.transactions', 'accounts.reconcile.overview','export.download', - 'transactions.clone','two-factor.index' + 'accounts.reconcile.transactions', 'accounts.reconcile.overview', 'export.download', + 'transactions.clone', 'two-factor.index', ]; $return = ' '; /** @var Route $route */ @@ -223,6 +223,7 @@ class HomeController extends Controller } } } + return $return; } diff --git a/app/Import/Storage/ImportStorage.php b/app/Import/Storage/ImportStorage.php index 1f6bc60b7b..0b8ee7c9c4 100644 --- a/app/Import/Storage/ImportStorage.php +++ b/app/Import/Storage/ImportStorage.php @@ -33,6 +33,7 @@ use FireflyIII\Repositories\Bill\BillRepositoryInterface; use FireflyIII\Repositories\ImportJob\ImportJobRepositoryInterface; use Illuminate\Support\Collection; use Log; +use Preferences; /** * Is capable of storing individual ImportJournal objects. @@ -250,6 +251,7 @@ class ImportStorage Log::info('Will apply rules to this journal.'); $this->applyRules($journal); } + Preferences::setForUser($this->job->user, 'lastActivity', microtime()); if (!(true === $this->applyRules)) { Log::info('Will NOT apply rules to this journal.'); @@ -258,7 +260,7 @@ class ImportStorage // match bills if config calls for it. if (true === $this->matchBills) { - Log::info('Cannot match bills (yet).'); + Log::info('Will match bills.'); $this->matchBills($journal); } diff --git a/app/Repositories/Journal/JournalTasker.php b/app/Repositories/Journal/JournalTasker.php index b70c575dce..b51181fdf4 100644 --- a/app/Repositories/Journal/JournalTasker.php +++ b/app/Repositories/Journal/JournalTasker.php @@ -27,7 +27,6 @@ use FireflyIII\Models\AccountType; use FireflyIII\Models\PiggyBankEvent; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; -use FireflyIII\Support\SingleCacheProperties; use FireflyIII\User; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Query\JoinClause; @@ -70,14 +69,6 @@ class JournalTasker implements JournalTaskerInterface */ public function getTransactionsOverview(TransactionJournal $journal): array { - $cache = new SingleCacheProperties; - $cache->addProperty('transaction-overview'); - $cache->addProperty($journal->id); - $cache->addProperty($journal->updated_at); - if ($cache->has()) { - return $cache->get(); - } - // get all transaction data + the opposite site in one list. $set = $journal ->transactions()// "source" ->leftJoin( @@ -177,7 +168,6 @@ class JournalTasker implements JournalTaskerInterface $transactions[] = $transaction; } - $cache->store($transactions); return $transactions; } diff --git a/app/Support/SingleCacheProperties.php b/app/Support/SingleCacheProperties.php deleted file mode 100644 index 17bddc463f..0000000000 --- a/app/Support/SingleCacheProperties.php +++ /dev/null @@ -1,44 +0,0 @@ -. - */ -declare(strict_types=1); - -namespace FireflyIII\Support; - -use Illuminate\Support\Collection; - -/** - * Class CacheProperties. - */ -class SingleCacheProperties extends CacheProperties -{ - /** - * - */ - public function __construct() - { - parent::__construct(); - $this->properties = new Collection; - if (auth()->check()) { - $this->addProperty(auth()->user()->id); - $this->addProperty(app('preferences')->lastActivity()); - } - } -} diff --git a/app/Support/Twig/Extension/Transaction.php b/app/Support/Twig/Extension/Transaction.php index 5fea1eb71d..7114d156c6 100644 --- a/app/Support/Twig/Extension/Transaction.php +++ b/app/Support/Twig/Extension/Transaction.php @@ -27,7 +27,6 @@ use FireflyIII\Models\Attachment; use FireflyIII\Models\Transaction as TransactionModel; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Models\TransactionType; -use FireflyIII\Support\SingleCacheProperties; use Lang; use Twig_Extension; @@ -45,14 +44,6 @@ class Transaction extends Twig_Extension */ public function amount(TransactionModel $transaction): string { - $cache = new SingleCacheProperties; - $cache->addProperty('transaction-amount'); - $cache->addProperty($transaction->id); - $cache->addProperty($transaction->updated_at); - if ($cache->has()) { - return $cache->get(); - } - $amount = bcmul(app('steam')->positive(strval($transaction->transaction_amount)), '-1'); $format = '%s'; $coloured = true; @@ -97,8 +88,6 @@ class Transaction extends Twig_Extension $currency->decimal_places = $transaction->foreign_currency_dp; $str .= ' (' . sprintf($format, app('amount')->formatAnything($currency, $amount, $coloured)) . ')'; } - $cache->store($str); - return $str; } @@ -109,15 +98,6 @@ class Transaction extends Twig_Extension */ public function amountArray(array $transaction): string { - $cache = new SingleCacheProperties; - $cache->addProperty('transaction-array-amount'); - $cache->addProperty($transaction['source_id']); - $cache->addProperty($transaction['destination_id']); - $cache->addProperty($transaction['updated_at']); - if ($cache->has()) { - return $cache->get(); - } - // first display amount: $amount = TransactionType::WITHDRAWAL === $transaction['journal_type'] ? $transaction['source_amount'] : $transaction['destination_amount']; @@ -135,8 +115,6 @@ class Transaction extends Twig_Extension $fakeCurrency->symbol = $transaction['foreign_currency_symbol']; $string .= ' (' . app('amount')->formatAnything($fakeCurrency, $amount, true) . ')'; } - $cache->store($string); - return $string; } @@ -147,14 +125,6 @@ class Transaction extends Twig_Extension */ public function budgets(TransactionModel $transaction): string { - $cache = new SingleCacheProperties; - $cache->addProperty('transaction-budgets'); - $cache->addProperty($transaction->id); - $cache->addProperty($transaction->updated_at); - if ($cache->has()) { - return $cache->get(); - } - // journal has a budget: if (isset($transaction->transaction_journal_budget_id)) { $name = app('steam')->tryDecrypt($transaction->transaction_journal_budget_name); @@ -185,12 +155,10 @@ class Transaction extends Twig_Extension } $txt = join(', ', $str); - $cache->store($txt); return $txt; } $txt = ''; - $cache->store($txt); return $txt; } @@ -202,19 +170,10 @@ class Transaction extends Twig_Extension */ public function categories(TransactionModel $transaction): string { - $cache = new SingleCacheProperties; - $cache->addProperty('transaction-categories'); - $cache->addProperty($transaction->id); - $cache->addProperty($transaction->updated_at); - if ($cache->has()) { - return $cache->get(); - } - // journal has a category: if (isset($transaction->transaction_journal_category_id)) { $name = app('steam')->tryDecrypt($transaction->transaction_journal_category_name); $txt = sprintf('%s', route('categories.show', [$transaction->transaction_journal_category_id]), $name, $name); - $cache->store($txt); return $txt; } @@ -223,7 +182,6 @@ class Transaction extends Twig_Extension if (isset($transaction->transaction_category_id)) { $name = app('steam')->tryDecrypt($transaction->transaction_category_name); $txt = sprintf('%s', route('categories.show', [$transaction->transaction_category_id]), $name, $name); - $cache->store($txt); return $txt; } @@ -240,14 +198,11 @@ class Transaction extends Twig_Extension } $txt = join(', ', $str); - $cache->store($txt); return $txt; } $txt = ''; - $cache->store($txt); - return $txt; } @@ -258,20 +213,11 @@ class Transaction extends Twig_Extension */ public function description(TransactionModel $transaction): string { - $cache = new SingleCacheProperties; - $cache->addProperty('description'); - $cache->addProperty($transaction->id); - $cache->addProperty($transaction->updated_at); - if ($cache->has()) { - return $cache->get(); - } $description = $transaction->description; if (strlen(strval($transaction->transaction_description)) > 0) { $description = $transaction->transaction_description . '(' . $transaction->description . ')'; } - $cache->store($description); - return $description; } @@ -282,14 +228,6 @@ class Transaction extends Twig_Extension */ public function destinationAccount(TransactionModel $transaction): string { - $cache = new SingleCacheProperties; - $cache->addProperty('transaction-destination'); - $cache->addProperty($transaction->id); - $cache->addProperty($transaction->updated_at); - if ($cache->has()) { - return $cache->get(); - } - if (TransactionType::RECONCILIATION === $transaction->transaction_type_type) { return '—'; } @@ -325,13 +263,11 @@ class Transaction extends Twig_Extension if (AccountType::CASH === $type) { $txt = '(' . trans('firefly.cash') . ')'; - $cache->store($txt); return $txt; } $txt = sprintf('%1$s', e($name), route('accounts.show', [$transactionId])); - $cache->store($txt); return $txt; } @@ -343,13 +279,6 @@ class Transaction extends Twig_Extension */ public function hasAttachments(TransactionModel $transaction): string { - $cache = new SingleCacheProperties; - $cache->addProperty('attachments'); - $cache->addProperty($transaction->id); - $cache->addProperty($transaction->updated_at); - if ($cache->has()) { - return $cache->get(); - } $journalId = intval($transaction->journal_id); $count = Attachment::whereNull('deleted_at') ->where('attachable_type', 'FireflyIII\Models\TransactionJournal') @@ -357,13 +286,11 @@ class Transaction extends Twig_Extension ->count(); if ($count > 0) { $res = sprintf('', Lang::choice('firefly.nr_of_attachments', $count, ['count' => $count])); - $cache->store($res); return $res; } $res = ''; - $cache->store($res); return $res; } @@ -375,14 +302,6 @@ class Transaction extends Twig_Extension */ public function icon(TransactionModel $transaction): string { - $cache = new SingleCacheProperties; - $cache->addProperty('icon'); - $cache->addProperty($transaction->id); - $cache->addProperty($transaction->updated_at); - if ($cache->has()) { - return $cache->get(); - } - switch ($transaction->transaction_type_type) { case TransactionType::WITHDRAWAL: $txt = sprintf('', trans('firefly.withdrawal')); @@ -403,7 +322,6 @@ class Transaction extends Twig_Extension $txt = ''; break; } - $cache->store($txt); return $txt; } @@ -415,21 +333,11 @@ class Transaction extends Twig_Extension */ public function isReconciled(TransactionModel $transaction): string { - $cache = new SingleCacheProperties; - $cache->addProperty('transaction-reconciled'); - $cache->addProperty($transaction->id); - $cache->addProperty($transaction->updated_at); - $cache->addProperty($transaction->reconciled); - if ($cache->has()) { - return $cache->get(); - } $icon = ''; if (1 === intval($transaction->reconciled)) { $icon = ''; } - $cache->store($icon); - return $icon; } @@ -440,25 +348,14 @@ class Transaction extends Twig_Extension */ public function isSplit(TransactionModel $transaction): string { - $cache = new SingleCacheProperties; - $cache->addProperty('split'); - $cache->addProperty($transaction->id); - $cache->addProperty($transaction->updated_at); - if ($cache->has()) { - return $cache->get(); - } $journalId = intval($transaction->journal_id); $count = TransactionModel::where('transaction_journal_id', $journalId)->whereNull('deleted_at')->count(); if ($count > 2) { $res = ''; - $cache->store($res); - return $res; } $res = ''; - $cache->store($res); - return $res; } @@ -469,13 +366,6 @@ class Transaction extends Twig_Extension */ public function sourceAccount(TransactionModel $transaction): string { - $cache = new SingleCacheProperties; - $cache->addProperty('transaction-source'); - $cache->addProperty($transaction->id); - $cache->addProperty($transaction->updated_at); - if ($cache->has()) { - return $cache->get(); - } if (TransactionType::RECONCILIATION === $transaction->transaction_type_type) { return '—'; } @@ -510,14 +400,11 @@ class Transaction extends Twig_Extension if (AccountType::CASH === $type) { $txt = '(' . trans('firefly.cash') . ')'; - $cache->store($txt); return $txt; } $txt = sprintf('%1$s', e($name), route('accounts.show', [$transactionId])); - $cache->store($txt); - return $txt; } } diff --git a/app/Support/Twig/Extension/TransactionJournal.php b/app/Support/Twig/Extension/TransactionJournal.php index 8fd0347fd9..dba951d952 100644 --- a/app/Support/Twig/Extension/TransactionJournal.php +++ b/app/Support/Twig/Extension/TransactionJournal.php @@ -25,7 +25,6 @@ namespace FireflyIII\Support\Twig\Extension; use FireflyIII\Models\Transaction as TransactionModel; use FireflyIII\Models\TransactionJournal as JournalModel; use FireflyIII\Models\TransactionType; -use FireflyIII\Support\SingleCacheProperties; use Twig_Extension; /** @@ -40,14 +39,6 @@ class TransactionJournal extends Twig_Extension */ public function totalAmount(JournalModel $journal): string { - $cache = new SingleCacheProperties; - $cache->addProperty('total-amount'); - $cache->addProperty($journal->id); - $cache->addProperty($journal->updated_at); - if ($cache->has()) { - return $cache->get(); - } - $transactions = $journal->transactions()->where('amount', '>', 0)->get(); $totals = []; $type = $journal->transactionType->type; @@ -84,7 +75,6 @@ class TransactionJournal extends Twig_Extension $array[] = app('amount')->formatAnything($total['currency'], $total['amount']); } $txt = join(' / ', $array); - $cache->store($txt); return $txt; }