diff --git a/app/Console/Commands/BackupUpdate.php b/app/Console/Commands/BackupUpdate.php index b6f1cb4f5baf..be383b3525ae 100644 --- a/app/Console/Commands/BackupUpdate.php +++ b/app/Console/Commands/BackupUpdate.php @@ -85,7 +85,7 @@ class BackupUpdate extends Command ->each(function ($company) { $company_logo_path = $company->settings->company_logo; - if ($company_logo_path == 'https://invoicing.co/images/new_logo.png' || $company_logo_path == '') { + if ($company_logo_path == config('ninja.app_logo') || $company_logo_path == '') { return; } diff --git a/app/Console/Commands/CheckData.php b/app/Console/Commands/CheckData.php index e28c3dd1f7a2..859abe405cd7 100644 --- a/app/Console/Commands/CheckData.php +++ b/app/Console/Commands/CheckData.php @@ -977,7 +977,7 @@ class CheckData extends Command $cc = ClientContact::on('db-ninja-01')->where('company_id', config('ninja.ninja_default_company_id'))->where('email', $cu->user->email)->first(); if ($cc) { - $ninja_portal_url = "https://invoiceninja.invoicing.co/client/ninja/{$cc->contact_key}/{$cu->account->key}"; + $ninja_portal_url = config('ninja.ninja_client_portal')."/client/ninja/{$cc->contact_key}/{$cu->account->key}"; $cu->ninja_portal_url = $ninja_portal_url; $cu->save(); @@ -990,7 +990,7 @@ class CheckData extends Command $cc = $c->contacts()->first(); if ($cc) { - $ninja_portal_url = "https://invoiceninja.invoicing.co/client/ninja/{$cc->contact_key}/{$cu->account->key}"; + $ninja_portal_url = config('ninja.ninja_client_portal')."/client/ninja/{$cc->contact_key}/{$cu->account->key}"; $cu->ninja_portal_url = $ninja_portal_url; $cu->save(); diff --git a/app/Http/Controllers/Auth/ContactLoginController.php b/app/Http/Controllers/Auth/ContactLoginController.php index 0eca53814132..42add3851db3 100644 --- a/app/Http/Controllers/Auth/ContactLoginController.php +++ b/app/Http/Controllers/Auth/ContactLoginController.php @@ -55,7 +55,7 @@ class ContactLoginController extends Controller /** @var \App\Models\Company $company **/ if ($company) { $account = $company->account; - } elseif (! $company && strpos($request->getHost(), 'invoicing.co') !== false) { + } elseif (! $company && strpos($request->getHost(), config('ninja.app_domain')) !== false) { $subdomain = explode('.', $request->getHost())[0]; MultiDB::findAndSetDbByDomain(['subdomain' => $subdomain]); $company = Company::where('subdomain', $subdomain)->first(); diff --git a/app/Http/Controllers/Bank/YodleeController.php b/app/Http/Controllers/Bank/YodleeController.php index e17769be4eb4..6b353f8e3841 100644 --- a/app/Http/Controllers/Bank/YodleeController.php +++ b/app/Http/Controllers/Bank/YodleeController.php @@ -51,7 +51,7 @@ class YodleeController extends BaseController $this->getAccounts($company, $token); } - $redirect_url = isset($request->getTokenContent()['is_react']) && $request->getTokenContent()['is_react'] ? 'https://app.invoicing.co/#/' : 'https://invoicing.co/'; + $redirect_url = isset($request->getTokenContent()['is_react']) && $request->getTokenContent()['is_react'] ? config('ninja.react_url') : config('ninja.app_url'); $data = [ 'access_token' => $yodlee->getAccessToken(), diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index 933bb7c30ced..f63c33cdd22f 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -530,8 +530,8 @@ class BaseController extends Controller $paginator = $query->paginate($limit); - /** @phpstan-ignore-next-line **/ - $query = $paginator->getCollection(); + /** @phpstan-ignore-next-line */ + $query = $paginator->getCollection(); // @phpstan-ignore-line $resource = new Collection($query, $transformer, $this->entity_type); @@ -636,7 +636,8 @@ class BaseController extends Controller $paginator = $query->paginate($limit); /** @phpstan-ignore-next-line **/ - $query = $paginator->getCollection(); + $query = $paginator->getCollection();// @phpstan-ignore-line + $resource = new Collection($query, $transformer, $this->entity_type); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); } @@ -885,7 +886,8 @@ class BaseController extends Controller $paginator = $query->paginate($limit); /** @phpstan-ignore-next-line **/ - $query = $paginator->getCollection(); + $query = $paginator->getCollection();// @phpstan-ignore-line + $resource = new Collection($query, $transformer, $this->entity_type); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); @@ -951,7 +953,8 @@ class BaseController extends Controller if ($query instanceof Builder) { $limit = $this->resolveQueryLimit(); $paginator = $query->paginate($limit); - $query = $paginator->getCollection(); + $query = $paginator->getCollection();// @phpstan-ignore-line + $resource = new Collection($query, $transformer, $this->entity_type); $resource->setPaginator(new IlluminatePaginatorAdapter($paginator)); } @@ -1092,8 +1095,8 @@ class BaseController extends Controller /** @var \App\Models\Account $account */ //always redirect invoicing.co to invoicing.co - if (Ninja::isHosted() && !in_array(request()->getSchemeAndHttpHost(), ['https://staging.invoicing.co', 'https://invoicing.co', 'https://demo.invoicing.co', 'https://invoiceninja.net'])) { - return redirect()->secure('https://invoicing.co'); + if (Ninja::isHosted() && !in_array(request()->getSchemeAndHttpHost(), ['https://staging.invoicing.co', 'https://invoicing.co', 'https://demo.invoicing.co', 'https://invoiceninja.net', config('ninja.app_url')])) { + return redirect()->secure(config('ninja.app_url')); } if (config('ninja.require_https') && ! request()->isSecure()) { diff --git a/app/Http/Controllers/ClientPortal/ApplePayDomainController.php b/app/Http/Controllers/ClientPortal/ApplePayDomainController.php index ed1e174a9529..70415dfa48f9 100644 --- a/app/Http/Controllers/ClientPortal/ApplePayDomainController.php +++ b/app/Http/Controllers/ClientPortal/ApplePayDomainController.php @@ -44,7 +44,7 @@ class ApplePayDomainController extends Controller $domain_name = $request->getHost(); - if (strpos($domain_name, 'invoicing.co') !== false) { + if (strpos($domain_name, config('ninja.app_domain')) !== false) { $subdomain = explode('.', $domain_name)[0]; $query = [ diff --git a/app/Http/Controllers/PreviewController.php b/app/Http/Controllers/PreviewController.php index 0e0e2a420c58..0359f5fa0076 100644 --- a/app/Http/Controllers/PreviewController.php +++ b/app/Http/Controllers/PreviewController.php @@ -53,10 +53,6 @@ class PreviewController extends BaseController public function live(PreviewInvoiceRequest $request): mixed { - if (Ninja::isHosted() && !in_array($request->getHost(), ['preview.invoicing.co','staging.invoicing.co'])) { - return response()->json(['message' => 'This server cannot handle this request.'], 400); - } - $start = microtime(true); /** Build models */ diff --git a/app/Http/Controllers/StripeConnectController.php b/app/Http/Controllers/StripeConnectController.php index 3a5f9ddd8e0f..7dc2ef9b3427 100644 --- a/app/Http/Controllers/StripeConnectController.php +++ b/app/Http/Controllers/StripeConnectController.php @@ -51,7 +51,7 @@ class StripeConnectController extends BaseController } $stripe_client_id = config('ninja.ninja_stripe_client_id'); - $redirect_uri = 'https://invoicing.co/stripe/completed'; + $redirect_uri = config('ninja.app_url').'/stripe/completed'; $endpoint = "https://connect.stripe.com/oauth/authorize?response_type=code&client_id={$stripe_client_id}&redirect_uri={$redirect_uri}&scope=read_write&state={$token}"; return redirect($endpoint); @@ -139,9 +139,9 @@ class StripeConnectController extends BaseController // StripeWebhook::dispatch($company->company_key, $company_gateway->id); if(isset($request->getTokenContent()['is_react']) && $request->getTokenContent()['is_react']) { - $redirect_uri = 'https://app.invoicing.co/#/settings/online_payments'; + $redirect_uri = config('ninja.react_url').'/#/settings/online_payments'; } else { - $redirect_uri = 'https://invoicing.co/stripe/completed'; + $redirect_uri = config('ninja.app_url').'/stripe/completed'; } //response here diff --git a/app/Http/Middleware/ContactRegister.php b/app/Http/Middleware/ContactRegister.php index fa3f62570171..edef524d5b23 100644 --- a/app/Http/Middleware/ContactRegister.php +++ b/app/Http/Middleware/ContactRegister.php @@ -22,7 +22,7 @@ class ContactRegister $domain_name = $request->getHost(); /* Hosted */ - if (strpos($domain_name, 'invoicing.co') !== false) { + if (strpos($domain_name, config('ninja.app_domain')) !== false) { $subdomain = explode('.', $domain_name)[0]; $query = [ diff --git a/app/Http/Middleware/SessionDomains.php b/app/Http/Middleware/SessionDomains.php index 261f84217c01..6016a048d02e 100644 --- a/app/Http/Middleware/SessionDomains.php +++ b/app/Http/Middleware/SessionDomains.php @@ -32,8 +32,7 @@ class SessionDomains $domain_name = $request->getHost(); - if (strpos($domain_name, 'invoicing.co') !== false) { - // config(['session.domain' => '.invoicing.co']); + if (strpos($domain_name, config('ninja.app_domain')) !== false) { } else { config(['session.domain' => $domain_name]); } diff --git a/app/Http/Middleware/SetDomainNameDb.php b/app/Http/Middleware/SetDomainNameDb.php index 8665dd7467b1..055305858714 100644 --- a/app/Http/Middleware/SetDomainNameDb.php +++ b/app/Http/Middleware/SetDomainNameDb.php @@ -41,7 +41,7 @@ class SetDomainNameDb $domain_name = $request->getHost(); - if (strpos($domain_name, 'invoicing.co') !== false) { + if (strpos($domain_name, config('ninja.app_domain')) !== false) { $subdomain = explode('.', $domain_name)[0]; $query = [ diff --git a/app/Mail/Ninja/StripeConnectFailed.php b/app/Mail/Ninja/StripeConnectFailed.php index 1e11c0430606..e0adefda55e5 100644 --- a/app/Mail/Ninja/StripeConnectFailed.php +++ b/app/Mail/Ninja/StripeConnectFailed.php @@ -39,7 +39,7 @@ class StripeConnectFailed extends Mailable { return new Envelope( subject: "Stripe Connect not configured, please login and connect.", - from: "maildelivery@invoicing.co", + from: config('ninja.contact.email'), to: $this->user->email, ); } diff --git a/app/Services/Pdf/PdfMock.php b/app/Services/Pdf/PdfMock.php index d1ed82dc5fa8..bc20ee18eaf8 100644 --- a/app/Services/Pdf/PdfMock.php +++ b/app/Services/Pdf/PdfMock.php @@ -213,7 +213,7 @@ class PdfMock '$client.billing_address2' => '63993 Aiyana View', '$client.billing_address1' => '8447', '$client.shipping_country' => 'USA', - '$invoiceninja.whitelabel' => 'https://invoicing.co/images/new_logo.png', + '$invoiceninja.whitelabel' => config('ninja.app_logo'), '$client.billing_address' => '8447
63993 Aiyana View
Aufderharchester, North Carolina 11243
United States
', '$client.billing_country' => 'USA', '$task.gross_line_total' => '100', @@ -837,7 +837,7 @@ class PdfMock '$purchase_order.due_date' => '02-12-2021', '$vendor.billing_address1' => '589', '$vendor.billing_address2' => '761 Odessa Centers Suite 673', - '$invoiceninja.whitelabel' => 'https://invoicing.co/images/new_logo.png', + '$invoiceninja.whitelabel' => config('ninja.app_logo'), '$purchase_order.custom1' => 'Custom 1', '$purchase_order.custom2' => 'Custom 2', '$purchase_order.custom3' => 'Custom 3', @@ -913,7 +913,7 @@ class PdfMock '$created_by_user' => 'Mr. Louvenia Armstrong Prof. Reyes Anderson', '$vendor.currency' => 'USD', '$company.country' => 'United States', - '$tech_hero_image' => 'https://invoicing.co/images/pdf-designs/tech-hero-image.jpg', + '$tech_hero_image' => config('ninja.app_url').'/images/pdf-designs/tech-hero-image.jpg', '$company.website' => 'http://www.dare.com/vero-consequatur-eveniet-dolorum-exercitationem-alias-repellat.html', '$gross_subtotal' => '$10,256.40', '$emailSignature' => ' ', diff --git a/config/ninja.php b/config/ninja.php index 45b4950d7ce4..b1bdf9b05637 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -11,6 +11,8 @@ return [ 'version_url' => 'https://pdf.invoicing.co/api/version', 'app_name' => env('APP_NAME', 'Invoice Ninja'), 'app_env' => env('APP_ENV', 'selfhosted'), + 'app_logo' => env('APP_LOGO', 'https://invoicing.co/images/new_logo.png'), + 'ninja_client_portal' => env('NINJA_CLIENT_PORTAL', 'https://invoiceninja.invoicing.co'), 'debug_enabled' => env('APP_DEBUG', false), 'require_https' => env('REQUIRE_HTTPS', true), 'app_url' => rtrim(env('APP_URL', ''), '/'), diff --git a/lang/en/texts.php b/lang/en/texts.php index a2a4db566a58..64be06692ef9 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -4260,7 +4260,7 @@ $LANG = array( 'direct_debit' => 'Direct Debit', 'clone_to_expense' => 'Clone to Expense', 'checkout' => 'Checkout', - 'acss' => 'Pre-authorized debit payments', + 'acss' => 'ACSS Debit', 'invalid_amount' => 'Invalid amount. Number/Decimal values only.', 'client_payment_failure_body' => 'Payment for Invoice :invoice for amount :amount failed.', 'browser_pay' => 'Google Pay, Apple Pay, Microsoft Pay', diff --git a/lang/fr_CA/texts.php b/lang/fr_CA/texts.php index 2dcde6905751..8730e383b55c 100644 --- a/lang/fr_CA/texts.php +++ b/lang/fr_CA/texts.php @@ -958,7 +958,7 @@ $LANG = array( 'header_font_id' => 'Police de l\'en-tête', 'body_font_id' => 'Police du corps', 'color_font_help' => 'Note: la couleur principale et les polices sont aussi utilisées dans le portail client et dans les modèles de courriels personnalisés.', - 'live_preview' => 'PRÉVISUALISATION', + 'live_preview' => 'Prévisualitsation', 'invalid_mail_config' => 'impossible d\'envoyer le courriel, veuillez vérifier vos paramètres courriel.', 'invoice_message_button' => 'Pour voir la facture de :amount, cliquez sur le bouton ci-dessous.', 'quote_message_button' => 'Pour voir la soumission de :amount, cliquez sur le bouton ci-dessous.', @@ -1183,7 +1183,7 @@ $LANG = array( 'page_size' => 'Taille de page', 'live_preview_disabled' => 'La prévisualisation en direct a été désactivée pour cette police', 'invoice_number_padding' => 'Remplissage (padding)', - 'preview' => 'PRÉVISUALISATION', + 'preview' => 'Prévisualitsation', 'list_vendors' => 'Liste des fournisseurs', 'add_users_not_supported' => 'Mettre à niveau vers le plan Enterprise plan pour ajouter des utilisateurs à votre compte.', 'enterprise_plan_features' => 'Le Plan entreprise offre le support pour de multiple utilisateurs ainsi que l\'ajout de pièces jointes, :link pour voir la liste complète des fonctionnalités.', @@ -5181,6 +5181,30 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'payment_receipt' => 'Reçu de paiement #', 'load_template_description' => 'Le modèle s\'appliquera à:', 'run_template' => 'Exécuter le modèle', + 'statement_design' => 'Modèle de relevé', + 'delivery_note_design' => 'Modèle de note de livraison', + 'payment_receipt_design' => 'Modèle de reçu de paiement', + 'payment_refund_design' => 'Modèle de paiement de remboursement', + 'task_extension_banner' => 'Ajouter l\'extension Chrome pour gérer vos tâches', + 'watch_video' => 'Regardez', + 'view_extension' => 'Voir l\'extension', + 'reactivate_email' => 'Réactiver le courriel', + 'email_reactivated' => 'Le courriel a été réactivé', + 'template_help' => 'Enable using the design as a template', + 'quarter' => 'Quarter', + 'item_description' => 'Description d\'article', + 'task_item' => 'Article de tâche', + 'record_state' => 'État de l\'enregistrement', + 'save_files_to_this_folder' => 'Sauvegarder les fichiers dans ce dossier', + 'downloads_folder' => 'Dossier de téléchargements', + 'total_invoiced_quotes' => 'Soumissions facturées', + 'total_invoice_paid_quotes' => 'Soumissions de factures payées', + 'downloads_folder_does_not_exist' => 'Le dossier de téléchargements n\'existe pas :value', + 'user_logged_in_notification' => 'User Logged in Notification', + 'user_logged_in_notification_help' => 'Send an email when logging in from a new location', + 'payment_email_all_contacts' => 'Courriel de paiement à tous les contacts', + 'payment_email_all_contacts_help' => 'Envoi un courriel de paiement à tous les contacts lorsqu\'activé', + 'add_line' => 'Ajouter une ligne', ); return $LANG; diff --git a/lang/fr_CH/texts.php b/lang/fr_CH/texts.php index 9b252b100a86..94af38da6b9c 100644 --- a/lang/fr_CH/texts.php +++ b/lang/fr_CH/texts.php @@ -64,7 +64,7 @@ $LANG = array( 'archive_invoice' => 'Archiver la facture', 'delete_invoice' => 'Supprimer la facture', 'email_invoice' => 'Envoyer la facture par courriel', - 'enter_payment' => 'Inscrire un paiement', + 'enter_payment' => 'Saisir un paiement', 'tax_rates' => 'Taux de TVA', 'rate' => 'Taux', 'settings' => 'Paramètres', @@ -125,8 +125,8 @@ $LANG = array( 'filter' => 'Filtrer', 'new_client' => 'Nouveau client', 'new_invoice' => 'Nouvelle facture', - 'new_payment' => 'Inscrire un paiement', - 'new_credit' => 'Inscrire un crédit', + 'new_payment' => 'Saisir un paiement', + 'new_credit' => 'Saisir un crédit', 'contact' => 'Contact', 'date_created' => 'Date de création', 'last_login' => 'Dernière connexion', @@ -150,7 +150,7 @@ $LANG = array( 'edit_client' => 'Modifier le client', 'edit_invoice' => 'Modifier la facture', 'create_invoice' => 'Créer une facture', - 'enter_credit' => 'Inscrire un crédit', + 'enter_credit' => 'Saisir un crédit', 'last_logged_in' => 'Dernière connexion', 'details' => 'Détails', 'standing' => 'En attente', @@ -387,7 +387,7 @@ $LANG = array( 'more_designs_self_host_text' => '', 'buy' => 'Acheter', 'bought_designs' => 'Les nouveaux modèles ont été ajoutés avec succès', - 'sent' => 'Envoyé', + 'sent' => 'Envoyée', 'vat_number' => 'N° de taxe', 'timesheets' => 'Feuilles de temps', 'payment_title' => 'Veuillez entrer votre adresse de facturation et vos information de carte de crédit', @@ -5181,6 +5181,30 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette 'payment_receipt' => 'Reçu de paiement # :number', 'load_template_description' => 'Le modèle sera appliqué aux éléments suivants :', 'run_template' => 'Exécuter le modèle', + 'statement_design' => 'Modèle de relevé', + 'delivery_note_design' => 'Delivery Note Design', + 'payment_receipt_design' => 'Modèle de reçu de paiement', + 'payment_refund_design' => 'Payment Refund Design', + 'task_extension_banner' => 'Add the Chrome extension to manage your tasks', + 'watch_video' => 'Regardez la vidéo', + 'view_extension' => 'Voir l\'extension', + 'reactivate_email' => 'Réactiver l\'adresse email', + 'email_reactivated' => 'L\'adresse email a été réactivée', + 'template_help' => 'Enable using the design as a template', + 'quarter' => 'Quarter', + 'item_description' => 'Description d\'article', + 'task_item' => 'Task Item', + 'record_state' => 'Record State', + 'save_files_to_this_folder' => 'Sauvegarder les fichiers dans ce dossier', + 'downloads_folder' => 'Dossier de téléchargements', + 'total_invoiced_quotes' => 'Offres facturées', + 'total_invoice_paid_quotes' => 'Offres de factures payées', + 'downloads_folder_does_not_exist' => 'Le dossier de téléchargements n\'existe pas :value', + 'user_logged_in_notification' => 'Notification de connexion d\'utilisateur', + 'user_logged_in_notification_help' => 'Send an email when logging in from a new location', + 'payment_email_all_contacts' => 'Email de paiement à tous les contacts', + 'payment_email_all_contacts_help' => 'Sends the payment email to all contacts when enabled', + 'add_line' => 'Ajouter une ligne', ); return $LANG;