private static function loadGeneralDesc(PhoneMetadata $metadata, \DOMElement $element)
 {
     $generalDesc = new PhoneNumberDesc();
     $generalDesc = self::processPhoneNumberDescElement($generalDesc, $element, self::GENERAL_DESC);
     $metadata->setGeneralDesc($generalDesc);
     $metadata->setFixedLine(self::processPhoneNumberDescElement($generalDesc, $element, self::FIXED_LINE));
     $metadata->setMobile(self::processPhoneNumberDescElement($generalDesc, $element, self::MOBILE));
     $metadata->setStandardRate(self::processPhoneNumberDescElement($generalDesc, $element, self::STANDARD_RATE));
     $metadata->setPremiumRate(self::processPhoneNumberDescElement($generalDesc, $element, self::PREMIUM_RATE));
     $metadata->setShortCode(self::processPhoneNumberDescElement($generalDesc, $element, self::SHORT_CODE));
     $metadata->setTollFree(self::processPhoneNumberDescElement($generalDesc, $element, self::TOLL_FREE));
     $metadata->setSharedCost(self::processPhoneNumberDescElement($generalDesc, $element, self::SHARED_COST));
     $metadata->setVoip(self::processPhoneNumberDescElement($generalDesc, $element, self::VOIP));
     $metadata->setPersonalNumber(self::processPhoneNumberDescElement($generalDesc, $element, self::PERSONAL_NUMBER));
     $metadata->setPager(self::processPhoneNumberDescElement($generalDesc, $element, self::PAGER));
     $metadata->setUan(self::processPhoneNumberDescElement($generalDesc, $element, self::UAN));
     $metadata->setEmergency(self::processPhoneNumberDescElement($generalDesc, $element, self::EMERGENCY));
     $metadata->setVoicemail(self::processPhoneNumberDescElement($generalDesc, $element, self::VOICEMAIL));
     $metadata->setCarrierSpecific(self::processPhoneNumberDescElement($generalDesc, $element, self::CARRIER_SPECIFIC));
     $metadata->setNoInternationalDialling(self::processPhoneNumberDescElement($generalDesc, $element, self::NO_INTERNATIONAL_DIALLING));
     $metadata->setSameMobileAndFixedLinePattern($metadata->getMobile()->getNationalNumberPattern() === $metadata->getFixedLine()->getNationalNumberPattern());
 }
 public function testMaybeStripNationalPrefix()
 {
     $metadata = new PhoneMetadata();
     $metadata->setNationalPrefixForParsing("34");
     $phoneNumberDesc = new PhoneNumberDesc();
     $phoneNumberDesc->setNationalNumberPattern("\\d{4,8}");
     $metadata->setGeneralDesc($phoneNumberDesc);
     $numberToStrip = "34356778";
     $strippedNumber = "356778";
     $carrierCode = null;
     $this->assertTrue($this->phoneUtil->maybeStripNationalPrefixAndCarrierCode($numberToStrip, $metadata, $carrierCode));
     $this->assertEquals($strippedNumber, $numberToStrip, "Should have had national prefix stripped.");
     // Retry stripping - now the number should not start with the national prefix, so no more
     // stripping should occur.
     $carrierCode = null;
     $this->assertFalse($this->phoneUtil->maybeStripNationalPrefixAndCarrierCode($numberToStrip, $metadata, $carrierCode));
     $this->assertEquals($strippedNumber, $numberToStrip, "Should have had no change - no national prefix present.");
     // Some countries have no national prefix. Repeat test with none specified.
     $metadata->setNationalPrefixForParsing("");
     $carrierCode = null;
     $this->assertFalse($this->phoneUtil->maybeStripNationalPrefixAndCarrierCode($numberToStrip, $metadata, $carrierCode));
     $this->assertEquals($strippedNumber, $numberToStrip, "Should not strip anything with empty national prefix.");
     // If the resultant number doesn't match the national rule, it shouldn't be stripped.
     $metadata->setNationalPrefixForParsing("3");
     $numberToStrip = "3123";
     $strippedNumber = "3123";
     $carrierCode = null;
     $this->assertFalse($this->phoneUtil->maybeStripNationalPrefixAndCarrierCode($numberToStrip, $metadata, $carrierCode));
     $this->assertEquals($strippedNumber, $numberToStrip, "Should have had no change - after stripping, it wouldn't have matched the national rule.");
     // Test extracting carrier selection code.
     $metadata->setNationalPrefixForParsing("0(81)?");
     $numberToStrip = "08122123456";
     $strippedNumber = "22123456";
     $carrierCode = "";
     $this->assertTrue($this->phoneUtil->maybeStripNationalPrefixAndCarrierCode($numberToStrip, $metadata, $carrierCode));
     $this->assertEquals("81", $carrierCode);
     $this->assertEquals($strippedNumber, $numberToStrip, "Should have had national prefix and carrier code stripped.");
     // If there was a transform rule, check it was applied.
     $metadata->setNationalPrefixTransformRule("5\${1}5");
     // Note that a capturing group is present here.
     $metadata->setNationalPrefixForParsing("0(\\d{2})");
     $numberToStrip = "031123";
     $transformedNumber = "5315123";
     $carrierCode = null;
     $this->assertTrue($this->phoneUtil->maybeStripNationalPrefixAndCarrierCode($numberToStrip, $metadata, $carrierCode));
     $this->assertEquals($transformedNumber, $numberToStrip, "Should transform the 031 to a 5315.");
 }
 /**
  * @param PhoneMetadata $metadata
  * @param int $type
  * @return PhoneNumberDesc
  */
 private function getNumberDescByType(PhoneMetadata $metadata, $type)
 {
     switch ($type) {
         case PhoneNumberType::PREMIUM_RATE:
             return $metadata->getPremiumRate();
         case PhoneNumberType::TOLL_FREE:
             return $metadata->getTollFree();
         case PhoneNumberType::MOBILE:
             return $metadata->getMobile();
         case PhoneNumberType::FIXED_LINE:
         case PhoneNumberType::FIXED_LINE_OR_MOBILE:
             return $metadata->getFixedLine();
         case PhoneNumberType::SHARED_COST:
             return $metadata->getSharedCost();
         case PhoneNumberType::VOIP:
             return $metadata->getVoip();
         case PhoneNumberType::PERSONAL_NUMBER:
             return $metadata->getPersonalNumber();
         case PhoneNumberType::PAGER:
             return $metadata->getPager();
         case PhoneNumberType::UAN:
             return $metadata->getUan();
         case PhoneNumberType::VOICEMAIL:
             return $metadata->getVoicemail();
         default:
             return $metadata->getGeneralDesc();
     }
 }