Files
jabali-panel/app/Filament/Jabali/Pages/MailingLists.php
2026-02-06 02:47:43 +00:00

124 lines
4.2 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Filament\Jabali\Pages;
use App\Models\UserSetting;
use BackedEnum;
use Filament\Actions\Concerns\InteractsWithActions;
use Filament\Actions\Contracts\HasActions;
use Filament\Forms\Components\Select;
use Filament\Forms\Components\TextInput;
use Filament\Forms\Concerns\InteractsWithForms;
use Filament\Forms\Contracts\HasForms;
use Filament\Notifications\Notification;
use Filament\Pages\Page;
use Filament\Schemas\Components\Section;
use Filament\Schemas\Schema;
use Illuminate\Contracts\Support\Htmlable;
use Illuminate\Support\Facades\Auth;
class MailingLists extends Page implements HasActions, HasForms
{
use InteractsWithActions;
use InteractsWithForms;
protected static string|BackedEnum|null $navigationIcon = 'heroicon-o-paper-airplane';
protected static ?int $navigationSort = 22;
protected static ?string $slug = 'mailing-lists';
protected string $view = 'filament.jabali.pages.mailing-lists';
public array $mailingFormData = [];
public function getTitle(): string|Htmlable
{
return __('Mailing Lists');
}
public static function getNavigationLabel(): string
{
return __('Mailing Lists');
}
public function mount(): void
{
$this->mailingFormData = UserSetting::getForUser(Auth::id(), 'mailing_lists', [
'provider' => 'none',
'listmonk_url' => '',
'listmonk_token' => '',
'listmonk_list_id' => '',
'mailman_url' => '',
'mailman_admin' => '',
]);
}
protected function getForms(): array
{
return ['mailingForm'];
}
public function mailingForm(Schema $schema): Schema
{
return $schema
->statePath('mailingFormData')
->schema([
Section::make(__('Provider'))
->schema([
Select::make('provider')
->label(__('Mailing List Provider'))
->options([
'none' => __('None'),
'listmonk' => __('Listmonk'),
'mailman' => __('Mailman'),
])
->default('none')
->live(),
]),
Section::make(__('Listmonk'))
->schema([
TextInput::make('listmonk_url')
->label(__('Listmonk URL'))
->placeholder(__('https://lists.example.com'))
->url()
->visible(fn ($get) => $get('provider') === 'listmonk'),
TextInput::make('listmonk_token')
->label(__('API Token'))
->password()
->revealable()
->visible(fn ($get) => $get('provider') === 'listmonk'),
TextInput::make('listmonk_list_id')
->label(__('Default List ID'))
->visible(fn ($get) => $get('provider') === 'listmonk'),
])
->columns(2),
Section::make(__('Mailman'))
->schema([
TextInput::make('mailman_url')
->label(__('Mailman URL'))
->placeholder(__('https://lists.example.com/mailman'))
->url()
->visible(fn ($get) => $get('provider') === 'mailman'),
TextInput::make('mailman_admin')
->label(__('Mailman Admin Email'))
->email()
->visible(fn ($get) => $get('provider') === 'mailman'),
])
->columns(2),
]);
}
public function saveSettings(): void
{
UserSetting::setForUser(Auth::id(), 'mailing_lists', $this->mailingForm->getState());
Notification::make()
->title(__('Mailing list settings saved'))
->success()
->send();
}
}