fix: validate newly entered phone numbers

This commit is contained in:
fromme committed 2026-10-28 13:48:51 +01:00
1 parent e293bd3b1c
commit 7c8dbeef48
11 files changed
+227 -6

No files matched your search

-1
View File
@@ -74,7 +74,6 @@ class BookingApplicantType extends AbstractType
->add('mobile', TextType::class, [
'label' => 'Telefon (mobil)',
'required' => true,
'sanitize_html' => true,
'attr' => [
'autocomplete' => 'leave-me-alone-chrome',
],
-1
View File
@@ -222,7 +222,6 @@ class BookingParticipantType extends AbstractType
$form->add('mobile', TextType::class, $this->mergeFieldState([
'label' => 'Telefon (mobil)',
'required' => false,
'sanitize_html' => true,
'property_path' => 'participant.mobile',
'attr' => [
'autocomplete' => 'leave-me-alone-chrome',
+15
View File
@@ -93,8 +93,17 @@ class ParticipantDto
)]
public ?string $email = null;
#[Assert\When(
expression: 'this.isMobileNewlyEntered()',
constraints: [new AppAssert\PhoneNumber()],
groups: ['booking_edit', 'booking_create'],
)]
public ?string $mobile = null;
// The number as loaded from BusPro, which goes back unchanged and is exempt from PhoneNumber.
// Public so it survives the session round trip through __unserialize().
public ?string $loadedMobile = null;
#[Assert\Valid(groups: ['booking_edit', 'booking_create'])]
#[Assert\NotNull(message: 'Bitte Adresse angeben', groups: ['applicant_address'])]
public ?Address $address = null;
@@ -240,6 +249,7 @@ class ParticipantDto
$instance->nationality = $personalData->nationality ?: 'D';
$instance->email = $personalData->communication->email;
$instance->mobile = $personalData->communication->mobile;
$instance->loadedMobile = $personalData->communication->mobile;
$instance->dateOfBirth = $personalData->dateOfBirth;
$instance->height = $personalData->height;
$instance->weight = $personalData->weight;
@@ -254,6 +264,11 @@ class ParticipantDto
return $instance;
}
public function isMobileNewlyEntered(): bool
{
return AppAssert\PhoneNumber::isNewlyEntered($this->mobile, $this->loadedMobile);
}
public function isApplicant(): bool
{
return 0 === $this->index;
+27
View File
@@ -8,6 +8,7 @@ use App\BusProNet\Model\Address;
use App\BusProNet\Model\PersonalData;
use App\BusProNet\Model\VoucherPaymentMethod;
use App\BusProNet\Model\VoucherTemplate;
use App\Validator\Constraints as AppAssert;
use Symfony\Component\Validator\Constraints as Assert;
/**
@@ -69,10 +70,24 @@ class VoucherPurchaseDto
#[Assert\Valid]
public Address $address;
#[Assert\When(
expression: 'this.isPhoneNewlyEntered()',
constraints: [new AppAssert\PhoneNumber()],
groups: ['voucher_step_2'],
)]
public ?string $phone = null;
#[Assert\When(
expression: 'this.isMobileNewlyEntered()',
constraints: [new AppAssert\PhoneNumber()],
groups: ['voucher_step_2'],
)]
public ?string $mobile = null;
// The numbers prefilled from BusPro, which are exempt from PhoneNumber.
public ?string $loadedPhone = null;
public ?string $loadedMobile = null;
#[Assert\NotBlank(message: 'Bitte angeben', groups: ['voucher_step_2'])]
#[Assert\Email(message: 'Bitte eine gültige Adresse angeben', mode: 'strict', groups: ['voucher_step_2'])]
public ?string $email = null;
@@ -90,6 +105,16 @@ class VoucherPurchaseDto
$this->address->country = 'D';
}
public function isPhoneNewlyEntered(): bool
{
return AppAssert\PhoneNumber::isNewlyEntered($this->phone, $this->loadedPhone);
}
public function isMobileNewlyEntered(): bool
{
return AppAssert\PhoneNumber::isNewlyEntered($this->mobile, $this->loadedMobile);
}
public function getBuyerFullName(): string
{
return trim(sprintf('%s %s', $this->firstName ?? '', $this->lastName ?? ''));
@@ -119,6 +144,8 @@ class VoucherPurchaseDto
$this->address->country ??= 'D';
$this->phone = $personalData->communication->phone;
$this->mobile = $personalData->communication->mobile;
$this->loadedPhone = $this->phone;
$this->loadedMobile = $this->mobile;
$this->email = $loginEmail;
}
}
-2
View File
@@ -81,12 +81,10 @@ class PersonalDataType extends AbstractType
'label' => 'Telefon',
'required' => false,
'property_path' => 'communication.phone',
'sanitize_html' => true,
])
->add('mobile', TextType::class, [
'label' => 'Mobil',
'property_path' => 'communication.mobile',
'sanitize_html' => true,
])
;
}
-2
View File
@@ -55,12 +55,10 @@ class VoucherPurchaseStep2Type extends AbstractType
->add('phone', TextType::class, [
'label' => 'Telefon privat',
'required' => false,
'sanitize_html' => true,
])
->add('mobile', TextType::class, [
'label' => 'Mobil',
'required' => false,
'sanitize_html' => true,
])
;
}