PluginProbe
PayPlug for WooCommerce (Official) / 1.0.20
PayPlug for WooCommerce (Official) v1.0.20
3.0.0 2.18.0 1.0.17 1.0.18 1.0.19 1.0.20 1.0.21 1.0.22 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.1.0 1.10.0 1.10.1 1.2.1 1.2.10 1.2.11 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 All 101 releases
payplug / lib / libphonenumber / MultiFileMetadataSourceImpl.php

MultiFileMetadataSourceImpl.php in PayPlug for WooCommerce (Official) 1.0.20, at lib/libphonenumber/MultiFileMetadataSourceImpl.php

108 lines 3.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 *
4 *
5 * @author joshuag
6 * @created: 04/08/2015 09:03
7 * @project libphonenumber-for-php
8 */
9
10 namespace libphonenumber;
11
12 class MultiFileMetadataSourceImpl implements MetadataSourceInterface
13 {
14 protected static $metaDataFilePrefix = PhoneNumberUtil::META_DATA_FILE_PREFIX;
15
16 /**
17 * A mapping from a region code to the PhoneMetadata for that region.
18 * @var PhoneMetadata[]
19 */
20 protected $regionToMetadataMap = array();
21
22 /**
23 * A mapping from a country calling code for a non-geographical entity to the PhoneMetadata for
24 * that country calling code. Examples of the country calling codes include 800 (International
25 * Toll Free Service) and 808 (International Shared Cost Service).
26 * @var PhoneMetadata[]
27 */
28 protected $countryCodeToNonGeographicalMetadataMap = array();
29
30 /**
31 * The prefix of the metadata files from which region data is loaded.
32 * @var String
33 */
34 protected $currentFilePrefix;
35
36
37 /**
38 * The metadata loader used to inject alternative metadata sources.
39 * @var MetadataLoaderInterface
40 */
41 protected $metadataLoader;
42
43 /**
44 * @param MetadataLoaderInterface $metadataLoader
45 * @param string|null $currentFilePrefix
46 */
47 public function __construct(MetadataLoaderInterface $metadataLoader, $currentFilePrefix = null)
48 {
49 if ($currentFilePrefix === null) {
50 $currentFilePrefix = static::$metaDataFilePrefix;
51 }
52
53 $this->currentFilePrefix = $currentFilePrefix;
54 $this->metadataLoader = $metadataLoader;
55 }
56
57 /**
58 * @inheritdoc
59 */
60 public function getMetadataForRegion($regionCode)
61 {
62 if (!array_key_exists($regionCode, $this->regionToMetadataMap)) {
63 // The regionCode here will be valid and won't be '001', so we don't need to worry about
64 // what to pass in for the country calling code.
65 $this->loadMetadataFromFile($this->currentFilePrefix, $regionCode, 0, $this->metadataLoader);
66 }
67
68 return $this->regionToMetadataMap[$regionCode];
69 }
70
71 /**
72 * @inheritdoc
73 */
74 public function getMetadataForNonGeographicalRegion($countryCallingCode)
75 {
76 if (!array_key_exists($countryCallingCode, $this->countryCodeToNonGeographicalMetadataMap)) {
77 $this->loadMetadataFromFile($this->currentFilePrefix, PhoneNumberUtil::REGION_CODE_FOR_NON_GEO_ENTITY, $countryCallingCode, $this->metadataLoader);
78 }
79
80 return $this->countryCodeToNonGeographicalMetadataMap[$countryCallingCode];
81 }
82
83 /**
84 * @param string $filePrefix
85 * @param string $regionCode
86 * @param int $countryCallingCode
87 * @param MetadataLoaderInterface $metadataLoader
88 * @throws \RuntimeException
89 */
90 public function loadMetadataFromFile($filePrefix, $regionCode, $countryCallingCode, MetadataLoaderInterface $metadataLoader)
91 {
92 $isNonGeoRegion = PhoneNumberUtil::REGION_CODE_FOR_NON_GEO_ENTITY === $regionCode;
93 $fileName = $filePrefix . '_' . ($isNonGeoRegion ? $countryCallingCode : $regionCode) . '.php';
94 if (!is_readable($fileName)) {
95 throw new \RuntimeException('missing metadata: ' . $fileName);
96 }
97
98 $data = $metadataLoader->loadMetadata($fileName);
99 $metadata = new PhoneMetadata();
100 $metadata->fromArray($data);
101 if ($isNonGeoRegion) {
102 $this->countryCodeToNonGeographicalMetadataMap[$countryCallingCode] = $metadata;
103 } else {
104 $this->regionToMetadataMap[$regionCode] = $metadata;
105 }
106 }
107 }
108