diff --git a/htdocs/admin/system/browser.php b/htdocs/admin/system/browser.php index 58601c6e998..a25ca7b1622 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 cf3b026ed90..666a0dd2e48 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -122,49 +122,85 @@ function getEntity($element=false, $shared=0) /** * 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. - 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'; } - // 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'; } + $name='unknown'; + $version=''; + $os='unknown'; + $phone = ''; + + $detectmobile = new MobileDetect(null, $user_agent); + $tablet = $detectmobile->isTablet(); + + if ($detectmobile->isMobile()) { + + $phone = 'unknown'; + + // 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 - 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('/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([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 - // Other - $firefox=0; - if (in_array($name,array('firefox','iceweasel'))) $firefox=1; + 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 (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([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 - include_once DOL_DOCUMENT_ROOT.'/core/class/mobiledetect.class.php'; - $detectmobile=new MobileDetect(); - $phone=$detectmobile->isMobile(); - $tablet=$detectmobile->isTablet(); - unset($detectmobile); // free memory + if ($tablet) { + $layout = 'tablet'; + } elseif ($phone) { + $layout = 'phone'; + } 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 + ); } /** diff --git a/htdocs/install/check.php b/htdocs/install/check.php index b92f219a5af..15ba736acd5 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -63,7 +63,7 @@ print '
'.$langs->trans("WarningBrowserTooOld")."