/**
* Processes a phone number description element from the XML file and returns it as a
* PhoneNumberDesc. If the description element is a fixed line or mobile number, the general
* description will be used to fill in the whole element if necessary, or any components that are
* missing. For all other types, the general description will only be used to fill in missing
* components if the type has a partial definition. For example, if no "tollFree" element exists,
* we assume there are no toll free numbers for that locale, and return a phone number description
* with "NA" for both the national and possible number patterns.
*
* @param PhoneNumberDesc $generalDesc generic phone number description that will be used to fill in missing
* parts of the description
* @param \DOMElement $countryElement XML element representing all the country information
* @param string $numberType name of the number type, corresponding to the appropriate tag in the XML
* file with information about that type
* @return PhoneNumberDesc complete description of that phone number type
*/
private static function processPhoneNumberDescElement(PhoneNumberDesc $generalDesc, \DOMElement $countryElement, $numberType)
{
$phoneNumberDescList = $countryElement->getElementsByTagName($numberType);
$numberDesc = new PhoneNumberDesc();
if ($phoneNumberDescList->length == 0 && !self::isValidNumberType($numberType)) {
$numberDesc->setNationalNumberPattern("NA");
$numberDesc->setPossibleNumberPattern("NA");
return $numberDesc;
}
$numberDesc->mergeFrom($generalDesc);
if ($phoneNumberDescList->length > 0) {
$element = $phoneNumberDescList->item(0);
$possiblePattern = $element->getElementsByTagName(self::POSSIBLE_NUMBER_PATTERN);
if ($possiblePattern->length > 0) {
$numberDesc->setPossibleNumberPattern($possiblePattern->item(0)->firstChild->nodeValue);
}
$validPattern = $element->getElementsByTagName(self::NATIONAL_NUMBER_PATTERN);
if ($validPattern->length > 0) {
$numberDesc->setNationalNumberPattern($validPattern->item(0)->firstChild->nodeValue);
}
if (!self::$liteBuild) {
$exampleNumber = $element->getElementsByTagName(self::EXAMPLE_NUMBER);
if ($exampleNumber->length > 0) {
$numberDesc->setExampleNumber($exampleNumber->item(0)->firstChild->nodeValue);
}
}
}
return $numberDesc;
}