@extends('admin.layouts.app') @section('title', __('admin.settings.title')) @section('content')
@csrf
{{ __('admin.settings.company_information') }}
{{ __('admin.settings.localization') }}
{{-- Where the terms are. The registration form asks customers to agree to them and links both; with nowhere to enter the addresses the links went to "#". --}} {{-- Automation. Suspension used to run on a grace period hard-coded at 3 days; termination did not exist at all. Termination deletes data, so it ships OFF and only ever touches services suspended over an unpaid invoice (see TerminationCommand for the exact rules). --}}
{{ __('admin.settings.automation') }}
{{ __('admin.settings.automation_hint') }}
{{-- Automatic payment. The billing clock already raises the renewal invoices; this is the half that pays one with a card the customer has already stored. It ships OFF, and while it is off the product behaves exactly as it did before it existed. The checkbox carries a hidden field of the same name in front of it, so that a cleared box posts a value instead of vanishing from the request. More than one screen posts to admin.settings.general.update, and "absent" cannot be told apart from "cleared" - a form states its own switches rather than leaving them to be inferred from what is missing. There is deliberately no matching block in the controller. --}}
{{ __('admin.settings.auto_charge') }}
{{ __('admin.settings.auto_charge_hint') }}
{{-- External fraud screening. Advisory like the built-in rules: a missing key or an outage never blocks an order (see FraudDetectionService). The secret fields keep their stored value when left blank, the same contract as the mail password. --}}
{{ __('admin.settings.fraud_screening') }}
{{ __('admin.settings.fraud_screening_hint') }}
{{-- Twilio Verify. State (codes, attempts, expiry) lives at Twilio; the panel only records the moment a check comes back approved. --}}
{{ __('admin.settings.sms_verification') }}
{{ __('admin.settings.sms_verification_hint') }}
{{-- Proving the address on a new account. On unless an operator turns it off: the safer behaviour is the one you get without reading a settings screen. --}}
{{ __('admin.settings.email_verification') }}
{{ __('admin.settings.email_verification_hint') }}
{{-- Signing in with Google. Off until an operator creates their own OAuth client, so nothing is exposed by default and no credential of ours is ever shipped in a release. --}}
{{ __('admin.settings.social_login') }}
{{ __('admin.settings.google_login_hint') }} {{ route('client.social.google.callback') }}

{{ __('admin.settings.github_login_hint') }} {{ route('client.social.github.callback') }}
{{-- A second check before a domain can leave: an emailed code in front of its transfer code and its lock. Off by default, so an install that updates changes nothing for its customers until the operator says. --}}
{{ __('admin.settings.account_protection') }}
{{ __('admin.settings.confirm_sensitive_actions_hint') }}
{{-- Google reCAPTCHA in front of the forms that open tickets: the public contact form, the one door anyone can use, and the signed-in ticket form, each with its own switch. Off until an operator registers their own site, so no key of ours ships in a release. --}}
{{ __('admin.settings.recaptcha') }}
@foreach(['RecaptchaSignupEnabled' => 'recaptcha_signup_enabled', 'RecaptchaLoginEnabled' => 'recaptcha_login_enabled', 'RecaptchaPasswordEnabled' => 'recaptcha_password_enabled'] as $recaptchaSwitch => $recaptchaLabel) @endforeach
{{ __('admin.settings.recaptcha_hint') }}
{{-- The seller's registered identity. A contract, an official invoice and the contact page all name it, and they read these same fields so the three can never disagree. --}} {{-- Tag Manager, the operator's own code and the cookie consent bar (App\Support\Tracking). --}}
{{ __('admin.settings.tracking_section') }}
{{ __('admin.settings.tracking_gtm_hint') }}
{{ __('admin.settings.tracking_consent_hint') }}
{{ __('admin.settings.tracking_code_hint') }}
{{-- What search engines and shared links show (App\Support\Seo). --}}
{{ __('admin.settings.seo_section') }}
{{ __('admin.settings.seo_description_hint') }}
{{ __('admin.settings.seo_share_image_hint') }}
{{-- The shop's social media profiles (App\Support\SocialProfiles): themes show them, the home page names them to search engines. --}}
{{ __('admin.settings.social_profiles_hint') }}
@foreach(\App\Support\SocialProfiles::NETWORKS as $network => $key)
@endforeach
{{ __('admin.settings.robots_txt_hint', ['sitemap' => route('sitemap')]) }}
@if(is_file(public_path('robots.txt')))
{{ __('admin.settings.robots_txt_static', ['path' => 'public/robots.txt']) }}
@endif
{{-- Billing in a second currency. The shop keeps pricing in its own currency; each invoice freezes the rate it was struck at, and names the source when there is an official one to name. --}}
{{ __('admin.settings.billing_currency_section') }}
{{ __('admin.settings.payment_reference_prefix_hint') }}
{{ __('admin.settings.auto_approve_emails_hint') }}
{{ __('admin.settings.billing_currency_hint') }}
{{-- What the domain search suggests next to the name searched. Empty keeps the built-in list. --}}
{{ __('admin.settings.domain_suggestions') }}
{{ __('admin.settings.domain_suggestions_hint') }}
{{-- The registrar float. --}}
{{ __('admin.settings.registrar_balance') }}
@php $watchNow = collect($settings)->has('BalanceWatchRegistrar') ? (string) ($settings['BalanceWatchRegistrar'] ?? '') : 'domainnameapi'; $watchList = $balanceRegistrars ?? []; if ($watchNow !== '' && ! in_array($watchNow, $watchList, true)) { $watchList[] = $watchNow; } @endphp
{{ __('admin.settings.registrar_balance_hint') }}
{{-- Late fees. The command that charges them has always read these three settings; there was nowhere to enter them, so it read "none" every morning and stopped. --}}
{{ __('admin.settings.late_fees') }}
{{ __('admin.settings.late_fee_hint') }}
{{ __('admin.settings.system_settings') }}
{{ __('admin.settings.invoices_section') }}
{{ __('admin.settings.invoice_number_tokens') }}
{{ __('admin.settings.invoice_number_last') }}: {{ $invoiceLast ?? '—' }} {{ __('admin.settings.invoice_number_preview') }}: {{ $invoicePreview }}
{{ __('admin.settings.invoice_number_last') }}: {{ $proformaLast ?? '—' }} {{ __('admin.settings.invoice_number_preview') }}: {{ $proformaPreview }}
{{ __('admin.settings.mail_configuration') }}
{{ __('admin.settings.sending_via', ['transport' => $mailTransport ?? config('mail.default')]) }} @if(($mailTransport ?? config('mail.default')) === 'log') {{ __('admin.settings.mail_goes_to_log') }} @endif
{{-- Not "Your Company Name": that placeholder made this look like a fourth place to type the company name. It is the sender line on outgoing mail, nothing more. --}}

{{ __('admin.settings.smtp_configuration') }}
{{-- Never sent back: the stored password used to sit in the page source of every settings page load. Left empty, it stays as it is. --}}

{{ __('admin.settings.domains_section') }}
@for($i = 1; $i <= 5; $i++)
@endfor
{{ __('admin.settings.default_nameservers_hint') }}
{{-- Free subdomains (App\Support\FreeSubdomains): names under the shop's own domains a hosting order can take. --}}
{{ __('admin.settings.free_subdomains_hint') }}
{{ __('admin.settings.disallowed_subdomains_hint', ['names' => implode(', ', \App\Support\FreeSubdomains::DEFAULT_DISALLOWED)]) }}
@endsection