Merge branch 'w46_MDL-36481_m24_intranetie' of git://github.com/skodak/moodle

This commit is contained in:
Dan Poltawski 2012-11-12 10:17:34 +08:00
commit 9cb2b61621
4 changed files with 62 additions and 20 deletions

View File

@ -8543,17 +8543,25 @@ function check_php_version($version='5.2.4') {
if (strpos($agent, 'Opera') !== false) { // Reject Opera
return false;
}
// in case of IE we have to deal with BC of the version parameter
// In case of IE we have to deal with BC of the version parameter.
if (is_null($version)) {
$version = 5.5; // anything older is not considered a browser at all!
$version = 5.5; // Anything older is not considered a browser at all!
}
//see: http://www.useragentstring.com/pages/Internet%20Explorer/
// IE uses simple versions, let's cast it to float to simplify the logic here.
$version = round($version, 1);
// See: http://www.useragentstring.com/pages/Internet%20Explorer/
if (preg_match("/MSIE ([0-9\.]+)/", $agent, $match)) {
if (version_compare($match[1], $version) >= 0) {
return true;
}
$browser = $match[1];
} else {
return false;
}
// IE8 and later versions may pretend to be IE7 for intranet sites, use Trident version instead,
// the Trident should always describe the capabilities of IE in any emulation mode.
if ($browser === '7.0' and preg_match("/Trident\/([0-9\.]+)/", $agent, $match)) {
$browser = $match[1] + 4; // NOTE: Hopefully this will work also for future IE versions.
}
$browser = round($browser, 1);
return ($browser >= $version);
break;
@ -8831,14 +8839,11 @@ function get_browser_version_classes() {
if (check_browser_version("MSIE", "0")) {
$classes[] = 'ie';
if (check_browser_version("MSIE", 9)) {
$classes[] = 'ie9';
} else if (check_browser_version("MSIE", 8)) {
$classes[] = 'ie8';
} elseif (check_browser_version("MSIE", 7)) {
$classes[] = 'ie7';
} elseif (check_browser_version("MSIE", 6)) {
$classes[] = 'ie6';
for($i=12; $i>=6; $i--) {
if (check_browser_version("MSIE", $i)) {
$classes[] = 'ie'.$i;
break;
}
}
} else if (check_browser_version("Firefox") || check_browser_version("Gecko") || check_browser_version("Camino")) {

View File

@ -1120,7 +1120,7 @@ class theme_config {
if (empty($_SERVER['HTTP_USER_AGENT'])) {
// Can't be sure, just say no.
$this->usesvg = false;
} else if (preg_match('#MSIE +[5-8]\.#', $_SERVER['HTTP_USER_AGENT'])) {
} else if (check_browser_version('MSIE', 0) and !check_browser_version('MSIE', 9)) {
// IE < 9 doesn't support SVG. Say no.
$this->usesvg = false;
} else if (preg_match('#Android +[0-2]\.#', $_SERVER['HTTP_USER_AGENT'])) {

View File

@ -41,8 +41,10 @@ class moodlelib_testcase extends advanced_testcase {
'6.0' => array('Windows XP SP2' => 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)'),
'7.0' => array('Windows XP SP2' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; YPC 3.0.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)'),
'8.0' => array('Windows Vista' => 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.30; .NET CLR 3.0.04506.648)'),
'9.0' => array('Windows 7' => 'Mozilla/5.0 (Windows; U; MSIE 9.0; WIndows NT 9.0; en-US))'),
'9.0' => array('Windows 7' => 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)'),
'9.0i' => array('Windows 7' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)'),
'10.0' => array('Windows 8' => 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0; Touch)'),
'10.0i' => array('Windows 8' => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Trident/6.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0)'),
),
'Firefox' => array(
'1.0.6' => array('Windows XP' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.10) Gecko/20050716 Firefox/1.0.6'),
@ -253,6 +255,29 @@ class moodlelib_testcase extends advanced_testcase {
$this->assertTrue(check_browser_version('MSIE', '9.0'));
$this->assertFalse(check_browser_version('MSIE', '10'));
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['9.0i']['Windows 7'];
$this->assertTrue(check_browser_version('MSIE'));
$this->assertTrue(check_browser_version('MSIE', 0));
$this->assertTrue(check_browser_version('MSIE', '5.0'));
$this->assertTrue(check_browser_version('MSIE', '9.0'));
$this->assertFalse(check_browser_version('MSIE', '10'));
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['10.0']['Windows 8'];
$this->assertTrue(check_browser_version('MSIE'));
$this->assertTrue(check_browser_version('MSIE', 0));
$this->assertTrue(check_browser_version('MSIE', '5.0'));
$this->assertTrue(check_browser_version('MSIE', '9.0'));
$this->assertTrue(check_browser_version('MSIE', '10'));
$this->assertFalse(check_browser_version('MSIE', '11'));
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['10.0i']['Windows 8'];
$this->assertTrue(check_browser_version('MSIE'));
$this->assertTrue(check_browser_version('MSIE', 0));
$this->assertTrue(check_browser_version('MSIE', '5.0'));
$this->assertTrue(check_browser_version('MSIE', '9.0'));
$this->assertTrue(check_browser_version('MSIE', '10'));
$this->assertFalse(check_browser_version('MSIE', '11'));
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['2.0']['Windows XP'];
$this->assertTrue(check_browser_version('Firefox'));
$this->assertTrue(check_browser_version('Firefox', '1.5'));
@ -394,6 +419,18 @@ class moodlelib_testcase extends advanced_testcase {
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['8.0']['Windows Vista'];
$this->assertEquals(array('ie', 'ie8'), get_browser_version_classes());
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['9.0']['Windows 7'];
$this->assertEquals(array('ie', 'ie9'), get_browser_version_classes());
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['9.0i']['Windows 7'];
$this->assertEquals(array('ie', 'ie9'), get_browser_version_classes());
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['10.0']['Windows 8'];
$this->assertEquals(array('ie', 'ie10'), get_browser_version_classes());
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['10.0i']['Windows 8'];
$this->assertEquals(array('ie', 'ie10'), get_browser_version_classes());
$_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['2.0']['Windows XP'];
$this->assertEquals(array('gecko', 'gecko18'), get_browser_version_classes());

View File

@ -193,8 +193,8 @@ class theme_config_testcase extends advanced_testcase {
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)' => false,
// IE9 on Windows 7.
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)' => true,
// IE9 on Windows 7 in compatability mode.
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)' => false,
// IE9 on Windows 7 in intranet mode.
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)' => true,
// Chrome 11 on Windows.
'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.17 (KHTML, like Gecko) Chrome/11.0.652.0 Safari/534.17' => true,
// Chrome 22 on Windows.