Fix 40+ codebase issues: security, performance, duplication, dead code, and routes

HIGH:
- Add missing import RadioSongRequestFormRequest (fixes crash on POST)
- Add Purify XSS sanitization for article full_story
- Fix duplicate radio API routes (/api/radio vs /api/radio/v2)
- Add try-catch guards in InstallationController for missing records

MEDIUM:
- Fix N+1: eager load comments.user in ArticleController::show()
- Fix GuestbookController authorization logic
- Remove dead doSetup() method and duplicate route
- Extract shared HasRadioDefaults trait (remove code duplication)
- Use named routes in ForceStaffTwoFactorMiddleware
- Fix WebsiteHelpCenterTicket::isOpen() (no permission leak)
- Enable  on WebsiteHelpCenterTicket (matches schema)
- Replace WebsiteTeam::all()->pluck() with direct pluck()
- Replace CatalogPage::all()->pluck() with direct pluck()
- Replace WebsiteBadge::all() with direct pluck()
- Add throttle middleware to guestbook store, logo-generator, radio embed

LOW:
- Remove unused imports
- Remove dead /inertia-test route
- Consolidate cache keys in RadioController
This commit is contained in:
root
2026-06-08 18:56:34 +02:00
parent 6eeb85fcf2
commit 4094f0fb14
19 changed files with 97 additions and 101 deletions
@@ -69,8 +69,7 @@ class ListBadgeTextEditors extends ListRecords
$jsonData = json_decode(file_get_contents($jsonPath), true);
$badges = WebsiteBadge::all();
$badgeKeys = $badges->pluck('badge_key')->toArray();
$badgeKeys = WebsiteBadge::pluck('badge_key')->toArray();
foreach ($jsonData as $key => $value) {
if (
@@ -61,9 +61,7 @@ class CatalogEditorResource extends Resource
Select::make('parent_id')
->label('Parent Page')
->options(fn () => CatalogPage::all()
->pluck('caption', 'id')
->toArray())
->options(fn () => CatalogPage::pluck('caption', 'id')->toArray())
->default(-1),
TextInput::make('order_num')
@@ -122,7 +122,7 @@ class UserResource extends Resource
Select::make('team_id')
->native(false)
->label(__('filament::resources.inputs.team_id'))
->options(WebsiteTeam::all()->pluck('rank_name', 'id'))
->options(WebsiteTeam::pluck('rank_name', 'id'))
->columnSpanFull(),
])->columns(['sm' => 2]),