From 7fa8b75b29b9ac02ba686049c0da4cddbfbecd23 Mon Sep 17 00:00:00 2001 From: Jp Date: Wed, 11 Feb 2026 05:37:54 +0800 Subject: [PATCH 1/4] fix: enforce HTTPS in production environment Add URL::forceScheme('https') in AppServiceProvider to ensure all generated URLs use HTTPS when the application is in production. This improves security by enforcing secure connections. --- app/Providers/AppServiceProvider.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 3e3cc91..ee10dae 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -4,6 +4,7 @@ namespace App\Providers; use App\Policies\RolePolicy; use Illuminate\Support\Facades\Gate; +use Illuminate\Support\Facades\URL; use Illuminate\Support\ServiceProvider; use Spatie\Permission\Models\Role; @@ -22,6 +23,10 @@ class AppServiceProvider extends ServiceProvider */ public function boot(): void { + if ($this->app->environment('production')) { + URL::forceScheme('https'); + } + Gate::before(function ($user, $ability) { return $user->hasRole('super_admin') ? true : null; }); From ee65bdfb318b1ce66ec58b6cd69b6888a9ba5e56 Mon Sep 17 00:00:00 2001 From: Jp Date: Wed, 11 Feb 2026 05:41:22 +0800 Subject: [PATCH 2/4] fix: force HTTPS scheme in all environments Previously HTTPS was only enforced in production, which could lead to insecure URLs in other environments like staging. This change ensures consistent URL generation across all environments. --- app/Providers/AppServiceProvider.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index ee10dae..afa1970 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -23,9 +23,7 @@ class AppServiceProvider extends ServiceProvider */ public function boot(): void { - if ($this->app->environment('production')) { - URL::forceScheme('https'); - } + URL::forceScheme('https'); Gate::before(function ($user, $ability) { return $user->hasRole('super_admin') ? true : null; From a77e95d2a5cff69f76f301936494f0936af5a625 Mon Sep 17 00:00:00 2001 From: Jp Date: Wed, 11 Feb 2026 05:44:49 +0800 Subject: [PATCH 3/4] feat: implement FilamentUser interface for User model Add FilamentUser interface to allow access control within Filament admin panel. The canAccessPanel method currently returns true for all users, providing a foundation for future permission-based access restrictions. --- app/Models/User.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/app/Models/User.php b/app/Models/User.php index c5e03fb..3b60dc5 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -3,16 +3,23 @@ namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; +use Filament\Models\Contracts\FilamentUser; +use Filament\Panel; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Spatie\Permission\Traits\HasPermissions; use Spatie\Permission\Traits\HasRoles; -class User extends Authenticatable +class User extends Authenticatable implements FilamentUser { use HasFactory, HasPermissions, HasRoles, Notifiable; + public function canAccessPanel(Panel $panel): bool + { + return true; + } + /** * The attributes that are mass assignable. * From fc672e4f4aba0a769d31dfc29c2cc11567a7be73 Mon Sep 17 00:00:00 2001 From: Jp Date: Thu, 12 Feb 2026 16:12:35 +0800 Subject: [PATCH 4/4] feat(TransmittalResource): enhance search functionality across related models Implement wildcard search on transmittal series, notes, and files to improve user experience when filtering records. Also extend search capabilities to client company and branch code fields for more comprehensive filtering. --- .../Resources/TransmittalResource.php | 26 ++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/app/Filament/Resources/TransmittalResource.php b/app/Filament/Resources/TransmittalResource.php index 6ab0df1..96e0be8 100644 --- a/app/Filament/Resources/TransmittalResource.php +++ b/app/Filament/Resources/TransmittalResource.php @@ -45,16 +45,36 @@ class TransmittalResource extends Resource ->columns([ Tables\Columns\Layout\Split::make([ Tables\Columns\TextColumn::make('series') - ->searchable() + ->searchable(query: function (Builder $query, string $search): Builder { + $wildcardSearch = '%' . str_replace(' ', '%', $search) . '%'; + + return $query->where(function (Builder $query) use ($wildcardSearch) { + $query->where('series', 'like', $wildcardSearch) + ->orWhereHas('notes', function (Builder $query) use ($wildcardSearch) { + $query->where('comment', 'like', $wildcardSearch); + }) + ->orWhereHas('files', function (Builder $query) use ($wildcardSearch) { + $query->where('description', 'like', $wildcardSearch); + }); + }); + }) ->label('Series') ->weight(FontWeight::Bold) ->columnSpan(2), Tables\Columns\Layout\Stack::make([ Tables\Columns\TextColumn::make('client.company') - ->searchable() + ->searchable(query: function (Builder $query, string $search): Builder { + return $query->whereHas('client', function (Builder $query) use ($search) { + $query->where('company', 'like', '%' . str_replace(' ', '%', $search) . '%'); + }); + }) ->weight(FontWeight::SemiBold)->label('Client'), Tables\Columns\TextColumn::make('branch.code') - ->searchable() + ->searchable(query: function (Builder $query, string $search): Builder { + return $query->whereHas('branch', function (Builder $query) use ($search) { + $query->where('code', 'like', '%' . str_replace(' ', '%', $search) . '%'); + }); + }) ->label('Branch'), ]), ]),