Merge pull request #2384 from marcosgdf/better-practice
Better practice in getBrowserInfo
This commit is contained in:
commit
50d8137618
@ -44,7 +44,7 @@ llxHeader();
|
|||||||
|
|
||||||
print_fiche_titre($langs->trans("InfoBrowser"),'','setup');
|
print_fiche_titre($langs->trans("InfoBrowser"),'','setup');
|
||||||
|
|
||||||
$tmp=getBrowserInfo();
|
$tmp=getBrowserInfo($_SERVER["HTTP_USER_AGENT"]);
|
||||||
|
|
||||||
// Browser
|
// Browser
|
||||||
$var=true;
|
$var=true;
|
||||||
|
|||||||
@ -122,49 +122,85 @@ function getEntity($element=false, $shared=0)
|
|||||||
/**
|
/**
|
||||||
* Return information about user browser
|
* Return information about user browser
|
||||||
*
|
*
|
||||||
* @return array Array of information ('browsername'=>,'browseros'=>,'browserversion'=>,'layout'=>(classic|phone|tablet))
|
* Returns array with the following format:
|
||||||
|
* array(
|
||||||
|
* 'browsername' => Browser name (firefox|chrome|iceweasel|epiphany|safari|opera|ie|unknown)
|
||||||
|
* 'browserversion' => Browser version. Empty if unknown
|
||||||
|
* 'browseros' => Set with mobile OS (android|blackberry|ios|palm|symbian|webos|maemo|windows|unknown)
|
||||||
|
* 'layout' => (tablet|phone|classic)
|
||||||
|
* 'phone' => empty if not mobile, (android|blackberry|ios|palm|unknown) if mobile
|
||||||
|
* 'tablet' => true/false
|
||||||
|
* )
|
||||||
|
*
|
||||||
|
* @param string $user_agent Content of $_SERVER["HTTP_USER_AGENT"] variable
|
||||||
|
* @return array Check function documentation
|
||||||
*/
|
*/
|
||||||
function getBrowserInfo()
|
function getBrowserInfo($user_agent)
|
||||||
{
|
{
|
||||||
$name='unknown'; $version=''; $os='unknown'; $phone=''; $tablet='';
|
include_once DOL_DOCUMENT_ROOT.'/core/class/mobiledetect.class.php';
|
||||||
|
|
||||||
// If phone/smartphone, we set phone os name.
|
$name='unknown';
|
||||||
if (preg_match('/android/i',$_SERVER["HTTP_USER_AGENT"])) { $os=$phone='android'; }
|
$version='';
|
||||||
elseif (preg_match('/blackberry/i',$_SERVER["HTTP_USER_AGENT"])) { $os=$phone='blackberry'; }
|
$os='unknown';
|
||||||
elseif (preg_match('/iphone/i',$_SERVER["HTTP_USER_AGENT"])) { $os='ios'; $phone='iphone'; }
|
$phone = '';
|
||||||
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'; }
|
$detectmobile = new MobileDetect(null, $user_agent);
|
||||||
elseif (preg_match('/symbian/i',$_SERVER["HTTP_USER_AGENT"])) { $os='symbian'; $phone='unknown'; }
|
$tablet = $detectmobile->isTablet();
|
||||||
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 ($detectmobile->isMobile()) {
|
||||||
// MS products at end
|
|
||||||
elseif (preg_match('/iemobile/i',$_SERVER["HTTP_USER_AGENT"])) { $os='windows'; $phone='unkown'; }
|
$phone = 'unknown';
|
||||||
elseif (preg_match('/windows ce/i',$_SERVER["HTTP_USER_AGENT"])) { $os='windows'; $phone='unkown'; }
|
|
||||||
|
// If phone/smartphone, we set phone os name.
|
||||||
|
if ($detectmobile->is('AndroidOS')) {
|
||||||
|
$os = $phone = 'android';
|
||||||
|
} elseif ($detectmobile->is('BlackBerryOS')) {
|
||||||
|
$os = $phone = 'blackberry';
|
||||||
|
} elseif ($detectmobile->is('iOS')) {
|
||||||
|
$os = 'ios';
|
||||||
|
$phone = 'iphone';
|
||||||
|
} elseif ($detectmobile->is('PalmOS')) {
|
||||||
|
$os = $phone = 'palm';
|
||||||
|
} elseif ($detectmobile->is('SymbianOS')) {
|
||||||
|
$os = 'symbian';
|
||||||
|
} elseif ($detectmobile->is('webOS')) {
|
||||||
|
$os = 'webos';
|
||||||
|
} elseif ($detectmobile->is('MaemoOS')) {
|
||||||
|
$os = 'maemo';
|
||||||
|
} elseif ($detectmobile->is('WindowsMobileOS') || $detectmobile->is('WindowsPhoneOS')) {
|
||||||
|
$os = 'windows';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// OS
|
// OS
|
||||||
if (preg_match('/android/i',$_SERVER["HTTP_USER_AGENT"])) { $os='android'; }
|
if (preg_match('/linux/i', $user_agent)) { $os='linux'; }
|
||||||
elseif (preg_match('/linux/i',$_SERVER["HTTP_USER_AGENT"])) { $os='linux'; }
|
|
||||||
|
|
||||||
// Name
|
// Name
|
||||||
if (preg_match('/firefox(\/|\s)([\d\.]*)/i', $_SERVER["HTTP_USER_AGENT"], $reg)) { $name='firefox'; $version=$reg[2]; }
|
if (preg_match('/firefox(\/|\s)([\d\.]*)/i', $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(\/|\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', $_SERVER["HTTP_USER_AGENT"], $reg)) { $name='chrome'; }
|
elseif (preg_match('/chrome/i', $user_agent, $reg)) { $name='chrome'; }
|
||||||
elseif (preg_match('/iceweasel/i',$_SERVER["HTTP_USER_AGENT"])) { $name='iceweasel'; $version=$reg[2]; }
|
elseif (preg_match('/iceweasel/i', $user_agent)) { $name='iceweasel'; $version=$reg[2]; }
|
||||||
elseif (preg_match('/epiphany/i',$_SERVER["HTTP_USER_AGENT"])) { $name='epiphany'; $version=$reg[2]; }
|
elseif (preg_match('/epiphany/i', $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('/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', $_SERVER["HTTP_USER_AGENT"], $reg)) { $name='opera'; $version=$reg[2]; }
|
elseif (preg_match('/opera(\/|\s)([\d\.]*)/i', $user_agent, $reg)) { $name='opera'; $version=$reg[2]; }
|
||||||
elseif (preg_match('/(MSIE\s([0-9]+\.[0-9]))|.*(Trident\/[0-9]+.[0-9];\srv:([0-9]+\.[0-9]+))/i', $_SERVER["HTTP_USER_AGENT"], $reg)) { $name='ie'; $version= end($reg); } // MS products at end
|
elseif (preg_match('/(MSIE\s([0-9]+\.[0-9]))|.*(Trident\/[0-9]+.[0-9];\srv:([0-9]+\.[0-9]+))/i', $user_agent, $reg)) { $name='ie'; $version=end($reg); } // MS products at end
|
||||||
// Other
|
|
||||||
$firefox=0;
|
|
||||||
if (in_array($name,array('firefox','iceweasel'))) $firefox=1;
|
|
||||||
|
|
||||||
include_once DOL_DOCUMENT_ROOT.'/core/class/mobiledetect.class.php';
|
if ($tablet) {
|
||||||
$detectmobile=new MobileDetect();
|
$layout = 'tablet';
|
||||||
$phone=$detectmobile->isMobile();
|
} elseif ($phone) {
|
||||||
$tablet=$detectmobile->isTablet();
|
$layout = 'phone';
|
||||||
unset($detectmobile); // free memory
|
} else {
|
||||||
|
$layout = 'classic';
|
||||||
|
}
|
||||||
|
|
||||||
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,
|
||||||
|
'layout' => $layout,
|
||||||
|
'phone' => $phone,
|
||||||
|
'tablet' => $tablet
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -63,7 +63,7 @@ print '<h3>'.$langs->trans("MiscellaneousChecks").":</h3>\n";
|
|||||||
$useragent=$_SERVER['HTTP_USER_AGENT'];
|
$useragent=$_SERVER['HTTP_USER_AGENT'];
|
||||||
if (! empty($useragent))
|
if (! empty($useragent))
|
||||||
{
|
{
|
||||||
$tmp=getBrowserInfo();
|
$tmp=getBrowserInfo($_SERVER["HTTP_USER_AGENT"]);
|
||||||
$browserversion=$tmp['browserversion'];
|
$browserversion=$tmp['browserversion'];
|
||||||
$browsername=$tmp['browsername'];
|
$browsername=$tmp['browsername'];
|
||||||
if ($browsername == 'ie' && $browserversion < 7) print '<img src="../theme/eldy/img/warning.png" alt="Error"> '.$langs->trans("WarningBrowserTooOld")."<br>\n";
|
if ($browsername == 'ie' && $browserversion < 7) print '<img src="../theme/eldy/img/warning.png" alt="Error"> '.$langs->trans("WarningBrowserTooOld")."<br>\n";
|
||||||
|
|||||||
@ -208,7 +208,7 @@ register_shutdown_function('dol_shutdown');
|
|||||||
// Detection browser
|
// Detection browser
|
||||||
if (isset($_SERVER["HTTP_USER_AGENT"]))
|
if (isset($_SERVER["HTTP_USER_AGENT"]))
|
||||||
{
|
{
|
||||||
$tmp=getBrowserInfo();
|
$tmp=getBrowserInfo($_SERVER["HTTP_USER_AGENT"]);
|
||||||
$conf->browser->name=$tmp['browsername'];
|
$conf->browser->name=$tmp['browsername'];
|
||||||
$conf->browser->os=$tmp['browseros'];
|
$conf->browser->os=$tmp['browseros'];
|
||||||
$conf->browser->version=$tmp['browserversion'];
|
$conf->browser->version=$tmp['browserversion'];
|
||||||
|
|||||||
@ -40,7 +40,6 @@ if (! defined('NOREQUIREHTML')) define('NOREQUIREHTML','1'); // If we don't nee
|
|||||||
if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
|
if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
|
||||||
if (! defined("NOLOGIN")) define("NOLOGIN",'1'); // If this page is public (can be called outside logged session)
|
if (! defined("NOLOGIN")) define("NOLOGIN",'1'); // If this page is public (can be called outside logged session)
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class for PHPUnit tests
|
* Class for PHPUnit tests
|
||||||
*
|
*
|
||||||
@ -120,51 +119,79 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* testDolHtmlCleanLastBr
|
* testGetBrowserInfo
|
||||||
*
|
*
|
||||||
* @return void
|
* @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
|
// MSIE 5.0
|
||||||
$tmp=getBrowserInfo();
|
$user_agent ='Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; KITV4 Wanadoo; KITV5 Wanadoo)';
|
||||||
|
$tmp=getBrowserInfo($user_agent);
|
||||||
$this->assertEquals('ie',$tmp['browsername']);
|
$this->assertEquals('ie',$tmp['browsername']);
|
||||||
$this->assertEquals('5.0',$tmp['browserversion']);
|
$this->assertEquals('5.0',$tmp['browserversion']);
|
||||||
|
$this->assertEmpty($tmp['phone']);
|
||||||
|
$this->assertFalse($tmp['tablet']);
|
||||||
|
$this->assertEquals('classic', $tmp['layout']);
|
||||||
|
|
||||||
$_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
|
// 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';
|
||||||
|
$tmp=getBrowserInfo($user_agent);
|
||||||
$this->assertEquals('firefox',$tmp['browsername']);
|
$this->assertEquals('firefox',$tmp['browsername']);
|
||||||
$this->assertEquals('0.9.1',$tmp['browserversion']);
|
$this->assertEquals('0.9.1',$tmp['browserversion']);
|
||||||
|
$this->assertEmpty($tmp['phone']);
|
||||||
|
$this->assertFalse($tmp['tablet']);
|
||||||
|
$this->assertEquals('classic', $tmp['layout']);
|
||||||
|
|
||||||
$_SERVER['HTTP_USER_AGENT']='Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)'; // IE 10
|
$user_agent ='Mozilla/3.0 (Windows 98; U) Opera 6.03 [en]';
|
||||||
$tmp=getBrowserInfo();
|
$tmp=getBrowserInfo($user_agent);
|
||||||
$this->assertEquals('ie',$tmp['browsername']);
|
|
||||||
$this->assertEquals('10.0',$tmp['browserversion']);
|
|
||||||
|
|
||||||
$_SERVER['HTTP_USER_AGENT']='Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko'; // IE 11
|
|
||||||
$tmp=getBrowserInfo();
|
|
||||||
$this->assertEquals('ie',$tmp['browsername']);
|
|
||||||
$this->assertEquals('11.0',$tmp['browserversion']);
|
|
||||||
|
|
||||||
$_SERVER['HTTP_USER_AGENT']='Mozilla/3.0 (Windows 98; U) Opera 6.03 [en]';
|
|
||||||
$tmp=getBrowserInfo();
|
|
||||||
$this->assertEquals('opera',$tmp['browsername']);
|
$this->assertEquals('opera',$tmp['browsername']);
|
||||||
$this->assertEquals('6.03',$tmp['browserversion']);
|
$this->assertEquals('6.03',$tmp['browserversion']);
|
||||||
|
$this->assertEmpty($tmp['phone']);
|
||||||
|
$this->assertFalse($tmp['tablet']);
|
||||||
|
$this->assertEquals('classic', $tmp['layout']);
|
||||||
|
|
||||||
$_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';
|
$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();
|
$tmp=getBrowserInfo($user_agent);
|
||||||
$this->assertEquals('chrome',$tmp['browsername']);
|
$this->assertEquals('chrome',$tmp['browsername']);
|
||||||
$this->assertEquals('19.0.1042.0',$tmp['browserversion']);
|
$this->assertEquals('19.0.1042.0',$tmp['browserversion']);
|
||||||
|
$this->assertEmpty($tmp['phone']);
|
||||||
|
$this->assertFalse($tmp['tablet']);
|
||||||
|
$this->assertEquals('classic', $tmp['layout']);
|
||||||
|
|
||||||
$_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)';
|
$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();
|
$tmp=getBrowserInfo($user_agent);
|
||||||
$this->assertEquals('chrome',$tmp['browsername']);
|
$this->assertEquals('chrome',$tmp['browsername']);
|
||||||
$this->assertEquals('17.0.963.56',$tmp['browserversion']);
|
$this->assertEquals('17.0.963.56',$tmp['browserversion']);
|
||||||
|
$this->assertEmpty($tmp['phone']);
|
||||||
|
$this->assertFalse($tmp['tablet']);
|
||||||
|
$this->assertEquals('classic', $tmp['layout']);
|
||||||
|
|
||||||
$_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';
|
$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();
|
$tmp=getBrowserInfo($user_agent);
|
||||||
$this->assertEquals('safari',$tmp['browsername']);
|
$this->assertEquals('safari',$tmp['browsername']);
|
||||||
$this->assertEquals('533.21.1',$tmp['browserversion']);
|
$this->assertEquals('533.21.1',$tmp['browserversion']);
|
||||||
|
$this->assertEmpty($tmp['phone']);
|
||||||
|
$this->assertFalse($tmp['tablet']);
|
||||||
|
$this->assertEquals('classic', $tmp['layout']);
|
||||||
|
|
||||||
|
//Internet Explorer 11
|
||||||
|
$user_agent = 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';
|
||||||
|
$tmp=getBrowserInfo($user_agent);
|
||||||
|
$this->assertEquals('ie',$tmp['browsername']);
|
||||||
|
$this->assertEquals('11.0',$tmp['browserversion']);
|
||||||
|
$this->assertEmpty($tmp['phone']);
|
||||||
|
$this->assertFalse($tmp['tablet']);
|
||||||
|
$this->assertEquals('classic', $tmp['layout']);
|
||||||
|
|
||||||
|
//iPad
|
||||||
|
$user_agent = 'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25';
|
||||||
|
$tmp=getBrowserInfo($user_agent);
|
||||||
|
$this->assertEquals('safari',$tmp['browsername']);
|
||||||
|
$this->assertEquals('8536.25',$tmp['browserversion']);
|
||||||
|
$this->assertEquals('ios',$tmp['browseros']);
|
||||||
|
$this->assertEquals('tablet',$tmp['layout']);
|
||||||
|
$this->assertEquals('iphone',$tmp['phone']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user