From e54a011e0cb8937a56091c0c8a815b32a895f10f Mon Sep 17 00:00:00 2001 From: James Cole Date: Wed, 5 Feb 2020 20:37:23 +0100 Subject: [PATCH 1/2] More validation for #3080 --- app/Validation/TransactionValidation.php | 114 ++++++++++++++++++++++- 1 file changed, 109 insertions(+), 5 deletions(-) diff --git a/app/Validation/TransactionValidation.php b/app/Validation/TransactionValidation.php index b6e608a426..18e5956ab4 100644 --- a/app/Validation/TransactionValidation.php +++ b/app/Validation/TransactionValidation.php @@ -47,6 +47,14 @@ trait TransactionValidation $transactionType = $data['type'] ?? 'invalid'; $transactions = $data['transactions'] ?? []; + if (!is_countable($data['transactions'])) { + $validator->errors()->add( + 'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')]) + ); + + return; + } + /** @var AccountValidator $accountValidator */ $accountValidator = app(AccountValidator::class); @@ -91,6 +99,14 @@ trait TransactionValidation $data = $validator->getData(); $transactions = $data['transactions'] ?? []; + if (!is_countable($data['transactions'])) { + $validator->errors()->add( + 'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')]) + ); + + return; + } + /** @var AccountValidator $accountValidator */ $accountValidator = app(AccountValidator::class); @@ -142,8 +158,15 @@ trait TransactionValidation */ public function validateDescriptions(Validator $validator): void { - $data = $validator->getData(); - $transactions = $data['transactions'] ?? []; + $data = $validator->getData(); + $transactions = $data['transactions'] ?? []; + if (!is_countable($data['transactions'])) { + $validator->errors()->add( + 'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')]) + ); + + return; + } $validDescriptions = 0; foreach ($transactions as $index => $transaction) { if ('' !== (string)($transaction['description'] ?? null)) { @@ -168,6 +191,15 @@ trait TransactionValidation { $data = $validator->getData(); $transactions = $data['transactions'] ?? []; + + if (!is_countable($data['transactions'])) { + $validator->errors()->add( + 'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')]) + ); + + return; + } + foreach ($transactions as $index => $transaction) { // if foreign amount is present, then the currency must be as well. if (isset($transaction['foreign_amount']) && !(isset($transaction['foreign_currency_id']) || isset($transaction['foreign_currency_code'])) @@ -195,7 +227,16 @@ trait TransactionValidation { $data = $validator->getData(); $transactions = $data['transactions'] ?? []; - $groupTitle = $data['group_title'] ?? ''; + + if (!is_countable($data['transactions'])) { + $validator->errors()->add( + 'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')]) + ); + + return; + } + + $groupTitle = $data['group_title'] ?? ''; if ('' === $groupTitle && count($transactions) > 1) { $validator->errors()->add('group_title', (string)trans('validation.group_title_mandatory')); } @@ -210,6 +251,15 @@ trait TransactionValidation { $data = $validator->getData(); $transactions = $data['transactions'] ?? []; + + if (!is_countable($data['transactions'])) { + $validator->errors()->add( + 'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')]) + ); + + return; + } + // need at least one transaction if (0 === count($transactions)) { $validator->errors()->add('transactions', (string)trans('validation.at_least_one_transaction')); @@ -225,6 +275,15 @@ trait TransactionValidation { $data = $validator->getData(); $transactions = $data['transactions'] ?? null; + + if (!is_countable($data['transactions'])) { + $validator->errors()->add( + 'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')]) + ); + + return; + } + if (null === $transactions) { return; } @@ -263,7 +322,16 @@ trait TransactionValidation { $data = $validator->getData(); $transactions = $data['transactions'] ?? []; - $types = []; + + if (!is_countable($data['transactions'])) { + $validator->errors()->add( + 'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')]) + ); + + return; + } + + $types = []; foreach ($transactions as $index => $transaction) { $types[] = $transaction['type'] ?? 'invalid'; } @@ -289,7 +357,16 @@ trait TransactionValidation { $data = $validator->getData(); $transactions = $data['transactions'] ?? []; - $types = []; + + if (!is_countable($data['transactions'])) { + $validator->errors()->add( + 'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')]) + ); + + return; + } + + $types = []; foreach ($transactions as $index => $transaction) { $originalType = $this->getOriginalType((int)($transaction['transaction_journal_id'] ?? 0)); // if type is not set, fall back to the type of the journal, if one is given. @@ -373,6 +450,15 @@ trait TransactionValidation { $data = $validator->getData(); $transactions = $data['transactions'] ?? []; + + if (!is_countable($data['transactions'])) { + $validator->errors()->add( + 'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')]) + ); + + return; + } + // needs to be split if (count($transactions) < 2) { return; @@ -414,6 +500,15 @@ trait TransactionValidation { $data = $validator->getData(); $transactions = $data['transactions'] ?? []; + + if (!is_countable($data['transactions'])) { + $validator->errors()->add( + 'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')]) + ); + + return; + } + // needs to be split if (count($transactions) < 2) { return; @@ -497,6 +592,15 @@ trait TransactionValidation { $data = $validator->getData(); $transactions = $data['transactions'] ?? []; + + if (!is_countable($data['transactions'])) { + $validator->errors()->add( + 'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')]) + ); + + return; + } + if (count($transactions) < 2) { return; } From 3cb01a9b506543120b0c0c504d4964e308200d99 Mon Sep 17 00:00:00 2001 From: James Cole Date: Thu, 6 Feb 2020 15:05:29 +0100 Subject: [PATCH 2/2] Update groups.twig --- resources/views/v1/list/groups.twig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/views/v1/list/groups.twig b/resources/views/v1/list/groups.twig index 12352d2747..7a7fb151db 100644 --- a/resources/views/v1/list/groups.twig +++ b/resources/views/v1/list/groups.twig @@ -180,7 +180,7 @@ TODO: hide and show columns