diff --git a/main/inc/lib/api.lib.php b/main/inc/lib/api.lib.php index a1ac0a74a8..8eafc9fdb3 100644 --- a/main/inc/lib/api.lib.php +++ b/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() { @@ -1289,29 +1291,58 @@ function api_get_navigator() if (strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false) { $navigator = 'Opera'; 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) { $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) { $navigator = 'Chrome'; 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'; - 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']); + if (stripos($_SERVER['HTTP_USER_AGENT'], 'Version/') !== false) { + // If this Safari does have the "Version/" string in its user agent + // then use that as a version indicator rather than what's after + // "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) { $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) { $navigator = 'Konqueror'; list(, $version) = explode('Konqueror', $_SERVER['HTTP_USER_AGENT']); + } elseif (stripos($_SERVER['HTTP_USER_AGENT'], 'applewebkit') !== false) { $navigator = 'AppleWebKit'; 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) { $version = number_format(doubleval($version), 1); } @@ -4842,6 +4873,7 @@ function api_get_language_from_type($lang_type) * @param int $languageId * * @return array + * @throws Exception */ function api_get_language_info($languageId) { @@ -5239,6 +5271,7 @@ function copyr($source, $dest, $exclude = [], $copied_files = []) * @param string $pathname * @param string $base_path_document * @param int $session_id + * @return null */ function copy_folder_course_session( $pathname,