forked from Wavyzz/dolibarr
FIX Remote ip detection was wrong with proxy (example: cloudflare)
This commit is contained in:
@@ -2665,6 +2665,20 @@ function dol_print_ip($ip,$mode=0)
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the IP of remote user.
|
||||
* Take HTTP_X_FORWARDED_FOR (defined when using proxy)
|
||||
* Then HTTP_CLIENT_IP if defined (rare)
|
||||
* Then REMOTE_ADDR (not way to be modified by user but may be wrong if using proxy)
|
||||
*
|
||||
* @return string Ip of remote user.
|
||||
*/
|
||||
function getUserRemoteIP()
|
||||
{
|
||||
$ip = $_SERVER['HTTP_X_FORWARDED_FOR']?$_SERVER['HTTP_X_FORWARDED_FOR']:(($_SERVER['HTTP_CLIENT_IP']?$_SERVER['HTTP_CLIENT_IP']:$_SERVER['REMOTE_ADDR']));
|
||||
return $ip;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a country code from IP. Empty string if not found.
|
||||
*
|
||||
@@ -2708,7 +2722,7 @@ function dol_user_country()
|
||||
$ret='';
|
||||
if (! empty($conf->geoipmaxmind->enabled))
|
||||
{
|
||||
$ip=$_SERVER["REMOTE_ADDR"];
|
||||
$ip=getUserRemoteIP();
|
||||
$datafile=$conf->global->GEOIPMAXMIND_COUNTRY_DATAFILE;
|
||||
//$ip='24.24.24.24';
|
||||
//$datafile='E:\Mes Sites\Web\Admin1\awstats\maxmind\GeoIP.dat';
|
||||
@@ -5783,7 +5797,7 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob
|
||||
'__USER_FIRSTNAME__' => (string) $user->firstname,
|
||||
'__USER_FULLNAME__' => (string) $user->getFullName($outputlangs),
|
||||
'__USER_SUPERVISOR_ID__' => (string) ($user->fk_user ? $user->fk_user : '0'),
|
||||
'__USER_REMOTE_IP__' => (string) $_SERVER['REMOTE_ADDR']
|
||||
'__USER_REMOTE_IP__' => (string) getUserRemoteIP()
|
||||
)
|
||||
);
|
||||
}
|
||||
@@ -6770,6 +6784,252 @@ function picto_from_langcode($codelang, $moreatt = '')
|
||||
return img_picto_common($codelang, 'flags/'.strtolower($flagImage).'.png', $moreatt);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return default language from country code
|
||||
*
|
||||
* @param string $countrycode Country code like 'US', 'FR', 'CA', ...
|
||||
* @return string Value of locale like 'en_US', 'fr_FR', ...
|
||||
*/
|
||||
function getLanguageCodeFromCountryCode($countrycode)
|
||||
{
|
||||
$countrycodetolanguage = array(
|
||||
'SA' => 'ar_AR',
|
||||
'DK' => 'da_DA',
|
||||
'CA' => 'en_CA',
|
||||
'SE' => 'sv_SV'
|
||||
);
|
||||
if (! empty($countrycodetolanguage[$countrycode])) return $countrycodetolanguage[$countrycode];
|
||||
|
||||
// Locale list taken from:
|
||||
// http://stackoverflow.com/questions/3191664/
|
||||
// list-of-all-locales-and-their-short-codes
|
||||
$locales = array(
|
||||
'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 = array('language' => $locale_language, 'region' => $locale_region);
|
||||
if (strtoupper($countrycode) == $locale_region)
|
||||
{
|
||||
return locale_compose($locale_array);
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Complete or removed entries into a head array (used to build tabs).
|
||||
* For example, with value added by external modules. Such values are declared into $conf->modules_parts['tab'].
|
||||
|
||||
Reference in New Issue
Block a user