Skip to content

Commit 1a52c6e

Browse files
authored
Improve work with phone numbers (#4514)
2 parents e701880 + 217abc9 commit 1a52c6e

26 files changed

Lines changed: 190 additions & 82 deletions

src/Model/Complaint/ComplaintDataApiFactory.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Shopsys\FrameworkBundle\Model\Country\CountryFacade;
1313
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUser;
1414
use Shopsys\FrameworkBundle\Model\Order\Order;
15+
use Shopsys\FrameworkBundle\Model\PhonePrefix\PhoneData;
1516

1617
class ComplaintDataApiFactory
1718
{
@@ -53,7 +54,8 @@ public function createFromComplaintInputArgument(
5354
$complaintData->deliveryFirstName = $delivery['firstName'];
5455
$complaintData->deliveryLastName = $delivery['lastName'];
5556
$complaintData->deliveryCompanyName = $delivery['companyName'];
56-
$complaintData->deliveryTelephone = $delivery['telephone'];
57+
$telephoneInput = $delivery['telephone'] ?? null;
58+
$complaintData->deliveryTelephone = $telephoneInput ? PhoneData::fromArray($telephoneInput) : null;
5759
$complaintData->deliveryStreet = $delivery['street'];
5860
$complaintData->deliveryCity = $delivery['city'];
5961
$complaintData->deliveryPostcode = $delivery['postcode'];

src/Model/Customer/User/CustomerUserDataFactory.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserData;
1212
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserDataFactory as BaseCustomerUserDataFactory;
1313
use Shopsys\FrameworkBundle\Model\Customer\User\Role\CustomerUserRoleGroupRepository;
14+
use Shopsys\FrameworkBundle\Model\PhonePrefix\PhoneData;
1415

1516
class CustomerUserDataFactory
1617
{
@@ -50,6 +51,8 @@ protected function mapInputDataToCustomerUserData(
5051
}
5152
}
5253

54+
$customerUserData->telephone = PhoneData::fromArray($input['telephone']);
55+
5356
$this->setRoleGroup($customerUserData, $input['roleGroupUuid']);
5457

5558
return $customerUserData;

src/Model/Customer/User/CustomerUserUpdateDataFactory.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserDataFactory as FrameworkCustomerUserDataFactory;
1212
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateData;
1313
use Shopsys\FrameworkBundle\Model\Customer\User\CustomerUserUpdateDataFactory as FrameworkCustomerUserUpdateDataFactory;
14+
use Shopsys\FrameworkBundle\Model\PhonePrefix\PhoneData;
1415

1516
class CustomerUserUpdateDataFactory
1617
{
@@ -37,6 +38,8 @@ public function createFromCustomerUserWithArgument(
3738
}
3839
}
3940

41+
$customerUserData->telephone = PhoneData::fromArray($input['telephone']);
42+
4043
return $customerUserUpdateData;
4144
}
4245

src/Model/Customer/User/RegistrationData.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class RegistrationData
7777
public $createdAt;
7878

7979
/**
80-
* @var string|null
80+
* @var \Shopsys\FrameworkBundle\Model\PhonePrefix\PhoneData|null
8181
*/
8282
public $telephone;
8383

src/Model/Customer/User/RegistrationDataFactory.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Shopsys\FrameworkBundle\Component\Domain\Domain;
1010
use Shopsys\FrameworkBundle\Component\String\TransformStringHelper;
1111
use Shopsys\FrameworkBundle\Model\Country\CountryFacade;
12+
use Shopsys\FrameworkBundle\Model\PhonePrefix\PhoneData;
1213

1314
class RegistrationDataFactory
1415
{
@@ -31,6 +32,7 @@ public function createWithArgument(Argument $argument): RegistrationData
3132
}
3233
}
3334

35+
$registrationData->telephone = PhoneData::fromArray($input['telephone']);
3436
$registrationData->country = $this->countryFacade->findByCode($input['country']);
3537

3638
return $registrationData;

src/Model/Mutation/Customer/DeliveryAddress/DeliveryAddressDataApiFactory.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Shopsys\FrameworkBundle\Model\Customer\DeliveryAddressData;
1212
use Shopsys\FrameworkBundle\Model\Customer\DeliveryAddressDataFactory;
1313
use Shopsys\FrameworkBundle\Model\Customer\DeliveryAddressFacade;
14+
use Shopsys\FrameworkBundle\Model\PhonePrefix\PhoneData;
1415

1516
class DeliveryAddressDataApiFactory
1617
{
@@ -64,7 +65,9 @@ public function createFromDeliveryInputArgumentAndCustomer(
6465
$deliveryAddressData->street = $input['street'];
6566
$deliveryAddressData->city = $input['city'];
6667
$deliveryAddressData->postcode = $input['postcode'];
67-
$deliveryAddressData->telephone = $input['telephone'];
68+
$telephoneInput = $input['telephone'] ?? null;
69+
70+
$deliveryAddressData->telephone = $telephoneInput !== null ? PhoneData::fromArray($telephoneInput) : null;
6871
$deliveryAddressData->country = $country;
6972
$deliveryAddressData->customer = $customer;
7073

src/Model/Mutation/Inquiry/CreateInquiryMutation.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Shopsys\FrameworkBundle\Model\Inquiry\InquiryDataFactory;
1313
use Shopsys\FrameworkBundle\Model\Inquiry\InquiryFacade;
1414
use Shopsys\FrameworkBundle\Model\Inquiry\Mail\InquiryMailFacade;
15+
use Shopsys\FrameworkBundle\Model\PhonePrefix\PhoneData;
1516
use Shopsys\FrameworkBundle\Model\Product\Exception\ProductNotFoundException;
1617
use Shopsys\FrameworkBundle\Model\Product\ProductFacade;
1718
use Shopsys\FrontendApiBundle\Model\Mutation\AbstractMutation;
@@ -54,7 +55,7 @@ protected function createInquiryDataFromArgument(Argument $argument): InquiryDat
5455
$inquiryData->firstName = $input['firstName'];
5556
$inquiryData->lastName = $input['lastName'];
5657
$inquiryData->email = $input['email'];
57-
$inquiryData->telephone = $input['telephone'];
58+
$inquiryData->telephone = PhoneData::fromArray($input['telephone']);
5859
$inquiryData->companyName = $input['companyName'] ?? null;
5960
$inquiryData->companyNumber = $input['companyNumber'] ?? null;
6061
$inquiryData->companyTaxNumber = $input['companyTaxNumber'] ?? null;

src/Model/Order/OrderDataFactory.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Shopsys\FrameworkBundle\Model\Order\OrderData;
1111
use Shopsys\FrameworkBundle\Model\Order\OrderDataFactory as FrameworkOrderDataFactory;
1212
use Shopsys\FrameworkBundle\Model\Payment\PaymentFacade;
13+
use Shopsys\FrameworkBundle\Model\PhonePrefix\PhoneData;
1314
use Shopsys\FrameworkBundle\Model\Pricing\Currency\CurrencyFacade;
1415
use Shopsys\FrameworkBundle\Model\Product\ProductFacade;
1516
use Shopsys\FrameworkBundle\Model\Store\StoreFacade;
@@ -60,7 +61,15 @@ protected function withResolvedFields(array $input, OrderData $orderData): Order
6061
$cloneOrderData->deliveryCountry = $this->countryFacade->findByCode($input['deliveryCountry']);
6162
}
6263

63-
unset($input['currency'], $input['country'], $input['deliveryCountry']);
64+
$cloneOrderData->telephone = PhoneData::fromArray($input['telephone']);
65+
66+
$deliveryTelephoneInput = $input['deliveryTelephone'] ?? null;
67+
68+
if ($deliveryTelephoneInput !== null) {
69+
$cloneOrderData->deliveryTelephone = PhoneData::fromArray($deliveryTelephoneInput);
70+
}
71+
72+
unset($input['currency'], $input['country'], $input['deliveryCountry'], $input['telephone'], $input['deliveryTelephone']);
6473

6574
foreach ($input as $key => $value) {
6675
if (property_exists(get_class($orderData), $key)) {
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Shopsys\FrontendApiBundle\Model\Resolver\Settings;
6+
7+
use Shopsys\FrameworkBundle\Component\Country\CountryFlag;
8+
use Shopsys\FrameworkBundle\Component\Domain\Domain;
9+
use Shopsys\FrameworkBundle\Model\PhonePrefix\CountryDialCode;
10+
use Shopsys\FrameworkBundle\Model\PhonePrefix\CountryDialCodeProvider;
11+
use Shopsys\FrontendApiBundle\Model\Resolver\AbstractQuery;
12+
use Symfony\Component\Intl\Countries;
13+
14+
class PhonePrefixesQuery extends AbstractQuery
15+
{
16+
public function __construct(
17+
protected readonly Domain $domain,
18+
protected readonly CountryDialCodeProvider $countryDialCodeProvider,
19+
) {
20+
}
21+
22+
/**
23+
* @return array<int, array{code: string, dialCode: string, countryName: string, flagEmoji: string}>
24+
*/
25+
public function phonePrefixesQuery(): array
26+
{
27+
$locale = $this->domain->getLocale();
28+
29+
$countryDialCodes = $this->countryDialCodeProvider->getAllEnabledOnDomainWithDefaultFirst($this->domain->getId());
30+
31+
return array_map(
32+
static fn (CountryDialCode $countryDialCode): array => [
33+
'code' => $countryDialCode->code,
34+
'dialCode' => $countryDialCode->dialCode,
35+
'countryName' => Countries::getName($countryDialCode->code, $locale),
36+
'flagEmoji' => CountryFlag::getFlagEmoji($countryDialCode->code),
37+
],
38+
$countryDialCodes,
39+
);
40+
}
41+
}

src/Resources/config/graphql-types/ModelType/Complaint/ComplaintDecorator.types.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ ComplaintDecorator:
2424
deliveryTelephone:
2525
type: "String!"
2626
description: "Contact telephone number for delivery"
27+
deliveryTelephoneData:
28+
type: "PhoneData!"
29+
description: "Structured delivery telephone data with prefix and number"
2730
deliveryStreet:
2831
type: "String!"
2932
description: "Street name for delivery"

0 commit comments

Comments
 (0)