File Manager Lite
Dir:
/home/codewavebd/public_html/resources/views/admin
Upload
[..]
auth/
Rename
Del
blog/
Rename
Del
categories/
Rename
Del
chats/
Rename
Del
dashboard.blade.php (7.61 KB)
Edit
Rename
Del
faqs/
Rename
Del
leads/
Rename
Del
logs.blade.php (1.57 KB)
Edit
Rename
Del
media/
Rename
Del
products/
Rename
Del
projects/
Rename
Del
services/
Rename
Del
settings.blade.php (17 KB)
Edit
Rename
Del
team/
Rename
Del
testimonials/
Rename
Del
Edit: settings.blade.php
@extends('layouts.admin') @section('title', 'Website Settings') @section('page_title', 'Configuration Console') @section('content') <div class="admin-card mb-5"> <form action="{{ route('admin.settings.save') }}" method="POST" enctype="multipart/form-data" class="admin-form"> @csrf <!-- Tab Navigation and Save Button Header --> <div class="d-flex flex-column flex-md-row justify-content-between align-items-md-center border-bottom border-secondary mb-4 pb-2 gap-3"> <ul class="nav nav-tabs border-0" id="settingsTab" role="tablist" style="border-bottom: none !important;"> <li class="nav-item"> <button class="nav-link text-white active bg-transparent border-0 border-bottom-indigo" id="general-tab" data-bs-toggle="tab" data-bs-target="#general" type="button">General & Contact</button> </li> <li class="nav-item"> <button class="nav-link text-white bg-transparent border-0" id="seo-tab" data-bs-toggle="tab" data-bs-target="#seo" type="button">Global SEO Specs</button> </li> <li class="nav-item"> <button class="nav-link text-white bg-transparent border-0" id="tracking-tab" data-bs-toggle="tab" data-bs-target="#tracking" type="button">Tracking Codes</button> </li> <li class="nav-item"> <button class="nav-link text-white bg-transparent border-0" id="robots-tab" data-bs-toggle="tab" data-bs-target="#robots" type="button">Robots.txt & Sitemap</button> </li> <li class="nav-item"> <button class="nav-link text-white bg-transparent border-0" id="chat-tab" data-bs-toggle="tab" data-bs-target="#chat" type="button">Live Chat Console</button> </li> <li class="nav-item"> <button class="nav-link text-white bg-transparent border-0" id="security-tab" data-bs-toggle="tab" data-bs-target="#security" type="button">Security & 2FA</button> </li> </ul> <div class="mb-2 mb-md-0"> <button type="submit" class="btn btn-primary-glow px-4 py-2"><i class="bi bi-save me-1"></i> Save Platform Settings</button> </div> </div> <div class="tab-content" id="settingsTabContent"> <!-- 1. General & Contact Settings --> <div class="tab-pane fade show active" id="general"> <div class="row"> <div class="col-md-6 mb-3"> <label class="form-label">Site Name</label> <input type="text" name="site_name" class="form-control" value="{{ $settings['site_name'] }}" required> </div> <div class="col-md-6 mb-3"> <label class="form-label">Site Tagline</label> <input type="text" name="site_tagline" class="form-control" value="{{ $settings['site_tagline'] }}" required> </div> </div> <div class="row"> <div class="col-md-6 mb-3"> <label class="form-label">Site Logo (JPEG, PNG, SVG, WebP, max 2MB)</label> <input type="file" name="site_logo" class="form-control bg-dark text-white border-secondary"> @if($settings['site_logo']) <div class="mt-2 p-2 rounded bg-dark border border-secondary d-flex align-items-center gap-3"> <img src="{{ asset('uploads/' . $settings['site_logo']) }}" alt="Logo" style="height: 40px; max-width: 150px; object-fit: contain;"> <span class="small text-muted">{{ $settings['site_logo'] }}</span> </div> @else <div class="mt-1 small text-muted">No custom logo uploaded. Defaulting to Brand Text.</div> @endif </div> <div class="col-md-6 mb-3"> <label class="form-label">Site Favicon (ICO, PNG, WebP, max 512KB)</label> <input type="file" name="site_favicon" class="form-control bg-dark text-white border-secondary"> @if($settings['site_favicon']) <div class="mt-2 p-2 rounded bg-dark border border-secondary d-flex align-items-center gap-3"> <img src="{{ asset('uploads/' . $settings['site_favicon']) }}" alt="Favicon" style="height: 32px; width: 32px; object-fit: contain;"> <span class="small text-muted">{{ $settings['site_favicon'] }}</span> </div> @else <div class="mt-1 small text-muted">No custom favicon uploaded. Defaulting to favicon.ico.</div> @endif </div> </div> <div class="row"> <div class="col-md-12 mb-3"> <label class="form-label fw-bold text-info">Default Website Color Theme (For first-time visitors)</label> <select name="default_theme" class="form-select bg-dark text-white border-secondary"> <option value="dark" {{ $settings['default_theme'] === 'dark' ? 'selected' : '' }}>Dark Mode (Default)</option> <option value="light" {{ $settings['default_theme'] === 'light' ? 'selected' : '' }}>Light Mode</option> </select> </div> </div> <div class="row"> <div class="col-md-4 mb-3"> <label class="form-label">Contact Email</label> <input type="email" name="contact_email" class="form-control" value="{{ $settings['contact_email'] }}" required> </div> <div class="col-md-4 mb-3"> <label class="form-label">Contact Phone</label> <input type="text" name="contact_phone" class="form-control" value="{{ $settings['contact_phone'] }}" required> </div> <div class="col-md-4 mb-3"> <label class="form-label">WhatsApp Number (e.g. 8801712345678)</label> <input type="text" name="contact_whatsapp" class="form-control" value="{{ $settings['contact_whatsapp'] }}" required> </div> </div> <div class="mb-3"> <label class="form-label">Contact Address</label> <textarea name="contact_address" class="form-control" rows="2" required>{{ $settings['contact_address'] }}</textarea> </div> <hr class="border-secondary my-4"> <h6 class="text-info font-heading mb-3">Social Profiles</h6> <div class="row"> <div class="col-md-4 mb-3"> <label class="form-label">Facebook Profile URL</label> <input type="url" name="facebook_url" class="form-control" value="{{ $settings['facebook_url'] }}"> </div> <div class="col-md-4 mb-3"> <label class="form-label">LinkedIn Company URL</label> <input type="url" name="linkedin_url" class="form-control" value="{{ $settings['linkedin_url'] }}"> </div> <div class="col-md-4 mb-3"> <label class="form-label">GitHub Account URL</label> <input type="url" name="github_url" class="form-control" value="{{ $settings['github_url'] }}"> </div> </div> </div> <!-- 2. Global SEO Settings --> <div class="tab-pane fade" id="seo"> <div class="mb-3"> <label class="form-label">Default SEO Title Tag</label> <input type="text" name="seo_title" class="form-control" value="{{ $settings['seo_title'] }}" required> </div> <div class="mb-3"> <label class="form-label">Default SEO Meta Description</label> <textarea name="seo_description" class="form-control" rows="3" required>{{ $settings['seo_description'] }}</textarea> </div> <div class="mb-3"> <label class="form-label">Default SEO Meta Keywords (comma separated)</label> <input type="text" name="seo_keywords" class="form-control" value="{{ $settings['seo_keywords'] }}" required> </div> </div> <!-- 3. Tracking Codes --> <div class="tab-pane fade" id="tracking"> <div class="mb-3"> <label class="form-label">Google Analytics Code Snippet (HTML/Script)</label> <textarea name="google_analytics_code" class="form-control text-monospace" rows="4">{{ $settings['google_analytics_code'] }}</textarea> </div> <div class="mb-3"> <label class="form-label">Google Tag Manager Code Snippet (HTML/Script)</label> <textarea name="google_tag_manager_code" class="form-control text-monospace" rows="4">{{ $settings['google_tag_manager_code'] }}</textarea> </div> <div class="mb-3"> <label class="form-label">Google Search Console Verification Tag (Meta or HTML)</label> <textarea name="google_search_console_code" class="form-control text-monospace" rows="4">{{ $settings['google_search_console_code'] }}</textarea> </div> </div> <!-- 4. Robots.txt and Sitemap Info --> <div class="tab-pane fade" id="robots"> <div class="mb-3"> <label class="form-label">Robots.txt Content Rules</label> <textarea name="robots_txt" class="form-control text-monospace" rows="6" placeholder="User-agent: *...">{{ $settings['robots_txt'] }}</textarea> <small class="text-muted d-block mt-1">Leave empty to auto-generate default rules allowing indexing and specifying the dynamic sitemap URL.</small> </div> <div class="bg-dark p-4 rounded-3 border border-secondary mt-4"> <h6 class="text-info font-heading mb-2">Dynamic XML Sitemap</h6> <p class="small text-muted mb-2">The XML Sitemap updates automatically in real-time as you publish Services, Software, Blog Posts, or Portfolio Projects.</p> <p class="mb-0 small text-white">Sitemap URL: <a href="{{ url('/sitemap.xml') }}" target="_blank" class="text-info text-decoration-none">{{ url('/sitemap.xml') }} <i class="bi bi-box-arrow-up-right small"></i></a></p> </div> </div> <!-- 5. Live Chat Console --> <div class="tab-pane fade" id="chat"> <div class="mb-4"> <label class="form-label fw-bold text-info">Live Chat System Mode</label> <select name="live_chat_mode" class="form-select bg-dark text-white border-secondary mb-3" id="liveChatModeSelect"> <option value="native" {{ $settings['live_chat_mode'] == 'native' ? 'selected' : '' }}>CodeWave Interactive Native Live Chat (Form + Live Admin Console)</option> <option value="whatsapp" {{ $settings['live_chat_mode'] == 'whatsapp' ? 'selected' : '' }}>Direct Floating WhatsApp Link (Open WhatsApp Chat window)</option> <option value="third_party" {{ $settings['live_chat_mode'] == 'third_party' ? 'selected' : '' }}>Third-Party Script Embed (Tawk.to, Crisp, JivoChat)</option> </select> </div> <div class="mb-3" id="thirdPartyScriptWrapper" style="display: {{ $settings['live_chat_mode'] == 'third_party' ? 'block' : 'none' }};"> <label class="form-label text-warning"><i class="bi bi-code-slash me-1"></i>Third-Party Embed JavaScript Code (HTML/Script Tag)</label> <textarea name="live_chat_third_party_code" class="form-control text-monospace bg-dark text-white border-secondary" rows="6" placeholder="<!-- Paste script code from Tawk.to or Crisp here -->">{{ $settings['live_chat_third_party_code'] }}</textarea> <small class="text-muted d-block mt-1">Make sure you paste the complete snippet including the `<script>` tag. This script will automatically render on the bottom-right of the homepage.</small> </div> </div> <!-- 6. Security & 2FA Settings --> <div class="tab-pane fade" id="security"> <div class="mb-4"> <label class="form-label fw-bold text-info">WhatsApp Two-Factor Authentication (2FA)</label> <select name="whatsapp_2fa_enabled" class="form-select bg-dark text-white border-secondary mb-3" id="whatsapp2faToggle"> <option value="false" {{ $settings['whatsapp_2fa_enabled'] === 'false' ? 'selected' : '' }}>Disabled (Sign in with password only)</option> <option value="true" {{ $settings['whatsapp_2fa_enabled'] === 'true' ? 'selected' : '' }}>Enabled (Requires 6-Digit WhatsApp OTP on login)</option> </select> </div> <div id="whatsapp2faCredentials" style="display: {{ $settings['whatsapp_2fa_enabled'] === 'true' ? 'block' : 'none' }};"> <div class="row"> <div class="col-md-6 mb-3"> <label class="form-label text-warning">Admin WhatsApp Number (e.g. 8801712345678)</label> <input type="text" name="whatsapp_2fa_number" class="form-control" value="{{ $settings['whatsapp_2fa_number'] }}" placeholder="88017XXXXXXXX"> <small class="text-muted d-block mt-1">Make sure you include the country code prefix (e.g. 880 for Bangladesh) without any leading + or spaces.</small> </div> <div class="col-md-6 mb-3"> <label class="form-label">UltraMsg Instance ID (Optional)</label> <input type="text" name="whatsapp_2fa_instance_id" class="form-control" value="{{ $settings['whatsapp_2fa_instance_id'] }}" placeholder="instanceXXXXX"> <small class="text-muted d-block mt-1">Provide this to send real OTP messages. If left blank, OTPs will run in simulation mode (logged to laravel.log).</small> </div> </div> <div class="mb-3"> <label class="form-label">UltraMsg API Token (Optional)</label> <input type="password" name="whatsapp_2fa_token" class="form-control" value="{{ $settings['whatsapp_2fa_token'] }}" placeholder="••••••••••••••••••••"> </div> </div> </div> </div> </form> </div> <!-- Custom active tab border helper --> <style> .border-bottom-indigo { border-bottom: 2px solid var(--admin-accent) !important; } .nav-tabs .nav-link:hover { background-color: transparent !important; color: var(--admin-accent) !important; } </style> <script> document.addEventListener('DOMContentLoaded', () => { const tabs = document.querySelectorAll('#settingsTab button'); tabs.forEach(tab => { tab.addEventListener('click', () => { tabs.forEach(t => t.classList.remove('border-bottom-indigo')); tab.classList.add('border-bottom-indigo'); }); }); // Live Chat Mode Selector Toggle const chatModeSelect = document.getElementById('liveChatModeSelect'); const thirdPartyWrapper = document.getElementById('thirdPartyScriptWrapper'); if (chatModeSelect && thirdPartyWrapper) { chatModeSelect.addEventListener('change', () => { if (chatModeSelect.value === 'third_party') { thirdPartyWrapper.style.display = 'block'; } else { thirdPartyWrapper.style.display = 'none'; } }); } // WhatsApp 2FA Credentials Toggle const whatsapp2faSelect = document.getElementById('whatsapp2faToggle'); const whatsapp2faCreds = document.getElementById('whatsapp2faCredentials'); if (whatsapp2faSelect && whatsapp2faCreds) { whatsapp2faSelect.addEventListener('change', () => { if (whatsapp2faSelect.value === 'true') { whatsapp2faCreds.style.display = 'block'; } else { whatsapp2faCreds.style.display = 'none'; } }); } }); </script> @endsection
Simpan