### Eclipse Workspace Patch 1.0 #P moodle_18 Index: lib/ajax/ajaxlib.php =================================================================== RCS file: /cvsroot/moodle/moodle/lib/ajax/ajaxlib.php,v retrieving revision 1.36 diff -u -r1.36 ajaxlib.php --- lib/ajax/ajaxlib.php 12 Feb 2007 06:01:50 -0000 1.36 +++ lib/ajax/ajaxlib.php 1 Mar 2007 00:58:39 -0000 @@ -109,15 +109,21 @@ function ajaxenabled() { global $CFG, $USER; - - if (!check_browser_version('MSIE', 6.0) - && !check_browser_version('Gecko', 20051111)) { - // Gecko build 20051111 is what is in Firefox 1.5. + + $ie = check_browser_version('MSIE', 6.0); + $ff = check_browser_version('Gecko', 20051106); + $op = check_browser_version('Opera', 9.0); + $sa = check_browser_version('Safari', 412); + + if (!$ie && !$ff && !$op && !$sa) { + /** @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. return false; } if (!empty($CFG->enableajax) && (!empty($USER->ajax) || !isloggedin())) { + if ($sa) echo "your safari browser should support YUI"; return true; } else { return false; Index: lib/simpletest/testmoodlelib.php =================================================================== RCS file: /cvsroot/moodle/moodle/lib/simpletest/testmoodlelib.php,v retrieving revision 1.2.4.2 diff -u -r1.2.4.2 testmoodlelib.php --- lib/simpletest/testmoodlelib.php 28 Feb 2007 07:58:01 -0000 1.2.4.2 +++ lib/simpletest/testmoodlelib.php 1 Mar 2007 00:58:39 -0000 @@ -1,9 +1,34 @@ - array( - '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)') - ), - 'Firefox' => array( - '1.5' => array('Windows XP' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8) Gecko/20051107 Firefox/1.5'), - '2.0' => array('Windows XP' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1') - ), - 'Safari' => array( - '2.0' => array('Mac OS X' => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/412 (KHTML, like Gecko) Safari/412'), - '312' => array('Mac OS X' => 'Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-us) AppleWebKit/312.1 (KHTML, like Gecko) Safari/312') - ), - 'Opera' => array( - '9.0' => array('Windows XP' => 'Opera/9.0 (Windows NT 5.1; U; en)') - ) - ); - function setUp() { } @@ -80,22 +81,25 @@ */ function test_check_browser_version() { - $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Safari']['2.0']['Mac OS X']; + require_once($CFG->libdir . '/simpletest/fixtures/user_agents.php'); + + $_SERVER['HTTP_USER_AGENT'] = $user_agents['Safari']['2.0']['Mac OS X']; + var_dump($_SERVER['HTTP_USER_AGENT']); $this->assertTrue(check_browser_version('Safari', '312')); $this->assertFalse(check_browser_version('Safari', '500')); - $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Opera']['9.0']['Windows XP']; + $_SERVER['HTTP_USER_AGENT'] = $user_agents['Opera']['9.0']['Windows XP']; $this->assertTrue(check_browser_version('Opera', '8.0')); $this->assertFalse(check_browser_version('Opera', '10.0')); - $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['MSIE']['6.0']['Windows XP SP2']; + $_SERVER['HTTP_USER_AGENT'] = $user_agents['MSIE']['6.0']['Windows XP SP2']; $this->assertTrue(check_browser_version('MSIE', '5.0')); $this->assertFalse(check_browser_version('MSIE', '7.0')); - $_SERVER['HTTP_USER_AGENT'] = $this->user_agents['Firefox']['2.0']['Windows XP']; + $_SERVER['HTTP_USER_AGENT'] = $user_agents['Firefox']['2.0']['Windows XP']; $this->assertTrue(check_browser_version('Firefox', '1.5')); $this->assertFalse(check_browser_version('Firefox', '3.0')); - } + } } ?> Index: lib/moodlelib.php =================================================================== RCS file: /cvsroot/moodle/moodle/lib/moodlelib.php,v retrieving revision 1.837.2.10 diff -u -r1.837.2.10 moodlelib.php --- lib/moodlelib.php 28 Feb 2007 07:39:46 -0000 1.837.2.10 +++ lib/moodlelib.php 1 Mar 2007 00:58:39 -0000 @@ -5157,15 +5157,14 @@ break; case 'Safari': /// Safari - // Look for AppleWebKit, excluding strings with OmniWeb, Shiira and SimbianOS + if (strpos($agent, 'OmniWeb')) { // Reject OmniWeb return false; } elseif (strpos($agent, 'Shiira')) { // Reject Shiira return false; } elseif (strpos($agent, 'SimbianOS')) { // Reject SimbianOS return false; - } - + } if (preg_match("/AppleWebKit\/([0-9]+)/i", $agent, $match)) { if (version_compare($match[1], $version) >= 0) { Index: lib/simpletest/fixtures/user_agents.php =================================================================== RCS file: lib/simpletest/fixtures/user_agents.php diff -N lib/simpletest/fixtures/user_agents.php --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lib/simpletest/fixtures/user_agents.php 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,57 @@ + array( + '5.5' => array('Windows 2000' => 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)'), + '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)') + ), + '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'), + '1.5' => array('Windows XP' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; nl; rv:1.8) Gecko/20051107 Firefox/1.5'), + '1.5.0.1' => array('Windows XP' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1'), + '2.0' => array('Windows XP' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1', + 'Ubuntu Linux AMD64' => 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.1) Gecko/20060601 Firefox/2.0 (Ubuntu-edgy)') + ), + 'Safari' => array( + '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') + ), + '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)', + 'Debian Linux' => 'Opera/9.01 (X11; Linux i686; U; en)') + ) +); +?> Index: lib/simpletest/testajaxlib.php =================================================================== RCS file: lib/simpletest/testajaxlib.php diff -N lib/simpletest/testajaxlib.php --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ lib/simpletest/testajaxlib.php 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,93 @@ +libdir . '/simpletestlib.php'); +require_once($CFG->libdir . '/moodlelib.php'); +require_once($CFG->libdir . '/ajax/ajaxlib.php'); + +class ajaxlib_test extends UnitTestCase { + + function setUp() { + } + + function tearDown() { + } + + /** + * Uses the array of user agents to test ajax_lib::ajaxenabled + */ + function test_ajaxenabled() + { + global $CFG, $USER; + $CFG->enableajax = true; + $USER->ajax = true; + + require_once($CFG->libdir . '/simpletest/fixtures/user_agents.php'); + + // Should be true + $_SERVER['HTTP_USER_AGENT'] = $user_agents['Firefox']['2.0']['Windows XP']; + $this->assertTrue(ajaxenabled()); + + $_SERVER['HTTP_USER_AGENT'] = $user_agents['Firefox']['1.5']['Windows XP']; + $this->assertTrue(ajaxenabled()); + + $_SERVER['HTTP_USER_AGENT'] = $user_agents['Safari']['2.0']['Mac OS X']; + $this->assertTrue(ajaxenabled()); + + $_SERVER['HTTP_USER_AGENT'] = $user_agents['Opera']['9.0']['Windows XP']; + $this->assertTrue(ajaxenabled()); + + $_SERVER['HTTP_USER_AGENT'] = $user_agents['MSIE']['6.0']['Windows XP SP2']; + $this->assertTrue(ajaxenabled()); + + // Should be false + $_SERVER['HTTP_USER_AGENT'] = $user_agents['Firefox']['1.0.6']['Windows XP']; + $this->assertFalse(ajaxenabled()); + + $_SERVER['HTTP_USER_AGENT'] = $user_agents['Safari']['312']['Mac OS X']; + $this->assertFalse(ajaxenabled()); + + $_SERVER['HTTP_USER_AGENT'] = $user_agents['Opera']['8.51']['Windows XP']; + $this->assertFalse(ajaxenabled()); + + $_SERVER['HTTP_USER_AGENT'] = $user_agents['MSIE']['5.5']['Windows 2000']; + $this->assertFalse(ajaxenabled()); + } +} + +?>