From 3be4ff590f1602eae58f7641466b75265a3e199e Mon Sep 17 00:00:00 2001 From: Mark Gregory Date: Tue, 23 Jun 2026 13:39:02 +0100 Subject: [PATCH] style updates --- .../Providers/AnalyticsServiceProvider.php | 4 +- .../Audit/Providers/AuditServiceProvider.php | 4 +- Modules/AuditTrail/Helpers/Helper.php | 2 +- .../Http/Controllers/AuditTrailController.php | 12 ++-- .../Providers/AuditTrailServiceProvider.php | 21 +++---- .../CarrierManagementServiceProvider.php | 4 +- .../ConfigurationServiceProvider.php | 4 +- .../Database/Seeders/IsoCountriesSeeder.php | 2 +- .../Seeders/IsoCountrySubdivisionsSeeder.php | 2 +- Modules/Countries/Helpers/Helper.php | 2 +- .../Providers/CountriesServiceProvider.php | 26 ++++---- .../Providers/RouteServiceProvider.php | 4 +- Modules/Countries/Routes/web.php | 2 - Modules/Countries/Support/Iso3166.php | 6 +- .../DocumentArchiveServiceProvider.php | 4 +- .../Controllers/DocumentationController.php | 2 +- .../StoreDocumentationDocumentRequest.php | 4 +- .../UpdateDocumentationDocumentRequest.php | 4 +- .../Models/DocumentationAttachment.php | 18 +++--- .../Models/DocumentationCategory.php | 18 +++--- .../Models/DocumentationDocument.php | 22 +++---- .../DocumentationServiceProvider.php | 8 +-- .../Tests/Feature/DocumentationModuleTest.php | 3 +- ...0_backfill_kanban_board_status_columns.php | 2 +- ...eplication_fields_to_helpdesk_comments.php | 4 +- ...11500_add_subject_to_helpdesk_comments.php | 2 +- .../Seeders/HelpdeskDatabaseSeeder.php | 20 +++---- .../Feature/HelpdeskLivewireAssetsTest.php | 2 +- .../Http/Controllers/GitWebhookController.php | 2 +- .../TicketAttachmentStoreController.php | 7 ++- .../TicketCommentStoreController.php | 9 +-- .../Controllers/TicketControlsController.php | 10 ++-- .../Controllers/TicketStoreController.php | 4 +- Modules/Helpdesk/Livewire/KanbanBoard.php | 12 ++-- Modules/Helpdesk/Livewire/SettingsManager.php | 21 ++++--- Modules/Helpdesk/Livewire/TicketCreate.php | 7 +-- Modules/Helpdesk/Livewire/TicketEdit.php | 6 +- Modules/Helpdesk/Livewire/TicketIndex.php | 6 +- Modules/Helpdesk/Livewire/TicketShow.php | 26 ++++---- Modules/Helpdesk/Models/Category.php | 5 +- Modules/Helpdesk/Models/Comment.php | 5 +- Modules/Helpdesk/Models/Project.php | 5 +- Modules/Helpdesk/Models/Status.php | 4 +- Modules/Helpdesk/Models/Team.php | 5 +- Modules/Helpdesk/Models/Ticket.php | 2 +- .../Providers/HelpdeskServiceProvider.php | 18 +++--- Modules/Helpdesk/Routes/web.php | 4 +- .../Services/AgentAssignmentService.php | 2 +- .../Helpdesk/Services/AttachmentService.php | 2 +- .../Services/GitWebhookIngestionService.php | 14 +++-- Modules/Helpdesk/Services/SlaService.php | 5 +- .../Services/TicketReferenceService.php | 12 ++-- Modules/Helpdesk/Services/TicketService.php | 16 ++--- .../Services/WorkflowNotificationService.php | 24 ++++---- .../Browser/HelpdeskSettingsBrowserTest.php | 2 +- .../Browser/HelpdeskTicketBrowserTest.php | 10 ++-- .../Tests/Concerns/BuildsHelpdeskFixtures.php | 2 +- .../Tests/Feature/GitAndAttachmentTest.php | 2 +- .../Tests/Feature/GitWebhookIngestionTest.php | 16 ++--- .../Feature/HelpdeskLivewireAssetsTest.php | 2 +- .../RedmineInspiredHelpdeskFeatureTest.php | 2 +- .../Tests/Feature/SettingsCrudTest.php | 2 +- .../Tests/Feature/TicketConversationTest.php | 10 ++-- .../Helpdesk/Tests/Feature/TicketCrudTest.php | 3 +- .../TicketFirstResponseSlaFilesTest.php | 8 +-- ...icketPublicResponseVisibilityFilesTest.php | 4 +- .../TicketSlaOperationalDetailFilesTest.php | 14 ++--- .../TicketTimerButtonSizeFilesTest.php | 1 + .../Tests/Feature/TicketTimerFilesTest.php | 2 +- .../Feature/WorkflowNotificationTest.php | 2 +- .../Tests/Unit/TicketReferenceServiceTest.php | 16 ++--- .../Providers/InternalApiServiceProvider.php | 2 +- .../Middleware/VerifyInternalApiSignature.php | 6 +- .../Feature/InternalApiSignatureTest.php | 2 +- .../InventoryManagementServiceProvider.php | 4 +- .../M3IntegrationServiceProvider.php | 4 +- .../Providers/PlatformServiceProvider.php | 8 +-- .../Controllers/PlatformPriceController.php | 2 +- .../Controllers/StripeWebhookController.php | 2 +- Modules/Platform/app/Models/LicenseKey.php | 2 +- Modules/Platform/app/Models/PlatformPrice.php | 4 +- .../database/seeders/PlatformSeeder.php | 6 +- .../Seeders/PricingDatabaseSeeder.php | 2 +- Modules/Pricing/Helpers/Helper.php | 2 +- .../Providers/PricingServiceProvider.php | 21 +++---- .../ReplenishmentServiceProvider.php | 4 +- .../Providers/ReportingServiceProvider.php | 4 +- .../Providers/SecurityServiceProvider.php | 4 +- .../SentinelIntegrationServiceProvider.php | 4 +- .../Providers/ShippingServiceProvider.php | 4 +- .../TransportationServiceProvider.php | 4 +- .../Providers/WarehouseServiceProvider.php | 6 +- .../WarehouseDashboardController.php | 1 - Modules/Warehouse/app/Models/Warehouse.php | 2 +- app/Actions/Fortify/CreateNewUser.php | 6 +- app/Actions/Fortify/ResetUserPassword.php | 2 +- app/Actions/Fortify/UpdateUserPassword.php | 2 +- .../Fortify/UpdateUserProfileInformation.php | 4 +- app/Providers/AppServiceProvider.php | 3 +- app/Providers/FortifyServiceProvider.php | 4 +- app/Services/Charts/DashboardChartService.php | 34 ++++++----- bootstrap/app.php | 6 +- bootstrap/providers.php | 2 +- config/cache.php | 2 +- config/database.php | 2 +- config/filesystems.php | 2 +- config/horizon.php | 2 +- config/logging.php | 2 +- config/modules.php | 2 +- config/session.php | 2 +- pint.json | 59 ++++++++++++++++++- public/index.php | 6 +- routes/jetstream.php | 2 +- routes/tenant.php | 2 +- routes/web.php | 2 +- tests/Browser/AuthBrowserTest.php | 2 +- .../Concerns/InteractsWithWmsBrowser.php | 2 +- .../Browser/Concerns/InteractsWithWmsData.php | 9 +-- .../PlatformAdministrationBrowserTest.php | 8 +-- tests/Browser/PlatformPricingBrowserTest.php | 2 +- tests/Browser/WarehouseBrowserTest.php | 13 ++-- tests/CreatesApplication.php | 2 +- tests/DuskTestCase.php | 27 ++++----- tests/Feature/Auth/EmailVerificationTest.php | 4 +- .../InternalApi/InternalApiCoverageTest.php | 6 +- .../Platform/PlatformAdministrationTest.php | 6 +- .../Platform/PlatformPriceCrudTest.php | 6 +- tests/Feature/Warehouse/WarehouseCrudTest.php | 3 +- tests/TestCase.php | 9 +-- 129 files changed, 482 insertions(+), 404 deletions(-) diff --git a/Modules/Analytics/Providers/AnalyticsServiceProvider.php b/Modules/Analytics/Providers/AnalyticsServiceProvider.php index cd7dba6c..7a34fde2 100644 --- a/Modules/Analytics/Providers/AnalyticsServiceProvider.php +++ b/Modules/Analytics/Providers/AnalyticsServiceProvider.php @@ -11,8 +11,8 @@ class AnalyticsServiceProvider extends ServiceProvider */ public function boot(): void { - $this->loadRoutesFrom(__DIR__.'/../Routes/web.php'); - $this->loadViewsFrom(__DIR__.'/../Resources/views', 'analytics'); + $this->loadRoutesFrom(__DIR__ . '/../Routes/web.php'); + $this->loadViewsFrom(__DIR__ . '/../Resources/views', 'analytics'); } /** diff --git a/Modules/Audit/Providers/AuditServiceProvider.php b/Modules/Audit/Providers/AuditServiceProvider.php index 50a70126..f5b2664a 100644 --- a/Modules/Audit/Providers/AuditServiceProvider.php +++ b/Modules/Audit/Providers/AuditServiceProvider.php @@ -11,8 +11,8 @@ class AuditServiceProvider extends ServiceProvider */ public function boot(): void { - $this->loadRoutesFrom(__DIR__.'/../Routes/web.php'); - $this->loadViewsFrom(__DIR__.'/../Resources/views', 'audit'); + $this->loadRoutesFrom(__DIR__ . '/../Routes/web.php'); + $this->loadViewsFrom(__DIR__ . '/../Resources/views', 'audit'); } /** diff --git a/Modules/AuditTrail/Helpers/Helper.php b/Modules/AuditTrail/Helpers/Helper.php index 521ad22b..1c4886a9 100644 --- a/Modules/AuditTrail/Helpers/Helper.php +++ b/Modules/AuditTrail/Helpers/Helper.php @@ -8,6 +8,6 @@ if (! function_exists('audittrail_feature_enabled')) { */ function audittrail_feature_enabled(string $key): bool { - return (bool) config(ModuleInfo::nameLower().".features.{$key}", false); + return (bool) config(ModuleInfo::nameLower() . ".features.{$key}", false); } } diff --git a/Modules/AuditTrail/Http/Controllers/AuditTrailController.php b/Modules/AuditTrail/Http/Controllers/AuditTrailController.php index 36dfecad..9c871d87 100644 --- a/Modules/AuditTrail/Http/Controllers/AuditTrailController.php +++ b/Modules/AuditTrail/Http/Controllers/AuditTrailController.php @@ -41,7 +41,8 @@ class AuditTrailController extends Controller /** * Show the specified resource. * - * @param int $id + * @param int $id + * * @return Renderable */ public function show($id) @@ -52,7 +53,8 @@ class AuditTrailController extends Controller /** * Show the form for editing the specified resource. * - * @param int $id + * @param int $id + * * @return Renderable */ public function edit($id) @@ -63,7 +65,8 @@ class AuditTrailController extends Controller /** * Update the specified resource in storage. * - * @param int $id + * @param int $id + * * @return Renderable */ public function update(Request $request, $id) @@ -74,7 +77,8 @@ class AuditTrailController extends Controller /** * Remove the specified resource from storage. * - * @param int $id + * @param int $id + * * @return Renderable */ public function destroy($id) diff --git a/Modules/AuditTrail/Providers/AuditTrailServiceProvider.php b/Modules/AuditTrail/Providers/AuditTrailServiceProvider.php index 9ab32cb0..6ea689d6 100644 --- a/Modules/AuditTrail/Providers/AuditTrailServiceProvider.php +++ b/Modules/AuditTrail/Providers/AuditTrailServiceProvider.php @@ -47,7 +47,7 @@ class AuditTrailServiceProvider extends ServiceProvider */ protected function registerHelpers(): void { - foreach (glob(__DIR__.'/../Helpers/*.php') as $filename) { + foreach (glob(__DIR__ . '/../Helpers/*.php') as $filename) { require_once $filename; } } @@ -60,10 +60,10 @@ class AuditTrailServiceProvider extends ServiceProvider if (! $this->app->runningInConsole()) { return; } - $commandPath = __DIR__.'/../Console'; + $commandPath = __DIR__ . '/../Console'; $commands = collect(File::allFiles($commandPath)) ->map(function ($file) { - $class = 'Modules\\'.$this->moduleName.'\\Console\\'.$file->getFilenameWithoutExtension(); + $class = 'Modules\\' . $this->moduleName . '\\Console\\' . $file->getFilenameWithoutExtension(); return $class; }) @@ -81,10 +81,11 @@ class AuditTrailServiceProvider extends ServiceProvider protected function registerConfig(): void { $this->publishes([ - module_path(ModuleInfo::name(), 'Config/config.php') => config_path(ModuleInfo::nameLower().'.php'), + module_path(ModuleInfo::name(), 'Config/config.php') => config_path(ModuleInfo::nameLower() . '.php'), ], 'config'); $this->mergeConfigFrom( - module_path(ModuleInfo::name(), 'Config/config.php'), ModuleInfo::nameLower() + module_path(ModuleInfo::name(), 'Config/config.php'), + ModuleInfo::nameLower(), ); } @@ -93,11 +94,11 @@ class AuditTrailServiceProvider extends ServiceProvider */ public function registerViews(): void { - $viewPath = resource_path('views/modules/'.ModuleInfo::nameLower()); + $viewPath = resource_path('views/modules/' . ModuleInfo::nameLower()); $sourcePath = module_path(ModuleInfo::name(), 'Resources/views'); $this->publishes([ $sourcePath => $viewPath, - ], ['views', ModuleInfo::nameLower().'-module-views']); + ], ['views', ModuleInfo::nameLower() . '-module-views']); $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), ModuleInfo::nameLower()); } @@ -106,7 +107,7 @@ class AuditTrailServiceProvider extends ServiceProvider */ public function registerTranslations(): void { - $langPath = resource_path('lang/modules/'.ModuleInfo::nameLower()); + $langPath = resource_path('lang/modules/' . ModuleInfo::nameLower()); if (is_dir($langPath)) { $this->loadTranslationsFrom($langPath, ModuleInfo::nameLower()); @@ -122,8 +123,8 @@ class AuditTrailServiceProvider extends ServiceProvider { $paths = []; foreach (Config::get('view.paths') as $path) { - if (is_dir($path.'/modules/'.ModuleInfo::nameLower())) { - $paths[] = $path.'/modules/'.ModuleInfo::nameLower(); + if (is_dir($path . '/modules/' . ModuleInfo::nameLower())) { + $paths[] = $path . '/modules/' . ModuleInfo::nameLower(); } } diff --git a/Modules/CarrierManagement/Providers/CarrierManagementServiceProvider.php b/Modules/CarrierManagement/Providers/CarrierManagementServiceProvider.php index e9d443ac..a290e788 100644 --- a/Modules/CarrierManagement/Providers/CarrierManagementServiceProvider.php +++ b/Modules/CarrierManagement/Providers/CarrierManagementServiceProvider.php @@ -11,8 +11,8 @@ class CarrierManagementServiceProvider extends ServiceProvider */ public function boot(): void { - $this->loadRoutesFrom(__DIR__.'/../Routes/web.php'); - $this->loadViewsFrom(__DIR__.'/../Resources/views', 'carriermanagement'); + $this->loadRoutesFrom(__DIR__ . '/../Routes/web.php'); + $this->loadViewsFrom(__DIR__ . '/../Resources/views', 'carriermanagement'); } /** diff --git a/Modules/Configuration/Providers/ConfigurationServiceProvider.php b/Modules/Configuration/Providers/ConfigurationServiceProvider.php index 32b86b37..bcc9ab7a 100644 --- a/Modules/Configuration/Providers/ConfigurationServiceProvider.php +++ b/Modules/Configuration/Providers/ConfigurationServiceProvider.php @@ -11,8 +11,8 @@ class ConfigurationServiceProvider extends ServiceProvider */ public function boot(): void { - $this->loadRoutesFrom(__DIR__.'/../Routes/web.php'); - $this->loadViewsFrom(__DIR__.'/../Resources/views', 'configuration'); + $this->loadRoutesFrom(__DIR__ . '/../Routes/web.php'); + $this->loadViewsFrom(__DIR__ . '/../Resources/views', 'configuration'); } /** diff --git a/Modules/Countries/Database/Seeders/IsoCountriesSeeder.php b/Modules/Countries/Database/Seeders/IsoCountriesSeeder.php index 31399dc3..bd14ac1e 100644 --- a/Modules/Countries/Database/Seeders/IsoCountriesSeeder.php +++ b/Modules/Countries/Database/Seeders/IsoCountriesSeeder.php @@ -273,7 +273,7 @@ class IsoCountriesSeeder extends Seeder 'iso_status' => 'official', 'source' => 'bundled-iso-3166-1', 'source_version' => '2026-06-15', - ]) + ]), ); } } diff --git a/Modules/Countries/Database/Seeders/IsoCountrySubdivisionsSeeder.php b/Modules/Countries/Database/Seeders/IsoCountrySubdivisionsSeeder.php index 3720f9ad..daeddddf 100644 --- a/Modules/Countries/Database/Seeders/IsoCountrySubdivisionsSeeder.php +++ b/Modules/Countries/Database/Seeders/IsoCountrySubdivisionsSeeder.php @@ -63,7 +63,7 @@ class IsoCountrySubdivisionsSeeder extends Seeder 'last_synced_at' => $now, 'source' => 'bundled-bootstrap', 'source_version' => '2026-06-15', - ] + ], ); } } diff --git a/Modules/Countries/Helpers/Helper.php b/Modules/Countries/Helpers/Helper.php index 6b864bc4..e85d8b89 100644 --- a/Modules/Countries/Helpers/Helper.php +++ b/Modules/Countries/Helpers/Helper.php @@ -8,6 +8,6 @@ if (! function_exists('countries_feature_enabled')) { */ function countries_feature_enabled(string $key): bool { - return (bool) config(ModuleInfo::nameLower().".features.{$key}", false); + return (bool) config(ModuleInfo::nameLower() . ".features.{$key}", false); } } diff --git a/Modules/Countries/Providers/CountriesServiceProvider.php b/Modules/Countries/Providers/CountriesServiceProvider.php index 711fc9a5..a554510a 100644 --- a/Modules/Countries/Providers/CountriesServiceProvider.php +++ b/Modules/Countries/Providers/CountriesServiceProvider.php @@ -39,7 +39,7 @@ class CountriesServiceProvider extends ServiceProvider */ protected function registerMigrations(): void { - $path = dirname(__DIR__).'/Database/Migrations'; + $path = dirname(__DIR__) . '/Database/Migrations'; if (is_dir($path)) { $this->loadMigrationsFrom($path); @@ -51,7 +51,7 @@ class CountriesServiceProvider extends ServiceProvider */ protected function registerHelpers(): void { - foreach (glob(dirname(__DIR__).'/Helpers/*.php') ?: [] as $filename) { + foreach (glob(dirname(__DIR__) . '/Helpers/*.php') ?: [] as $filename) { require_once $filename; } } @@ -61,14 +61,14 @@ class CountriesServiceProvider extends ServiceProvider */ protected function registerCommands(): void { - $commandPath = dirname(__DIR__).'/Console'; + $commandPath = dirname(__DIR__) . '/Console'; if (! is_dir($commandPath)) { return; } $commands = collect(File::allFiles($commandPath)) - ->map(fn ($file): string => 'Modules\\'.$this->moduleName.'\\Console\\'.$file->getFilenameWithoutExtension()) + ->map(fn ($file): string => 'Modules\\' . $this->moduleName . '\\Console\\' . $file->getFilenameWithoutExtension()) ->filter(fn (string $class): bool => class_exists($class)) ->values() ->all(); @@ -83,14 +83,14 @@ class CountriesServiceProvider extends ServiceProvider */ protected function registerConfig(): void { - $sourcePath = dirname(__DIR__).'/Config/config.php'; + $sourcePath = dirname(__DIR__) . '/Config/config.php'; if (! is_file($sourcePath)) { return; } $this->publishes([ - $sourcePath => config_path(ModuleInfo::nameLower().'.php'), + $sourcePath => config_path(ModuleInfo::nameLower() . '.php'), ], 'config'); $this->mergeConfigFrom($sourcePath, ModuleInfo::nameLower()); @@ -101,8 +101,8 @@ class CountriesServiceProvider extends ServiceProvider */ protected function registerViews(): void { - $viewPath = resource_path('views/modules/'.ModuleInfo::nameLower()); - $sourcePath = dirname(__DIR__).'/Resources/views'; + $viewPath = resource_path('views/modules/' . ModuleInfo::nameLower()); + $sourcePath = dirname(__DIR__) . '/Resources/views'; if (! is_dir($sourcePath)) { return; @@ -110,7 +110,7 @@ class CountriesServiceProvider extends ServiceProvider $this->publishes([ $sourcePath => $viewPath, - ], ['views', ModuleInfo::nameLower().'-module-views']); + ], ['views', ModuleInfo::nameLower() . '-module-views']); $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), ModuleInfo::nameLower()); } @@ -120,8 +120,8 @@ class CountriesServiceProvider extends ServiceProvider */ protected function registerTranslations(): void { - $publishedPath = resource_path('lang/modules/'.ModuleInfo::nameLower()); - $sourcePath = dirname(__DIR__).'/Resources/lang'; + $publishedPath = resource_path('lang/modules/' . ModuleInfo::nameLower()); + $sourcePath = dirname(__DIR__) . '/Resources/lang'; if (is_dir($publishedPath)) { $this->loadTranslationsFrom($publishedPath, ModuleInfo::nameLower()); @@ -144,8 +144,8 @@ class CountriesServiceProvider extends ServiceProvider $paths = []; foreach (Config::get('view.paths', []) as $path) { - if (is_dir($path.'/modules/'.ModuleInfo::nameLower())) { - $paths[] = $path.'/modules/'.ModuleInfo::nameLower(); + if (is_dir($path . '/modules/' . ModuleInfo::nameLower())) { + $paths[] = $path . '/modules/' . ModuleInfo::nameLower(); } } diff --git a/Modules/Countries/Providers/RouteServiceProvider.php b/Modules/Countries/Providers/RouteServiceProvider.php index d7430090..9efa759d 100644 --- a/Modules/Countries/Providers/RouteServiceProvider.php +++ b/Modules/Countries/Providers/RouteServiceProvider.php @@ -21,7 +21,7 @@ class RouteServiceProvider extends ServiceProvider */ protected function mapWebRoutes(): void { - $path = dirname(__DIR__).'/Routes/web.php'; + $path = dirname(__DIR__) . '/Routes/web.php'; if (is_file($path)) { Route::middleware(['web', 'auth'])->group($path); @@ -33,7 +33,7 @@ class RouteServiceProvider extends ServiceProvider */ protected function mapApiRoutes(): void { - $path = dirname(__DIR__).'/Routes/api.php'; + $path = dirname(__DIR__) . '/Routes/api.php'; if (is_file($path)) { Route::middleware(['api'])->prefix('api/v1')->group($path); diff --git a/Modules/Countries/Routes/web.php b/Modules/Countries/Routes/web.php index 7437217d..9bf3c4ee 100644 --- a/Modules/Countries/Routes/web.php +++ b/Modules/Countries/Routes/web.php @@ -1,8 +1,6 @@ loadRoutesFrom(__DIR__.'/../Routes/web.php'); - $this->loadViewsFrom(__DIR__.'/../Resources/views', 'documentarchive'); + $this->loadRoutesFrom(__DIR__ . '/../Routes/web.php'); + $this->loadViewsFrom(__DIR__ . '/../Resources/views', 'documentarchive'); } /** diff --git a/Modules/Documentation/Http/Controllers/DocumentationController.php b/Modules/Documentation/Http/Controllers/DocumentationController.php index cc899fd2..86927fbc 100644 --- a/Modules/Documentation/Http/Controllers/DocumentationController.php +++ b/Modules/Documentation/Http/Controllers/DocumentationController.php @@ -31,7 +31,7 @@ class DocumentationController extends Controller } if ($request->filled('search')) { - $search = '%'.$request->string('search')->trim()->toString().'%'; + $search = '%' . $request->string('search')->trim()->toString() . '%'; $query->where(function ($builder) use ($search): void { $builder->where('title', 'like', $search) ->orWhere('summary', 'like', $search) diff --git a/Modules/Documentation/Http/Requests/StoreDocumentationDocumentRequest.php b/Modules/Documentation/Http/Requests/StoreDocumentationDocumentRequest.php index 9c8c3a7f..b2931ecf 100644 --- a/Modules/Documentation/Http/Requests/StoreDocumentationDocumentRequest.php +++ b/Modules/Documentation/Http/Requests/StoreDocumentationDocumentRequest.php @@ -33,9 +33,9 @@ class StoreDocumentationDocumentRequest extends FormRequest 'is_featured' => ['nullable', 'boolean'], 'version' => ['required', 'string', 'max:50'], 'reference' => ['nullable', 'string', 'max:100'], - 'attachment' => ['nullable', 'file', 'max:'.config('documentation.max_upload_kb', 20480), 'mimes:'.implode(',', config('documentation.allowed_upload_mimes', []))], + 'attachment' => ['nullable', 'file', 'max:' . config('documentation.max_upload_kb', 20480), 'mimes:' . implode(',', config('documentation.allowed_upload_mimes', []))], 'attachments' => ['nullable', 'array'], - 'attachments.*' => ['file', 'max:'.config('documentation.max_upload_kb', 20480), 'mimes:'.implode(',', config('documentation.allowed_upload_mimes', []))], + 'attachments.*' => ['file', 'max:' . config('documentation.max_upload_kb', 20480), 'mimes:' . implode(',', config('documentation.allowed_upload_mimes', []))], ]; } } diff --git a/Modules/Documentation/Http/Requests/UpdateDocumentationDocumentRequest.php b/Modules/Documentation/Http/Requests/UpdateDocumentationDocumentRequest.php index 9622e99c..6d64014f 100644 --- a/Modules/Documentation/Http/Requests/UpdateDocumentationDocumentRequest.php +++ b/Modules/Documentation/Http/Requests/UpdateDocumentationDocumentRequest.php @@ -36,9 +36,9 @@ class UpdateDocumentationDocumentRequest extends FormRequest 'is_featured' => ['nullable', 'boolean'], 'version' => ['required', 'string', 'max:50'], 'reference' => ['nullable', 'string', 'max:100'], - 'attachment' => ['nullable', 'file', 'max:'.config('documentation.max_upload_kb', 20480), 'mimes:'.implode(',', config('documentation.allowed_upload_mimes', []))], + 'attachment' => ['nullable', 'file', 'max:' . config('documentation.max_upload_kb', 20480), 'mimes:' . implode(',', config('documentation.allowed_upload_mimes', []))], 'attachments' => ['nullable', 'array'], - 'attachments.*' => ['file', 'max:'.config('documentation.max_upload_kb', 20480), 'mimes:'.implode(',', config('documentation.allowed_upload_mimes', []))], + 'attachments.*' => ['file', 'max:' . config('documentation.max_upload_kb', 20480), 'mimes:' . implode(',', config('documentation.allowed_upload_mimes', []))], 'remove_attachment' => ['nullable', 'boolean'], ]; } diff --git a/Modules/Documentation/Models/DocumentationAttachment.php b/Modules/Documentation/Models/DocumentationAttachment.php index 971840de..9722f365 100644 --- a/Modules/Documentation/Models/DocumentationAttachment.php +++ b/Modules/Documentation/Models/DocumentationAttachment.php @@ -7,13 +7,13 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; /** - * @property int $id - * @property int $documentation_document_id - * @property string $disk - * @property string $path - * @property string $original_name + * @property int $id + * @property int $documentation_document_id + * @property string $disk + * @property string $path + * @property string $original_name * @property string|null $mime_type - * @property int|null $size + * @property int|null $size */ class DocumentationAttachment extends Model { @@ -57,13 +57,13 @@ class DocumentationAttachment extends Model } if ($bytes < 1024) { - return $bytes.' B'; + return $bytes . ' B'; } if ($bytes < 1048576) { - return number_format($bytes / 1024, 1).' KB'; + return number_format($bytes / 1024, 1) . ' KB'; } - return number_format($bytes / 1048576, 1).' MB'; + return number_format($bytes / 1048576, 1) . ' MB'; } } diff --git a/Modules/Documentation/Models/DocumentationCategory.php b/Modules/Documentation/Models/DocumentationCategory.php index f474cec3..0e87de11 100644 --- a/Modules/Documentation/Models/DocumentationCategory.php +++ b/Modules/Documentation/Models/DocumentationCategory.php @@ -9,14 +9,14 @@ use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Str; /** - * @property int $id - * @property string $name - * @property string $slug + * @property int $id + * @property string $name + * @property string $slug * @property string|null $icon - * @property string $colour + * @property string $colour * @property string|null $description - * @property int $sort_order - * @property bool $is_active + * @property int $sort_order + * @property bool $is_active */ class DocumentationCategory extends Model { @@ -66,7 +66,8 @@ class DocumentationCategory extends Model /** * Active category scope. * - * @param Builder $query + * @param Builder $query + * * @return Builder */ public function scopeActive(Builder $query): Builder @@ -77,7 +78,8 @@ class DocumentationCategory extends Model /** * Ordered category scope. * - * @param Builder $query + * @param Builder $query + * * @return Builder */ public function scopeOrdered(Builder $query): Builder diff --git a/Modules/Documentation/Models/DocumentationDocument.php b/Modules/Documentation/Models/DocumentationDocument.php index f5cf941e..edb0f321 100644 --- a/Modules/Documentation/Models/DocumentationDocument.php +++ b/Modules/Documentation/Models/DocumentationDocument.php @@ -11,15 +11,15 @@ use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Support\Str; /** - * @property int $id - * @property int|null $documentation_category_id - * @property string $title - * @property string $slug + * @property int $id + * @property int|null $documentation_category_id + * @property string $title + * @property string $slug * @property string|null $summary * @property string|null $body - * @property string $status - * @property bool $is_featured - * @property string $version + * @property string $status + * @property bool $is_featured + * @property string $version * @property string|null $reference * @property-read string $rendered_body */ @@ -101,7 +101,8 @@ class DocumentationDocument extends Model /** * Published document scope. * - * @param Builder $query + * @param Builder $query + * * @return Builder */ public function scopePublished(Builder $query): Builder @@ -112,7 +113,8 @@ class DocumentationDocument extends Model /** * Featured document scope. * - * @param Builder $query + * @param Builder $query + * * @return Builder */ public function scopeFeatured(Builder $query): Builder @@ -138,7 +140,7 @@ class DocumentationDocument extends Model ]); } - return '

'.nl2br(e($body), false).'

'; + return '

' . nl2br(e($body), false) . '

'; } /** diff --git a/Modules/Documentation/Providers/DocumentationServiceProvider.php b/Modules/Documentation/Providers/DocumentationServiceProvider.php index e709a8d5..8f332223 100644 --- a/Modules/Documentation/Providers/DocumentationServiceProvider.php +++ b/Modules/Documentation/Providers/DocumentationServiceProvider.php @@ -19,7 +19,7 @@ final class DocumentationServiceProvider extends ServiceProvider $this->mergeConfigFrom( module_path('Documentation', 'Config/config.php'), - 'documentation' + 'documentation', ); } @@ -47,12 +47,12 @@ final class DocumentationServiceProvider extends ServiceProvider $paths = [$sourcePath]; foreach (Config::get('view.paths', []) as $path) { - if (is_dir($path.'/modules/documentation')) { - array_unshift($paths, $path.'/modules/documentation'); + if (is_dir($path . '/modules/documentation')) { + array_unshift($paths, $path . '/modules/documentation'); } } $this->loadViewsFrom($paths, 'documentation'); - Blade::anonymousComponentPath($sourcePath.'/components', 'documentation'); + Blade::anonymousComponentPath($sourcePath . '/components', 'documentation'); } } diff --git a/Modules/Documentation/Tests/Feature/DocumentationModuleTest.php b/Modules/Documentation/Tests/Feature/DocumentationModuleTest.php index a1b0ccd5..66dd66c9 100644 --- a/Modules/Documentation/Tests/Feature/DocumentationModuleTest.php +++ b/Modules/Documentation/Tests/Feature/DocumentationModuleTest.php @@ -17,7 +17,8 @@ class DocumentationModuleTest extends TestCase /** * Add a CSRF token for projects that keep web middleware enabled during tests. * - * @param array $payload + * @param array $payload + * * @return array */ private function csrfPayload(array $payload): array diff --git a/Modules/Helpdesk/Database/Migrations/2026_06_16_094500_backfill_kanban_board_status_columns.php b/Modules/Helpdesk/Database/Migrations/2026_06_16_094500_backfill_kanban_board_status_columns.php index cd50180e..c3c7d969 100644 --- a/Modules/Helpdesk/Database/Migrations/2026_06_16_094500_backfill_kanban_board_status_columns.php +++ b/Modules/Helpdesk/Database/Migrations/2026_06_16_094500_backfill_kanban_board_status_columns.php @@ -49,7 +49,7 @@ return new class extends Migration 'sort_order' => ($index + 1) * 10, 'created_at' => now(), 'updated_at' => now(), - ] + ], ); } } diff --git a/Modules/Helpdesk/Database/Migrations/2026_06_17_084500_add_lotus_replication_fields_to_helpdesk_comments.php b/Modules/Helpdesk/Database/Migrations/2026_06_17_084500_add_lotus_replication_fields_to_helpdesk_comments.php index 6103ad88..e8b930db 100644 --- a/Modules/Helpdesk/Database/Migrations/2026_06_17_084500_add_lotus_replication_fields_to_helpdesk_comments.php +++ b/Modules/Helpdesk/Database/Migrations/2026_06_17_084500_add_lotus_replication_fields_to_helpdesk_comments.php @@ -74,7 +74,7 @@ return new class extends Migration Comment::query()->orderBy('id')->chunkById(100, static function ($comments): void { foreach ($comments as $comment) { $guid = $comment->guid ?: (string) Str::uuid(); - $unid = $comment->unid ?: strtoupper(hash('sha256', $guid.'|'.$comment->ticket_id.'|'.$comment->id)); + $unid = $comment->unid ?: strtoupper(hash('sha256', $guid . '|' . $comment->ticket_id . '|' . $comment->id)); $parent = $comment->parent_id ? Comment::query()->find($comment->parent_id) : null; $parentUnid = $parent?->unid; $rootUnid = $parent?->root_unid ?: $parentUnid ?: $unid; @@ -86,7 +86,7 @@ return new class extends Migration 'unid' => $unid, 'parent_unid' => $parentUnid, 'root_unid' => $rootUnid, - 'originator_id' => $comment->originator_id ?: $unid.':1', + 'originator_id' => $comment->originator_id ?: $unid . ':1', 'sync_sequence' => $comment->sync_sequence ?: 1, 'sync_hash' => hash('sha256', (string) $comment->body), 'body_text' => trim(strip_tags((string) $comment->body)), diff --git a/Modules/Helpdesk/Database/Migrations/2026_06_17_111500_add_subject_to_helpdesk_comments.php b/Modules/Helpdesk/Database/Migrations/2026_06_17_111500_add_subject_to_helpdesk_comments.php index 4e37817d..c1153dc6 100644 --- a/Modules/Helpdesk/Database/Migrations/2026_06_17_111500_add_subject_to_helpdesk_comments.php +++ b/Modules/Helpdesk/Database/Migrations/2026_06_17_111500_add_subject_to_helpdesk_comments.php @@ -28,7 +28,7 @@ return new class extends Migration $plain = trim(preg_replace('/\s+/', ' ', strip_tags((string) ($comment->body_text ?: $comment->body))) ?: ''); $subject = (bool) $comment->is_internal ? 'Internal note' - : ((int) ($comment->parent_id ?? 0) > 0 ? 'RE: ' : '').Str::limit($plain !== '' ? $plain : 'Response', 120, ''); + : ((int) ($comment->parent_id ?? 0) > 0 ? 'RE: ' : '') . Str::limit($plain !== '' ? $plain : 'Response', 120, ''); DB::table('helpdesk_comments') ->where('id', $comment->id) diff --git a/Modules/Helpdesk/Database/Seeders/HelpdeskDatabaseSeeder.php b/Modules/Helpdesk/Database/Seeders/HelpdeskDatabaseSeeder.php index b88e7929..86d8c758 100644 --- a/Modules/Helpdesk/Database/Seeders/HelpdeskDatabaseSeeder.php +++ b/Modules/Helpdesk/Database/Seeders/HelpdeskDatabaseSeeder.php @@ -89,7 +89,7 @@ final class HelpdeskDatabaseSeeder extends Seeder ] as $row) { Category::query()->updateOrCreate( ['company_id' => null, 'slug' => Str::slug($row['name'])], - $row + ['company_id' => null, 'slug' => Str::slug($row['name'])] + $row + ['company_id' => null, 'slug' => Str::slug($row['name'])], ); } } @@ -119,7 +119,7 @@ final class HelpdeskDatabaseSeeder extends Seeder 'color' => 'blue', 'description' => 'Default support team for triage, ownership and ticket routing.', 'is_default' => true, - ] + ], ); Project::query()->updateOrCreate( @@ -132,7 +132,7 @@ final class HelpdeskDatabaseSeeder extends Seeder 'color' => 'indigo', 'description' => 'Default project for operational helpdesk tickets.', 'is_default' => true, - ] + ], ); } @@ -151,7 +151,7 @@ final class HelpdeskDatabaseSeeder extends Seeder 'description' => 'Default Helpdesk workflow board covering new work through closure.', 'is_default' => true, 'sort_order' => 1, - ] + ], ); $statuses = Status::query() @@ -181,7 +181,7 @@ final class HelpdeskDatabaseSeeder extends Seeder ] as $template) { WorkflowTemplate::query()->updateOrCreate( ['name' => $template['name'], 'event' => $template['event']], - $template + ['text_body' => null, 'cc' => null, 'bcc' => null, 'is_active' => true] + $template + ['text_body' => null, 'cc' => null, 'bcc' => null, 'is_active' => true], ); } } @@ -207,7 +207,7 @@ final class HelpdeskDatabaseSeeder extends Seeder 'business_hours_only' => false, 'is_default' => true, 'is_active' => true, - ] + ], ); CannedResponse::query()->updateOrCreate( @@ -223,7 +223,7 @@ final class HelpdeskDatabaseSeeder extends Seeder 'body' => '

Hello {{ requester.name }},

Thank you for the update on {{ ticket.reference }}. I am reviewing this now and will come back with the next action shortly.

Regards,
{{ agent.name }}

', 'is_active' => true, 'sort_order' => 10, - ] + ], ); ChecklistTemplate::query()->updateOrCreate( @@ -236,7 +236,7 @@ final class HelpdeskDatabaseSeeder extends Seeder 'slug' => 'bug-triage-checklist', 'items' => ['Confirm reproduction steps', 'Check recent deployment/build', 'Identify affected tenant/company', 'Record fix or workaround'], 'is_active' => true, - ] + ], ); foreach ([ @@ -245,7 +245,7 @@ final class HelpdeskDatabaseSeeder extends Seeder ] as $tag) { Tag::query()->updateOrCreate( ['company_id' => null, 'slug' => $tag['slug']], - $tag + ['company_id' => null] + $tag + ['company_id' => null], ); } @@ -267,7 +267,7 @@ final class HelpdeskDatabaseSeeder extends Seeder 'release_channel' => 'core', 'description' => 'Default service record for WMS platform support tickets.', 'is_active' => true, - ] + ], ); } } diff --git a/Modules/Helpdesk/Feature/HelpdeskLivewireAssetsTest.php b/Modules/Helpdesk/Feature/HelpdeskLivewireAssetsTest.php index 25272720..a3905de5 100644 --- a/Modules/Helpdesk/Feature/HelpdeskLivewireAssetsTest.php +++ b/Modules/Helpdesk/Feature/HelpdeskLivewireAssetsTest.php @@ -21,7 +21,7 @@ final class HelpdeskLivewireAssetsTest extends TestCase self::assertLessThan( strpos($layout, '@fluxScripts'), strpos($layout, '@livewireScripts'), - 'Livewire scripts must be loaded before Flux scripts so settings CRUD actions fire in the browser.' + 'Livewire scripts must be loaded before Flux scripts so settings CRUD actions fire in the browser.', ); } } diff --git a/Modules/Helpdesk/Http/Controllers/GitWebhookController.php b/Modules/Helpdesk/Http/Controllers/GitWebhookController.php index 15971665..bdf6f4a4 100644 --- a/Modules/Helpdesk/Http/Controllers/GitWebhookController.php +++ b/Modules/Helpdesk/Http/Controllers/GitWebhookController.php @@ -75,7 +75,7 @@ final class GitWebhookController private function hasValidGitHubSignature(Request $request, string $secret, string $rawPayload): bool { $signature = (string) $request->header('X-Hub-Signature-256', ''); - $expected = 'sha256='.hash_hmac('sha256', $rawPayload, $secret); + $expected = 'sha256=' . hash_hmac('sha256', $rawPayload, $secret); return hash_equals($expected, $signature); } diff --git a/Modules/Helpdesk/Http/Controllers/TicketAttachmentStoreController.php b/Modules/Helpdesk/Http/Controllers/TicketAttachmentStoreController.php index 8c50b0f8..d963ef43 100644 --- a/Modules/Helpdesk/Http/Controllers/TicketAttachmentStoreController.php +++ b/Modules/Helpdesk/Http/Controllers/TicketAttachmentStoreController.php @@ -7,6 +7,7 @@ namespace Modules\Helpdesk\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; +use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Gate; use Modules\Helpdesk\Models\Ticket; @@ -26,7 +27,7 @@ final class TicketAttachmentStoreController extends Controller $request->validate([ 'attachments' => ['required', 'array', 'min:1'], - 'attachments.*' => ['required', 'file', 'max:'.$maxUploadKilobytes, 'mimes:'.implode(',', $allowedMimes)], + 'attachments.*' => ['required', 'file', 'max:' . $maxUploadKilobytes, 'mimes:' . implode(',', $allowedMimes)], ]); $user = Auth::user(); @@ -34,12 +35,12 @@ final class TicketAttachmentStoreController extends Controller $uploadedFiles = $request->file('attachments', []); $uploadedFiles = is_array($uploadedFiles) ? $uploadedFiles : [$uploadedFiles]; - $uploadedFiles = array_values(array_filter($uploadedFiles, static fn ($file): bool => $file instanceof \Illuminate\Http\UploadedFile && $file->isValid())); + $uploadedFiles = array_values(array_filter($uploadedFiles, static fn ($file): bool => $file instanceof UploadedFile && $file->isValid())); $attachments->storeMany($ticket, $uploadedFiles, (int) $user->id); return redirect() ->route('helpdesk.tickets.show', $ticket) - ->with('ticket-attachments-added', count($uploadedFiles).' supporting file'.(count($uploadedFiles) === 1 ? '' : 's').' uploaded.'); + ->with('ticket-attachments-added', count($uploadedFiles) . ' supporting file' . (count($uploadedFiles) === 1 ? '' : 's') . ' uploaded.'); } } diff --git a/Modules/Helpdesk/Http/Controllers/TicketCommentStoreController.php b/Modules/Helpdesk/Http/Controllers/TicketCommentStoreController.php index dda2b90c..c3ba3d2b 100644 --- a/Modules/Helpdesk/Http/Controllers/TicketCommentStoreController.php +++ b/Modules/Helpdesk/Http/Controllers/TicketCommentStoreController.php @@ -7,6 +7,7 @@ namespace Modules\Helpdesk\Http\Controllers; use App\Http\Controllers\Controller; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; +use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Gate; use Illuminate\Support\Str; @@ -42,7 +43,7 @@ final class TicketCommentStoreController extends Controller ], 'canned_response_id' => ['nullable', 'integer', Rule::exists('helpdesk_canned_responses', 'id')], 'attachments' => ['nullable', 'array'], - 'attachments.*' => ['file', 'max:'.$maxUploadKilobytes, 'mimes:'.implode(',', $allowedMimes)], + 'attachments.*' => ['file', 'max:' . $maxUploadKilobytes, 'mimes:' . implode(',', $allowedMimes)], ]); $user = Auth::user(); @@ -74,7 +75,7 @@ final class TicketCommentStoreController extends Controller $uploadedFiles = $request->file('attachments', []); $uploadedFiles = is_array($uploadedFiles) ? $uploadedFiles : [$uploadedFiles]; - $uploadedFiles = array_values(array_filter($uploadedFiles, static fn ($file): bool => $file instanceof \Illuminate\Http\UploadedFile && $file->isValid())); + $uploadedFiles = array_values(array_filter($uploadedFiles, static fn ($file): bool => $file instanceof UploadedFile && $file->isValid())); $tickets->comment( ticket: $ticket, @@ -108,7 +109,7 @@ final class TicketCommentStoreController extends Controller return $isReply ? 'RE: Response' : 'Response'; } - return ($isReply ? 'RE: ' : '').Str::limit($plain, 120, ''); + return ($isReply ? 'RE: ' : '') . Str::limit($plain, 120, ''); } /** @@ -145,7 +146,7 @@ final class TicketCommentStoreController extends Controller return collect(preg_split('/\R{2,}/', $body) ?: []) ->map(static fn (string $paragraph): string => trim($paragraph)) ->filter(static fn (string $paragraph): bool => $paragraph !== '') - ->map(static fn (string $paragraph): string => '

'.nl2br(e($paragraph), false).'

') + ->map(static fn (string $paragraph): string => '

' . nl2br(e($paragraph), false) . '

') ->implode(''); } diff --git a/Modules/Helpdesk/Http/Controllers/TicketControlsController.php b/Modules/Helpdesk/Http/Controllers/TicketControlsController.php index 607b4100..f12536aa 100644 --- a/Modules/Helpdesk/Http/Controllers/TicketControlsController.php +++ b/Modules/Helpdesk/Http/Controllers/TicketControlsController.php @@ -59,7 +59,7 @@ final class TicketControlsController extends Controller ->route('helpdesk.tickets.show', $fresh) ->with('ticket-action-updated', $agentId === null ? 'Ticket is now unassigned.' - : 'Ticket assigned to '.($fresh->agent?->name ?? 'selected agent').'.'); + : 'Ticket assigned to ' . ($fresh->agent?->name ?? 'selected agent') . '.'); } /** @@ -107,7 +107,7 @@ final class TicketControlsController extends Controller (bool) ($validated['closure_internal'] ?? false), [], null, - 'Closure comment' + 'Closure comment', ); $fresh = $this->freshTicketForAction($ticket); @@ -118,7 +118,7 @@ final class TicketControlsController extends Controller return redirect() ->route('helpdesk.tickets.show', $fresh) - ->with('ticket-action-updated', 'Status updated to '.($fresh->status?->name ?? 'selected status').'.'); + ->with('ticket-action-updated', 'Status updated to ' . ($fresh->status?->name ?? 'selected status') . '.'); } /** @@ -144,13 +144,13 @@ final class TicketControlsController extends Controller return redirect() ->route('helpdesk.tickets.show', $fresh) - ->with('ticket-action-updated', 'Priority updated to '.($fresh->priority?->name ?? 'selected priority').'.'); + ->with('ticket-action-updated', 'Priority updated to ' . ($fresh->priority?->name ?? 'selected priority') . '.'); } /** * Apply a direct guarded ticket update without relying on Livewire hydration. * - * @param array $updates + * @param array $updates */ private function updateTicket(Ticket $ticket, array $updates): void { diff --git a/Modules/Helpdesk/Http/Controllers/TicketStoreController.php b/Modules/Helpdesk/Http/Controllers/TicketStoreController.php index f7b89abf..22acdebe 100644 --- a/Modules/Helpdesk/Http/Controllers/TicketStoreController.php +++ b/Modules/Helpdesk/Http/Controllers/TicketStoreController.php @@ -35,7 +35,7 @@ final class TicketStoreController extends Controller 'team_id' => ['nullable', 'integer', Rule::exists('helpdesk_teams', 'id')], 'due_at' => ['nullable', 'date'], 'attachments' => ['nullable', 'array'], - 'attachments.*' => ['file', 'max:'.$maxUploadKilobytes, 'mimes:'.implode(',', $allowedMimes)], + 'attachments.*' => ['file', 'max:' . $maxUploadKilobytes, 'mimes:' . implode(',', $allowedMimes)], ]); $user = Auth::user(); @@ -59,6 +59,6 @@ final class TicketStoreController extends Controller return redirect() ->route('helpdesk.tickets.index') - ->with('success', 'Ticket '.$ticket->reference.' has been created.'); + ->with('success', 'Ticket ' . $ticket->reference . ' has been created.'); } } diff --git a/Modules/Helpdesk/Livewire/KanbanBoard.php b/Modules/Helpdesk/Livewire/KanbanBoard.php index 5a035276..1b5e9ec5 100644 --- a/Modules/Helpdesk/Livewire/KanbanBoard.php +++ b/Modules/Helpdesk/Livewire/KanbanBoard.php @@ -66,10 +66,10 @@ final class KanbanBoard extends Component $workflow->dispatch( $freshTicket, $status->is_closed ? 'ticket.closed' : 'ticket.updated', - Auth::user() + Auth::user(), ); - $message = 'Ticket '.$freshTicket->reference.' moved from '.$oldStatusName.' to '.$status->name.'.'; + $message = 'Ticket ' . $freshTicket->reference . ' moved from ' . $oldStatusName . ' to ' . $status->name . '.'; session()->flash('success', $message); $this->refreshBoard(); @@ -112,7 +112,7 @@ final class KanbanBoard extends Component $fresh = $ticket->fresh(['status', 'priority', 'category', 'project', 'team', 'board']) ?? $ticket; $workflow->dispatch($fresh, 'ticket.updated', Auth::user()); - $message = 'Ticket '.$fresh->reference.' moved from '.$oldBoardName.' to '.$board->name.'.'; + $message = 'Ticket ' . $fresh->reference . ' moved from ' . $oldBoardName . ' to ' . $board->name . '.'; session()->flash('success', $message); $this->refreshBoard(); @@ -213,7 +213,7 @@ final class KanbanBoard extends Component /** * Resolve the selected board from an already-loaded board collection. * - * @param Collection $boards + * @param Collection $boards */ private function resolveSelectedBoard(Collection $boards): ?KanbanBoardModel { @@ -241,7 +241,7 @@ final class KanbanBoard extends Component { DB::table('helpdesk_kanban_board_statuses')->updateOrInsert( ['board_id' => $boardId, 'status_id' => $statusId], - ['sort_order' => 999, 'updated_at' => now(), 'created_at' => now()] + ['sort_order' => 999, 'updated_at' => now(), 'created_at' => now()], ); } @@ -266,7 +266,7 @@ final class KanbanBoard extends Component 'sort_order' => ($index + 1) * 10, 'created_at' => now(), 'updated_at' => now(), - ] + ], ); } } diff --git a/Modules/Helpdesk/Livewire/SettingsManager.php b/Modules/Helpdesk/Livewire/SettingsManager.php index fc60fc64..49118051 100644 --- a/Modules/Helpdesk/Livewire/SettingsManager.php +++ b/Modules/Helpdesk/Livewire/SettingsManager.php @@ -6,6 +6,8 @@ namespace Modules\Helpdesk\Livewire; use App\Models\User; use Illuminate\Contracts\View\View; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\QueryException; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Str; @@ -824,9 +826,11 @@ final class SettingsManager extends Component * which made every new Helpdesk settings CRUD form appear to do nothing. * * @template TModel of \Illuminate\Database\Eloquent\Model - * @param class-string $modelClass - * @param int|string|null $id - * @param array $data + * + * @param class-string $modelClass + * @param int|string|null $id + * @param array $data + * * @return TModel */ private function persistSettingModel(string $modelClass, int|string|null $id, array $data): object @@ -847,7 +851,7 @@ final class SettingsManager extends Component $model = $modelClass::query()->create($data); return $model; - } catch (\Illuminate\Database\QueryException $exception) { + } catch (QueryException $exception) { throw ValidationException::withMessages([ 'settings' => 'The record could not be saved. Check the slug is unique for this section/company and try again.', ]); @@ -857,7 +861,7 @@ final class SettingsManager extends Component /** * Clear the default flag on every other record without generating invalid null-id SQL. * - * @param class-string<\Illuminate\Database\Eloquent\Model> $modelClass + * @param class-string $modelClass */ private function clearOtherDefaults(string $modelClass, int|string|null $currentId, int|string|null $companyId = null): void { @@ -867,7 +871,7 @@ final class SettingsManager extends Component $query->whereKeyNot((int) $currentId); } - if (Schema::hasColumn((new $modelClass())->getTable(), 'company_id')) { + if (Schema::hasColumn((new $modelClass)->getTable(), 'company_id')) { $query->where('company_id', filled($companyId) ? (int) $companyId : null); } @@ -881,7 +885,7 @@ final class SettingsManager extends Component * nullable integer and exists rules expect a real null, so normalising here * keeps every settings CRUD form usable from the browser. * - * @param array $keys + * @param array $keys */ private function normalizeNullableFormValues(string $formProperty, array $keys): void { @@ -906,7 +910,8 @@ final class SettingsManager extends Component /** * Remove is_default before save when the database has not been migrated yet. * - * @param array $data + * @param array $data + * * @return array */ private function guardDefaultColumn(string $table, array $data): array diff --git a/Modules/Helpdesk/Livewire/TicketCreate.php b/Modules/Helpdesk/Livewire/TicketCreate.php index ff4e2f4d..6256dbc3 100644 --- a/Modules/Helpdesk/Livewire/TicketCreate.php +++ b/Modules/Helpdesk/Livewire/TicketCreate.php @@ -52,7 +52,6 @@ final class TicketCreate extends Component public bool $isSaving = false; - /** * Validation rules are intentionally evaluated only when the user submits * the form, not while rich-text/select widgets are synchronising. @@ -77,8 +76,8 @@ final class TicketCreate extends Component 'attachments' => ['array'], 'attachments.*' => [ 'file', - 'max:'.config('helpdesk.max_upload_kb'), - 'mimes:'.implode(',', config('helpdesk.allowed_mimes')), + 'max:' . config('helpdesk.max_upload_kb'), + 'mimes:' . implode(',', config('helpdesk.allowed_mimes')), ], ]; } @@ -121,7 +120,7 @@ final class TicketCreate extends Component 'tag_ids' => $this->tag_ids, ], $this->attachments); - session()->flash('success', 'Ticket '.$ticket->reference.' has been created.'); + session()->flash('success', 'Ticket ' . $ticket->reference . ' has been created.'); return $this->redirectRoute('helpdesk.tickets.index', navigate: true); } finally { diff --git a/Modules/Helpdesk/Livewire/TicketEdit.php b/Modules/Helpdesk/Livewire/TicketEdit.php index b40a20c9..be75f718 100644 --- a/Modules/Helpdesk/Livewire/TicketEdit.php +++ b/Modules/Helpdesk/Livewire/TicketEdit.php @@ -109,7 +109,7 @@ final class TicketEdit extends Component $this->validate(); $this->validate([ 'attachments' => 'array', - 'attachments.*' => 'file|max:'.config('helpdesk.max_upload_kb', 10240).'|mimes:'.implode(',', config('helpdesk.allowed_mimes', ['jpg', 'jpeg', 'png', 'pdf', 'txt', 'log', 'zip'])), + 'attachments.*' => 'file|max:' . config('helpdesk.max_upload_kb', 10240) . '|mimes:' . implode(',', config('helpdesk.allowed_mimes', ['jpg', 'jpeg', 'png', 'pdf', 'txt', 'log', 'zip'])), 'tag_ids.*' => 'integer|exists:helpdesk_tags,id', ]); @@ -142,7 +142,7 @@ final class TicketEdit extends Component $fresh = $this->freshTicket($this->ticket); $workflow->dispatch($fresh, $status->is_closed ? 'ticket.closed' : 'ticket.updated', Auth::user()); - session()->flash('success', 'Ticket '.$fresh->reference.' has been updated.'); + session()->flash('success', 'Ticket ' . $fresh->reference . ' has been updated.'); return redirect()->route('helpdesk.tickets.show', $fresh); } @@ -276,7 +276,7 @@ final class TicketEdit extends Component } $disk = (string) config('helpdesk.disk', 'local'); - $path = $upload->store('tickets/'.$this->ticket->id, $disk); + $path = $upload->store('tickets/' . $this->ticket->id, $disk); $this->ticket->attachments()->create($this->attachmentPayload($upload, $path, $disk)); } diff --git a/Modules/Helpdesk/Livewire/TicketIndex.php b/Modules/Helpdesk/Livewire/TicketIndex.php index 27298b10..06c25186 100644 --- a/Modules/Helpdesk/Livewire/TicketIndex.php +++ b/Modules/Helpdesk/Livewire/TicketIndex.php @@ -133,9 +133,9 @@ final class TicketIndex extends Component ->when($this->priority !== '', fn (Builder $query): Builder => $query->where('priority_id', (int) $this->priority)) ->when($search !== '', static function (Builder $query) use ($search): Builder { return $query->where(static function (Builder $subQuery) use ($search): void { - $subQuery->where('reference', 'like', '%'.$search.'%') - ->orWhere('subject', 'like', '%'.$search.'%') - ->orWhere('body', 'like', '%'.$search.'%'); + $subQuery->where('reference', 'like', '%' . $search . '%') + ->orWhere('subject', 'like', '%' . $search . '%') + ->orWhere('body', 'like', '%' . $search . '%'); }); }) ->latest('last_activity_at') diff --git a/Modules/Helpdesk/Livewire/TicketShow.php b/Modules/Helpdesk/Livewire/TicketShow.php index 22be0f1e..bd3428f9 100644 --- a/Modules/Helpdesk/Livewire/TicketShow.php +++ b/Modules/Helpdesk/Livewire/TicketShow.php @@ -92,7 +92,7 @@ final class TicketShow extends Component $this->validate([ 'commentBody' => ['required', 'string', 'min:2'], - 'attachments.*' => 'file|max:'.config('helpdesk.max_upload_kb', 10240).'|mimes:'.implode(',', config('helpdesk.allowed_mimes', ['jpg', 'jpeg', 'png', 'pdf', 'txt', 'log', 'zip'])), + 'attachments.*' => 'file|max:' . config('helpdesk.max_upload_kb', 10240) . '|mimes:' . implode(',', config('helpdesk.allowed_mimes', ['jpg', 'jpeg', 'png', 'pdf', 'txt', 'log', 'zip'])), ]); $tickets->comment($this->ticket, Auth::user(), $this->commentBody, $this->internal, $this->attachments); @@ -120,7 +120,6 @@ final class TicketShow extends Component $this->dispatch('helpdesk-reply-added'); } - /** * Refresh ticket aggregates and the time-log modal after the timer component starts or stops. */ @@ -143,7 +142,7 @@ final class TicketShow extends Component ->findOrFail($this->canned_response_id); $rendered = $renderer->render($response->body, $this->ticket, Auth::user()); - $this->commentBody = trim($this->commentBody."\n\n".$rendered); + $this->commentBody = trim($this->commentBody . "\n\n" . $rendered); $this->dispatch('helpdesk-canned-response-applied', body: $this->commentBody); } @@ -211,7 +210,7 @@ final class TicketShow extends Component $this->closureInternal, [], null, - 'Closure comment' + 'Closure comment', ); $this->reset(['closureComment', 'closureInternal']); @@ -221,7 +220,7 @@ final class TicketShow extends Component $workflow->dispatch($this->ticket, $status->is_closed ? 'ticket.closed' : 'ticket.updated', Auth::user()); - session()->flash('ticket-action-updated', 'Status updated to '.$this->ticket->status?->name.'.'); + session()->flash('ticket-action-updated', 'Status updated to ' . $this->ticket->status?->name . '.'); $this->dispatch('helpdesk-status-updated', statusId: $this->status_id); } @@ -254,7 +253,7 @@ final class TicketShow extends Component $workflow->dispatch($this->ticket, 'ticket.updated', Auth::user()); - session()->flash('ticket-action-updated', 'Priority updated to '.$this->ticket->priority?->name.'.'); + session()->flash('ticket-action-updated', 'Priority updated to ' . $this->ticket->priority?->name . '.'); $this->dispatch('helpdesk-priority-updated', priorityId: $this->priority_id); } @@ -291,7 +290,7 @@ final class TicketShow extends Component session()->flash('ticket-action-updated', $this->agent_id === null ? 'Ticket is now unassigned.' - : 'Ticket assigned to '.$this->ticket->agent?->name.'.'); + : 'Ticket assigned to ' . $this->ticket->agent?->name . '.'); $this->dispatch('helpdesk-agent-updated', agentId: $this->agent_id); } @@ -305,7 +304,7 @@ final class TicketShow extends Component $this->validate([ 'supportingFiles' => ['required', 'array', 'min:1'], - 'supportingFiles.*' => ['file', 'max:'.$maxUploadKilobytes, 'mimes:'.$allowedMimes], + 'supportingFiles.*' => ['file', 'max:' . $maxUploadKilobytes, 'mimes:' . $allowedMimes], ]); $user = Auth::user(); @@ -398,7 +397,6 @@ final class TicketShow extends Component ]); } - /** * Get the first-response SLA headline for the SLA panel. */ @@ -421,14 +419,14 @@ final class TicketShow extends Component public function firstResponseSlaDetail(): string { if ($this->ticket->first_response_at !== null) { - return 'Responded in '.$this->formatDurationBetween($this->ticket->created_at, $this->ticket->first_response_at); + return 'Responded in ' . $this->formatDurationBetween($this->ticket->created_at, $this->ticket->first_response_at); } if ($this->ticket->sla_first_response_due_at === null) { return 'No first-response target is set.'; } - return 'Due '.$this->ticket->sla_first_response_due_at->format('d M Y H:i'); + return 'Due ' . $this->ticket->sla_first_response_due_at->format('d M Y H:i'); } /** @@ -489,14 +487,14 @@ final class TicketShow extends Component public function resolutionSlaDetail(): string { if ($this->ticket->completed_at !== null) { - return 'Resolved in '.$this->formatDurationBetween($this->ticket->created_at, $this->ticket->completed_at); + return 'Resolved in ' . $this->formatDurationBetween($this->ticket->created_at, $this->ticket->completed_at); } if ($this->ticket->sla_resolution_due_at === null) { return 'No resolution target is set.'; } - return 'Due '.$this->ticket->sla_resolution_due_at->format('d M Y H:i'); + return 'Due ' . $this->ticket->sla_resolution_due_at->format('d M Y H:i'); } /** @@ -539,7 +537,7 @@ final class TicketShow extends Component $seconds = max(0, $start->diffInSeconds($end)); if ($seconds < 60) { - return $seconds.' seconds'; + return $seconds . ' seconds'; } return CarbonInterval::seconds($seconds) diff --git a/Modules/Helpdesk/Models/Category.php b/Modules/Helpdesk/Models/Category.php index eb186279..2d643b37 100644 --- a/Modules/Helpdesk/Models/Category.php +++ b/Modules/Helpdesk/Models/Category.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Modules\Helpdesk\Models; +use App\Models\Company; use App\Models\User; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -23,10 +24,10 @@ final class Category extends Model /** @var array */ protected $casts = ['company_id' => 'integer', 'is_default' => 'boolean']; - /** @return BelongsTo<\App\Models\Company, Category> */ + /** @return BelongsTo */ public function company(): BelongsTo { - return $this->belongsTo(\App\Models\Company::class, 'company_id'); + return $this->belongsTo(Company::class, 'company_id'); } /** @return HasMany */ diff --git a/Modules/Helpdesk/Models/Comment.php b/Modules/Helpdesk/Models/Comment.php index d72dd2ac..aab0ee62 100644 --- a/Modules/Helpdesk/Models/Comment.php +++ b/Modules/Helpdesk/Models/Comment.php @@ -5,10 +5,10 @@ declare(strict_types=1); namespace Modules\Helpdesk\Models; use App\Models\User; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; -use Illuminate\Database\Eloquent\Builder; final class Comment extends Model { @@ -89,13 +89,10 @@ final class Comment extends Model } /** @param Builder $query */ - public function scopeActive(Builder $query): Builder - { return $query->whereNull('tombstoned_at'); } - } diff --git a/Modules/Helpdesk/Models/Project.php b/Modules/Helpdesk/Models/Project.php index acc3dbf6..8004fe8c 100644 --- a/Modules/Helpdesk/Models/Project.php +++ b/Modules/Helpdesk/Models/Project.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Modules\Helpdesk\Models; +use App\Models\Company; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -23,10 +24,10 @@ final class Project extends Model /** @var array */ protected $casts = ['company_id' => 'integer', 'team_id' => 'integer', 'archived_at' => 'datetime', 'is_default' => 'boolean']; - /** @return BelongsTo<\App\Models\Company, Project> */ + /** @return BelongsTo */ public function company(): BelongsTo { - return $this->belongsTo(\App\Models\Company::class, 'company_id'); + return $this->belongsTo(Company::class, 'company_id'); } /** @return BelongsTo */ diff --git a/Modules/Helpdesk/Models/Status.php b/Modules/Helpdesk/Models/Status.php index 6cdcb4c0..278d4d25 100644 --- a/Modules/Helpdesk/Models/Status.php +++ b/Modules/Helpdesk/Models/Status.php @@ -9,11 +9,11 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; /** - * @property int $id + * @property int $id * @property string $name * @property string $slug * @property string $color - * @property bool $is_closed + * @property bool $is_closed */ final class Status extends Model { diff --git a/Modules/Helpdesk/Models/Team.php b/Modules/Helpdesk/Models/Team.php index a3018197..9152efec 100644 --- a/Modules/Helpdesk/Models/Team.php +++ b/Modules/Helpdesk/Models/Team.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Modules\Helpdesk\Models; +use App\Models\Company; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; @@ -27,10 +28,10 @@ final class Team extends Model 'is_default' => 'boolean', ]; - /** @return BelongsTo<\App\Models\Company, Team> */ + /** @return BelongsTo */ public function company(): BelongsTo { - return $this->belongsTo(\App\Models\Company::class, 'company_id'); + return $this->belongsTo(Company::class, 'company_id'); } /** @return HasMany */ diff --git a/Modules/Helpdesk/Models/Ticket.php b/Modules/Helpdesk/Models/Ticket.php index e6e01ee0..c5ee3c20 100644 --- a/Modules/Helpdesk/Models/Ticket.php +++ b/Modules/Helpdesk/Models/Ticket.php @@ -13,7 +13,7 @@ use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\SoftDeletes; /** - * @property int $id + * @property int $id * @property string $reference * @property string $subject * @property string $body diff --git a/Modules/Helpdesk/Providers/HelpdeskServiceProvider.php b/Modules/Helpdesk/Providers/HelpdeskServiceProvider.php index 62225b12..f09ec9ff 100644 --- a/Modules/Helpdesk/Providers/HelpdeskServiceProvider.php +++ b/Modules/Helpdesk/Providers/HelpdeskServiceProvider.php @@ -42,7 +42,7 @@ final class HelpdeskServiceProvider extends ServiceProvider $this->mergeConfigFrom( module_path(ModuleInfo::name(), 'Config/config.php'), - ModuleInfo::nameLower() + ModuleInfo::nameLower(), ); } @@ -113,7 +113,7 @@ final class HelpdeskServiceProvider extends ServiceProvider } $commands = collect(File::allFiles($commandPath)) - ->map(fn ($file): string => 'Modules\\'.$this->moduleName.'\\Console\\'.$file->getFilenameWithoutExtension()) + ->map(fn ($file): string => 'Modules\\' . $this->moduleName . '\\Console\\' . $file->getFilenameWithoutExtension()) ->filter(fn (string $class): bool => class_exists($class)) ->values() ->all(); @@ -127,7 +127,7 @@ final class HelpdeskServiceProvider extends ServiceProvider protected function registerConfig(): void { $this->publishes([ - module_path(ModuleInfo::name(), 'Config/config.php') => config_path(ModuleInfo::nameLower().'.php'), + module_path(ModuleInfo::name(), 'Config/config.php') => config_path(ModuleInfo::nameLower() . '.php'), ], 'config'); } @@ -136,17 +136,17 @@ final class HelpdeskServiceProvider extends ServiceProvider */ protected function registerViews(): void { - $viewPath = resource_path('views/modules/'.ModuleInfo::nameLower()); + $viewPath = resource_path('views/modules/' . ModuleInfo::nameLower()); $sourcePath = module_path(ModuleInfo::name(), 'Resources/views'); $this->publishes([ $sourcePath => $viewPath, - ], ['views', ModuleInfo::nameLower().'-module-views']); + ], ['views', ModuleInfo::nameLower() . '-module-views']); $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), ModuleInfo::nameLower()); Blade::componentNamespace('Modules\Helpdesk\View\Components', 'helpdesk'); - Blade::anonymousComponentPath($sourcePath.'/components', 'helpdesk'); + Blade::anonymousComponentPath($sourcePath . '/components', 'helpdesk'); } /** @@ -154,7 +154,7 @@ final class HelpdeskServiceProvider extends ServiceProvider */ protected function registerTranslations(): void { - $langPath = resource_path('lang/modules/'.ModuleInfo::nameLower()); + $langPath = resource_path('lang/modules/' . ModuleInfo::nameLower()); if (is_dir($langPath)) { $this->loadTranslationsFrom($langPath, ModuleInfo::nameLower()); @@ -175,8 +175,8 @@ final class HelpdeskServiceProvider extends ServiceProvider $paths = []; foreach (Config::get('view.paths') as $path) { - if (is_dir($path.'/modules/'.ModuleInfo::nameLower())) { - $paths[] = $path.'/modules/'.ModuleInfo::nameLower(); + if (is_dir($path . '/modules/' . ModuleInfo::nameLower())) { + $paths[] = $path . '/modules/' . ModuleInfo::nameLower(); } } diff --git a/Modules/Helpdesk/Routes/web.php b/Modules/Helpdesk/Routes/web.php index aaa4c4ba..43be535f 100644 --- a/Modules/Helpdesk/Routes/web.php +++ b/Modules/Helpdesk/Routes/web.php @@ -5,10 +5,10 @@ declare(strict_types=1); use Illuminate\Support\Facades\Route; use Modules\Helpdesk\Http\Controllers\AttachmentDownloadController; use Modules\Helpdesk\Http\Controllers\HelpdeskController; -use Modules\Helpdesk\Http\Controllers\TicketControlsController; +use Modules\Helpdesk\Http\Controllers\TicketAttachmentStoreController; use Modules\Helpdesk\Http\Controllers\TicketCommentDeleteController; use Modules\Helpdesk\Http\Controllers\TicketCommentStoreController; -use Modules\Helpdesk\Http\Controllers\TicketAttachmentStoreController; +use Modules\Helpdesk\Http\Controllers\TicketControlsController; use Modules\Helpdesk\Http\Controllers\TicketStoreController; use Modules\Helpdesk\Http\Controllers\TicketTimeLogController; use Modules\Helpdesk\Http\Controllers\WorkflowOpenController; diff --git a/Modules/Helpdesk/Services/AgentAssignmentService.php b/Modules/Helpdesk/Services/AgentAssignmentService.php index 0fc7b3c6..c52984a7 100644 --- a/Modules/Helpdesk/Services/AgentAssignmentService.php +++ b/Modules/Helpdesk/Services/AgentAssignmentService.php @@ -26,7 +26,7 @@ final class AgentAssignmentService ->selectRaw('count(*)') ->whereColumn('helpdesk_tickets.agent_id', 'users.id') ->whereNull('helpdesk_tickets.completed_at'), - 'open_helpdesk_tickets_count' + 'open_helpdesk_tickets_count', ); if ($categoryId !== null) { diff --git a/Modules/Helpdesk/Services/AttachmentService.php b/Modules/Helpdesk/Services/AttachmentService.php index 404a87f5..46320ad4 100644 --- a/Modules/Helpdesk/Services/AttachmentService.php +++ b/Modules/Helpdesk/Services/AttachmentService.php @@ -24,7 +24,7 @@ final class AttachmentService $mimeType = $file->getClientMimeType(); $size = (int) ($file->getSize() ?: 0); - $path = $file->store('tickets/'.$ticket->id, $disk); + $path = $file->store('tickets/' . $ticket->id, $disk); if ($size === 0 && $path !== false) { $size = (int) Storage::disk($disk)->size($path); diff --git a/Modules/Helpdesk/Services/GitWebhookIngestionService.php b/Modules/Helpdesk/Services/GitWebhookIngestionService.php index 343b7448..1110eff4 100644 --- a/Modules/Helpdesk/Services/GitWebhookIngestionService.php +++ b/Modules/Helpdesk/Services/GitWebhookIngestionService.php @@ -19,7 +19,8 @@ final class GitWebhookIngestionService /** * Persist supported Git provider commits and link them to matching Helpdesk ticket references. * - * @param array $payload + * @param array $payload + * * @return array{status: string, message: string, commit_count: int, linked_count: int, ignored_count: int} */ public function ingest(GitRepository $repository, array $payload, string $provider, ?string $deliveryId, ?string $event): array @@ -76,7 +77,7 @@ final class GitWebhookIngestionService 'message' => $message, 'url' => $url, 'committed_at' => $committedAt, - ] + ], ); $commitCount++; @@ -102,8 +103,8 @@ final class GitWebhookIngestionService /** * Record a provider webhook acceptance, rejection or ignore decision for auditability. * - * @param array{status: string, message: string, commit_count?: int, linked_count?: int, ignored_count?: int} $result - * @param array|null $payload + * @param array{status: string, message: string, commit_count?: int, linked_count?: int, ignored_count?: int} $result + * @param array|null $payload */ public function logWebhook(GitRepository $repository, string $provider, ?string $deliveryId, ?string $event, array $result, ?array $payload = null): void { @@ -170,7 +171,8 @@ final class GitWebhookIngestionService } /** - * @param array $payload + * @param array $payload + * * @return array> */ private function commitsFromPayload(array $payload): array @@ -186,7 +188,7 @@ final class GitWebhookIngestionService private function ticketForCommit(GitRepository $repository, string $message, ?string $branch, ?string $url): ?Ticket { - $reference = $this->extractTicketReference(trim($message.' '.($branch ?? '').' '.($url ?? ''))); + $reference = $this->extractTicketReference(trim($message . ' ' . ($branch ?? '') . ' ' . ($url ?? ''))); if ($reference === null) { return null; diff --git a/Modules/Helpdesk/Services/SlaService.php b/Modules/Helpdesk/Services/SlaService.php index 8304d18c..7b2aa2c4 100644 --- a/Modules/Helpdesk/Services/SlaService.php +++ b/Modules/Helpdesk/Services/SlaService.php @@ -5,8 +5,9 @@ declare(strict_types=1); namespace Modules\Helpdesk\Services; use App\Models\User; -use Modules\Helpdesk\Models\SlaPolicy; +use Illuminate\Support\Carbon; use Modules\Helpdesk\Models\Comment; +use Modules\Helpdesk\Models\SlaPolicy; use Modules\Helpdesk\Models\Ticket; use Modules\Helpdesk\Models\TicketSlaEvent; @@ -89,7 +90,7 @@ final class SlaService private function markFirstResponse(Ticket $ticket, mixed $respondedAt, ?User $actor = null): void { - $respondedAt = $respondedAt instanceof \Illuminate\Support\Carbon + $respondedAt = $respondedAt instanceof Carbon ? $respondedAt : now(); diff --git a/Modules/Helpdesk/Services/TicketReferenceService.php b/Modules/Helpdesk/Services/TicketReferenceService.php index aacd721e..4bd899ca 100644 --- a/Modules/Helpdesk/Services/TicketReferenceService.php +++ b/Modules/Helpdesk/Services/TicketReferenceService.php @@ -29,7 +29,7 @@ final class TicketReferenceService { $year = (int) now()->format('Y'); $prefix = 'HD'; - $seriesPrefix = $prefix.'-'.$year.'-'; + $seriesPrefix = $prefix . '-' . $year . '-'; $this->lockReferenceSeries($seriesPrefix); @@ -76,7 +76,7 @@ final class TicketReferenceService 'updated_at' => now(), ]); - return $seriesPrefix.str_pad((string) $nextNumber, 5, '0', STR_PAD_LEFT); + return $seriesPrefix . str_pad((string) $nextNumber, 5, '0', STR_PAD_LEFT); } /** @@ -84,7 +84,7 @@ final class TicketReferenceService */ private function nextFromExistingReferences(string $seriesPrefix): string { - return $seriesPrefix.str_pad((string) ($this->highestExistingSuffix($seriesPrefix) + 1), 5, '0', STR_PAD_LEFT); + return $seriesPrefix . str_pad((string) ($this->highestExistingSuffix($seriesPrefix) + 1), 5, '0', STR_PAD_LEFT); } /** @@ -96,9 +96,9 @@ final class TicketReferenceService $existingReferences = Ticket::query() ->withoutGlobalScopes() ->withTrashed() - ->where('reference', 'like', $seriesPrefix.'%') + ->where('reference', 'like', $seriesPrefix . '%') ->pluck('reference') - ->filter(static fn (mixed $reference): bool => is_string($reference) && preg_match('/^'.preg_quote($seriesPrefix, '/').'\d+$/', $reference) === 1) + ->filter(static fn (mixed $reference): bool => is_string($reference) && preg_match('/^' . preg_quote($seriesPrefix, '/') . '\d+$/', $reference) === 1) ->values() ->all(); @@ -121,7 +121,7 @@ final class TicketReferenceService } DB::select('select pg_advisory_xact_lock(hashtext(?))', [ - 'helpdesk-ticket-reference:'.$seriesPrefix, + 'helpdesk-ticket-reference:' . $seriesPrefix, ]); } } diff --git a/Modules/Helpdesk/Services/TicketService.php b/Modules/Helpdesk/Services/TicketService.php index e8f5c15b..d598a1fd 100644 --- a/Modules/Helpdesk/Services/TicketService.php +++ b/Modules/Helpdesk/Services/TicketService.php @@ -5,8 +5,8 @@ declare(strict_types=1); namespace Modules\Helpdesk\Services; use App\Models\User; -use Illuminate\Http\UploadedFile; use Illuminate\Database\QueryException; +use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; use Illuminate\Support\Str; @@ -30,8 +30,8 @@ final class TicketService /** * Create a ticket and store initial attachments. * - * @param array $data - * @param array $files + * @param array $data + * @param array $files */ public function create(User $user, array $data, array $files = []): Ticket { @@ -51,8 +51,8 @@ final class TicketService /** * Create the ticket while the caller owns the database transaction. * - * @param array $data - * @param array $files + * @param array $data + * @param array $files */ private function createInsideTransaction(User $user, array $data, array $files = []): Ticket { @@ -132,7 +132,7 @@ final class TicketService /** * Add a public or internal comment and optional attachments. * - * @param array $files + * @param array $files */ public function comment(Ticket $ticket, User $user, string $body, bool $internal = false, array $files = [], ?int $parentId = null, ?string $subject = null): Comment { @@ -144,7 +144,7 @@ final class TicketService ->findOrFail($parentId); $guid = (string) Str::uuid(); - $unid = strtoupper(hash('sha256', $guid.'|'.$ticket->id.'|'.microtime(true))); + $unid = strtoupper(hash('sha256', $guid . '|' . $ticket->id . '|' . microtime(true))); $parentUnid = $parent?->unid; $rootUnid = $parent?->root_unid ?: $parentUnid ?: $unid; $plainTextBody = trim(preg_replace('/\s+/', ' ', strip_tags($body)) ?: ''); @@ -159,7 +159,7 @@ final class TicketService 'unid' => $unid, 'parent_unid' => $parentUnid, 'root_unid' => $rootUnid, - 'originator_id' => $unid.':1', + 'originator_id' => $unid . ':1', 'sync_sequence' => 1, 'sync_hash' => hash('sha256', $body), 'source_system' => 'wms-helpdesk', diff --git a/Modules/Helpdesk/Services/WorkflowNotificationService.php b/Modules/Helpdesk/Services/WorkflowNotificationService.php index 29a3a8f0..d44b4110 100644 --- a/Modules/Helpdesk/Services/WorkflowNotificationService.php +++ b/Modules/Helpdesk/Services/WorkflowNotificationService.php @@ -133,16 +133,16 @@ final class WorkflowNotificationService private function wrapHtml(string $body, Ticket $ticket, ?string $trackingToken = null): string { return '
' - .'
' - .'
' - .'
Helpdesk notification
' - .'

'.e($ticket->reference).'

' - .'

'.e($ticket->subject).'

' - .'
' - .$body - .'

Open ticket

' - .$this->trackingPixel($trackingToken) - .'
'; + . '
' + . '
' + . '
Helpdesk notification
' + . '

' . e($ticket->reference) . '

' + . '

' . e($ticket->subject) . '

' + . '
' + . $body + . '

Open ticket

' + . $this->trackingPixel($trackingToken) + . '
'; } private function trackingPixel(?string $trackingToken): string @@ -153,9 +153,9 @@ final class WorkflowNotificationService $url = Route::has('helpdesk.workflow.open') ? route('helpdesk.workflow.open', ['token' => $trackingToken]) - : URL::to('/'.trim((string) config('helpdesk.route_prefix', 'helpdesk'), '/').'/workflow/open/'.$trackingToken); + : URL::to('/' . trim((string) config('helpdesk.route_prefix', 'helpdesk'), '/') . '/workflow/open/' . $trackingToken); - return ''; + return ''; } private function log(WorkflowTemplate $template, Ticket $ticket, string $event, ?string $recipient, string $status, ?string $error = null, ?string $subject = null, ?string $trackingToken = null): void diff --git a/Modules/Helpdesk/Tests/Browser/HelpdeskSettingsBrowserTest.php b/Modules/Helpdesk/Tests/Browser/HelpdeskSettingsBrowserTest.php index a7750eeb..3b1ce089 100644 --- a/Modules/Helpdesk/Tests/Browser/HelpdeskSettingsBrowserTest.php +++ b/Modules/Helpdesk/Tests/Browser/HelpdeskSettingsBrowserTest.php @@ -41,7 +41,7 @@ final class HelpdeskSettingsBrowserTest extends DuskTestCase private function openSettingsSection(Browser $browser, string $section, string $expectedHeading): Browser { return $browser - ->click('@helpdesk-settings-section-'.$section) + ->click('@helpdesk-settings-section-' . $section) ->waitForText($expectedHeading, 10); } } diff --git a/Modules/Helpdesk/Tests/Browser/HelpdeskTicketBrowserTest.php b/Modules/Helpdesk/Tests/Browser/HelpdeskTicketBrowserTest.php index eb90dad7..22b469b5 100644 --- a/Modules/Helpdesk/Tests/Browser/HelpdeskTicketBrowserTest.php +++ b/Modules/Helpdesk/Tests/Browser/HelpdeskTicketBrowserTest.php @@ -5,7 +5,6 @@ declare(strict_types=1); namespace Modules\Helpdesk\Tests\Browser; use Laravel\Dusk\Browser; -use Modules\Helpdesk\Models\CannedResponse; use Modules\Helpdesk\Models\Comment; use Modules\Helpdesk\Tests\Concerns\BuildsHelpdeskFixtures; use Tests\DuskTestCase; @@ -19,7 +18,7 @@ final class HelpdeskTicketBrowserTest extends DuskTestCase $fixtures = $this->seedLookupData(); $user = $this->user(['name' => 'Ticket Browser User']); - $subject = 'Browser created helpdesk ticket '.uniqid(); + $subject = 'Browser created helpdesk ticket ' . uniqid(); $this->browse(function (Browser $browser) use ($user, $fixtures, $subject): void { $browser->loginAs($user) @@ -65,11 +64,10 @@ final class HelpdeskTicketBrowserTest extends DuskTestCase 'user_id' => $user->id, 'parent_id' => null, 'title' => 'Browser canned response', - 'body' => '

Hello Response Browser User

Inserted canned browser response for '.$ticket->reference.'

', + 'body' => '

Hello Response Browser User

Inserted canned browser response for ' . $ticket->reference . '

', 'is_internal' => false, ]); - Comment::query()->create([ 'ticket_id' => $ticket->id, 'user_id' => $user->id, @@ -91,7 +89,7 @@ final class HelpdeskTicketBrowserTest extends DuskTestCase $this->assertDatabaseHas('helpdesk_comments', [ 'ticket_id' => $ticket->id, 'parent_id' => null, - 'body' => '

Hello Response Browser User

Inserted canned browser response for '.$ticket->reference.'

', + 'body' => '

Hello Response Browser User

Inserted canned browser response for ' . $ticket->reference . '

', ]); $this->assertDatabaseHas('helpdesk_comments', [ @@ -137,7 +135,7 @@ document.body.appendChild(form); form.submit(); JS); - $browser->waitForLocation('/helpdesk/tickets/'.$ticketId, 10); + $browser->waitForLocation('/helpdesk/tickets/' . $ticketId, 10); } private function setHelpdeskEditor(Browser $browser, string $dusk, string $html): void diff --git a/Modules/Helpdesk/Tests/Concerns/BuildsHelpdeskFixtures.php b/Modules/Helpdesk/Tests/Concerns/BuildsHelpdeskFixtures.php index e85554f9..fb3cf0e3 100644 --- a/Modules/Helpdesk/Tests/Concerns/BuildsHelpdeskFixtures.php +++ b/Modules/Helpdesk/Tests/Concerns/BuildsHelpdeskFixtures.php @@ -134,7 +134,7 @@ trait BuildsHelpdeskFixtures unset($attributes['owner'], $attributes['agent']); return Ticket::query()->create(array_merge([ - 'reference' => 'HD-'.now()->format('Y').'-'.str_pad((string) random_int(1, 99999), 5, '0', STR_PAD_LEFT), + 'reference' => 'HD-' . now()->format('Y') . '-' . str_pad((string) random_int(1, 99999), 5, '0', STR_PAD_LEFT), 'user_id' => $owner->id, 'agent_id' => $agent?->id, 'status_id' => $this->ticketStatus()->id, diff --git a/Modules/Helpdesk/Tests/Feature/GitAndAttachmentTest.php b/Modules/Helpdesk/Tests/Feature/GitAndAttachmentTest.php index 7082bba4..fb05d998 100644 --- a/Modules/Helpdesk/Tests/Feature/GitAndAttachmentTest.php +++ b/Modules/Helpdesk/Tests/Feature/GitAndAttachmentTest.php @@ -32,7 +32,7 @@ final class GitAndAttachmentTest extends TestCase 'branch' => 'develop', 'author_name' => 'Mark Gregory', 'author_email' => 'mark@example.com', - 'message' => 'Resolve '.$ticket->reference.' ticket save redirect', + 'message' => 'Resolve ' . $ticket->reference . ' ticket save redirect', 'url' => 'https://example.com/commit/b', 'committed_at' => now(), ]); diff --git a/Modules/Helpdesk/Tests/Feature/GitWebhookIngestionTest.php b/Modules/Helpdesk/Tests/Feature/GitWebhookIngestionTest.php index 070642a7..7658f95f 100644 --- a/Modules/Helpdesk/Tests/Feature/GitWebhookIngestionTest.php +++ b/Modules/Helpdesk/Tests/Feature/GitWebhookIngestionTest.php @@ -25,12 +25,12 @@ final class GitWebhookIngestionTest extends TestCase ]); $ticket = $this->ticket(['project_id' => $fixtures['project']->id]); $payload = [ - 'ref' => 'refs/heads/feature/'.$ticket->reference.'-automation', + 'ref' => 'refs/heads/feature/' . $ticket->reference . '-automation', 'commits' => [ [ 'id' => str_repeat('a', 40), - 'message' => $ticket->reference.' Add webhook ingestion', - 'url' => 'https://github.example.test/org/repo/commit/'.str_repeat('a', 40), + 'message' => $ticket->reference . ' Add webhook ingestion', + 'url' => 'https://github.example.test/org/repo/commit/' . str_repeat('a', 40), 'timestamp' => '2026-06-15T10:00:00+00:00', 'author' => ['name' => 'Mark Gregory', 'email' => 'mark@example.com'], ], @@ -43,7 +43,7 @@ final class GitWebhookIngestionTest extends TestCase 'HTTP_ACCEPT' => 'application/json', 'HTTP_X_GITHUB_EVENT' => 'push', 'HTTP_X_GITHUB_DELIVERY' => 'delivery-123', - 'HTTP_X_HUB_SIGNATURE_256' => 'sha256='.hash_hmac('sha256', $json, 'github-secret'), + 'HTTP_X_HUB_SIGNATURE_256' => 'sha256=' . hash_hmac('sha256', $json, 'github-secret'), ], $json); $response->assertStatus(202)->assertJsonPath('status', 'accepted')->assertJsonPath('linked_count', 1); @@ -53,7 +53,7 @@ final class GitWebhookIngestionTest extends TestCase 'ticket_id' => $ticket->id, 'hash' => str_repeat('a', 40), 'short_hash' => str_repeat('a', 12), - 'branch' => 'feature/'.$ticket->reference.'-automation', + 'branch' => 'feature/' . $ticket->reference . '-automation', ]); $this->assertDatabaseHas('helpdesk_git_webhook_logs', [ @@ -96,7 +96,7 @@ final class GitWebhookIngestionTest extends TestCase 'CONTENT_TYPE' => 'application/json', 'HTTP_ACCEPT' => 'application/json', 'HTTP_X_GITHUB_EVENT' => 'ping', - 'HTTP_X_HUB_SIGNATURE_256' => 'sha256='.hash_hmac('sha256', $json, 'github-secret'), + 'HTTP_X_HUB_SIGNATURE_256' => 'sha256=' . hash_hmac('sha256', $json, 'github-secret'), ], $json); $response->assertStatus(202)->assertJsonPath('status', 'ignored'); @@ -125,8 +125,8 @@ final class GitWebhookIngestionTest extends TestCase 'commits' => [ [ 'id' => str_repeat('c', 40), - 'message' => 'Fix '.$ticket->reference.' SLA report', - 'url' => 'https://gitlab.example.test/org/repo/-/commit/'.str_repeat('c', 40), + 'message' => 'Fix ' . $ticket->reference . ' SLA report', + 'url' => 'https://gitlab.example.test/org/repo/-/commit/' . str_repeat('c', 40), 'timestamp' => '2026-06-15T11:00:00+00:00', 'author' => ['name' => 'Support Agent', 'email' => 'agent@example.com'], ], diff --git a/Modules/Helpdesk/Tests/Feature/HelpdeskLivewireAssetsTest.php b/Modules/Helpdesk/Tests/Feature/HelpdeskLivewireAssetsTest.php index 25272720..a3905de5 100644 --- a/Modules/Helpdesk/Tests/Feature/HelpdeskLivewireAssetsTest.php +++ b/Modules/Helpdesk/Tests/Feature/HelpdeskLivewireAssetsTest.php @@ -21,7 +21,7 @@ final class HelpdeskLivewireAssetsTest extends TestCase self::assertLessThan( strpos($layout, '@fluxScripts'), strpos($layout, '@livewireScripts'), - 'Livewire scripts must be loaded before Flux scripts so settings CRUD actions fire in the browser.' + 'Livewire scripts must be loaded before Flux scripts so settings CRUD actions fire in the browser.', ); } } diff --git a/Modules/Helpdesk/Tests/Feature/RedmineInspiredHelpdeskFeatureTest.php b/Modules/Helpdesk/Tests/Feature/RedmineInspiredHelpdeskFeatureTest.php index 57de1ee5..c9980138 100644 --- a/Modules/Helpdesk/Tests/Feature/RedmineInspiredHelpdeskFeatureTest.php +++ b/Modules/Helpdesk/Tests/Feature/RedmineInspiredHelpdeskFeatureTest.php @@ -95,7 +95,7 @@ final class RedmineInspiredHelpdeskFeatureTest extends TestCase ->test(TicketShow::class, ['ticket' => $ticket]) ->set('canned_response_id', $response->id) ->call('applyCannedResponse') - ->assertSet('commentBody', 'Hello Customer Jane, ticket '.$ticket->reference.' is being reviewed by Agent Smith.'); + ->assertSet('commentBody', 'Hello Customer Jane, ticket ' . $ticket->reference . ' is being reviewed by Agent Smith.'); } public function test_sla_service_records_first_response_and_resolution_breaches(): void diff --git a/Modules/Helpdesk/Tests/Feature/SettingsCrudTest.php b/Modules/Helpdesk/Tests/Feature/SettingsCrudTest.php index 060a6b5b..e4a389c4 100644 --- a/Modules/Helpdesk/Tests/Feature/SettingsCrudTest.php +++ b/Modules/Helpdesk/Tests/Feature/SettingsCrudTest.php @@ -214,7 +214,7 @@ final class SettingsCrudTest extends TestCase $checklist = ChecklistTemplate::query()->where('slug', 'release-checklist')->firstOrFail(); Livewire::test(SettingsManager::class) ->call('editChecklistTemplate', $checklist->id) - ->set('checklistTemplateForm.items_text', "Updated item") + ->set('checklistTemplateForm.items_text', 'Updated item') ->call('saveChecklistTemplate') ->assertHasNoErrors(); $this->assertDatabaseHas('helpdesk_checklist_templates', ['id' => $checklist->id]); diff --git a/Modules/Helpdesk/Tests/Feature/TicketConversationTest.php b/Modules/Helpdesk/Tests/Feature/TicketConversationTest.php index 9205002c..b58a3581 100644 --- a/Modules/Helpdesk/Tests/Feature/TicketConversationTest.php +++ b/Modules/Helpdesk/Tests/Feature/TicketConversationTest.php @@ -4,8 +4,8 @@ declare(strict_types=1); namespace Modules\Helpdesk\Tests\Feature; -use Illuminate\Foundation\Testing\RefreshDatabase; use App\Models\Company; +use Illuminate\Foundation\Testing\RefreshDatabase; use Illuminate\Http\UploadedFile; use Illuminate\Support\Facades\Mail; use Illuminate\Support\Facades\Storage; @@ -13,6 +13,7 @@ use Livewire\Livewire; use Modules\Helpdesk\Livewire\TicketShow; use Modules\Helpdesk\Models\Attachment; use Modules\Helpdesk\Models\Comment; +use Modules\Helpdesk\Services\TicketService; use Modules\Helpdesk\Tests\Concerns\BuildsHelpdeskFixtures; use Tests\TestCase; @@ -69,7 +70,6 @@ final class TicketConversationTest extends TestCase ]); } - public function test_comment_post_endpoint_creates_lotus_identity_and_search_text(): void { $fixtures = $this->seedLookupData(); @@ -98,7 +98,7 @@ final class TicketConversationTest extends TestCase $fixtures = $this->seedLookupData(); $owner = $this->user(); $ticket = $this->ticket(['owner' => $owner, 'status_id' => $fixtures['open']->id, 'priority_id' => $fixtures['normal']->id]); - $parent = app(\Modules\Helpdesk\Services\TicketService::class)->comment($ticket, $owner, '

Parent response

'); + $parent = app(TicketService::class)->comment($ticket, $owner, '

Parent response

'); $this->actingAs($owner) ->post(route('helpdesk.tickets.comments.store', $ticket), [ @@ -115,8 +115,6 @@ final class TicketConversationTest extends TestCase self::assertSame('RE: Parent response', $reply->subject); } - - public function test_existing_ticket_accepts_multiple_supporting_file_attachments(): void { Storage::fake((string) config('helpdesk.disk', 'public')); @@ -187,7 +185,7 @@ final class TicketConversationTest extends TestCase $admin = $this->user(['company_id' => $company->id, 'is_platform_admin' => true]); $owner = $this->user(['company_id' => $company->id]); $ticket = $this->ticket(['owner' => $owner, 'status_id' => $fixtures['open']->id, 'priority_id' => $fixtures['normal']->id]); - $comment = app(\Modules\Helpdesk\Services\TicketService::class)->comment($ticket, $owner, '

Delete me

'); + $comment = app(TicketService::class)->comment($ticket, $owner, '

Delete me

'); $this->actingAs($admin) ->delete(route('helpdesk.tickets.comments.destroy', [$ticket, $comment])) diff --git a/Modules/Helpdesk/Tests/Feature/TicketCrudTest.php b/Modules/Helpdesk/Tests/Feature/TicketCrudTest.php index c03c90ea..be65d4c2 100644 --- a/Modules/Helpdesk/Tests/Feature/TicketCrudTest.php +++ b/Modules/Helpdesk/Tests/Feature/TicketCrudTest.php @@ -44,7 +44,6 @@ final class TicketCrudTest extends TestCase ]); } - public function test_ticket_create_does_not_validate_before_submit(): void { $this->seedLookupData(); @@ -137,7 +136,7 @@ final class TicketCrudTest extends TestCase $ticket = Ticket::query()->where('subject', 'Reference check')->firstOrFail(); - self::assertStringStartsWith('HD-'.now()->format('Y').'-', $ticket->reference); + self::assertStringStartsWith('HD-' . now()->format('Y') . '-', $ticket->reference); self::assertNotNull($ticket->last_activity_at); } } diff --git a/Modules/Helpdesk/Tests/Feature/TicketFirstResponseSlaFilesTest.php b/Modules/Helpdesk/Tests/Feature/TicketFirstResponseSlaFilesTest.php index 637e68fb..4c56d663 100644 --- a/Modules/Helpdesk/Tests/Feature/TicketFirstResponseSlaFilesTest.php +++ b/Modules/Helpdesk/Tests/Feature/TicketFirstResponseSlaFilesTest.php @@ -13,7 +13,7 @@ final class TicketFirstResponseSlaFilesTest extends TestCase */ public function test_public_response_updates_first_response_sla_state(): void { - $servicePath = dirname(__DIR__, 2).'/Services/SlaService.php'; + $servicePath = dirname(__DIR__, 2) . '/Services/SlaService.php'; self::assertFileExists($servicePath); @@ -30,8 +30,8 @@ final class TicketFirstResponseSlaFilesTest extends TestCase */ public function test_ticket_show_synchronises_first_response_from_existing_public_comments(): void { - $componentPath = dirname(__DIR__, 2).'/Livewire/TicketShow.php'; - $servicePath = dirname(__DIR__, 2).'/Services/SlaService.php'; + $componentPath = dirname(__DIR__, 2) . '/Livewire/TicketShow.php'; + $servicePath = dirname(__DIR__, 2) . '/Services/SlaService.php'; $component = file_get_contents($componentPath); $service = file_get_contents($servicePath); @@ -48,7 +48,7 @@ final class TicketFirstResponseSlaFilesTest extends TestCase */ public function test_sla_card_has_clear_responded_and_awaiting_public_reply_states(): void { - $viewPath = dirname(__DIR__, 2).'/Resources/views/livewire/ticket-show.blade.php'; + $viewPath = dirname(__DIR__, 2) . '/Resources/views/livewire/ticket-show.blade.php'; $view = file_get_contents($viewPath); diff --git a/Modules/Helpdesk/Tests/Feature/TicketPublicResponseVisibilityFilesTest.php b/Modules/Helpdesk/Tests/Feature/TicketPublicResponseVisibilityFilesTest.php index 2987ea46..40eaed2e 100644 --- a/Modules/Helpdesk/Tests/Feature/TicketPublicResponseVisibilityFilesTest.php +++ b/Modules/Helpdesk/Tests/Feature/TicketPublicResponseVisibilityFilesTest.php @@ -13,7 +13,7 @@ final class TicketPublicResponseVisibilityFilesTest extends TestCase */ public function test_main_ticket_response_form_has_public_visibility_control(): void { - $viewPath = dirname(__DIR__, 2).'/Resources/views/livewire/ticket-show.blade.php'; + $viewPath = dirname(__DIR__, 2) . '/Resources/views/livewire/ticket-show.blade.php'; self::assertFileExists($viewPath); @@ -33,7 +33,7 @@ final class TicketPublicResponseVisibilityFilesTest extends TestCase */ public function test_threaded_responses_have_public_visibility_control_and_badges(): void { - $partialPath = dirname(__DIR__, 2).'/Resources/views/partials/comment-thread.blade.php'; + $partialPath = dirname(__DIR__, 2) . '/Resources/views/partials/comment-thread.blade.php'; self::assertFileExists($partialPath); diff --git a/Modules/Helpdesk/Tests/Feature/TicketSlaOperationalDetailFilesTest.php b/Modules/Helpdesk/Tests/Feature/TicketSlaOperationalDetailFilesTest.php index c6eae737..8429b53f 100644 --- a/Modules/Helpdesk/Tests/Feature/TicketSlaOperationalDetailFilesTest.php +++ b/Modules/Helpdesk/Tests/Feature/TicketSlaOperationalDetailFilesTest.php @@ -13,8 +13,8 @@ final class TicketSlaOperationalDetailFilesTest extends TestCase */ public function test_first_response_sla_card_shows_duration_responder_and_timestamp(): void { - $componentPath = dirname(__DIR__, 2).'/Livewire/TicketShow.php'; - $viewPath = dirname(__DIR__, 2).'/Resources/views/livewire/ticket-show.blade.php'; + $componentPath = dirname(__DIR__, 2) . '/Livewire/TicketShow.php'; + $viewPath = dirname(__DIR__, 2) . '/Resources/views/livewire/ticket-show.blade.php'; $component = file_get_contents($componentPath); $view = file_get_contents($viewPath); @@ -33,8 +33,8 @@ final class TicketSlaOperationalDetailFilesTest extends TestCase */ public function test_sla_cards_have_colour_coded_state_helpers(): void { - $componentPath = dirname(__DIR__, 2).'/Livewire/TicketShow.php'; - $viewPath = dirname(__DIR__, 2).'/Resources/views/livewire/ticket-show.blade.php'; + $componentPath = dirname(__DIR__, 2) . '/Livewire/TicketShow.php'; + $viewPath = dirname(__DIR__, 2) . '/Resources/views/livewire/ticket-show.blade.php'; $component = file_get_contents($componentPath); $view = file_get_contents($viewPath); @@ -55,8 +55,8 @@ final class TicketSlaOperationalDetailFilesTest extends TestCase */ public function test_sla_audit_trail_is_visible_on_ticket_page(): void { - $servicePath = dirname(__DIR__, 2).'/Services/SlaService.php'; - $viewPath = dirname(__DIR__, 2).'/Resources/views/livewire/ticket-show.blade.php'; + $servicePath = dirname(__DIR__, 2) . '/Services/SlaService.php'; + $viewPath = dirname(__DIR__, 2) . '/Resources/views/livewire/ticket-show.blade.php'; $service = file_get_contents($servicePath); $view = file_get_contents($viewPath); @@ -75,7 +75,7 @@ final class TicketSlaOperationalDetailFilesTest extends TestCase */ public function test_public_reply_count_uses_all_ticket_comments(): void { - $componentPath = dirname(__DIR__, 2).'/Livewire/TicketShow.php'; + $componentPath = dirname(__DIR__, 2) . '/Livewire/TicketShow.php'; $component = file_get_contents($componentPath); diff --git a/Modules/Helpdesk/Tests/Feature/TicketTimerButtonSizeFilesTest.php b/Modules/Helpdesk/Tests/Feature/TicketTimerButtonSizeFilesTest.php index 02769d55..2efe764d 100644 --- a/Modules/Helpdesk/Tests/Feature/TicketTimerButtonSizeFilesTest.php +++ b/Modules/Helpdesk/Tests/Feature/TicketTimerButtonSizeFilesTest.php @@ -26,6 +26,7 @@ final class TicketTimerButtonSizeFilesTest extends TestCase self::assertStringNotContainsString('px-3 py-1.5 text-xs', $view); self::assertStringNotContainsString('ticket-timer.js', $view); } + /** * Ensure the active timer action also remains readable and single-line. */ diff --git a/Modules/Helpdesk/Tests/Feature/TicketTimerFilesTest.php b/Modules/Helpdesk/Tests/Feature/TicketTimerFilesTest.php index 3a386079..e9ade4a1 100644 --- a/Modules/Helpdesk/Tests/Feature/TicketTimerFilesTest.php +++ b/Modules/Helpdesk/Tests/Feature/TicketTimerFilesTest.php @@ -16,7 +16,7 @@ class TicketTimerFilesTest extends TestCase $this->assertStringStartsWith('assertFalse( str_starts_with($view, ' tag.' + 'The ticket timer Livewire view must not start with a