2015-02-05 21:39:52 -06:00
< ? php
2018-04-28 03:29:31 -05:00
2017-12-10 02:02:26 -06:00
/**
* validation . php
2020-01-24 23:08:56 -06:00
* Copyright ( c ) 2019 james @ firefly - iii . org
2017-12-10 02:02:26 -06:00
*
2019-10-01 23:43:38 -05:00
* This file is part of Firefly III ( https :// github . com / firefly - iii ) .
2017-12-10 02:02:26 -06:00
*
2019-10-01 23:43:38 -05:00
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
2017-12-10 02:02:26 -06:00
*
2019-10-01 23:43:38 -05:00
* This program is distributed in the hope that it will be useful ,
2017-12-10 02:02:26 -06:00
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
2019-10-01 23:43:38 -05:00
* GNU Affero General Public License for more details .
2017-12-10 02:02:26 -06:00
*
2019-10-01 23:43:38 -05:00
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
2017-12-10 02:02:26 -06:00
*/
2017-12-19 12:25:50 -06:00
2023-01-14 08:32:51 -06:00
// Ignore this comment
2018-05-11 03:08:34 -05:00
declare ( strict_types = 1 );
2015-02-05 21:39:52 -06:00
return [
2024-10-13 22:14:52 -05:00
'filter_must_be_in' => 'Filter ":filter" must be one of: :values' ,
'filter_not_string' => 'Filter ":filter" is expected to be a string of text' ,
'bad_api_filter' => 'This API endpoint does not support ":filter" as a filter.' ,
'nog_logged_in' => 'You are not logged in.' ,
'bad_type_source' => 'Firefly III can\'t determine the transaction type based on this source account.' ,
'bad_type_destination' => 'Firefly III can\'t determine the transaction type based on this destination account.' ,
'missing_where' => 'Array is missing "where"-clause' ,
'missing_update' => 'Array is missing "update"-clause' ,
'invalid_where_key' => 'JSON contains an invalid key for the "where"-clause' ,
'invalid_update_key' => 'JSON contains an invalid key for the "update"-clause' ,
'invalid_query_data' => 'There is invalid data in the %s:%s field of your query.' ,
'invalid_query_account_type' => 'Your query contains accounts of different types, which is not allowed.' ,
'invalid_query_currency' => 'Your query contains accounts that have different currency settings, which is not allowed.' ,
'iban' => 'This is not a valid IBAN.' ,
'zero_or_more' => 'The value cannot be negative.' ,
'more_than_zero' => 'The value must be more than zero.' ,
'more_than_zero_correct' => 'The value must be zero or more.' ,
'no_asset_account' => 'This is not an asset account.' ,
'date_or_time' => 'The value must be a valid date or time value (ISO 8601).' ,
'source_equals_destination' => 'The source account equals the destination account.' ,
'unique_account_number_for_user' => 'It looks like this account number is already in use.' ,
'unique_iban_for_user' => 'It looks like this IBAN is already in use.' ,
'reconciled_forbidden_field' => 'This transaction is already reconciled, you cannot change the ":field"' ,
'deleted_user' => 'Due to security constraints, you cannot register using this email address.' ,
'rule_trigger_value' => 'This value is invalid for the selected trigger.' ,
'rule_action_expression' => 'Invalid expression. :error' ,
'rule_action_value' => 'This value is invalid for the selected action.' ,
'file_already_attached' => 'Uploaded file ":name" is already attached to this object.' ,
'file_attached' => 'Successfully uploaded file ":name".' ,
'file_zero' => 'The file is zero bytes in size.' ,
'must_exist' => 'The ID in field :attribute does not exist in the database.' ,
'all_accounts_equal' => 'All accounts in this field must be equal.' ,
'group_title_mandatory' => 'A group title is mandatory when there is more than one transaction.' ,
'transaction_types_equal' => 'All splits must be of the same type.' ,
'invalid_transaction_type' => 'Invalid transaction type.' ,
'invalid_selection' => 'Your selection is invalid.' ,
'belongs_user' => 'This value is linked to an object that does not seem to exist.' ,
'belongs_user_or_user_group' => 'This value is linked to an object that does not seem to exist in your current financial administration.' ,
2024-11-10 08:30:02 -06:00
'no_access_group' => 'The user has no access to this administration.' ,
2024-10-13 22:14:52 -05:00
'no_accepted_roles_defined' => 'No access roles have been defined for this endpoint, access denied.' ,
'at_least_one_transaction' => 'Need at least one transaction.' ,
'recurring_transaction_id' => 'Need at least one transaction.' ,
'need_id_to_match' => 'You need to submit this entry with an ID for the API to be able to match it.' ,
'too_many_unmatched' => 'Too many submitted transactions cannot be matched to their respective database entries. Make sure existing entries have a valid ID.' ,
'id_does_not_match' => 'Submitted ID #:id does not match expected ID. Make sure it matches or omit the field.' ,
'at_least_one_repetition' => 'Need at least one repetition.' ,
'require_repeat_until' => 'Require either a number of repetitions, or an end date (repeat_until). Not both.' ,
'require_currency_info' => 'The content of this field is invalid without currency information.' ,
'not_transfer_account' => 'This account is not an account that can be used for transfers.' ,
'require_currency_amount' => 'The content of this field is invalid without foreign amount information.' ,
'require_foreign_currency' => 'This field requires a number' ,
'require_foreign_dest' => 'This field value must match the currency of the destination account.' ,
'require_foreign_src' => 'This field value must match the currency of the source account.' ,
'equal_description' => 'Transaction description should not equal global description.' ,
'file_invalid_mime' => 'File ":name" is of type ":mime" which is not accepted as a new upload.' ,
'file_too_large' => 'File ":name" is too large.' ,
'belongs_to_user' => 'The value of :attribute is unknown.' ,
'accepted' => 'The :attribute must be accepted.' ,
'bic' => 'This is not a valid BIC.' ,
'at_least_one_trigger' => 'Rule must have at least one trigger.' ,
'at_least_one_active_trigger' => 'Rule must have at least one active trigger.' ,
'at_least_one_action' => 'Rule must have at least one action.' ,
'at_least_one_active_action' => 'Rule must have at least one active action.' ,
'base64' => 'This is not valid base64 encoded data.' ,
'model_id_invalid' => 'The given ID seems invalid for this model.' ,
'less' => ':attribute must be less than 10,000,000' ,
'active_url' => 'The :attribute is not a valid URL.' ,
'after' => 'The :attribute must be a date after :date.' ,
'date_after' => 'The start date must be before the end date.' ,
'alpha' => 'The :attribute may only contain letters.' ,
'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.' ,
'alpha_num' => 'The :attribute may only contain letters and numbers.' ,
'array' => 'The :attribute must be an array.' ,
'unique_for_user' => 'There already is an entry with this :attribute.' ,
'before' => 'The :attribute must be a date before :date.' ,
'unique_object_for_user' => 'This name is already in use.' ,
'unique_account_for_user' => 'This account name is already in use.' ,
2023-01-14 08:32:51 -06:00
// Ignore this comment
2024-10-13 22:14:52 -05:00
'between.numeric' => 'The :attribute must be between :min and :max.' ,
'between.file' => 'The :attribute must be between :min and :max kilobytes.' ,
'between.string' => 'The :attribute must be between :min and :max characters.' ,
'between.array' => 'The :attribute must have between :min and :max items.' ,
'boolean' => 'The :attribute field must be true or false.' ,
'confirmed' => 'The :attribute confirmation does not match.' ,
'date' => 'The :attribute is not a valid date.' ,
'date_format' => 'The :attribute does not match the format :format.' ,
'different' => 'The :attribute and :other must be different.' ,
'digits' => 'The :attribute must be :digits digits.' ,
'digits_between' => 'The :attribute must be between :min and :max digits.' ,
'email' => 'The :attribute must be a valid email address.' ,
'filled' => 'The :attribute field is required.' ,
'exists' => 'The selected :attribute is invalid.' ,
'image' => 'The :attribute must be an image.' ,
'in' => 'The selected :attribute is invalid.' ,
'integer' => 'The :attribute must be an integer.' ,
'ip' => 'The :attribute must be a valid IP address.' ,
'json' => 'The :attribute must be a valid JSON string.' ,
'max.numeric' => 'The :attribute may not be greater than :max.' ,
'max.file' => 'The :attribute may not be greater than :max kilobytes.' ,
'max.string' => 'The :attribute may not be greater than :max characters.' ,
'max.array' => 'The :attribute may not have more than :max items.' ,
'mimes' => 'The :attribute must be a file of type: :values.' ,
'min.numeric' => 'The :attribute must be at least :min.' ,
'lte.numeric' => 'The :attribute must be less than or equal :value.' ,
'min.file' => 'The :attribute must be at least :min kilobytes.' ,
'min.string' => 'The :attribute must be at least :min characters.' ,
'min.array' => 'The :attribute must have at least :min items.' ,
'not_in' => 'The selected :attribute is invalid.' ,
'numeric' => 'The :attribute must be a number.' ,
'scientific_notation' => 'The :attribute cannot use the scientific notation.' ,
'numeric_native' => 'The native amount must be a number.' ,
'numeric_destination' => 'The destination amount must be a number.' ,
'numeric_source' => 'The source amount must be a number.' ,
'regex' => 'The :attribute format is invalid.' ,
'required' => 'The :attribute field is required.' ,
'required_if' => 'The :attribute field is required when :other is :value.' ,
'required_unless' => 'The :attribute field is required unless :other is in :values.' ,
'required_with' => 'The :attribute field is required when :values is present.' ,
'required_with_all' => 'The :attribute field is required when :values is present.' ,
'required_without' => 'The :attribute field is required when :values is not present.' ,
'required_without_all' => 'The :attribute field is required when none of :values are present.' ,
'same' => 'The :attribute and :other must match.' ,
'size.numeric' => 'The :attribute must be :size.' ,
'amount_min_over_max' => 'The minimum amount cannot be larger than the maximum amount.' ,
'size.file' => 'The :attribute must be :size kilobytes.' ,
'size.string' => 'The :attribute must be :size characters.' ,
'size.array' => 'The :attribute must contain :size items.' ,
'unique' => 'The :attribute has already been taken.' ,
'string' => 'The :attribute must be a string.' ,
'url' => 'The :attribute format is invalid.' ,
'timezone' => 'The :attribute must be a valid zone.' ,
'2fa_code' => 'The :attribute field is invalid.' ,
'dimensions' => 'The :attribute has invalid image dimensions.' ,
'distinct' => 'The :attribute field has a duplicate value.' ,
'file' => 'The :attribute must be a file.' ,
'in_array' => 'The :attribute field does not exist in :other.' ,
'present' => 'The :attribute field must be present.' ,
'amount_zero' => 'The total amount cannot be zero.' ,
'current_target_amount' => 'The current amount must be less than the target amount.' ,
'unique_piggy_bank_for_user' => 'The name of the piggy bank must be unique.' ,
'unique_object_group' => 'The group name must be unique' ,
'starts_with' => 'The value must start with :values.' ,
'unique_webhook' => 'You already have a webhook with this combination of URL, trigger, response and delivery.' ,
'unique_existing_webhook' => 'You already have another webhook with this combination of URL, trigger, response and delivery.' ,
'same_account_type' => 'Both accounts must be of the same account type' ,
'same_account_currency' => 'Both accounts must have the same currency setting' ,
2020-03-13 15:35:22 -05:00
2023-01-14 08:32:51 -06:00
// Ignore this comment
2024-10-13 22:14:52 -05:00
'secure_password' => 'This is not a secure password. Please try again. For more information, visit https://bit.ly/FF3-password' ,
'valid_recurrence_rep_type' => 'Invalid repetition type for recurring transactions.' ,
'valid_recurrence_rep_moment' => 'Invalid repetition moment for this type of repetition.' ,
'invalid_account_info' => 'Invalid account information.' ,
'attributes' => [
2018-02-16 08:17:55 -06:00
'email' => 'email address' ,
'description' => 'description' ,
'amount' => 'amount' ,
2020-11-08 08:17:44 -06:00
'transactions.*.amount' => 'transaction amount' ,
2018-02-16 08:17:55 -06:00
'name' => 'name' ,
'piggy_bank_id' => 'piggy bank ID' ,
'targetamount' => 'target amount' ,
2019-06-16 06:16:18 -05:00
'opening_balance_date' => 'opening balance date' ,
'opening_balance' => 'opening balance' ,
2018-02-16 08:17:55 -06:00
'match' => 'match' ,
'amount_min' => 'minimum amount' ,
'amount_max' => 'maximum amount' ,
'title' => 'title' ,
'tag' => 'tag' ,
'transaction_description' => 'transaction description' ,
'rule-action-value.1' => 'rule action value #1' ,
'rule-action-value.2' => 'rule action value #2' ,
'rule-action-value.3' => 'rule action value #3' ,
'rule-action-value.4' => 'rule action value #4' ,
'rule-action-value.5' => 'rule action value #5' ,
'rule-action.1' => 'rule action #1' ,
'rule-action.2' => 'rule action #2' ,
'rule-action.3' => 'rule action #3' ,
'rule-action.4' => 'rule action #4' ,
'rule-action.5' => 'rule action #5' ,
'rule-trigger-value.1' => 'rule trigger value #1' ,
'rule-trigger-value.2' => 'rule trigger value #2' ,
'rule-trigger-value.3' => 'rule trigger value #3' ,
'rule-trigger-value.4' => 'rule trigger value #4' ,
'rule-trigger-value.5' => 'rule trigger value #5' ,
'rule-trigger.1' => 'rule trigger #1' ,
'rule-trigger.2' => 'rule trigger #2' ,
'rule-trigger.3' => 'rule trigger #3' ,
'rule-trigger.4' => 'rule trigger #4' ,
'rule-trigger.5' => 'rule trigger #5' ,
2018-01-12 11:44:59 -06:00
],
2019-03-31 06:36:49 -05:00
// validation of accounts:
2024-10-13 22:14:52 -05:00
'withdrawal_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.' ,
'withdrawal_source_bad_data' => '[a] Could not find a valid source account when searching for ID ":id" or name ":name".' ,
'withdrawal_dest_need_data' => '[a] Need to get a valid destination account ID and/or valid destination account name to continue.' ,
'withdrawal_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".' ,
2019-03-31 06:36:49 -05:00
2024-10-13 22:14:52 -05:00
'withdrawal_dest_iban_exists' => 'This destination account IBAN is already in use by an asset account or a liability and cannot be used as a withdrawal destination.' ,
'deposit_src_iban_exists' => 'This source account IBAN is already in use by an asset account or a liability and cannot be used as a deposit source.' ,
2023-06-23 03:57:26 -05:00
2024-10-13 22:14:52 -05:00
'reconciliation_source_bad_data' => 'Could not find a valid reconciliation account when searching for ID ":id" or name ":name".' ,
2022-10-30 00:45:56 -05:00
2024-10-13 22:14:52 -05:00
'generic_source_bad_data' => '[e] Could not find a valid source account when searching for ID ":id" or name ":name".' ,
2021-03-09 23:34:03 -06:00
2024-10-13 22:14:52 -05:00
'deposit_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.' ,
'deposit_source_bad_data' => '[b] Could not find a valid source account when searching for ID ":id" or name ":name".' ,
'deposit_dest_need_data' => '[b] Need to get a valid destination account ID and/or valid destination account name to continue.' ,
'deposit_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".' ,
'deposit_dest_wrong_type' => 'The submitted destination account is not of the right type.' ,
2019-03-31 06:36:49 -05:00
2023-01-14 08:32:51 -06:00
// Ignore this comment
2024-10-13 22:14:52 -05:00
'transfer_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.' ,
'transfer_source_bad_data' => '[c] Could not find a valid source account when searching for ID ":id" or name ":name".' ,
'transfer_dest_need_data' => '[c] Need to get a valid destination account ID and/or valid destination account name to continue.' ,
'transfer_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".' ,
'need_id_in_edit' => 'Each split must have transaction_journal_id (either valid ID or 0).' ,
2019-06-16 06:16:18 -05:00
2024-10-13 22:14:52 -05:00
'ob_source_need_data' => 'Need to get a valid source account ID and/or valid source account name to continue.' ,
'lc_source_need_data' => 'Need to get a valid source account ID to continue.' ,
'ob_dest_need_data' => '[d] Need to get a valid destination account ID and/or valid destination account name to continue.' ,
'ob_dest_bad_data' => 'Could not find a valid destination account when searching for ID ":id" or name ":name".' ,
'reconciliation_either_account' => 'To submit a reconciliation, you must submit either a source or a destination account. Not both, not neither.' ,
2019-07-01 13:22:35 -05:00
2024-10-13 22:14:52 -05:00
'generic_invalid_source' => 'You can\'t use this account as the source account.' ,
'generic_invalid_destination' => 'You can\'t use this account as the destination account.' ,
2020-01-07 22:48:45 -06:00
2024-10-13 22:14:52 -05:00
'generic_no_source' => 'You must submit source account information or submit a transaction journal ID.' ,
'generic_no_destination' => 'You must submit destination account information or submit a transaction journal ID.' ,
2022-01-24 00:24:01 -06:00
2024-10-13 22:14:52 -05:00
'gte.numeric' => 'The :attribute must be greater than or equal to :value.' ,
'gt.numeric' => 'The :attribute must be greater than :value.' ,
'gte.file' => 'The :attribute must be greater than or equal to :value kilobytes.' ,
'gte.string' => 'The :attribute must be greater than or equal to :value characters.' ,
'gte.array' => 'The :attribute must have :value items or more.' ,
2024-11-23 12:19:46 -06:00
'missing_with' => 'The :attribute cannot be combined with another field.' ,
2020-03-13 15:35:22 -05:00
2024-01-04 07:59:37 -06:00
'amount_required_for_auto_budget' => 'The amount is required.' ,
'auto_budget_amount_positive' => 'The amount must be more than zero.' ,
2024-01-02 15:28:58 -06:00
2024-10-13 22:14:52 -05:00
'auto_budget_period_mandatory' => 'The auto budget period is a mandatory field.' ,
2023-01-29 00:00:26 -06:00
// no access to administration:
2024-10-13 22:14:52 -05:00
'no_auth_user_group' => 'You have to be logged in to access this administration.' ,
'no_access_user_group' => 'You do not have the correct access rights for this administration.' ,
'administration_owner_rename' => 'You can\'t rename your standard administration.' ,
'existing_mfa_code' => 'Please enter a valid code' ,
2015-02-05 21:39:52 -06:00
];
2023-01-14 08:32:51 -06:00
// Ignore this comment