diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index 90167a94b87..7a738d2c60b 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -221,6 +221,41 @@ function getEntity($element=false, $shared=false) } } +/** + * Return information about user browser + * + * @return array Array of information ('browsername'=>,'browseros'=>,'phone'=>,'browserfirefox'=>) + */ +function getBrowserInfo() +{ + $name='unknown'; $version=''; $os='unknown'; $phone=''; + + // 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 + 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]; } + elseif (preg_match('/iceweasel/i',$_SERVER["HTTP_USER_AGENT"])) { $name='iceweasel'; $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 + // Other + $firefox=0; + if (in_array($name,array('firefox','iceweasel'))) $firefox=1; + + return array('browsername'=>$name, 'browserversion'=>$version, 'browseros'=>$os, 'phone'=>$phone, 'browserfirefox'=>$firefox); +} + /** * Function called at end of web php process * diff --git a/htdocs/install/check.php b/htdocs/install/check.php index bb2f7725810..5a3c75ee7b9 100644 --- a/htdocs/install/check.php +++ b/htdocs/install/check.php @@ -63,6 +63,16 @@ print ''; print ''.$langs->trans("MiscellanousChecks").":
\n"; +// Check browser +$useragent=$_SERVER['HTTP_USER_AGENT']; +if (! empty($useragent)) +{ + $tmp=getBrowserInfo(); + $browserversion=$tmp['browserversion']; + $browsername=$tmp['browsername']; + if ($browsername == 'ie' && $browserversion < 7) print 'Error '.$langs->trans("WarningBrowserTooOld")."
\n"; +} + // Check PHP version if (versioncompare(versionphparray(),array(4,3,10)) < 0) // Minimum to use (error if lower) diff --git a/htdocs/langs/en_US/install.lang b/htdocs/langs/en_US/install.lang index f40d500f2cf..dba222094c1 100644 --- a/htdocs/langs/en_US/install.lang +++ b/htdocs/langs/en_US/install.lang @@ -32,6 +32,7 @@ ErrorConnectedButDatabaseNotFound=Connection to server successfull but database ErrorDatabaseAlreadyExists=Database '%s' already exists. IfDatabaseNotExistsGoBackAndUncheckCreate=If database does not exists, go back and check option "Create database". IfDatabaseExistsGoBackAndCheckCreate=If database already exists, go back and uncheck "Create database" option. +WarningBrowserTooOld=Too old version of browser. Upgrading your browser to a recent version of Firefox, Chrome or Opera is highly recommanded. PHPVersion=PHP Version YouCanContinue=You can continue... PleaseBePatient=Please be patient... diff --git a/htdocs/langs/fr_FR/install.lang b/htdocs/langs/fr_FR/install.lang index 8c772dc390f..411499210c9 100644 --- a/htdocs/langs/fr_FR/install.lang +++ b/htdocs/langs/fr_FR/install.lang @@ -32,6 +32,7 @@ ErrorConnectedButDatabaseNotFound=Connexion au serveur réussi mais base '%s' in ErrorDatabaseAlreadyExists=La base de données '%s' existe déjà. IfDatabaseNotExistsGoBackAndUncheckCreate=Si la base n'existe pas, revenez en arrière et cochez l'option "Créer la base de données". IfDatabaseExistsGoBackAndCheckCreate=Si la base existe déjà, revenez en arrière et désactiver l'option "Créer la base de données". +WarningBrowserTooOld=Version de navigateur trop ancienne. Nous vous recommandons de mettre à jour vers un version récente de Firefox, Chrome ou Opera. PHPVersion=Version PHP YouCanContinue=Vous pouvez continuer... PleaseBePatient=Merci de patienter... diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index aaf62d3ae87..5409712b6b0 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -8,17 +8,17 @@ * Copyright (C) 2011 Philippe Grand * Copyright (C) 2008 Matteli * Copyright (C) 2011 Juanjo Menent - * + * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ @@ -174,30 +174,12 @@ register_shutdown_function('dol_shutdown'); // Detection browser if (isset($_SERVER["HTTP_USER_AGENT"])) { - // If phone/smartphone, we set phone os name. - if (preg_match('/android/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->phone='android'; - elseif (preg_match('/blackberry/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->phone='blackberry'; - elseif (preg_match('/iphone/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->phone='iphone'; - elseif (preg_match('/ipod/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->phone='iphone'; - elseif (preg_match('/palm/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->phone='palm'; - elseif (preg_match('/symbian/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->phone='symbian'; - elseif (preg_match('/webos/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->phone='webos'; - elseif (preg_match('/maemo/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->phone='maemo'; - // MS products at end - elseif (preg_match('/iemobile/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->phone='windowsmobile'; - elseif (preg_match('/windows ce/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->phone='windowsmobile'; - // Name - if (preg_match('/firefox/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->name='firefox'; - elseif (preg_match('/chrome/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->name='chrome'; - elseif (preg_match('/iceweasel/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->name='iceweasel'; - elseif ((empty($conf->browser->phone) || preg_match('/iphone/i',$_SERVER["HTTP_USER_AGENT"])) && preg_match('/safari/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->name='safari'; // Safari is often present in string but its not. - elseif (preg_match('/opera/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->name='opera'; - // MS products at end - elseif (preg_match('/msie/i',$_SERVER["HTTP_USER_AGENT"])) $conf->browser->name='ie'; - else $conf->browser->name='unknown'; - // Other - if (in_array($conf->browser->name,array('firefox','iceweasel'))) $conf->browser->firefox=1; - //$conf->browser->phone='android'; + $tmp=getBrowserInfo(); + $conf->browser->phone=$tmp['phone']; + $conf->browser->name=$tmp['browsername']; + $conf->browser->os=$tmp['browseros']; + $conf->browser->firefox=$tmp['browserfirefox']; + $conf->browser->version=$tmp['browserversion']; } @@ -1065,7 +1047,7 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a global $user, $conf, $langs, $db; global $dolibarr_main_authentication; global $hookmanager; - + // Instantiate hooks of thirdparty module only if not already define if (! is_object($hookmanager)) { diff --git a/htdocs/product/liste.php b/htdocs/product/liste.php index c38e06efda2..9a7cfc78d57 100644 --- a/htdocs/product/liste.php +++ b/htdocs/product/liste.php @@ -213,7 +213,6 @@ else $fieldlist = $object->field_list; $datas = $object->list_datas; $picto='title.png'; - if (empty($conf->browser->firefox)) $picto='title.gif'; $title_picto = img_picto('',$picto); $title_text = $title; diff --git a/test/phpunit/FunctionsTest.php b/test/phpunit/FunctionsTest.php index 3824e81803c..c1983502df8 100755 --- a/test/phpunit/FunctionsTest.php +++ b/test/phpunit/FunctionsTest.php @@ -117,6 +117,35 @@ class FunctionsTest extends PHPUnit_Framework_TestCase } + /** + * testDolHtmlCleanLastBr + * + * @return void + */ + public function testGetBrowserVersion() + { + $_SERVER['HTTP_USER_AGENT']='Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; KITV4 Wanadoo; KITV5 Wanadoo)'; // MSIE 5.0 + $tmp=getBrowserInfo(); + $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(); + $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(); + $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(); + $this->assertEquals('chrome',$tmp['browsername']); + $this->assertEquals('19.0.1042.0',$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(); + $this->assertEquals('safari',$tmp['browsername']); + $this->assertEquals('533.21.1',$tmp['browserversion']); + } + /** * testDolHtmlCleanLastBr *