Fix issue with browser name and version detection

pull/2539/head
Yannick Warnier 8 years ago
parent 1d5a89126a
commit d231d45c20
  1. 51
      main/inc/lib/api.lib.php

@ -1275,7 +1275,9 @@ function api_block_anonymous_users($printHeaders = true)
} }
/** /**
* @return array with the navigator name and version * Returns a rough evaluation of the browser's name and version based on very
* simple regexp.
* @return array with the navigator name and version ['name' => '...', 'version' => '...']
*/ */
function api_get_navigator() function api_get_navigator()
{ {
@ -1289,29 +1291,58 @@ function api_get_navigator()
if (strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false) { if (strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false) {
$navigator = 'Opera'; $navigator = 'Opera';
list(, $version) = explode('Opera', $_SERVER['HTTP_USER_AGENT']); list(, $version) = explode('Opera', $_SERVER['HTTP_USER_AGENT']);
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Edge') !== false) {
$navigator = 'Edge';
list(, $version) = explode('Edge', $_SERVER['HTTP_USER_AGENT']);
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) {
$navigator = 'Internet Explorer'; $navigator = 'Internet Explorer';
list(, $version) = explode('MSIE', $_SERVER['HTTP_USER_AGENT']); list(, $version) = explode('MSIE ', $_SERVER['HTTP_USER_AGENT']);
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== false) { } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== false) {
$navigator = 'Chrome'; $navigator = 'Chrome';
list(, $version) = explode('Chrome', $_SERVER['HTTP_USER_AGENT']); list(, $version) = explode('Chrome', $_SERVER['HTTP_USER_AGENT']);
} elseif (stripos($_SERVER['HTTP_USER_AGENT'], 'safari') !== false) {
} elseif (stripos($_SERVER['HTTP_USER_AGENT'], 'Safari') !== false) {
$navigator = 'Safari'; $navigator = 'Safari';
list(, $version) = explode('Version/', $_SERVER['HTTP_USER_AGENT']); if (stripos($_SERVER['HTTP_USER_AGENT'], 'Version/') !== false) {
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Gecko') !== false) { // If this Safari does have the "Version/" string in its user agent
$navigator = 'Mozilla'; // then use that as a version indicator rather than what's after
list(, $version) = explode('; rv:', $_SERVER['HTTP_USER_AGENT']); // "Safari/" which is rather a "build number" or something
list(, $version) = explode('Version/', $_SERVER['HTTP_USER_AGENT']);
} else {
list(, $version) = explode('Safari/', $_SERVER['HTTP_USER_AGENT']);
}
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') !== false) {
$navigator = 'Firefox';
list(, $version) = explode('Firefox', $_SERVER['HTTP_USER_AGENT']);
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Netscape') !== false) { } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Netscape') !== false) {
$navigator = 'Netscape'; $navigator = 'Netscape';
list(, $version) = explode('Netscape', $_SERVER['HTTP_USER_AGENT']); if (stripos($_SERVER['HTTP_USER_AGENT'], 'Netscape/') !== false) {
list(, $version) = explode('Netscape', $_SERVER['HTTP_USER_AGENT']);
} else {
list(, $version) = explode('Navigator', $_SERVER['HTTP_USER_AGENT']);
}
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Konqueror') !== false) { } elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Konqueror') !== false) {
$navigator = 'Konqueror'; $navigator = 'Konqueror';
list(, $version) = explode('Konqueror', $_SERVER['HTTP_USER_AGENT']); list(, $version) = explode('Konqueror', $_SERVER['HTTP_USER_AGENT']);
} elseif (stripos($_SERVER['HTTP_USER_AGENT'], 'applewebkit') !== false) { } elseif (stripos($_SERVER['HTTP_USER_AGENT'], 'applewebkit') !== false) {
$navigator = 'AppleWebKit'; $navigator = 'AppleWebKit';
list(, $version) = explode('Version/', $_SERVER['HTTP_USER_AGENT']); list(, $version) = explode('Version/', $_SERVER['HTTP_USER_AGENT']);
} elseif (strpos($_SERVER['HTTP_USER_AGENT'], 'Gecko') !== false) {
$navigator = 'Mozilla';
list(, $version) = explode('; rv:', $_SERVER['HTTP_USER_AGENT']);
} }
$version = str_replace('/', '', $version);
// Now cut extra stuff around (mostly *after*) the version number
$version = preg_replace('/^([\/\s])?([\d\.]+)?.*/', '\2', $version);
if (strpos($version, '.') === false) { if (strpos($version, '.') === false) {
$version = number_format(doubleval($version), 1); $version = number_format(doubleval($version), 1);
} }
@ -4842,6 +4873,7 @@ function api_get_language_from_type($lang_type)
* @param int $languageId * @param int $languageId
* *
* @return array * @return array
* @throws Exception
*/ */
function api_get_language_info($languageId) function api_get_language_info($languageId)
{ {
@ -5239,6 +5271,7 @@ function copyr($source, $dest, $exclude = [], $copied_files = [])
* @param string $pathname * @param string $pathname
* @param string $base_path_document * @param string $base_path_document
* @param int $session_id * @param int $session_id
* @return null
*/ */
function copy_folder_course_session( function copy_folder_course_session(
$pathname, $pathname,

Loading…
Cancel
Save