Seditio Source
Root |
./othercms/PHPFusion 9.10.20/includes/classes/PHPFusion/Geomap.php
<?php
/*-------------------------------------------------------+
| PHPFusion Content Management System
| Copyright (C) PHP Fusion Inc
| https://phpfusion.com/
+--------------------------------------------------------+
| Filename: Geomap.php
| Author: Frederick MC Chan (Chan)
+--------------------------------------------------------+
| This program is released as free software under the
| Affero GPL license. You can redistribute it and/or
| modify it under the terms of this license which you
| can read by viewing the included agpl.txt or online
| at www.gnu.org/licenses/agpl.html. Removal of this
| copyright header is strictly prohibited without
| written permission from the original author(s).
+--------------------------------------------------------*/
namespace PHPFusion;

/**
 * Class Geomap
 *
 * @package PHPFusion
 */
class Geomap {

    public static
$country_list = [];
    public static
$currency_list = [];

   
/**
     * @param string $country
     *
     * @return array|mixed|null
     */
   
public function callingCodes($country = NULL) {
       
$countries = [];

        require_once
INCLUDES.'geomap/geo.countries.php';

        if (
$country !== NULL) {
            foreach (
$countries as $country_arr) {
                if (
$country_arr['code'] == $country) {
                    return
$country_arr['prefix'];
                }
            }
            return
NULL;
        }

        return
array_map(function ($value) {
            return
$value['prefix'];
        },
$countries);
    }

   
/**
     * @return mixed|string
     * @todo: countries.json information to geo.countries.php
     */
   
private function getCountryResource() {
       
$map_repo = file_get_contents(INCLUDES.'geomap/countries.json');

        return
json_decode($map_repo);
    }

   
/**
     * Returns countries
     *
     * @param string $country_code ISO cca2 code / returns array if NULL
     *
     * @return array|null
     */
   
function currency($country_code = NULL) {
       
$locale = fusion_get_locale("", LOCALE.LOCALESET.'currency.php');

        if (empty(
self::$currency_list)) {

            foreach (
self::getCountryResource() as $object) {
                if (
$object->name->common !== 'Antarctica') {
                    if (
$country_code == $object->currency[0]) {
                        break;
                    }
                   
$currency_symbol = isset($locale['currency_symbol'][$object->currency[0]]) ? $locale['currency_symbol'][$object->currency[0]] : "$";
                   
self::$currency_list[$object->currency[0]] = $locale['currency'][$object->currency[0]]." (".$currency_symbol.")";
                }
            }
        }

        if (
$country_code !== NULL) {
            return isset(
self::$currency_list[$country_code]) ? self::$currency_list[$country_code] : $locale['na'];
        } else {
            return
array_filter(self::$currency_list);
        }
    }

   
/**
     * Returns a locale from a country code that is provided.
     * I have not thought of an implementation benefits out of this yet.
     *
     * @param string $country_code  ISO 3166-2-alpha 2 country code
     * @param string $language_code ISO 639-1-alpha 2 language code
     *
     * @returns string a locale, formatted like en_US, or null if not found
     */
   
public static function countryCodeLoLocale($country_code, $language_code = '') {
       
$locales = [
           
'af-ZA',
           
'am-ET',
           
'ar-AE',
           
'ar-BH',
           
'ar-DZ',
           
'ar-EG',
           
'ar-IQ',
           
'ar-JO',
           
'ar-KW',
           
'ar-LB',
           
'ar-LY',
           
'ar-MA',
           
'arn-CL',
           
'ar-OM',
           
'ar-QA',
           
'ar-SA',
           
'ar-SY',
           
'ar-TN',
           
'ar-YE',
           
'as-IN',
           
'az-Cyrl-AZ',
           
'az-Latn-AZ',
           
'ba-RU',
           
'be-BY',
           
'bg-BG',
           
'bn-BD',
           
'bn-IN',
           
'bo-CN',
           
'br-FR',
           
'bs-Cyrl-BA',
           
'bs-Latn-BA',
           
'ca-ES',
           
'co-FR',
           
'cs-CZ',
           
'cy-GB',
           
'da-DK',
           
'de-AT',
           
'de-CH',
           
'de-DE',
           
'de-LI',
           
'de-LU',
           
'dsb-DE',
           
'dv-MV',
           
'el-GR',
           
'en-029',
           
'en-AU',
           
'en-BZ',
           
'en-CA',
           
'en-GB',
           
'en-IE',
           
'en-IN',
           
'en-JM',
           
'en-MY',
           
'en-NZ',
           
'en-PH',
           
'en-SG',
           
'en-TT',
           
'en-US',
           
'en-ZA',
           
'en-ZW',
           
'es-AR',
           
'es-BO',
           
'es-CL',
           
'es-CO',
           
'es-CR',
           
'es-DO',
           
'es-EC',
           
'es-ES',
           
'es-GT',
           
'es-HN',
           
'es-MX',
           
'es-NI',
           
'es-PA',
           
'es-PE',
           
'es-PR',
           
'es-PY',
           
'es-SV',
           
'es-US',
           
'es-UY',
           
'es-VE',
           
'et-EE',
           
'eu-ES',
           
'fa-IR',
           
'fi-FI',
           
'fil-PH',
           
'fo-FO',
           
'fr-BE',
           
'fr-CA',
           
'fr-CH',
           
'fr-FR',
           
'fr-LU',
           
'fr-MC',
           
'fy-NL',
           
'ga-IE',
           
'gd-GB',
           
'gl-ES',
           
'gsw-FR',
           
'gu-IN',
           
'ha-Latn-NG',
           
'he-IL',
           
'hi-IN',
           
'hr-BA',
           
'hr-HR',
           
'hsb-DE',
           
'hu-HU',
           
'hy-AM',
           
'id-ID',
           
'ig-NG',
           
'ii-CN',
           
'is-IS',
           
'it-CH',
           
'it-IT',
           
'iu-Cans-CA',
           
'iu-Latn-CA',
           
'ja-JP',
           
'ka-GE',
           
'kk-KZ',
           
'kl-GL',
           
'km-KH',
           
'kn-IN',
           
'kok-IN',
           
'ko-KR',
           
'ky-KG',
           
'lb-LU',
           
'lo-LA',
           
'lt-LT',
           
'lv-LV',
           
'mi-NZ',
           
'mk-MK',
           
'ml-IN',
           
'mn-MN',
           
'mn-Mong-CN',
           
'moh-CA',
           
'mr-IN',
           
'ms-BN',
           
'ms-MY',
           
'mt-MT',
           
'nb-NO',
           
'ne-NP',
           
'nl-BE',
           
'nl-NL',
           
'nn-NO',
           
'nso-ZA',
           
'oc-FR',
           
'or-IN',
           
'pa-IN',
           
'pl-PL',
           
'prs-AF',
           
'ps-AF',
           
'pt-BR',
           
'pt-PT',
           
'qut-GT',
           
'quz-BO',
           
'quz-EC',
           
'quz-PE',
           
'rm-CH',
           
'ro-RO',
           
'ru-RU',
           
'rw-RW',
           
'sah-RU',
           
'sa-IN',
           
'se-FI',
           
'se-NO',
           
'se-SE',
           
'si-LK',
           
'sk-SK',
           
'sl-SI',
           
'sma-NO',
           
'sma-SE',
           
'smj-NO',
           
'smj-SE',
           
'smn-FI',
           
'sms-FI',
           
'sq-AL',
           
'sr-Cyrl-BA',
           
'sr-Cyrl-CS',
           
'sr-Cyrl-ME',
           
'sr-Cyrl-RS',
           
'sr-Latn-BA',
           
'sr-Latn-CS',
           
'sr-Latn-ME',
           
'sr-Latn-RS',
           
'sv-FI',
           
'sv-SE',
           
'sw-KE',
           
'syr-SY',
           
'ta-IN',
           
'te-IN',
           
'tg-Cyrl-TJ',
           
'th-TH',
           
'tk-TM',
           
'tn-ZA',
           
'tr-TR',
           
'tt-RU',
           
'tzm-Latn-DZ',
           
'ug-CN',
           
'uk-UA',
           
'ur-PK',
           
'uz-Cyrl-UZ',
           
'uz-Latn-UZ',
           
'vi-VN',
           
'wo-SN',
           
'xh-ZA',
           
'yo-NG',
           
'zh-CN',
           
'zh-HK',
           
'zh-MO',
           
'zh-SG',
           
'zh-TW',
           
'zu-ZA',];
        foreach (
$locales as $locale) {
           
$locale_region = locale_get_region($locale);
           
$locale_language = locale_get_primary_language($locale);
           
$locale_array = [
               
'language' => $locale_language,
               
'region'   => $locale_region
           
];
            if (
strtoupper($country_code) == $locale_region &&
               
$language_code == '') {
                return
locale_compose($locale_array);
            } else if (
strtoupper($country_code) == $locale_region &&
               
strtolower($language_code) == $locale_language) {
                return
locale_compose($locale_array);
            }
        }
        return
NULL;
    }
}