From d3f2098132adc9d9ff8f50766eb5a2c4a8cba95d Mon Sep 17 00:00:00 2001 From: scott grayson Date: Tue, 25 Nov 2025 15:24:06 -0500 Subject: [PATCH 01/14] Add optional email notifications for form submissions - Add notification_emails JSON column to filament_forms table - Add FormSubmissionNotification mailable with queued delivery - Add FilamentFormUserObserver to automatically send notifications - Add user select field to form builder for configuring recipients - Add user_model configuration option (defaults to App\Models\User) - Include app name in notification subject line - Add professional email template for notifications --- config/filament-form-builder.php | 16 ++++++ ...on_emails_to_filament_forms_table.php.stub | 21 ++++++++ .../mail/submission-notification.blade.php | 19 +++++++ .../Resources/FilamentFormResource.php | 48 ++++++++++++++++++ src/FilamentFormBuilderServiceProvider.php | 6 +++ src/Mail/FormSubmissionNotification.php | 49 +++++++++++++++++++ src/Models/FilamentForm.php | 1 + src/Observers/FilamentFormUserObserver.php | 38 ++++++++++++++ 8 files changed, 198 insertions(+) create mode 100644 database/migrations/add_notification_emails_to_filament_forms_table.php.stub create mode 100644 resources/views/mail/submission-notification.blade.php create mode 100644 src/Mail/FormSubmissionNotification.php create mode 100644 src/Observers/FilamentFormUserObserver.php diff --git a/config/filament-form-builder.php b/config/filament-form-builder.php index 2ea07cc..09c67b1 100644 --- a/config/filament-form-builder.php +++ b/config/filament-form-builder.php @@ -32,4 +32,20 @@ 'admin-panel-filament-form-field-name-plural' => 'Fields', 'preview-route' => 'filament-form-builder.show', + + /* + |-------------------------------------------------------------------------- + | Notification Emails Configuration + |-------------------------------------------------------------------------- + | + | Configure the notification emails field in the form builder. + | + | 'user_model': The User model class to use for the select field. + | Set to null to use TagsInput for manual email entry. + | Default: 'App\Models\User' + | + | Example: 'user_model' => null, // Use TagsInput instead + | + */ + 'user_model' => 'App\Models\User', ]; diff --git a/database/migrations/add_notification_emails_to_filament_forms_table.php.stub b/database/migrations/add_notification_emails_to_filament_forms_table.php.stub new file mode 100644 index 0000000..34300e1 --- /dev/null +++ b/database/migrations/add_notification_emails_to_filament_forms_table.php.stub @@ -0,0 +1,21 @@ +json('notification_emails')->nullable()->after('description'); + }); + } +}; + + + + diff --git a/resources/views/mail/submission-notification.blade.php b/resources/views/mail/submission-notification.blade.php new file mode 100644 index 0000000..4dbe21d --- /dev/null +++ b/resources/views/mail/submission-notification.blade.php @@ -0,0 +1,19 @@ + +# New Form Submission + +A new submission has been received for **{{ $form->name }}**. + +**Submitted by:** {{ $entry->user?->name ?? 'Guest' }} +**Submitted at:** {{ $entry->created_at->format('F j, Y g:i A') }} + + +View Submission + + +Thanks,
+{{ config('app.name') }} +
+ + + + diff --git a/src/Filament/Resources/FilamentFormResource.php b/src/Filament/Resources/FilamentFormResource.php index a6bc76a..a5731df 100644 --- a/src/Filament/Resources/FilamentFormResource.php +++ b/src/Filament/Resources/FilamentFormResource.php @@ -6,11 +6,15 @@ use Filament\Actions\BulkActionGroup; use Filament\Actions\DeleteBulkAction; use Filament\Actions\EditAction; +use Filament\Forms\Components\Select; +use Filament\Forms\Components\TagsInput; use Filament\Forms\Components\Textarea; use Filament\Forms\Components\TextInput; use Filament\Forms\Components\Toggle; use Filament\Notifications\Notification; use Filament\Resources\Resource; +use Filament\Schemas\Components\Component; +use Filament\Schemas\Components\Section; use Filament\Schemas\Schema; use Filament\Tables\Columns\IconColumn; use Filament\Tables\Columns\TextColumn; @@ -68,6 +72,13 @@ public static function form(Schema $schema): Schema ->hint('(optional) complete this field to provide a custom redirect url on form completion. Use a fully qualified URL including "https://" to redirect to an external link, otherwise url will be relative to this sites domain'), Textarea::make('description') ->columnSpanFull(), + Section::make('Notifications') + ->description('Configure email notifications for form submissions') + ->schema([ + static::getNotificationEmailsField(), + ]) + ->collapsible() + ->collapsed(), ]); } @@ -116,6 +127,7 @@ public static function table(Table $table): Table 'permit_guest_entries' => $record->permit_guest_entries, 'redirect_url' => $record->redirect_url, 'description' => $record->description, + 'notification_emails' => $record->notification_emails, ]); $record->filamentFormFields->each(function ($field) use ($formCopy) { @@ -164,4 +176,40 @@ public static function getPages(): array 'edit' => EditFilamentForm::route('/{record}/edit'), ]; } + + protected static function getNotificationEmailsField(): Component + { + $userModel = config('filament-form-builder.user_model'); + + // If user model is configured, use Select with user search + if ($userModel && class_exists($userModel)) { + return Select::make('notification_emails') + ->label('Notification Recipients') + ->helperText('Select users who should receive notifications when this form is submitted.') + ->multiple() + ->searchable() + ->getSearchResultsUsing(function ($search) use ($userModel) { + return $userModel::query() + ->where(function ($query) use ($search) { + $query->where('name', 'like', "%{$search}%") + ->orWhere('email', 'like', "%{$search}%"); + }) + ->limit(50) + ->get() + ->mapWithKeys(fn ($user) => [$user->email => $user->name.' ('.$user->email.')']); + }) + ->getOptionLabelsUsing(function (array $values) use ($userModel): array { + return $userModel::whereIn('email', $values) + ->get() + ->mapWithKeys(fn ($user) => [$user->email => $user->name.' ('.$user->email.')']) + ->toArray(); + }); + } + + // Default: TagsInput for manual email entry + return TagsInput::make('notification_emails') + ->label('Notification Email Addresses') + ->helperText('Enter email addresses that should receive notifications when this form is submitted. Press Enter after each email.') + ->placeholder('email@example.com'); + } } diff --git a/src/FilamentFormBuilderServiceProvider.php b/src/FilamentFormBuilderServiceProvider.php index 18ccf22..ccafbef 100644 --- a/src/FilamentFormBuilderServiceProvider.php +++ b/src/FilamentFormBuilderServiceProvider.php @@ -9,6 +9,8 @@ use Tapp\FilamentFormBuilder\Livewire\FilamentForm\Show as FilamentFormShow; use Tapp\FilamentFormBuilder\Livewire\FilamentFormUser\Entry as FilamentFormUserEntry; use Tapp\FilamentFormBuilder\Livewire\FilamentFormUser\Show as FilamentFormUserShow; +use Tapp\FilamentFormBuilder\Models\FilamentFormUser; +use Tapp\FilamentFormBuilder\Observers\FilamentFormUserObserver; class FilamentFormBuilderServiceProvider extends PackageServiceProvider { @@ -23,6 +25,7 @@ public function configurePackage(Package $package): void $package->name('filament-form-builder') ->hasMigration('create_dynamic_filament_form_tables') ->hasMigration('add_schema_to_filament_form_fields') + ->hasMigration('add_notification_emails_to_filament_forms_table') ->hasConfigFile('filament-form-builder') ->hasRoute('routes') ->hasViews('filament-form-builder'); @@ -39,6 +42,9 @@ public function boot() // Register the new layout components Livewire::component('tapp.filament-form-builder.livewire.filament-form.form', FilamentForm::class); Livewire::component('tapp.filament-form-builder.livewire.filament-form-user.entry', FilamentFormUserEntry::class); + + // Register observer for form submission notifications + FilamentFormUser::observe(FilamentFormUserObserver::class); } public function packageBooted(): void diff --git a/src/Mail/FormSubmissionNotification.php b/src/Mail/FormSubmissionNotification.php new file mode 100644 index 0000000..9743195 --- /dev/null +++ b/src/Mail/FormSubmissionNotification.php @@ -0,0 +1,49 @@ +form->name, + ); + } + + public function content(): Content + { + return new Content( + markdown: 'filament-form-builder::mail.submission-notification', + ); + } + + /** + * @return array + */ + public function attachments(): array + { + return []; + } +} diff --git a/src/Models/FilamentForm.php b/src/Models/FilamentForm.php index f726e24..47b7cb3 100644 --- a/src/Models/FilamentForm.php +++ b/src/Models/FilamentForm.php @@ -22,6 +22,7 @@ class FilamentForm extends Model protected $casts = [ 'permit_guest_entries' => 'boolean', + 'notification_emails' => 'array', ]; public function users(): BelongsToMany diff --git a/src/Observers/FilamentFormUserObserver.php b/src/Observers/FilamentFormUserObserver.php new file mode 100644 index 0000000..8b53394 --- /dev/null +++ b/src/Observers/FilamentFormUserObserver.php @@ -0,0 +1,38 @@ +filamentForm; + + // Check if notification emails are configured for this form + if (! $form || ! $form->notification_emails) { + return; + } + + $notificationEmails = is_array($form->notification_emails) + ? $form->notification_emails + : json_decode($form->notification_emails, true); + + // Filter out empty email addresses and send notifications + $emails = array_filter($notificationEmails ?? []); + + if (empty($emails)) { + return; + } + + foreach ($emails as $email) { + Mail::to($email)->send(new FormSubmissionNotification($form, $filamentFormUser)); + } + } +} + From d7412a2b08e4379c367dac97c881c8e6bc24caa4 Mon Sep 17 00:00:00 2001 From: scottgrayson <7796074+scottgrayson@users.noreply.github.com> Date: Tue, 25 Nov 2025 20:24:28 +0000 Subject: [PATCH 02/14] Fix styling --- src/Observers/FilamentFormUserObserver.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Observers/FilamentFormUserObserver.php b/src/Observers/FilamentFormUserObserver.php index 8b53394..9c1d642 100644 --- a/src/Observers/FilamentFormUserObserver.php +++ b/src/Observers/FilamentFormUserObserver.php @@ -35,4 +35,3 @@ public function created(FilamentFormUser $filamentFormUser): void } } } - From a28ea0738cad9bc1d525498aef248370cc66455c Mon Sep 17 00:00:00 2001 From: scott grayson Date: Tue, 25 Nov 2025 15:28:54 -0500 Subject: [PATCH 03/14] Update notification email to link to form edit page instead of single entry - Change button URL to form resource edit page - Update button text to 'View Form & Entries' - Admins prefer to export entries from the form page --- resources/views/mail/submission-notification.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/mail/submission-notification.blade.php b/resources/views/mail/submission-notification.blade.php index 4dbe21d..afb0610 100644 --- a/resources/views/mail/submission-notification.blade.php +++ b/resources/views/mail/submission-notification.blade.php @@ -6,8 +6,8 @@ **Submitted by:** {{ $entry->user?->name ?? 'Guest' }} **Submitted at:** {{ $entry->created_at->format('F j, Y g:i A') }} - -View Submission + +View Form & Entries Thanks,
From 728b533f02c74a4a6427621a4a1f86032f3765c8 Mon Sep 17 00:00:00 2001 From: scott grayson Date: Mon, 1 Dec 2025 11:18:54 -0500 Subject: [PATCH 04/14] Fix PHPStan errors with proper type annotations for form notifications --- .../add_notification_emails_to_filament_forms_table.php.stub | 2 ++ resources/views/mail/submission-notification.blade.php | 2 +- src/Models/FilamentForm.php | 3 +++ src/Models/FilamentFormUser.php | 1 + src/Observers/FilamentFormUserObserver.php | 2 ++ 5 files changed, 9 insertions(+), 1 deletion(-) diff --git a/database/migrations/add_notification_emails_to_filament_forms_table.php.stub b/database/migrations/add_notification_emails_to_filament_forms_table.php.stub index 34300e1..ca9e92c 100644 --- a/database/migrations/add_notification_emails_to_filament_forms_table.php.stub +++ b/database/migrations/add_notification_emails_to_filament_forms_table.php.stub @@ -19,3 +19,5 @@ return new class extends Migration + + diff --git a/resources/views/mail/submission-notification.blade.php b/resources/views/mail/submission-notification.blade.php index afb0610..87e16b1 100644 --- a/resources/views/mail/submission-notification.blade.php +++ b/resources/views/mail/submission-notification.blade.php @@ -3,7 +3,7 @@ A new submission has been received for **{{ $form->name }}**. -**Submitted by:** {{ $entry->user?->name ?? 'Guest' }} +**Submitted by:** {{ $entry->user?->name ?? 'Guest' }} **Submitted at:** {{ $entry->created_at->format('F j, Y g:i A') }} diff --git a/src/Models/FilamentForm.php b/src/Models/FilamentForm.php index 47b7cb3..ecbb124 100644 --- a/src/Models/FilamentForm.php +++ b/src/Models/FilamentForm.php @@ -10,8 +10,11 @@ /** * @property int $id + * @property string $name + * @property string|null $description * @property string|null $redirect_url * @property bool $permit_guest_entries + * @property array|null $notification_emails * @property-read string $form_link */ class FilamentForm extends Model diff --git a/src/Models/FilamentFormUser.php b/src/Models/FilamentFormUser.php index 9045af8..6684224 100644 --- a/src/Models/FilamentFormUser.php +++ b/src/Models/FilamentFormUser.php @@ -13,6 +13,7 @@ * @property array $entry * @property array|null $firstEntry * @property-read array $key_value_entry + * @property-read FilamentForm $filamentForm */ class FilamentFormUser extends Model implements HasMedia { diff --git a/src/Observers/FilamentFormUserObserver.php b/src/Observers/FilamentFormUserObserver.php index 9c1d642..5b44f00 100644 --- a/src/Observers/FilamentFormUserObserver.php +++ b/src/Observers/FilamentFormUserObserver.php @@ -12,6 +12,7 @@ class FilamentFormUserObserver { public function created(FilamentFormUser $filamentFormUser): void { + /** @var \Tapp\FilamentFormBuilder\Models\FilamentForm|null $form */ $form = $filamentFormUser->filamentForm; // Check if notification emails are configured for this form @@ -35,3 +36,4 @@ public function created(FilamentFormUser $filamentFormUser): void } } } + From a557cbc74f0c3aac43daa1f7ea932e9267beabe0 Mon Sep 17 00:00:00 2001 From: scottgrayson <7796074+scottgrayson@users.noreply.github.com> Date: Mon, 1 Dec 2025 16:19:19 +0000 Subject: [PATCH 05/14] Fix styling --- src/Observers/FilamentFormUserObserver.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Observers/FilamentFormUserObserver.php b/src/Observers/FilamentFormUserObserver.php index 5b44f00..fb06e54 100644 --- a/src/Observers/FilamentFormUserObserver.php +++ b/src/Observers/FilamentFormUserObserver.php @@ -36,4 +36,3 @@ public function created(FilamentFormUser $filamentFormUser): void } } } - From 3f8eb6c3143d2186e2c532b518c2cab18c15ed59 Mon Sep 17 00:00:00 2001 From: scott grayson Date: Mon, 1 Dec 2025 12:17:34 -0500 Subject: [PATCH 06/14] Change email notifications to use queue instead of send --- src/Observers/FilamentFormUserObserver.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Observers/FilamentFormUserObserver.php b/src/Observers/FilamentFormUserObserver.php index fb06e54..ac61720 100644 --- a/src/Observers/FilamentFormUserObserver.php +++ b/src/Observers/FilamentFormUserObserver.php @@ -32,7 +32,7 @@ public function created(FilamentFormUser $filamentFormUser): void } foreach ($emails as $email) { - Mail::to($email)->send(new FormSubmissionNotification($form, $filamentFormUser)); + Mail::to($email)->queue(new FormSubmissionNotification($form, $filamentFormUser)); } } } From 9fccb03b2b32cb8e17e8899d5519ccac9ddfc458 Mon Sep 17 00:00:00 2001 From: scott grayson Date: Mon, 1 Dec 2025 13:08:26 -0500 Subject: [PATCH 07/14] Add notifications for form resubmissions (updated entries) - Refactor observer to use shared sendNotifications() method - Add updated() method to fire notifications on form resubmissions - Both created() and updated() events now send notification emails --- src/Observers/FilamentFormUserObserver.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/Observers/FilamentFormUserObserver.php b/src/Observers/FilamentFormUserObserver.php index ac61720..522ee15 100644 --- a/src/Observers/FilamentFormUserObserver.php +++ b/src/Observers/FilamentFormUserObserver.php @@ -11,6 +11,16 @@ class FilamentFormUserObserver { public function created(FilamentFormUser $filamentFormUser): void + { + $this->sendNotifications($filamentFormUser); + } + + public function updated(FilamentFormUser $filamentFormUser): void + { + $this->sendNotifications($filamentFormUser); + } + + protected function sendNotifications(FilamentFormUser $filamentFormUser): void { /** @var \Tapp\FilamentFormBuilder\Models\FilamentForm|null $form */ $form = $filamentFormUser->filamentForm; From 8354d7a0ac5d6ca64a08e6a35a802074598455d8 Mon Sep 17 00:00:00 2001 From: scott grayson Date: Mon, 1 Dec 2025 13:43:13 -0500 Subject: [PATCH 08/14] Include submission details in notification email - Add all form field questions and answers to email body - Format submitted by and at on separate lines - Makes email useful for non-users who can't log in to view entries --- .../mail/submission-notification.blade.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/resources/views/mail/submission-notification.blade.php b/resources/views/mail/submission-notification.blade.php index 87e16b1..15fa9c2 100644 --- a/resources/views/mail/submission-notification.blade.php +++ b/resources/views/mail/submission-notification.blade.php @@ -4,8 +4,26 @@ A new submission has been received for **{{ $form->name }}**. **Submitted by:** {{ $entry->user?->name ?? 'Guest' }} + **Submitted at:** {{ $entry->created_at->format('F j, Y g:i A') }} +--- + +## Submission Details + +@foreach($entry->entry as $field) +**{{ $field['field'] }}** + +@if(is_array($field['answer'])) +{{ implode(', ', $field['answer']) }} +@else +{{ $field['answer'] ?: '(No answer provided)' }} +@endif + +@endforeach + +--- + View Form & Entries From 60078e2e700c82d2b8081939c274e8edc1612c8b Mon Sep 17 00:00:00 2001 From: scott grayson Date: Mon, 1 Dec 2025 13:44:32 -0500 Subject: [PATCH 09/14] Add debug logging to notification observer - Log when updated() event fires - Log notification email configuration status - Log email sending actions - Helps troubleshoot why resubmissions may not trigger emails --- src/Observers/FilamentFormUserObserver.php | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/Observers/FilamentFormUserObserver.php b/src/Observers/FilamentFormUserObserver.php index 522ee15..a1ba453 100644 --- a/src/Observers/FilamentFormUserObserver.php +++ b/src/Observers/FilamentFormUserObserver.php @@ -17,6 +17,9 @@ public function created(FilamentFormUser $filamentFormUser): void public function updated(FilamentFormUser $filamentFormUser): void { + // Log that the updated event fired + \Log::info('FilamentFormUserObserver::updated() fired for entry ID: '.$filamentFormUser->id); + $this->sendNotifications($filamentFormUser); } @@ -27,6 +30,8 @@ protected function sendNotifications(FilamentFormUser $filamentFormUser): void // Check if notification emails are configured for this form if (! $form || ! $form->notification_emails) { + \Log::info('No notification emails configured for form ID: '.($form?->id ?? 'null')); + return; } @@ -38,11 +43,17 @@ protected function sendNotifications(FilamentFormUser $filamentFormUser): void $emails = array_filter($notificationEmails ?? []); if (empty($emails)) { + \Log::info('Notification emails array is empty after filtering'); + return; } + \Log::info('Sending notifications for entry ID: '.$filamentFormUser->id.' to: '.json_encode($emails)); + foreach ($emails as $email) { Mail::to($email)->queue(new FormSubmissionNotification($form, $filamentFormUser)); } + + \Log::info('Queued '.count($emails).' notification emails for entry ID: '.$filamentFormUser->id); } } From d1c597575412f4de8cdc1ff57ae35b96d0f72277 Mon Sep 17 00:00:00 2001 From: scott grayson Date: Mon, 1 Dec 2025 16:49:01 -0500 Subject: [PATCH 10/14] Remove submission details from notification email Keep email simple with just form name, submitter, and timestamp --- .../mail/submission-notification.blade.php | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/resources/views/mail/submission-notification.blade.php b/resources/views/mail/submission-notification.blade.php index 15fa9c2..60c0382 100644 --- a/resources/views/mail/submission-notification.blade.php +++ b/resources/views/mail/submission-notification.blade.php @@ -7,23 +7,6 @@ **Submitted at:** {{ $entry->created_at->format('F j, Y g:i A') }} ---- - -## Submission Details - -@foreach($entry->entry as $field) -**{{ $field['field'] }}** - -@if(is_array($field['answer'])) -{{ implode(', ', $field['answer']) }} -@else -{{ $field['answer'] ?: '(No answer provided)' }} -@endif - -@endforeach - ---- - View Form & Entries From 897dc945384ea6e8c70b4ebb2376a3e6edabff0e Mon Sep 17 00:00:00 2001 From: scott grayson Date: Mon, 1 Dec 2025 16:52:40 -0500 Subject: [PATCH 11/14] Fix PHPStan errors in observer - Remove unnecessary nullsafe operator - Remove unnecessary ternary operator - Remove unnecessary null coalescing operator - Simplify notification email handling --- src/Observers/FilamentFormUserObserver.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Observers/FilamentFormUserObserver.php b/src/Observers/FilamentFormUserObserver.php index a1ba453..ac153ea 100644 --- a/src/Observers/FilamentFormUserObserver.php +++ b/src/Observers/FilamentFormUserObserver.php @@ -30,17 +30,13 @@ protected function sendNotifications(FilamentFormUser $filamentFormUser): void // Check if notification emails are configured for this form if (! $form || ! $form->notification_emails) { - \Log::info('No notification emails configured for form ID: '.($form?->id ?? 'null')); + \Log::info('No notification emails configured for form ID: '.($form->id ?? 'null')); return; } - $notificationEmails = is_array($form->notification_emails) - ? $form->notification_emails - : json_decode($form->notification_emails, true); - // Filter out empty email addresses and send notifications - $emails = array_filter($notificationEmails ?? []); + $emails = array_filter($form->notification_emails); if (empty($emails)) { \Log::info('Notification emails array is empty after filtering'); From 1b9bc27348ac6d15ab40113bb7e2e5a4745f6111 Mon Sep 17 00:00:00 2001 From: scott grayson Date: Tue, 2 Dec 2025 09:49:54 -0500 Subject: [PATCH 12/14] Remove Laravel 10 support (requires Filament 4 which needs Laravel 11+) --- .github/workflows/run-tests.yml | 4 +--- composer.json | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 8b2b714..10e31e8 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -18,15 +18,13 @@ jobs: matrix: os: [ubuntu-latest] php: [8.4, 8.3, 8.2] - laravel: [12.*, 11.*, 10.*] + laravel: [12.*, 11.*] stability: [prefer-lowest, prefer-stable] include: - laravel: 12.* testbench: 10.* - laravel: 11.* testbench: 9.* - - laravel: 10.* - testbench: 8.* name: P${{ matrix.php }} - L${{ matrix.laravel }} - ${{ matrix.stability }} - ${{ matrix.os }} diff --git a/composer.json b/composer.json index 9ff92fe..8818963 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,7 @@ "require": { "php": "^8.2", "filament/filament": "^4.0", - "illuminate/contracts": "^10.0||^11.0||^12.0", + "illuminate/contracts": "^11.0||^12.0", "maatwebsite/excel": "^3.1", "spatie/eloquent-sortable": "^4.3", "spatie/laravel-medialibrary": "^11.12", @@ -32,7 +32,7 @@ "laravel/pint": "^1.14", "nunomaduro/collision": "^8.1.1||^7.10.0", "larastan/larastan": "^2.9||^3.0", - "orchestra/testbench": "^10.0.0||^9.0.0||^8.22.0", + "orchestra/testbench": "^10.0.0||^9.0.0", "pestphp/pest": "^3.0||^2.34", "pestphp/pest-plugin-arch": "^3.0||^2.7", "pestphp/pest-plugin-laravel": "^3.0||^2.3", From 3dde390ff75cf7057902e4335174324ddea6c8e4 Mon Sep 17 00:00:00 2001 From: scott grayson Date: Tue, 2 Dec 2025 09:51:25 -0500 Subject: [PATCH 13/14] Remove PHP 8.2 support and fix trailing newlines in migration --- .github/workflows/run-tests.yml | 2 +- composer.json | 2 +- ...add_notification_emails_to_filament_forms_table.php.stub | 6 ------ 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml index 10e31e8..fd7fff4 100644 --- a/.github/workflows/run-tests.yml +++ b/.github/workflows/run-tests.yml @@ -17,7 +17,7 @@ jobs: fail-fast: true matrix: os: [ubuntu-latest] - php: [8.4, 8.3, 8.2] + php: [8.4, 8.3] laravel: [12.*, 11.*] stability: [prefer-lowest, prefer-stable] include: diff --git a/composer.json b/composer.json index 8818963..380b582 100644 --- a/composer.json +++ b/composer.json @@ -20,7 +20,7 @@ } ], "require": { - "php": "^8.2", + "php": "^8.3", "filament/filament": "^4.0", "illuminate/contracts": "^11.0||^12.0", "maatwebsite/excel": "^3.1", diff --git a/database/migrations/add_notification_emails_to_filament_forms_table.php.stub b/database/migrations/add_notification_emails_to_filament_forms_table.php.stub index ca9e92c..f3dd9e7 100644 --- a/database/migrations/add_notification_emails_to_filament_forms_table.php.stub +++ b/database/migrations/add_notification_emails_to_filament_forms_table.php.stub @@ -15,9 +15,3 @@ return new class extends Migration }); } }; - - - - - - From d940b2c287e34a2731c70d5e4957a1d32742f08b Mon Sep 17 00:00:00 2001 From: scott grayson Date: Tue, 2 Dec 2025 10:00:52 -0500 Subject: [PATCH 14/14] Update dev dependencies to Laravel 11+ compatible versions only --- composer.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index 380b582..7568340 100644 --- a/composer.json +++ b/composer.json @@ -30,15 +30,15 @@ }, "require-dev": { "laravel/pint": "^1.14", - "nunomaduro/collision": "^8.1.1||^7.10.0", - "larastan/larastan": "^2.9||^3.0", + "larastan/larastan": "^3.0", + "nunomaduro/collision": "^8.1.1", "orchestra/testbench": "^10.0.0||^9.0.0", - "pestphp/pest": "^3.0||^2.34", - "pestphp/pest-plugin-arch": "^3.0||^2.7", - "pestphp/pest-plugin-laravel": "^3.0||^2.3", - "phpstan/extension-installer": "^1.3||^2.0", - "phpstan/phpstan-deprecation-rules": "^1.1||^2.0", - "phpstan/phpstan-phpunit": "^1.3||^2.0", + "pestphp/pest": "^3.0", + "pestphp/pest-plugin-arch": "^3.0", + "pestphp/pest-plugin-laravel": "^3.0", + "phpstan/extension-installer": "^1.3", + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", "spatie/laravel-ray": "^1.35" }, "autoload": {