diff --git a/Modules/Helpdesk/Http/Controllers/TicketStoreController.php b/Modules/Helpdesk/Http/Controllers/TicketStoreController.php new file mode 100644 index 00000000..6daadb67 --- /dev/null +++ b/Modules/Helpdesk/Http/Controllers/TicketStoreController.php @@ -0,0 +1,66 @@ +validate([ + 'company_id' => ['nullable', 'integer'], + 'subject' => ['required', 'string', 'max:200'], + 'body' => ['required', 'string', 'min:10'], + 'priority_id' => ['required', 'integer', Rule::exists('helpdesk_priorities', 'id')], + 'category_id' => ['nullable', 'integer', Rule::exists('helpdesk_categories', 'id')], + 'project_id' => ['nullable', 'integer', Rule::exists('helpdesk_projects', 'id')], + 'team_id' => ['nullable', 'integer', Rule::exists('helpdesk_teams', 'id')], + 'due_at' => ['nullable', 'date'], + 'attachments' => ['nullable', 'array'], + 'attachments.*' => ['file', 'max:' . $maxUploadKilobytes, 'mimes:' . implode(',', $allowedMimes)], + ]); + + $user = Auth::user(); + + abort_if($user === null, 403); + + $uploadedFiles = $request->file('attachments', []); + $uploadedFiles = is_array($uploadedFiles) ? $uploadedFiles : [$uploadedFiles]; + + $ticket = $tickets->create($user, [ + 'company_id' => $validated['company_id'] ?? null, + 'subject' => $validated['subject'], + 'body' => $validated['body'], + 'priority_id' => $validated['priority_id'], + 'category_id' => $validated['category_id'] ?? null, + 'project_id' => $validated['project_id'] ?? null, + 'team_id' => $validated['team_id'] ?? null, + 'due_at' => $validated['due_at'] ?? null, + ], $uploadedFiles); + + return redirect() + ->route('helpdesk.tickets.index') + ->with('success', 'Ticket ' . $ticket->reference . ' has been created.'); + } +} diff --git a/Modules/Helpdesk/Providers/HelpdeskServiceProvider.php b/Modules/Helpdesk/Providers/HelpdeskServiceProvider.php index 380aaaa1..55b99a7b 100644 --- a/Modules/Helpdesk/Providers/HelpdeskServiceProvider.php +++ b/Modules/Helpdesk/Providers/HelpdeskServiceProvider.php @@ -8,7 +8,6 @@ use Illuminate\Support\Facades\Blade; use Illuminate\Support\Facades\Config; use Illuminate\Support\Facades\File; use Illuminate\Support\Facades\Gate; -use Illuminate\Support\Facades\Route; use Illuminate\Support\ServiceProvider; use Livewire\Livewire; use Modules\Helpdesk\Livewire\HelpdeskDashboardWidget; @@ -25,16 +24,22 @@ final class HelpdeskServiceProvider extends ServiceProvider { /** * Module name. + * + * @var string */ protected string $moduleName = 'Helpdesk'; /** * Lowercase module name. + * + * @var string */ protected string $moduleNameLower = 'helpdesk'; /** * Register module services. + * + * @return void */ public function register(): void { @@ -48,6 +53,8 @@ final class HelpdeskServiceProvider extends ServiceProvider /** * Bootstrap module services. + * + * @return void */ public function boot(): void { @@ -60,17 +67,12 @@ final class HelpdeskServiceProvider extends ServiceProvider $this->registerPolicies(); $this->loadMigrationsFrom(module_path(ModuleInfo::name(), 'Database/Migrations')); - Livewire::setUpdateRoute(function ($handle) { - - return Route::post('/livewire-cfc83872/update', $handle) - - ->middleware('web'); - - }); } /** * Register Livewire components used by the module. + * + * @return void */ protected function registerLivewireComponents(): void { @@ -84,6 +86,8 @@ final class HelpdeskServiceProvider extends ServiceProvider /** * Register policies and gates. + * + * @return void */ protected function registerPolicies(): void { @@ -95,6 +99,8 @@ final class HelpdeskServiceProvider extends ServiceProvider /** * Register helpers. + * + * @return void */ protected function registerHelpers(): void { @@ -105,6 +111,8 @@ final class HelpdeskServiceProvider extends ServiceProvider /** * Dynamically register console commands. + * + * @return void */ protected function registerCommands(): void { @@ -119,7 +127,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(); @@ -129,38 +137,44 @@ final class HelpdeskServiceProvider extends ServiceProvider /** * Register config publishing. + * + * @return void */ 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'); } /** * Register module views. + * + * @return void */ 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'); } /** * Register translations. + * + * @return void */ 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()); @@ -181,8 +195,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/Resources/views/livewire/ticket-create.blade.php b/Modules/Helpdesk/Resources/views/livewire/ticket-create.blade.php index 3afbe5e5..2c06fe46 100644 --- a/Modules/Helpdesk/Resources/views/livewire/ticket-create.blade.php +++ b/Modules/Helpdesk/Resources/views/livewire/ticket-create.blade.php @@ -5,7 +5,30 @@ 'subtitle' => 'Raise a new support request with priority, project, category, team and full details.', ]) -