Skip to content

Commit

Permalink
[Twig] allow to use string phone numbers in templates filters (#142)
Browse files Browse the repository at this point in the history
  • Loading branch information
oleg-andreyev authored Mar 22, 2023
1 parent a4c084d commit 0291f17
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 9 deletions.
44 changes: 35 additions & 9 deletions src/Templating/Helper/PhoneNumberHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,15 +42,17 @@ public function __construct(PhoneNumberUtil $phoneNumberUtil)
/**
* Format a phone number.
*
* @param PhoneNumber $phoneNumber phone number
* @param int|string $format format, or format constant name
* @param PhoneNumber|string $phoneNumber phone number
* @param int|string $format format, or format constant name
*
* @return string formatted phone number
*
* @throws InvalidArgumentException if an argument is invalid
*/
public function format(PhoneNumber $phoneNumber, $format = PhoneNumberFormat::INTERNATIONAL): string
public function format($phoneNumber, $format = PhoneNumberFormat::INTERNATIONAL): string
{
$phoneNumber = $this->getPhoneNumber($phoneNumber);

if (true === \is_string($format)) {
$constant = '\libphonenumber\PhoneNumberFormat::'.$format;

Expand All @@ -67,22 +69,26 @@ public function format(PhoneNumber $phoneNumber, $format = PhoneNumberFormat::IN
/**
* Formats this phone number for out-of-country dialing purposes.
*
* @param PhoneNumber $phoneNumber phone number
* @param string|null $regionCode The ISO 3166-1 alpha-2 country code
* @param PhoneNumber|string $phoneNumber phone number
* @param string|null $regionCode The ISO 3166-1 alpha-2 country code
*/
public function formatOutOfCountryCallingNumber(PhoneNumber $phoneNumber, $regionCode): string
public function formatOutOfCountryCallingNumber($phoneNumber, $regionCode): string
{
$phoneNumber = $this->getPhoneNumber($phoneNumber);

return $this->phoneNumberUtil->formatOutOfCountryCallingNumber($phoneNumber, $regionCode);
}

/**
* @param PhoneNumber $phoneNumber phone number
* @param int|string $type phoneNumberType, or PhoneNumberType constant name
* @param PhoneNumber|string $phoneNumber phone number
* @param int|string $type phoneNumberType, or PhoneNumberType constant name
*
* @throws InvalidArgumentException if type argument is invalid
*/
public function isType(PhoneNumber $phoneNumber, $type = PhoneNumberType::UNKNOWN): bool
public function isType($phoneNumber, $type = PhoneNumberType::UNKNOWN): bool
{
$phoneNumber = $this->getPhoneNumber($phoneNumber);

if (true === \is_string($type)) {
$constant = '\libphonenumber\PhoneNumberType::'.$type;

Expand All @@ -95,4 +101,24 @@ public function isType(PhoneNumber $phoneNumber, $type = PhoneNumberType::UNKNOW

return $this->phoneNumberUtil->getNumberType($phoneNumber) === $type;
}

/**
* @param PhoneNumber|string $phoneNumber
*
* @return PhoneNumber|void
*
* @throws \libphonenumber\NumberParseException
*/
private function getPhoneNumber($phoneNumber)
{
if (\is_string($phoneNumber)) {
$phoneNumber = $this->phoneNumberUtil->parse($phoneNumber);
}

if (!$phoneNumber instanceof PhoneNumber) {
throw new InvalidArgumentException('The phone number supplied is not PhoneNumber or string.');
}

return $phoneNumber;
}
}
25 changes: 25 additions & 0 deletions tests/Templating/Helper/PhoneNumberHelperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,31 @@ public function testFormatOutOfCountryCallingNumber($phoneNumber, $defaultRegion
$this->assertSame($expectedResult, $helper->formatOutOfCountryCallingNumber($phoneNumber, $regionCode));
}

public function testFormatAcceptString()
{
$phoneNumberUtil = PhoneNumberUtil::getInstance();
$helper = new PhoneNumberHelper($phoneNumberUtil);
$result = $helper->format('+37122222222');
$this->assertEquals('+371 22 222 222', $result);
}

public function testFormatAcceptNotAllowValue()
{
$phoneNumberUtil = PhoneNumberUtil::getInstance();
$helper = new PhoneNumberHelper($phoneNumberUtil);
$this->expectException(InvalidArgumentException::class);
$this->expectExceptionMessage('The phone number supplied is not PhoneNumber or string.');
$helper->format(0037122222222);
}

public function formatOutOfCountryCallingNumberAcceptString()
{
$phoneNumberUtil = PhoneNumberUtil::getInstance();
$helper = new PhoneNumberHelper($phoneNumberUtil);
$result = $helper->formatOutOfCountryCallingNumber('+37122222222', 'LV');
$this->assertEquals('+371 22 222 222', $result);
}

/**
* 0 => The phone number.
* 1 => Phone number default region.
Expand Down

0 comments on commit 0291f17

Please sign in to comment.