translations

This commit is contained in:
paulwer 2023-12-15 14:45:52 +01:00
parent 3735845c44
commit 10050d567b
6 changed files with 666 additions and 627 deletions

View File

@ -18,6 +18,7 @@ use App\Http\Requests\Nordigen\ConnectNordigenBankIntegrationRequest;
use App\Jobs\Bank\ProcessBankTransactionsNordigen;
use App\Models\BankIntegration;
use App\Models\Company;
use App\Models\User;
use App\Utils\Ninja;
use Cache;
use Illuminate\Http\Request;
@ -31,9 +32,11 @@ class NordigenController extends BaseController
{
$data = $request->all();
$context = $request->getTokenContent();
$lang = $data['lang'] ?? 'en';
if (!$context)
return view('bank.nordigen.handler', [
'lang' => $lang,
'failed_reason' => "token-invalid",
"redirectUrl" => config("ninja.app_url") . "?action=nordigen_connect&status=failed&reason=token-invalid",
]);
@ -41,6 +44,7 @@ class NordigenController extends BaseController
$context["redirect"] = $data["redirect"];
if ($context["context"] != "nordigen" || array_key_exists("requisitionId", $context))
return view('bank.nordigen.handler', [
'lang' => $lang,
'failed_reason' => "token-invalid",
"redirectUrl" => ($context["redirect"]) . "?action=nordigen_connect&status=failed&reason=token-invalid",
]);
@ -50,6 +54,7 @@ class NordigenController extends BaseController
if (!(config('ninja.nordigen.secret_id') && config('ninja.nordigen.secret_key')))
return view('bank.nordigen.handler', [
'lang' => $lang,
'company' => $company,
'account' => $company->account,
'failed_reason' => "account-config-invalid",
@ -58,6 +63,7 @@ class NordigenController extends BaseController
if (!(Ninja::isSelfHost() || (Ninja::isHosted() && $account->isPaid() && $account->plan == 'enterprise')))
return view('bank.nordigen.handler', [
'lang' => $lang,
'company' => $company,
'account' => $company->account,
'failed_reason' => "not-available",
@ -69,6 +75,7 @@ class NordigenController extends BaseController
// show bank_selection_screen, when institution_id is not present
if (!array_key_exists("institution_id", $data)) {
$data = [
'lang' => $lang,
'company' => $company,
'account' => $company->account,
'institutions' => $nordigen->getInstitutions(),
@ -88,6 +95,7 @@ class NordigenController extends BaseController
if (str_contains($responseBody, '"institution_id"')) // provided institution_id was wrong
return view('bank.nordigen.handler', [
'lang' => $lang,
'company' => $company,
'account' => $company->account,
'failed_reason' => "institution-invalid",
@ -95,6 +103,7 @@ class NordigenController extends BaseController
]);
else if (str_contains($responseBody, '"reference"')) // this error can occur, when a reference was used double or is invalid => therefor we suggest the frontend to use another token
return view('bank.nordigen.handler', [
'lang' => $lang,
'company' => $company,
'account' => $company->account,
'failed_reason' => "token-invalid",
@ -102,6 +111,7 @@ class NordigenController extends BaseController
]);
else
return view('bank.nordigen.handler', [
'lang' => $lang,
'company' => $company,
'account' => $company->account,
'failed_reason' => "unknown",
@ -184,10 +194,12 @@ class NordigenController extends BaseController
{
$data = $request->all();
$lang = $data['lang'] ?? 'en';
$context = Cache::get($data["ref"]);
if (!$context || $context["context"] != "nordigen" || !array_key_exists("requisitionId", $context))
return view('bank.nordigen.handler', [
'lang' => $lang,
'failed_reason' => "ref-invalid",
"redirectUrl" => ($context && array_key_exists("redirect", $context) ? $context["redirect"] : config('ninja.app_url')) . "?action=nordigen_connect&status=failed&reason=ref-invalid",
]);
@ -198,6 +210,7 @@ class NordigenController extends BaseController
if (!(config('ninja.nordigen.secret_id') && config('ninja.nordigen.secret_key')))
return view('bank.nordigen.handler', [
'lang' => $lang,
'company' => $company,
'account' => $company->account,
'failed_reason' => "account-config-invalid",
@ -206,6 +219,7 @@ class NordigenController extends BaseController
if (!(Ninja::isSelfHost() || (Ninja::isHosted() && $account->isPaid() && $account->plan == 'enterprise')))
return view('bank.nordigen.handler', [
'lang' => $lang,
'company' => $company,
'account' => $company->account,
'failed_reason' => "not-available",
@ -219,6 +233,7 @@ class NordigenController extends BaseController
// check validity of requisition
if (!$requisition)
return view('bank.nordigen.handler', [
'lang' => $lang,
'company' => $company,
'account' => $company->account,
'failed_reason' => "requisition-not-found",
@ -226,6 +241,7 @@ class NordigenController extends BaseController
]);
if ($requisition["status"] != "LN")
return view('bank.nordigen.handler', [
'lang' => $lang,
'company' => $company,
'account' => $company->account,
'failed_reason' => "requisition-invalid-status",
@ -233,6 +249,7 @@ class NordigenController extends BaseController
]);
if (sizeof($requisition["accounts"]) == 0)
return view('bank.nordigen.handler', [
'lang' => $lang,
'company' => $company,
'account' => $company->account,
'failed_reason' => "requisition-no-accounts",

View File

@ -34,6 +34,7 @@ class ConfirmNordigenBankIntegrationRequest extends Request
{
return [
'ref' => 'required|string', // nordigen redirects only with the ref-property
'lang' => 'string',
];
}
}

View File

@ -38,6 +38,7 @@ class ConnectNordigenBankIntegrationRequest extends Request
public function rules()
{
return [
'lang' => 'string',
'institution_id' => 'string',
'redirect' => 'string', // TODO: @turbo124 @todo validate, that this is a url without / at the end
];

View File

@ -5221,6 +5221,27 @@ $lang = array(
'charges' => 'Charges',
'email_report' => 'Email Report',
'payment_type_Pay Later' => 'Pay Later',
'nordigen_handler_subtitle' => 'will gain access for your selected bank account. After selecting your institution you are redirected to theire front-page to complete the request with your account credentials.',
'nordigen_handler_error_heading_unknown' => 'An Error has occured',
'nordigen_handler_error_contents_unknown' => 'An unknown Error has occured! Reason:',
'nordigen_handler_error_heading_token_invalid' => 'Invalid Token',
'nordigen_handler_error_contents_token_invalid' => 'The provided token was invalid. Please restart the flow, with a valid one_time_token. Contact support for help, if this issue persists.',
'nordigen_handler_error_heading_account_config_invalid' => 'Missing Credentials',
'nordigen_handler_error_contents_account_config_invalid' => 'The provided credentials for nordigen are eighter missing or invalid. Contact support for help, if this issue persists.',
'nordigen_handler_error_heading_not_available' => 'Not Available',
'nordigen_handler_error_contents_not_available' => 'This flow is not available for your account. Considder upgrading to enterprise version. Contact support for help, if this issue persists.',
'nordigen_handler_error_heading_institution_invalid' => 'Invalid Institution',
'nordigen_handler_error_contents_institution_invalid' => 'The provided institution-id is invalid or no longer valid. You can go to the bank selection page by clicking the button below or cancel the flow by clicking on the \'X\' above.',
'nordigen_handler_error_heading_ref_invalid' => 'Invalid Reference',
'nordigen_handler_error_contents_ref_invalid' => 'Nordigen did not provide a valid reference. Please run flow again and contact support, if this issue persists.',
'nordigen_handler_error_heading_not_found' => 'Invalid Requisition',
'nordigen_handler_error_contents_not_found' => 'Nordigen did not provide a valid reference. Please run flow again and contact support, if this issue persists.',
'nordigen_handler_error_heading_requisition_invalid_status' => 'Not Ready',
'nordigen_handler_error_contents_requisition_invalid_status' => 'You may called this site to early. Please finish authorization and refresh this page. Contact support for help, if this issue persists.',
'nordigen_handler_error_heading_requisition_no_accounts' => 'No Accounts selected',
'nordigen_handler_error_contents_requisition_no_accounts' => 'The service has not returned any valid accounts. Considder restarting the flow.',
'nordigen_handler_restart' => 'Restart flow.',
'nordigen_handler_return' => 'Return to application.',
);
return $lang;

View File

@ -25,7 +25,7 @@
// Redirect URL that is being used when modal is being closed.
redirectUrl: "{{ $redirectUrl }}" || new URL("", window.location.origin).href,
// Text that will be displayed on the left side under the logo. Text is limited to 100 characters, and rest will be truncated. @turbo124 replace with a translated version like ctrans()
text: "{{ ($account ?? false) && !$account->isPaid() ? 'Invoice Ninja' : (isset($company) && !is_null($company) ? $company->name : 'Invoice Ninja') }} will gain access for your selected bank account. After selecting your institution you are redirected to theire front-page to complete the request with your account credentials.",
text: "{{ ($account ?? false) && !$account->isPaid() ? 'Invoice Ninja' : (isset($company) && !is_null($company) ? $company->name : 'Invoice Ninja') }} {{ ctrans('texts.nordigen_handler_subtitle', [], $lang ?? 'en') }}",
// Logo URL that will be shown below the modal form.
logoUrl: "{{ ($account ?? false) && !$account->isPaid() ? asset('images/invoiceninja-black-logo-2.png') : (isset($company) && !is_null($company) ? $company->present()->logo() : asset('images/invoiceninja-black-logo-2.png')) }}",
// Will display country list with corresponding institutions. When `countryFilter` is set to `false`, only list of institutions will be shown.
@ -79,58 +79,57 @@
contents.style["opacity"] = "80%";
let restartFlow = false; // return, restart, refresh
heading.innerHTML = "An Error has occured";
contents.innerHTML = "An unknown Error has occured! Reason: " + failedReason;
heading.innerHTML = "{{ ctrans('texts.nordigen_handler_error_heading_unknown', [], $lang ?? 'en') }}";
contents.innerHTML = "{{ ctrans('texts.nordigen_handler_error_contents_unknown', [], $lang ?? 'en') }} " + failedReason;
switch (failedReason) {
// Connect Screen Errors
case "token-invalid":
heading.innerHTML = "Invalid Token";
contents.innerHTML = "The provided token was invalid. Please restart the flow, with a valid one_time_token. Contact support for help, if this issue persists.";
heading.innerHTML = "{{ ctrans('texts.nordigen_handler_error_heading_token_invalid', [], $lang ?? 'en') }}";
contents.innerHTML = "{{ ctrans('texts.nordigen_handler_error_contents_token_invalid', [], $lang ?? 'en') }}";
break;
case "account-config-invalid":
heading.innerHTML = "Missing Credentials";
contents.innerHTML = "The provided credentials for nordigen are eighter missing or invalid. Contact support for help, if this issue persists.";
heading.innerHTML = "{{ ctrans('texts.nordigen_handler_error_heading_account_config_invalid', [], $lang ?? 'en') }}";
contents.innerHTML = "{{ ctrans('texts.nordigen_handler_error_contents_account_config_invalid', [], $lang ?? 'en') }}";
break;
case "not-available":
heading.innerHTML = "Not Available";
contents.innerHTML = "This flow is not available for your account. Considder upgrading to enterprise version. Contact support for help, if this issue persists.";
heading.innerHTML = "{{ ctrans('texts.nordigen_handler_error_heading_not_available', [], $lang ?? 'en') }}";
contents.innerHTML = "{{ ctrans('texts.nordigen_handler_error_contents_not_available', [], $lang ?? 'en') }}";
break;
case "institution-invalid":
restartFlow = true;
heading.innerHTML = "Invalid Institution";
contents.innerHTML = "The provided institution-id is invalid or no longer valid. You can go to the bank selection page by clicking the button below or cancel the flow by clicking on the 'X' above.";
heading.innerHTML = "{{ ctrans('texts.nordigen_handler_error_heading_institution_invalid', [], $lang ?? 'en') }}";
contents.innerHTML = "{{ ctrans('texts.nordigen_handler_error_contents_institution_invalid', [], $lang ?? 'en') }}";
break;
// Confirm Screen Errors
case "ref-invalid":
heading.innerHTML = "Invalid Reference";
contents.innerHTML = "Nordigen did not provide a valid reference. Please run flow again and contact support, if this issue persists.";
heading.innerHTML = "{{ ctrans('texts.nordigen_handler_error_heading_ref_invalid', [], $lang ?? 'en') }}";
contents.innerHTML = "{{ ctrans('texts.nordigen_handler_error_contents_ref_invalid', [], $lang ?? 'en') }}";
break;
case "requisition-not-found":
heading.innerHTML = "Invalid Requisition";
contents.innerHTML = "Nordigen did not provide a valid reference. Please run flow again and contact support, if this issue persists.";
heading.innerHTML = "{{ ctrans('texts.nordigen_handler_error_heading_not_found', [], $lang ?? 'en') }}";
contents.innerHTML = "{{ ctrans('texts.nordigen_handler_error_contents_not_found', [], $lang ?? 'en') }}";
break;
case "requisition-invalid-status":
heading.innerHTML = "Not Ready";
contents.innerHTML = "You may called this site to early. Please finish authorization and refresh this page. Contact support for help, if this issue persists.";
heading.innerHTML = "{{ ctrans('texts.nordigen_handler_error_heading_requisition_invalid_status') }}";
contents.innerHTML = "{{ ctrans('texts.nordigen_handler_error_contents_requisition_invalid_status', [], $lang ?? 'en') }}";
break;
case "requisition-no-accounts":
heading.innerHTML = "No Accounts selected";
contents.innerHTML = "The service has not returned any valid accounts. Considder restarting the flow.";
heading.innerHTML = "{{ ctrans('texts.nordigen_handler_error_heading_requisition_no_accounts', [], $lang ?? 'en') }}";
contents.innerHTML = "{{ ctrans('texts.nordigen_handler_error_contents_requisition_no_accounts', [], $lang ?? 'en') }}";
break;
case "unknown":
break;
default:
console.warn('Invalid or missing failed_reason code: ' + failedReason);
break;
}
wrapper.appendChild(contents);
const restartUrl = new URL(window.location.pathname, window.location.origin); // no searchParams
const returnButton = document.createElement('div');
returnButton.className = "mt-4";
returnButton.innerHTML = `<a class="button button-primary bg-blue-600 my-4" href="${restartFlow ? restartUrl.href : config.redirectUrl}">${restartFlow ? 'Restart flow.' : 'Return to application.'}</a>`
wrapper.appendChild(returnButton);
returnButton.innerHTML = `<a class="button button-primary bg-blue-600 my-4" href="${restartFlow ? restartUrl.href : config.redirectUrl}">${restartFlow ? "{{ ctrans('texts.nordigen_handler_restart', [], $lang ?? 'en') }}" : "{{ ctrans('texts.nordigen_handler_return', [], $lang ?? 'en') }}"}</a>`
wrapper.ald(returnButton);
}
</script>