Index: grade/report/grader/lib.php =================================================================== --- grade/report/grader/lib.php (revision 1.208) +++ grade/report/grader/lib.php (revision ) @@ -1531,7 +1531,8 @@ check_browser_version('Gecko', '2006010100') || check_browser_version('Camino', '1.0') || check_browser_version('Opera', '6.0') || - check_browser_version('Safari', '2.0')); + check_browser_version('Chrome', '6') || + check_browser_version('Safari', '300')); } /** Index: lib/moodlelib.php =================================================================== --- lib/moodlelib.php (revision 1.1512) +++ lib/moodlelib.php (revision ) @@ -7497,10 +7497,10 @@ * * @uses $_SERVER * @param string $brand The browser identifier being tested - * @param int $version The version of the browser + * @param int $version The version of the browser, if not specified any version * @return bool true if the given version is below that of the detected browser */ - function check_browser_version($brand='MSIE', $version=5.5) { + function check_browser_version($brand, $version = null) { if (empty($_SERVER['HTTP_USER_AGENT'])) { return false; } @@ -7509,8 +7509,13 @@ switch ($brand) { - case 'Camino': /// Mozilla Firefox browsers - + case 'Camino': /// OSX browser using Gecke engine + if (strpos($agent, 'Camino') === false) { + return false; + } + if (empty($version)) { + return true; // no version specified + } if (preg_match("/Camino\/([0-9\.]+)/i", $agent, $match)) { if (version_compare($match[1], $version) >= 0) { return true; @@ -7520,7 +7525,12 @@ case 'Firefox': /// Mozilla Firefox browsers - + if (strpos($agent, 'Iceweasel') === false and strpos($agent, 'Firefox') === false) { + return false; + } + if (empty($version)) { + return true; // no version specified + } if (preg_match("/(Iceweasel|Firefox)\/([0-9\.]+)/i", $agent, $match)) { if (version_compare($match[2], $version) >= 0) { return true; @@ -7530,8 +7540,7 @@ case 'Gecko': /// Gecko based browsers - - if (substr_count($agent, 'Camino')) { + if (empty($version) and substr_count($agent, 'Camino')) { // MacOS X Camino support $version = 20041110; } @@ -7547,8 +7556,11 @@ case 'MSIE': /// Internet Explorer + if (empty($version)) { + $version = 6; // anything older is not considered a browser at all! + } - if (strpos($agent, 'Opera')) { // Reject Opera + if (strpos($agent, 'Opera') !== false) { // Reject Opera return false; } $string = explode(';', $agent); @@ -7559,13 +7571,19 @@ if (!isset($string[0]) and !isset($string[1])) { return false; } - if ($string[0] == $brand and (float)$string[1] >= $version ) { + if ($string[0] === 'MSIE' and (float)$string[1] >= $version ) { return true; } break; - case 'Opera': /// Opera + case 'Opera': /// Opera + if (strpos($agent, 'Opera') === false) { + return false; + } + if (empty($version)) { + return true; // no version specified + } if (preg_match("/Opera\/([0-9\.]+)/i", $agent, $match)) { if (version_compare($match[1], $version) >= 0) { return true; @@ -7573,25 +7591,47 @@ } break; - case 'Safari': /// Safari - // Look for AppleWebKit, excluding strings with OmniWeb, Shiira and SimbianOS + + case 'Safari': /// Desktop or laptop Apple Safari browser + if (strpos($agent, 'AppleWebKit') === false) { + return false; + } + // Look for AppleWebKit, excluding strings with OmniWeb, Shiira and SimbianOS and any other mobile devices if (strpos($agent, 'OmniWeb')) { // Reject OmniWeb return false; - } elseif (strpos($agent, 'Shiira')) { // Reject Shiira + } + if (strpos($agent, 'Shiira')) { // Reject Shiira return false; - } elseif (strpos($agent, 'SimbianOS')) { // Reject SimbianOS + } + if (strpos($agent, 'SimbianOS')) { // Reject SimbianOS return false; } + if (strpos($agent, 'iPhone') or strpos($agent, 'iPad') or strpos($agent, 'iPod')) { + // No Apple mobile devices here - editor does not work, course ajax is not touch compatible, etc. + return false; + } + if (strpos($agent, 'Chrome')) { // Reject chrome browsers - it needs to be tested explicitly + return false; + } + if (empty($version)) { + return true; // no version specified + } if (preg_match("/AppleWebKit\/([0-9]+)/i", $agent, $match)) { if (version_compare($match[1], $version) >= 0) { return true; } } - break; + case 'Chrome': + if (strpos($agent, 'Chrome') === false) { + return false; + } + if (empty($version)) { + return true; // no version specified + } if (preg_match("/Chrome\/(.*)[ ]+/i", $agent, $match)) { if (version_compare($match[1], $version) >= 0) { return true; @@ -7599,22 +7639,34 @@ } break; + case 'Safari iOS': /// Safari on iPhone and iPad - if (strpos($agent, 'iPhone')) { - return true; + if (strpos($agent, 'AppleWebKit') === false or strpos($agent, 'Safari') === false) { + return false; } - if (strpos($agent, 'iPad')) { - return true; + if (!strpos($agent, 'iPhone') and !strpos($agent, 'iPad') and !strpos($agent, 'iPod')) { + return false; } - if (strpos($agent, 'iPod')) { + if (empty($version)) { + return true; // no version specified + } + if (preg_match("/AppleWebKit\/([0-9]+)/i", $agent, $match)) { + if (version_compare($match[1], $version) >= 0) { - return true; - } + return true; + } + } break; + case 'Android WebKit': /// WebKit browser on Android - if (strpos($agent, 'Linux; U; Android')) { - return true; + if (strpos($agent, 'Linux; U; Android') === false) { + return false; } + if (empty($version)) { + return true; // no version specified + } + //TODO: add version check here + return true; break; } @@ -7647,10 +7699,11 @@ $classes[] = "gecko{$matches[1]}{$matches[2]}"; } - } elseif (check_browser_version("Safari", 0)) { + } elseif (check_browser_version("Safari") || check_browser_version("Safari iOS") || check_browser_version("Chrome")) { + //TODO: this should be probably separated, but we need to tweak the themes $classes[] = 'safari'; - } elseif (check_browser_version("Opera", 0)) { + } elseif (check_browser_version("Opera")) { $classes[] = 'opera'; } Index: lib/editor/tinymce/lib.php =================================================================== --- lib/editor/tinymce/lib.php (revision 1.28) +++ lib/editor/tinymce/lib.php (revision ) @@ -31,19 +31,21 @@ public $version = '3.3.9.2'; public function supported_by_browser() { - if (check_browser_version('MSIE', 5.5)) { + if (check_browser_version('MSIE', 6)) { return true; - } else if (check_browser_version('Gecko', 20030516)) { + } + if (check_browser_version('Gecko', 20030516)) { return true; - } else if (check_browser_version('Safari iOS')) { - return false; - } else if (check_browser_version('Android WebKit')) { - return false; - } else if (check_browser_version('Safari', 3)) { + } + if (check_browser_version('Safari', 412)) { return true; - } else if (check_browser_version('Opera', 9)) { + } + if (check_browser_version('Chrome', 6)) { return true; } + if (check_browser_version('Opera', 9)) { + return true; + } return false; } Index: lib/ajax/ajaxlib.php =================================================================== --- lib/ajax/ajaxlib.php (revision 1.156) +++ lib/ajax/ajaxlib.php (revision ) @@ -71,8 +71,9 @@ $ff = check_browser_version('Gecko', 20051106); $op = check_browser_version('Opera', 9.0); $sa = check_browser_version('Safari', 412); + $ch = check_browser_version('Chrome', 6); - if (!$ie && !$ff && !$op && !$sa) { + if (!$ie && !$ff && !$op && !$sa && !$ch) { /** @see http://en.wikipedia.org/wiki/User_agent */ // Gecko build 20051107 is what is in Firefox 1.5. // We still have issues with AJAX in other browsers. Index: lib/simpletest/testmoodlelib.php =================================================================== --- lib/simpletest/testmoodlelib.php (revision 1.43) +++ lib/simpletest/testmoodlelib.php (revision ) @@ -65,6 +65,9 @@ '312' => array('Mac OS X' => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/312.1 (KHTML, like Gecko) Safari/312'), '2.0' => array('Mac OS X' => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/412 (KHTML, like Gecko) Safari/412') ), + 'Chrome' => array( + '8' => array('Mac OS X' => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.215 Safari/534.10'), + ), 'Opera' => array( '8.51' => array('Windows XP' => 'Opera/8.51 (Windows NT 5.1; U; en)'), '9.0' => array('Windows XP' => 'Opera/9.0 (Windows NT 5.1; U; en)', @@ -191,7 +194,15 @@ $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Safari']['2.0']['Mac OS X']; $this->assertTrue(check_browser_version('Safari', '312')); $this->assertFalse(check_browser_version('Safari', '500')); + $this->assertFalse(check_browser_version('Chrome')); + $this->assertFalse(check_browser_version('Safari iOS')); + $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Chrome']['8']['Mac OS X']; + $this->assertFalse(check_browser_version('Safari', '1')); + $this->assertTrue(check_browser_version('Chrome')); + $this->assertTrue(check_browser_version('Chrome', 8)); + $this->assertFalse(check_browser_version('Chrome', 10)); + $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Opera']['9.0']['Windows XP']; $this->assertTrue(check_browser_version('Opera', '8.0')); $this->assertFalse(check_browser_version('Opera', '10.0')); @@ -209,6 +220,9 @@ $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Safari']['2.0']['Mac OS X']; $this->assertEqual(array('safari'), get_browser_version_classes()); + $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Chrome']['8']['Mac OS X']; + $this->assertEqual(array('safari'), get_browser_version_classes()); + $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Opera']['9.0']['Windows XP']; $this->assertEqual(array('opera'), get_browser_version_classes()); @@ -451,7 +465,7 @@ // The string version of date comes from server locale setting and does // not respect user language, so it is necessary to reset that. $oldlocale = setlocale(LC_TIME, '0'); - setlocale(LC_TIME, 'en_AU.UTF-8'); + setlocale(LC_TIME, 'en_AU.UTF-8'); $ts = 1261540267; //the time this function was created