feat: per-subscriber Mailwizz sync button on admin list
Add POST route and form request to queue SyncSubscriberToMailwizz for one subscriber when the page has Mailwizz configured. Include Dutch strings and feature tests for auth and edge cases. Made-with: Cursor
This commit is contained in:
@@ -8,6 +8,8 @@ use App\Http\Controllers\Controller;
|
||||
use App\Http\Requests\Admin\DestroySubscriberRequest;
|
||||
use App\Http\Requests\Admin\IndexSubscriberRequest;
|
||||
use App\Http\Requests\Admin\QueueMailwizzSyncRequest;
|
||||
use App\Http\Requests\Admin\SyncSubscriberMailwizzRequest;
|
||||
use App\Jobs\SyncSubscriberToMailwizz;
|
||||
use App\Models\PreregistrationPage;
|
||||
use App\Models\Subscriber;
|
||||
use App\Services\CleanupSubscriberIntegrationsService;
|
||||
@@ -79,6 +81,26 @@ class SubscriberController extends Controller
|
||||
));
|
||||
}
|
||||
|
||||
public function syncSubscriberMailwizz(
|
||||
SyncSubscriberMailwizzRequest $request,
|
||||
PreregistrationPage $page,
|
||||
Subscriber $subscriber
|
||||
): RedirectResponse {
|
||||
$page->loadMissing('mailwizzConfig');
|
||||
|
||||
if ($page->mailwizzConfig === null) {
|
||||
return redirect()
|
||||
->route('admin.pages.subscribers.index', $page)
|
||||
->with('error', __('This page has no Mailwizz integration.'));
|
||||
}
|
||||
|
||||
SyncSubscriberToMailwizz::dispatch($subscriber->fresh());
|
||||
|
||||
return redirect()
|
||||
->route('admin.pages.subscribers.index', $page)
|
||||
->with('status', __('Mailwizz sync has been queued for this subscriber.'));
|
||||
}
|
||||
|
||||
public function export(IndexSubscriberRequest $request, PreregistrationPage $page): StreamedResponse
|
||||
{
|
||||
$search = $request->validated('search');
|
||||
|
||||
36
app/Http/Requests/Admin/SyncSubscriberMailwizzRequest.php
Normal file
36
app/Http/Requests/Admin/SyncSubscriberMailwizzRequest.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Http\Requests\Admin;
|
||||
|
||||
use App\Models\PreregistrationPage;
|
||||
use App\Models\Subscriber;
|
||||
use Illuminate\Contracts\Validation\ValidationRule;
|
||||
use Illuminate\Foundation\Http\FormRequest;
|
||||
|
||||
class SyncSubscriberMailwizzRequest extends FormRequest
|
||||
{
|
||||
public function authorize(): bool
|
||||
{
|
||||
$page = $this->route('page');
|
||||
$subscriber = $this->route('subscriber');
|
||||
if (! $page instanceof PreregistrationPage || ! $subscriber instanceof Subscriber) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if ($subscriber->preregistration_page_id !== $page->id) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->user()?->can('update', $page) ?? false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<string, array<int, ValidationRule|string>>
|
||||
*/
|
||||
public function rules(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user