{{-- ===================================================== Etebarit - by Gisoo Web Solutions ------------------------------------------------------ Gisoo.net ------------------------------------------------------ Copyright (c) 2026 Gisoo Web Solutions ===================================================== This code is protected by copyright ===================================================== File: index.blade.php ------------------------------------------------------ Use: The site-settings page: four tabs (general, gateway, SMS, email), each its own form saving on its own. The active tab follows the URL hash so a save returns to it. ===================================================== --}} @extends('layouts.admin') @section('title', __('admin.settings.title')) @php use App\Support\Format; @endphp @section('breadcrumb') @endsection @php // Shared field classes (kept here so every input reads the same). $labelCls = 'mb-1.5 block text-[13px] font-bold'; $inputCls = 'w-full rounded-xl border-[1.5px] border-[#e3e1ec] bg-[#fbfbfd] px-3.5 py-3 text-sm outline-none transition focus:border-primary-600 focus:bg-white'; $ltrCls = $inputCls.' text-left'; @endphp @section('page')

{{ __('admin.settings.title') }}

{{ __('admin.settings.subtitle') }}

{{ __('admin.settings.info') }}
{{-- Tabs --}}
@foreach (__('admin.settings.tabs') as $key => $label) @endforeach
{{-- Panels --}}
{{-- ===== General ===== --}}
@csrf
{{ __('admin.settings.general.heading') }}
{{-- Logo --}}
@if ($siteLogoUrl) @else @endif
{{ __('admin.settings.general.logo') }}

{{ __('admin.settings.general.logo_hint') }}

{{ __('admin.settings.general.contact_email_hint') }}

{{-- SEO --}}
{{ __('admin.settings.general.seo_section') }}
{{-- Maintenance --}}
{{ __('admin.settings.general.maintenance_section') }}

{{ __('admin.settings.general.maintenance_hint') }}

@include('admin.settings._save')
{{-- ===== Rules & defaults ===== --}}
@csrf
{{ __('admin.settings.rules.heading') }}
{{ __('admin.settings.rules.fee_section') }}

{{ __('admin.settings.rules.fee_hint') }}

{{ __('admin.settings.rules.limits_section') }}
{{-- Good-standing gate for the credit-request page. --}}
{{ __('admin.settings.rules.standing_section') }}

{{ __('admin.settings.rules.standing_hint') }}

@include('admin.settings._save')
{{-- ===== Gateway ===== --}}
@csrf
{{ __('admin.settings.gateway.heading') }}

{{ __('admin.settings.gateway.hint') }}

@foreach (['test', 'zarinpal'] as $g) @endforeach
{{-- Zarinpal credentials --}}
@include('admin.settings._save')
{{-- ===== SMS ===== --}}
@csrf
{{ __('admin.settings.sms.heading') }}

{{ __('admin.settings.sms.api_key_hint') }}

{{ __('admin.settings.sms.patterns_heading') }}

{{ __('admin.settings.sms.patterns_hint') }}

{{ __('admin.settings.sms.sample_vars_hint') }}

@foreach ($patterns as $pattern)
{{-- Suggested pattern body, with the exact variables the system sends -- an operator copies this into ippanel. --}}
{{ __('admin.settings.sms.sample_label') }}

{{ __('admin.settings.sms.pattern_samples.'.$pattern) }}

@endforeach
@include('admin.settings._save')
{{-- ===== Captcha (ArCaptcha) ===== --}}
@csrf
{{ __('admin.settings.captcha.heading') }}
{{ __('admin.settings.captcha.info') }} @php $capUsed = $captcha->usageThisPeriod(); $capQuota = $captcha->quota(); $capRemaining = $captcha->remaining(); $capPct = $capQuota > 0 ? min(100, (int) round($capUsed / $capQuota * 100)) : 0; $capLow = $capQuota > 0 && $capRemaining <= (int) ceil($capQuota * 0.1); @endphp
{{ __('admin.settings.captcha.usage_title', ['period' => \App\Support\Format::persianDigits($captcha->periodLabel())]) }} {{ __('admin.settings.captcha.remaining', ['remaining' => \App\Support\Format::persianDigits((string) $capRemaining)]) }}
{{ __('admin.settings.captcha.used_of', ['used' => \App\Support\Format::persianDigits((string) $capUsed), 'quota' => \App\Support\Format::persianDigits((string) $capQuota)]) }}

{{ __('admin.settings.captcha.secret_hint') }}

{{ __('admin.settings.captcha.quota_hint') }}

@include('admin.settings._save')
{{-- ===== Email ===== --}}
@csrf
{{ __('admin.settings.email.heading') }}

{{ __('admin.settings.email.password_hint') }}

{{-- Email header/footer, wrapped around every notification email. --}}
{{ __('admin.settings.email.templates_heading') }}

{{ __('admin.settings.email.templates_hint') }}

{{-- Live preview of the branded email with the header/footer above. --}}
{{ __('admin.settings.email.preview_heading') }}

{{ __('admin.settings.email.preview_hint') }}

@include('admin.settings._save')
{{-- Send the sample email to verify SMTP end to end (its own form). --}}
@csrf
{{ __('admin.settings.email.test_heading') }}

{{ __('admin.settings.email.test_hint') }}

@error('test_email')

{{ $message }}

@enderror
{{-- ===== Plugins ===== --}}
{{ __('admin.settings.plugins.heading') }}

{{ __('admin.settings.plugins.hint') }}

{{-- The official, built-in plugins: served from the app itself; not operator-editable. Same list as the public docs page. --}} @foreach (\App\Support\BuiltinPlugins::all() as $builtin)
{{ $builtin['title'] }} v{{ $builtin['version'] }} {{ __('admin.settings.plugins.builtin_badge') }}
@foreach ($builtin['tags'] as $tag) {{ $tag }} @endforeach

{{ __('admin.settings.plugins.builtin_hint') }}

{{ __('admin.settings.plugins.download') }}
@endforeach @forelse ($plugins as $plugin) @php $pluginPayload = [ 'title' => $plugin->title, 'version' => $plugin->version, 'zip_url' => $plugin->zip_url, 'install_text' => $plugin->install_text, 'tags' => $plugin->tags ?? [], 'sort_order' => $plugin->sort_order, 'updateUrl' => route('admin.settings.plugins.update', $plugin), ]; @endphp
{{ $plugin->title }} v{{ $plugin->version }}
@if (! empty($plugin->tags))
@foreach ($plugin->tags as $tag) {{ $tag }} @endforeach
@endif
{{ __('admin.settings.plugins.download') }}
@csrf @method('DELETE')
@empty
{{ __('admin.settings.plugins.empty') }}
@endforelse
{{-- Add / edit modal --}}
@endsection