diff --git a/htdocs/admin/system/browser.php b/htdocs/admin/system/browser.php index 58601c6e998cc25e7b3aefe4dc41ff26d721f63b..a25ca7b162228900571b385c0ff3ae18cd3f4e45 100644 --- a/htdocs/admin/system/browser.php +++ b/htdocs/admin/system/browser.php @@ -44,7 +44,7 @@ llxHeader(); print_fiche_titre($langs->trans("InfoBrowser"),'','setup'); -$tmp=getBrowserInfo(); +$tmp=getBrowserInfo($_SERVER["HTTP_USER_AGENT"]); // Browser $var=true; diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 537cf68986b0f8a16467868987bc710287f05f22..f1590a1be5749f1ad70d9d4ab013be6a9865034c 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -125,38 +125,40 @@ function getEntity($element=false, $shared=false) /** * Return information about user browser * + * @param string $user_agent Content of $_SERVER["HTTP_USER_AGENT"] variable * @return array Array of information ('browsername'=>,'browseros'=>,'browserversion'=>,'layout'=>(classic|phone|tablet)) */ -function getBrowserInfo() +function getBrowserInfo($user_agent) { $name='unknown'; $version=''; $os='unknown'; $phone=''; $tablet=''; // If phone/smartphone, we set phone os name. - if (preg_match('/android/i',$_SERVER["HTTP_USER_AGENT"])) { $os=$phone='android'; } - elseif (preg_match('/blackberry/i',$_SERVER["HTTP_USER_AGENT"])) { $os=$phone='blackberry'; } - elseif (preg_match('/iphone/i',$_SERVER["HTTP_USER_AGENT"])) { $os='ios'; $phone='iphone'; } - elseif (preg_match('/ipod/i',$_SERVER["HTTP_USER_AGENT"])) { $os='ios'; $phone='iphone'; } - elseif (preg_match('/palm/i',$_SERVER["HTTP_USER_AGENT"])) { $os=$phone='palm'; } - elseif (preg_match('/symbian/i',$_SERVER["HTTP_USER_AGENT"])) { $os='symbian'; $phone='unknown'; } - elseif (preg_match('/webos/i',$_SERVER["HTTP_USER_AGENT"])) { $os='webos'; $phone='unknown'; } - elseif (preg_match('/maemo/i',$_SERVER["HTTP_USER_AGENT"])) { $os='maemo'; $phone='unknown'; } + if (preg_match('/android/i', $user_agent)) { $os=$phone='android'; } + elseif (preg_match('/blackberry/i', $user_agent)) { $os=$phone='blackberry'; } + elseif (preg_match('/iphone/i', $user_agent)) { $os='ios'; $phone='iphone'; } + elseif (preg_match('/ipod/i', $user_agent)) { $os='ios'; $phone='iphone'; } + elseif (preg_match('/palm/i', $user_agent)) { $os=$phone='palm'; } + elseif (preg_match('/symbian/i', $user_agent)) { $os='symbian'; $phone='unknown'; } + elseif (preg_match('/webos/i', $user_agent)) { $os='webos'; $phone='unknown'; } + elseif (preg_match('/maemo/i', $user_agent)) { $os='maemo'; $phone='unknown'; } // MS products at end - elseif (preg_match('/iemobile/i',$_SERVER["HTTP_USER_AGENT"])) { $os='windows'; $phone='unkown'; } - elseif (preg_match('/windows ce/i',$_SERVER["HTTP_USER_AGENT"])) { $os='windows'; $phone='unkown'; } + elseif (preg_match('/iemobile/i', $user_agent)) { $os='windows'; $phone='unkown'; } + elseif (preg_match('/windows ce/i', $user_agent)) { $os='windows'; $phone='unkown'; } // OS - if (preg_match('/android/i',$_SERVER["HTTP_USER_AGENT"])) { $os='android'; } - elseif (preg_match('/linux/i',$_SERVER["HTTP_USER_AGENT"])) { $os='linux'; } + if (preg_match('/android/i', $user_agent)) { $os='android'; } + elseif (preg_match('/linux/i', $user_agent)) { $os='linux'; } // Name - if (preg_match('/firefox(\/|\s)([\d\.]*)/i', $_SERVER["HTTP_USER_AGENT"], $reg)) { $name='firefox'; $version=$reg[2]; } - elseif (preg_match('/chrome(\/|\s)([\d\.]+)/i', $_SERVER["HTTP_USER_AGENT"], $reg)) { $name='chrome'; $version=$reg[2]; } // we can have 'chrome (Mozilla...) chrome x.y' in one string - elseif (preg_match('/chrome/i', $_SERVER["HTTP_USER_AGENT"], $reg)) { $name='chrome'; } - elseif (preg_match('/iceweasel/i',$_SERVER["HTTP_USER_AGENT"])) { $name='iceweasel'; $version=$reg[2]; } - elseif (preg_match('/epiphany/i',$_SERVER["HTTP_USER_AGENT"])) { $name='epiphany'; $version=$reg[2]; } - elseif ((empty($phone) || preg_match('/iphone/i',$_SERVER["HTTP_USER_AGENT"])) && preg_match('/safari(\/|\s)([\d\.]*)/i',$_SERVER["HTTP_USER_AGENT"], $reg)) { $name='safari'; $version=$reg[2]; } // Safari is often present in string for mobile but its not. - elseif (preg_match('/opera(\/|\s)([\d\.]*)/i', $_SERVER["HTTP_USER_AGENT"], $reg)) { $name='opera'; $version=$reg[2]; } - elseif (preg_match('/msie(\/|\s)([\d\.]*)/i', $_SERVER["HTTP_USER_AGENT"], $reg)) { $name='ie'; $version=$reg[2]; } // MS products at end + if (preg_match('/firefox(\/|\s)([\d\.]*)/i', $user_agent, $reg)) { $name='firefox'; $version=$reg[2]; } + elseif (preg_match('/chrome(\/|\s)([\d\.]+)/i', $user_agent, $reg)) { $name='chrome'; $version=$reg[2]; } // we can have 'chrome (Mozilla...) chrome x.y' in one string + elseif (preg_match('/chrome/i', $user_agent, $reg)) { $name='chrome'; } + elseif (preg_match('/iceweasel/i', $user_agent)) { $name='iceweasel'; $version=$reg[2]; } + elseif (preg_match('/epiphany/i', $user_agent)) { $name='epiphany'; $version=$reg[2]; } + elseif ((empty($phone) || preg_match('/iphone/i', $user_agent)) && preg_match('/safari(\/|\s)([\d\.]*)/i', + $user_agent, $reg)) { $name='safari'; $version=$reg[2]; } // Safari is often present in string for mobile but its not. + elseif (preg_match('/opera(\/|\s)([\d\.]*)/i', $user_agent, $reg)) { $name='opera'; $version=$reg[2]; } + elseif (preg_match('/msie(\/|\s)([\d\.]*)/i', $user_agent, $reg)) { $name='ie'; $version=$reg[2]; } // MS products at end // Other $firefox=0; if (in_array($name,array('firefox','iceweasel'))) $firefox=1; @@ -167,7 +169,15 @@ function getBrowserInfo() $tablet=$detectmobile->isTablet(); unset($detectmobile); // free memory - return array('browsername'=>$name, 'browserversion'=>$version, 'browseros'=>$os, 'browserfirefox'=>$firefox, 'layout'=> ($tablet?'tablet':($phone?'phone':'classic')), 'phone'=>$phone, 'tablet'=>$tablet); + return array( + 'browsername' => $name, + 'browserversion' => $version, + 'browseros' => $os, + 'browserfirefox' => $firefox, + 'layout' => ($tablet ? 'tablet' : ($phone ? 'phone' : 'classic')), + 'phone' => $phone, + 'tablet' => $tablet + ); } /** diff --git a/htdocs/install/check.php b/htdocs/install/check.php index b92f219a5af436a2db0a31fad3e01f9f64bbec39..15ba736acd5b5254a9dafcb56beeb0b70ad98aa5 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -63,7 +63,7 @@ print '<h3>'.$langs->trans("MiscellaneousChecks").":</h3>\n"; $useragent=$_SERVER['HTTP_USER_AGENT']; if (! empty($useragent)) { - $tmp=getBrowserInfo(); + $tmp=getBrowserInfo($_SERVER["HTTP_USER_AGENT"]); $browserversion=$tmp['browserversion']; $browsername=$tmp['browsername']; if ($browsername == 'ie' && $browserversion < 7) print '<img src="../theme/eldy/img/warning.png" alt="Error"> '.$langs->trans("WarningBrowserTooOld")."<br>\n"; diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index 7be99f5e278ee87c6c4915b7cef97dd90ef56340..4818b2d38f14a55021259e7636651f155937e370 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -208,7 +208,7 @@ register_shutdown_function('dol_shutdown'); // Detection browser if (isset($_SERVER["HTTP_USER_AGENT"])) { - $tmp=getBrowserInfo(); + $tmp=getBrowserInfo($_SERVER["HTTP_USER_AGENT"]); $conf->browser->name=$tmp['browsername']; $conf->browser->os=$tmp['browseros']; $conf->browser->version=$tmp['browserversion']; diff --git a/test/phpunit/FunctionsLibTest.php b/test/phpunit/FunctionsLibTest.php index 24408d53594035bf57f925cea379ed4a7565e650..0c3995bc7b51e04e80262c2d57d7929649cae93d 100755 --- a/test/phpunit/FunctionsLibTest.php +++ b/test/phpunit/FunctionsLibTest.php @@ -120,34 +120,39 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase /** - * testDolHtmlCleanLastBr + * testGetBrowserInfo * * @return void */ - public function testGetBrowserVersion() + public function testGetBrowserInfo() { - $_SERVER['HTTP_USER_AGENT']='Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; KITV4 Wanadoo; KITV5 Wanadoo)'; // MSIE 5.0 - $tmp=getBrowserInfo(); + $user_agent ='Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; KITV4 Wanadoo; KITV5 Wanadoo)'; // MSIE 5.0 + $tmp=getBrowserInfo($user_agent); $this->assertEquals('ie',$tmp['browsername']); $this->assertEquals('5.0',$tmp['browserversion']); - $_SERVER['HTTP_USER_AGENT']='Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firefox/0.9.1'; // Firefox 0.9.1 - $tmp=getBrowserInfo(); + + $user_agent ='Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firefox/0.9.1'; // Firefox 0.9.1 + $tmp=getBrowserInfo($user_agent); $this->assertEquals('firefox',$tmp['browsername']); $this->assertEquals('0.9.1',$tmp['browserversion']); - $_SERVER['HTTP_USER_AGENT']='Mozilla/3.0 (Windows 98; U) Opera 6.03 [en]'; - $tmp=getBrowserInfo(); + + $user_agent ='Mozilla/3.0 (Windows 98; U) Opera 6.03 [en]'; + $tmp=getBrowserInfo($user_agent); $this->assertEquals('opera',$tmp['browsername']); $this->assertEquals('6.03',$tmp['browserversion']); - $_SERVER['HTTP_USER_AGENT']='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21'; - $tmp=getBrowserInfo(); + + $user_agent ='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21'; + $tmp=getBrowserInfo($user_agent); $this->assertEquals('chrome',$tmp['browsername']); $this->assertEquals('19.0.1042.0',$tmp['browserversion']); - $_SERVER['HTTP_USER_AGENT']='chrome (Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11)'; - $tmp=getBrowserInfo(); + + $user_agent ='chrome (Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11)'; + $tmp=getBrowserInfo($user_agent); $this->assertEquals('chrome',$tmp['browsername']); $this->assertEquals('17.0.963.56',$tmp['browserversion']); - $_SERVER['HTTP_USER_AGENT']='Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1'; - $tmp=getBrowserInfo(); + + $user_agent ='Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1'; + $tmp=getBrowserInfo($user_agent); $this->assertEquals('safari',$tmp['browsername']); $this->assertEquals('533.21.1',$tmp['browserversion']); }