story 6.8 and fixed the redundunt options issue

This commit is contained in:
Naser Mansour
2025-12-28 22:28:55 +02:00
parent 31520c0398
commit 102f8553f4
7 changed files with 237 additions and 559 deletions
@@ -1,7 +1,9 @@
<?php
use App\Mail\TestEmail;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Session;
use Illuminate\Validation\Rule;
use Livewire\Volt\Component;
@@ -9,14 +11,17 @@ use Livewire\Volt\Component;
new class extends Component {
public string $full_name = '';
public string $email = '';
public string $preferred_language = 'ar';
/**
* Mount the component.
*/
public function mount(): void
{
$this->full_name = Auth::user()->full_name;
$this->email = Auth::user()->email;
$user = Auth::user();
$this->full_name = $user->full_name;
$this->email = $user->email;
$this->preferred_language = $user->preferred_language ?? 'ar';
}
/**
@@ -28,15 +33,15 @@ new class extends Component {
$validated = $this->validate([
'full_name' => ['required', 'string', 'max:255'],
'email' => [
'required',
'string',
'lowercase',
'email',
'max:255',
Rule::unique(User::class)->ignore($user->id)
Rule::unique(User::class)->ignore($user->id),
],
'preferred_language' => ['required', 'in:ar,en'],
]);
$user->fill($validated);
@@ -67,6 +72,24 @@ new class extends Component {
Session::flash('status', 'verification-link-sent');
}
/**
* Send a test email to verify mail configuration (admin only).
*/
public function sendTestEmail(): void
{
if (! Auth::user()->isAdmin()) {
return;
}
try {
$locale = Auth::user()->preferred_language ?? 'en';
Mail::to(Auth::user())->send(new TestEmail($locale));
Session::flash('test-email-sent', true);
} catch (\Exception $e) {
Session::flash('test-email-failed', true);
}
}
}; ?>
<section class="w-full">
@@ -98,6 +121,11 @@ new class extends Component {
@endif
</div>
<flux:select wire:model="preferred_language" :label="__('Preferred Language')">
<option value="ar">{{ __('Arabic') }}</option>
<option value="en">{{ __('English') }}</option>
</flux:select>
<div class="flex items-center gap-4">
<div class="flex items-center justify-end">
<flux:button variant="primary" type="submit" class="w-full" data-test="update-profile-button">
@@ -111,6 +139,63 @@ new class extends Component {
</div>
</form>
@if (auth()->user()->isAdmin())
<flux:separator class="my-6" />
<div>
<flux:heading size="lg">{{ __('Email Configuration') }}</flux:heading>
<flux:text class="mt-1 text-sm text-zinc-500 dark:text-zinc-400">
{{ __('Verify your email configuration is working correctly.') }}
</flux:text>
@if (session('test-email-sent'))
<div class="mt-4">
<flux:callout variant="success" icon="check-circle">
{{ __('admin.test_email_sent') }}
</flux:callout>
</div>
@endif
@if (session('test-email-failed'))
<div class="mt-4">
<flux:callout variant="danger" icon="exclamation-triangle">
{{ __('admin.test_email_failed') }}
</flux:callout>
</div>
@endif
<div class="mt-4 grid grid-cols-1 gap-4 md:grid-cols-2">
<div>
<flux:text class="text-sm font-medium text-zinc-600 dark:text-zinc-400">
{{ __('admin.sender_name') }}
</flux:text>
<flux:text class="mt-1 font-medium text-zinc-900 dark:text-zinc-100">
{{ config('mail.from.name') }}
</flux:text>
</div>
<div>
<flux:text class="text-sm font-medium text-zinc-600 dark:text-zinc-400">
{{ __('admin.sender_email') }}
</flux:text>
<flux:text class="mt-1 font-medium text-zinc-900 dark:text-zinc-100">
{{ config('mail.from.address') }}
</flux:text>
</div>
</div>
<div class="mt-4">
<flux:button wire:click="sendTestEmail" wire:loading.attr="disabled">
<span wire:loading.remove wire:target="sendTestEmail">
{{ __('admin.send_test_email') }}
</span>
<span wire:loading wire:target="sendTestEmail">
{{ __('admin.sending') }}
</span>
</flux:button>
</div>
</div>
@endif
<livewire:settings.delete-user-form />
</x-settings.layout>
</section>