Added newsletter consent and term/privacy checkbox to registration

This commit is contained in:
Constantin Graf
2024-05-14 17:02:28 +02:00
committed by Constantin Graf
parent 11af9fab7e
commit 0448ebc180
9 changed files with 129 additions and 48 deletions

View File

@@ -6,6 +6,7 @@ namespace App\Actions\Fortify;
use App\Enums\Role;
use App\Enums\Weekday;
use App\Events\NewsletterRegistered;
use App\Models\Organization;
use App\Models\User;
use App\Service\TimezoneService;
@@ -49,6 +50,9 @@ class CreateNewUser implements CreatesNewUsers
],
'password' => $this->passwordRules(),
'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '',
'newsletter_consent' => [
'boolean',
],
])->validate();
$timezone = 'UTC';
@@ -56,7 +60,7 @@ class CreateNewUser implements CreatesNewUsers
$timezone = $input['timezone'];
}
return DB::transaction(function () use ($input, $timezone) {
$user = DB::transaction(function () use ($input, $timezone) {
return tap(User::create([
'name' => $input['name'],
'email' => $input['email'],
@@ -67,6 +71,13 @@ class CreateNewUser implements CreatesNewUsers
$this->createTeam($user);
});
});
$newsletterConsent = isset($input['newsletter_consent']) && (bool) $input['newsletter_consent'];
if ($newsletterConsent) {
NewsletterRegistered::dispatch($input['name'], $input['email'], $user->getKey());
}
return $user;
}
/**

View File

@@ -0,0 +1,28 @@
<?php
declare(strict_types=1);
namespace App\Events;
use Illuminate\Foundation\Events\Dispatchable;
class NewsletterRegistered
{
use Dispatchable;
public string $name;
public string $email;
public string $id;
/**
* Create a new event instance.
*/
public function __construct(string $name, string $email, string $id)
{
$this->name = $name;
$this->email = $email;
$this->id = $id;
}
}

View File

@@ -22,6 +22,8 @@ use Brick\Money\Currency;
use Brick\Money\ISOCurrencyProvider;
use Illuminate\Http\Request;
use Illuminate\Support\ServiceProvider;
use Inertia\Inertia;
use Laravel\Fortify\Fortify;
use Laravel\Jetstream\Actions\UpdateTeamMemberRole;
use Laravel\Jetstream\Jetstream;
@@ -52,6 +54,13 @@ class JetstreamServiceProvider extends ServiceProvider
Jetstream::useTeamModel(Organization::class);
Jetstream::useTeamInvitationModel(OrganizationInvitation::class);
app()->singleton(UpdateTeamMemberRole::class, UpdateMemberRole::class);
Fortify::registerView(function () {
return Inertia::render('Auth/Register', [
'terms_url' => config('auth.terms_url'),
'privacy_policy_url' => config('auth.privacy_policy_url'),
'newsletter_consent' => config('auth.newsletter_consent'),
]);
});
}
/**