mehr übersetzungen, added pending purchase indicator. datenschutzfenster funktioniert.

This commit is contained in:
Codex Agent
2025-10-03 15:31:54 +02:00
parent 60f8de9162
commit c87cfb2c10
17 changed files with 410 additions and 52 deletions

View File

@@ -24,14 +24,16 @@ class MarketingRegisterController extends Controller
/**
* Show the registration page.
*/
public function create(Request $request, $package_id = null): Response
public function create(Request $request): Response
{
$package_id = $request->query('package_id');
$package = $package_id ? Package::find($package_id) : null;
//App::setLocale('de');
$privacyHtml = view('legal.datenschutz-partial')->render();
return Inertia::render('auth/register', [
'package' => $package,
'privacyHtml' => $privacyHtml,
]);
}
@@ -65,8 +67,13 @@ class MarketingRegisterController extends Controller
'phone' => $validated['phone'],
'password' => Hash::make($validated['password']),
'role' => 'user',
'pending_purchase' => !empty($validated['package_id']),
]);
if ($user->pending_purchase) {
session()->put('pending_user_id', $user->id);
}
if ($shouldAutoVerify) {
$user->forceFill(['email_verified_at' => now()])->save();
}
@@ -113,6 +120,7 @@ class MarketingRegisterController extends Controller
$package = Package::find($validated['package_id']);
if (!$package) {
// No action if package not found
return redirect()->route('dashboard')->with('success', 'Registrierung erfolgreich! Bitte verifizieren Sie Ihre E-Mail.');
} else if ((float) $package->price <= 0.0) {
// Assign free package
TenantPackage::create([
@@ -133,20 +141,28 @@ class MarketingRegisterController extends Controller
$tenant->update(['subscription_status' => 'active']);
$user->update(['role' => 'tenant_admin']);
$user->update(['role' => 'tenant_admin', 'pending_purchase' => false]);
Auth::login($user); // Re-login to refresh session
if ($shouldAutoVerify) {
return redirect()->route('dashboard')->with('success', 'Registrierung und Package-Zuweisung erfolgreich!');
} else {
return redirect()->route('verification.notice')->with('status', 'registration-success');
}
} else {
return redirect()->route('buy.packages', $package->id);
// For paid package, keep pending_purchase true, redirect to buy
return redirect()->route('buy.packages', $package->id)->with('success', 'Registrierung erfolgreich! Fahren Sie mit dem Kauf fort.');
}
}
// No package
if ($shouldAutoVerify) {
return Inertia::location($dashboardUrl);
return redirect()->route('dashboard')->with('success', 'Registrierung erfolgreich!');
}
session()->flash('status', 'registration-success');
return Inertia::location(route('verification.notice'));
return redirect()->route('verification.notice');
}
}

View File

@@ -87,6 +87,17 @@ class StripeWebhookController extends Controller
return;
}
// Activate user if pending purchase
$user = \App\Models\User::where('id', $tenant->user_id ?? $userId)->first();
if ($user && $user->pending_purchase) {
$user->update([
'email_verified_at' => now(),
'role' => 'tenant_admin',
'pending_purchase' => false,
]);
Log::info('User activated after purchase: ' . $user->id);
}
// Create PackagePurchase for one-off payment
\App\Models\PackagePurchase::create([
'tenant_id' => $tenantId,
@@ -209,6 +220,18 @@ class StripeWebhookController extends Controller
return;
}
// Activate user if pending purchase
$tenant = \App\Models\Tenant::find($tenantId);
$user = $tenant ? $tenant->user : null;
if ($user && $user->pending_purchase) {
$user->update([
'email_verified_at' => now(),
'role' => 'tenant_admin',
'pending_purchase' => false,
]);
Log::info('User activated after subscription purchase: ' . $user->id);
}
// Activate TenantPackage for initial subscription
\App\Models\TenantPackage::updateOrCreate(
[

View File

@@ -31,6 +31,7 @@ class User extends Authenticatable implements MustVerifyEmail
'address',
'phone',
'role',
'pending_purchase',
];
/**
@@ -53,6 +54,7 @@ class User extends Authenticatable implements MustVerifyEmail
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
'pending_purchase' => 'boolean',
];
}