Files
preregister/app/Http/Controllers/Admin/MailwizzController.php
bert.hausmans 91caa16e70 feat: Mailwizz overview vs wizard flow and wizard step guard
Load Weeztix config for coupon mapping context, redirect incomplete
configs to step one, and expand admin Mailwizz UI and tests.

Made-with: Cursor
2026-04-05 13:34:00 +02:00

67 lines
2.1 KiB
PHP

<?php
declare(strict_types=1);
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\UpdateMailwizzConfigRequest;
use App\Models\PreregistrationPage;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\View\View;
class MailwizzController extends Controller
{
public function edit(Request $request, PreregistrationPage $page): View|RedirectResponse
{
$this->authorize('update', $page);
$page->load(['mailwizzConfig', 'weeztixConfig']);
$config = $page->mailwizzConfig;
$showWizard = $config === null || $request->boolean('wizard');
if ($showWizard && $config === null) {
$requestedStep = min(4, max(1, (int) $request->query('step', 1)));
if ($requestedStep !== 1) {
return redirect()
->route('admin.pages.mailwizz.edit', ['page' => $page, 'wizard' => 1, 'step' => 1]);
}
}
return view('admin.mailwizz.edit', compact('page', 'showWizard'));
}
public function update(UpdateMailwizzConfigRequest $request, PreregistrationPage $page): RedirectResponse
{
$validated = $request->validated();
if (($validated['api_key'] ?? '') === '' && $page->mailwizzConfig !== null) {
unset($validated['api_key']);
}
DB::transaction(function () use ($page, $validated): void {
$page->mailwizzConfig()->updateOrCreate(
['preregistration_page_id' => $page->id],
array_merge($validated, ['preregistration_page_id' => $page->id])
);
});
return redirect()
->route('admin.pages.mailwizz.edit', $page)
->with('status', __('Mailwizz configuration saved.'));
}
public function destroy(PreregistrationPage $page): RedirectResponse
{
$this->authorize('update', $page);
$page->mailwizzConfig()?->delete();
return redirect()
->route('admin.pages.mailwizz.edit', $page)
->with('status', __('Mailwizz integration removed.'));
}
}