Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\CoreBundle\Helper; | |
| use Symfony\Component\Intl\Countries; | |
| class MapHelper | |
| { | |
| /** | |
| * @param array<string, int> $legendValues | |
| */ | |
| public static function getOptionLegendText(string $legendText, array $legendValues): string | |
| { | |
| return str_replace(array_keys($legendValues), array_values($legendValues), $legendText); | |
| } | |
| /** | |
| * @param array<string, array<int, array<string, int|string>>> $statsCountries | |
| * @param array<string, array<string, string>> $mapOptions | |
| * | |
| * @return array<int, array<string, mixed>> | |
| */ | |
| public static function buildMapData(array $statsCountries, array $mapOptions, string $legendText): array | |
| { | |
| foreach ($mapOptions as $key => $value) { | |
| $mappedData = empty($statsCountries[$key]) ? [] : self::mapCountries($statsCountries[$key], $key); | |
| $result[] = [ | |
| 'data' => $mappedData['data'] ?? [], | |
| 'label' => $value['label'], | |
| 'legendText' => MapHelper::getOptionLegendText( | |
| $legendText, | |
| [ | |
| '%total' => $mappedData['total'] ?? 0, | |
| '%withCountry' => $mappedData['totalWithCountry'] ?? 0, | |
| ] | |
| ), | |
| 'unit' => $value['unit'], | |
| ]; | |
| } | |
| return $result ?? []; | |
| } | |
| /** | |
| * @param array<int, array<string, int|string>> $stats | |
| * | |
| * @return array<string, int|array<string, int>> | |
| */ | |
| public static function mapCountries(array $stats, string $countKey): array | |
| { | |
| $countries = array_flip(Countries::getNames('en')); | |
| $results = [ | |
| 'data' => [], | |
| 'total' => 0, | |
| 'totalWithCountry' => 0, | |
| ]; | |
| foreach ($stats as $s) { | |
| $countryName = $s['country']; | |
| $results['total'] += $s[$countKey]; | |
| if (isset($countries[$countryName])) { | |
| $countryCode = $countries[$countryName]; | |
| if (!empty($s[$countKey])) { | |
| $results['data'][$countryCode] = (int) $s[$countKey]; | |
| } | |
| $results['totalWithCountry'] += $s[$countKey]; | |
| } | |
| } | |
| return $results; | |
| } | |
| } | |