- E-Mail-Aenderung durch Berater wird erst nach Bestaetigung durch den Kunden aktiv (Link an die neue Adresse, Portal kunde/email-bestaetigen); danach ziehen alle Eintraege des Kunden und seine Abos mit. Admins aendern direkt. - Kundenhoheit: E-Mail eines Beraterkontos oder eines Kunden eines anderen Beraters wird abgelehnt (beim Speichern und bei der Bestaetigung). - Fix CustomerPriority::entryExists: aelteste gepruefte Zuordnung gilt, Eintraege in Pruefung (is_like) dienen nicht mehr als Vorlage. - "Berater zuweisen" voreingestellt auf alle Bestellungen des Kunden. - Neue Admin-Seite Kundenhoheit: offene Pruefungen, Kunden bei mehreren Beratern, abgelehnte/offene E-Mail-Aenderungen; Zaehler im Menue. - Neue Tabelle shopping_user_email_changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
43 lines
1.6 KiB
PHP
43 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Web;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Services\CustomerEmailChangeService;
|
|
use Illuminate\Contracts\View\View;
|
|
|
|
/**
|
|
* Login-free confirmation of a new customer e-mail address via the tokenized link in the
|
|
* confirmation mail. GET only shows the page; the change is applied on POST, so mail
|
|
* scanners that open links cannot confirm on the customer's behalf.
|
|
*/
|
|
class CustomerEmailChangeController extends Controller
|
|
{
|
|
public function show(string $token, CustomerEmailChangeService $service): View
|
|
{
|
|
$change = $service->findConfirmable($token);
|
|
if (! $change) {
|
|
return view('portal.customer.email_change_done', ['status' => CustomerEmailChangeService::STATUS_INVALID]);
|
|
}
|
|
|
|
if ($change->shopping_user && $service->ownershipConflict($change->shopping_user, $change->new_email)) {
|
|
return view('portal.customer.email_change_done', ['status' => CustomerEmailChangeService::STATUS_CONFLICT]);
|
|
}
|
|
|
|
return view('portal.customer.email_change_confirm', [
|
|
'change' => $change,
|
|
'token' => $token,
|
|
]);
|
|
}
|
|
|
|
public function store(string $token, CustomerEmailChangeService $service): View
|
|
{
|
|
$change = $service->findConfirmable($token);
|
|
$status = $change ? $service->confirm($change) : CustomerEmailChangeService::STATUS_INVALID;
|
|
|
|
return view('portal.customer.email_change_done', [
|
|
'status' => $status,
|
|
'email' => $status === CustomerEmailChangeService::STATUS_CONFIRMED ? $change->new_email : null,
|
|
]);
|
|
}
|
|
}
|