From 11e38342350d185a0a266ab21f546f5ac586084d Mon Sep 17 00:00:00 2001 From: James Cole Date: Sat, 21 Mar 2020 05:56:27 +0100 Subject: [PATCH] Refactor validation method. --- .../V1/Requests/TransactionUpdateRequest.php | 3 +- .../Category/FrontpageChartGenerator.php | 1 + app/Validation/GroupValidation.php | 89 +++++++++++++++++++ app/Validation/TransactionValidation.php | 24 +---- 4 files changed, 93 insertions(+), 24 deletions(-) create mode 100644 app/Validation/GroupValidation.php diff --git a/app/Api/V1/Requests/TransactionUpdateRequest.php b/app/Api/V1/Requests/TransactionUpdateRequest.php index 7ea795c3b7..e8214cedc7 100644 --- a/app/Api/V1/Requests/TransactionUpdateRequest.php +++ b/app/Api/V1/Requests/TransactionUpdateRequest.php @@ -28,6 +28,7 @@ use FireflyIII\Models\TransactionGroup; use FireflyIII\Rules\BelongsUser; use FireflyIII\Rules\IsBoolean; use FireflyIII\Rules\IsDateOrTime; +use FireflyIII\Validation\GroupValidation; use FireflyIII\Validation\TransactionValidation; use Illuminate\Validation\Validator; use Log; @@ -37,7 +38,7 @@ use Log; */ class TransactionUpdateRequest extends Request { - use TransactionValidation; + use TransactionValidation, GroupValidation; /** @var array Array values. */ private $arrayFields; diff --git a/app/Support/Chart/Category/FrontpageChartGenerator.php b/app/Support/Chart/Category/FrontpageChartGenerator.php index 5f8829c7c5..0e0a25631a 100644 --- a/app/Support/Chart/Category/FrontpageChartGenerator.php +++ b/app/Support/Chart/Category/FrontpageChartGenerator.php @@ -1,4 +1,5 @@ . + */ + +namespace FireflyIII\Validation; + +use FireflyIII\Models\TransactionGroup; +use Illuminate\Validation\Validator; +use Log; + +/** + * Trait GroupValidation. + * + * This trait combines some of the validation methods used to validate if journal and group data is submitted correctly. + */ +trait GroupValidation +{ + + /** + * @param Validator $validator + * + * @return array + */ + abstract protected function getTransactionsArray(Validator $validator): array; + + /** + * This method validates if the user has submitted transaction journal ID's for each array they submit, if they've submitted more than 1 transaction + * journal. This check is necessary because Firefly III isn't able to distinguish between journals without the ID. + * + * @param Validator $validator + * @param TransactionGroup $transactionGroup + */ + protected function validateJournalIds(Validator $validator, TransactionGroup $transactionGroup): void + { + Log::debug(sprintf('Now in GroupValidation::validateJournalIds(%d)', $transactionGroup->id)); + $transactions = $this->getTransactionsArray($validator); + + if (count($transactions) < 2) { + // no need for validation. + return; + } + // check each array: + /** + * @var int $index + * @var array $transaction + */ + foreach ($transactions as $index => $transaction) { + $this->validateJournalId($validator, $index, $transaction, $transactionGroup); + } + } + + /** + * Do the validation required by validateJournalIds. + * + * @param Validator $validator + * @param int $index + * @param array $transaction + * @param TransactionGroup $transactionGroup + * + * @SuppressWarnings(PHPMD.CyclomaticComplexity) + */ + private function validateJournalid(Validator $validator, int $index, array $transaction, TransactionGroup $transactionGroup): void + { + $journalId = $transaction['transaction_journal_id'] ?? null; + $journalId = null === $journalId ? null : (int) $journalId; + $count = $transactionGroup->transactionJournals()->where('id', $journalId)->count(); + if (null === $journalId || (null !== $journalId && 0 !== $journalId && 0 === $count)) { + $validator->errors()->add(sprintf('transactions.%d.source_name', $index), (string) trans('validation.need_id_in_edit')); + } + } +} \ No newline at end of file diff --git a/app/Validation/TransactionValidation.php b/app/Validation/TransactionValidation.php index f71ad50368..61d49ace46 100644 --- a/app/Validation/TransactionValidation.php +++ b/app/Validation/TransactionValidation.php @@ -381,7 +381,7 @@ trait TransactionValidation * * @return array */ - private function getTransactionsArray(Validator $validator): array + protected function getTransactionsArray(Validator $validator): array { $data = $validator->getData(); $transactions = $data['transactions'] ?? []; @@ -524,26 +524,4 @@ trait TransactionValidation break; } } - - /** - * @param Validator $validator - * @param TransactionGroup $transactionGroup - */ - private function validateJournalIds(Validator $validator, TransactionGroup $transactionGroup): void - { - Log::debug('Now in validateJournalIds()'); - $transactions = $this->getTransactionsArray($validator); - - if (count($transactions) < 2) { - return; - } - foreach ($transactions as $index => $transaction) { - $journalId = $transaction['transaction_journal_id'] ?? null; - $journalId = null === $journalId ? null : (int)$journalId; - $count = $transactionGroup->transactionJournals()->where('id', $journalId)->count(); - if (null === $journalId || (null !== $journalId && 0 !== $journalId && 0 === $count)) { - $validator->errors()->add(sprintf('transactions.%d.source_name', $index), (string)trans('validation.need_id_in_edit')); - } - } - } }