From 3822194cde4614137a54eecb1e1fcc86672e84a1 Mon Sep 17 00:00:00 2001 From: admin Date: Mon, 9 Oct 2006 17:34:19 +0000 Subject: --- system/libraries/User_agent.php | 500 ++++++++-------------------------------- 1 file changed, 96 insertions(+), 404 deletions(-) diff --git a/system/libraries/User_agent.php b/system/libraries/User_agent.php index 8c63924b9..21162388a 100644 --- a/system/libraries/User_agent.php +++ b/system/libraries/User_agent.php @@ -43,375 +43,6 @@ class CI_User_agent { var $moble = ''; var $robot = ''; - var $platforms = array ( - 'windows nt 6.0' => 'Windows Longhorn', - 'windows nt 5.2' => 'Windows 2003', - 'windows nt 5.0' => 'Windows 2000', - 'windows nt 5.1' => 'Windows XP', - 'windows nt 4.0' => 'Windows NT 4.0', - 'winnt4.0' => 'Windows NT 4.0', - 'winnt 4.0' => 'Windows NT', - 'winnt' => 'Windows NT', - 'windows 98' => 'Windows 98', - 'win98' => 'Windows 98', - 'windows 95' => 'Windows 95', - 'win95' => 'Windows 95', - 'windows' => 'Unknown Windows OS', - 'os x' => 'Mac OS X', - 'ppc mac' => 'Power PC Mac', - 'freebsd' => 'FreeBSD', - 'ppc' => 'Macintosh', - 'linux' => 'Linux', - 'debian' => 'Debian', - 'sunos' => 'Sun Solaris', - 'beos' => 'BeOS', - 'apachebench' => 'ApacheBench', - 'aix' => 'AIX', - 'irix' => 'Irix', - 'osf' => 'DEC OSF', - 'hp-ux' => 'HP-UX', - 'netbsd' => 'NetBSD', - 'bsdi' => 'BSDi', - 'openbsd' => 'OpenBSD', - 'gnu' => 'GNU/Linux', - 'unix' => 'Unknown Unix OS' - ); - - var $browsers = array( - 'Opera' => 'Opera', - 'MSIE' => 'Internet Explorer', - 'Internet Explorer' => 'Internet Explorer', - 'Shiira' => 'Shiira', - 'Firefox' => 'Firefox', - 'Chimera' => 'Chimera', - 'Phoenix' => 'Phoenix', - 'Firebird' => 'Firebird', - 'Camino' => 'Camino', - 'Netscape' => 'Netscape', - 'OmniWeb' => 'OmniWeb', - 'Mozilla' => 'Mozilla', - 'Safari' => 'Safari', - 'Konqueror' => 'Konqueror', - 'icab' => 'iCab', - 'Lynx' => 'Lynx', - 'Links' => 'Links', - 'hotjava' => 'HotJava', - 'amaya' => 'Amaya', - 'IBrowse' => 'IBrowse' - ); - - var $mobiles = array( - 'mobileexplorer' => 'Mobile Explorer', - 'openwave' => 'Open Wave', - 'opera mini' => 'Opera Mini', - 'operamini' => 'Opera Mini', - 'elaine' => 'Palm', - 'palmsource' => 'Palm', - 'digital paths' => 'Palm', - 'avantgo' => 'Avantgo', - 'xiino' => 'Xiino', - 'palmscape' => 'Palmscape', - 'nokia' => 'Nokia', - 'ericsson' => 'Ericsson', - 'blackBerry' => 'BlackBerry', - 'motorola' => 'Motorola' - ); - - var $robots = array( - - 'googlebot' => 'Googlebot', - 'msnbot' => 'MSNBot', - 'slurp' => 'Inktomi Slurp', - 'yahoo' => 'Yahoo', - 'askjeeves' => 'AskJeeves', - 'fastcrawler' => 'FastCrawler', - 'infoseek' => 'InfoSeek Robot 1.0', - 'lycos' => 'Lycos', - 'abcdatos' => 'ABCdatos BotLink', - 'Acme.Spider' => 'Acme.Spider', - 'ahoythehomepagefinder' => 'Ahoy! The Homepage Finder', - 'Alkaline' => 'Alkaline', - 'anthill' => 'Anthill', - 'appie' => 'Walhello appie', - 'arachnophilia' => 'Arachnophilia', - 'arale' => 'Arale', - 'araneo' => 'Araneo', - 'araybot' => 'AraybOt', - 'architext' => 'ArchitextSpider', - 'aretha' => 'Aretha', - 'ariadne' => 'ARIADNE', - 'arks' => 'arks', - 'aspider' => 'ASpider (Associative Spider)', - 'atn.txt' => 'ATN Worldwide', - 'atomz' => 'Atomz.com Search Robot', - 'auresys' => 'AURESYS', - 'backrub' => 'BackRub', - 'bbot' => 'BBot', - 'bigbrother' => 'Big Brother', - 'bjaaland' => 'Bjaaland', - 'blackwidow' => 'BlackWidow', - 'blindekuh' => 'Die Blinde Kuh', - 'Bloodhound' => 'Bloodhound', - 'borg-bot' => 'Borg-Bot', - 'boxseabot' => 'BoxSeaBot', - 'brightnet' => 'bright.net caching robot', - 'bspider' => 'BSpider', - 'cactvschemistryspider' => 'CACTVS Chemistry Spider', - 'calif' => 'Calif', - 'cassandra' => 'Cassandra', - 'cgireader' => 'Digimarc Marcspider/CGI', - 'checkbot' => 'Checkbot', - 'christcrawler' => 'ChristCrawler.com', - 'churl' => 'churl', - 'cienciaficcion' => 'cIeNcIaFiCcIoN.nEt', - 'cmc' => 'CMC/0.01', - 'Collective' => 'Collective', - 'combine' => 'Combine System', - 'confuzzledbot' => 'ConfuzzledBot', - 'coolbot' => 'CoolBot', - 'core' => 'Web Core / Roots', - 'cosmos' => 'XYLEME Robot', - 'cruiser' => 'Internet Cruiser Robot', - 'cusco' => 'Cusco', - 'cyberspyder' => 'CyberSpyder Link Test', - 'cydralspider' => 'CydralSpider', - 'desertrealm' => 'Desert Realm Spider', - 'deweb' => 'DeWeb(c) Katalog/Index', - 'dienstspider' => 'DienstSpider', - 'digger' => 'Digger', - 'diibot' => 'Digital Integrity Robot', - 'directhit' => 'Direct Hit Grabber', - 'dnabot' => 'DNAbot', - 'download_express' => 'DownLoad Express', - 'dragonbot' => 'DragonBot', - 'e-collector' => 'e-collector', - 'ebiness' => 'EbiNess', - 'eit' => 'EIT Link Verifier Robot', - 'elfinbot' => 'ELFINBOT', - 'emacs' => 'Emacs-w3 Search Engine', - 'emcspider' => 'ananzi', - 'esculapio' => 'esculapio', - 'esther' => 'Esther', - 'evliyacelebi' => 'Evliya Celebi', - 'nzexplorer' => 'nzexplorer', - 'fdse' => 'Fluid Dynamics Search Engine robot', - 'felix' => 'Felix IDE', - 'ferret' => 'Wild Ferret Web Hopper #1, #2, #3', - 'fetchrover' => 'FetchRover', - 'fido' => 'fido', - 'finnish' => 'Hämähäkki', - 'fireball' => 'KIT-Fireball', - 'fish' => 'Fish search', - 'fouineur' => 'Fouineur', - 'francoroute' => 'Robot Francoroute', - 'freecrawl' => 'Freecrawl', - 'funnelweb' => 'FunnelWeb', - 'gama' => 'gammaSpider, FocusedCrawler', - 'gazz' => 'gazz', - 'gcreep' => 'GCreep', - 'getbot' => 'GetBot', - 'geturl' => 'GetURL', - 'golem' => 'Golem', - 'grapnel' => 'Grapnel/0.01 Experiment', - 'griffon' => 'Griffon ', - 'gromit' => 'Gromit', - 'gulliver' => 'Northern Light Gulliver', - 'gulperbot' => 'Gulper Bot', - 'hambot' => 'HamBot', - 'harvest' => 'Harvest', - 'havindex' => 'havIndex', - 'hi' => 'HI (HTML Index) Search', - 'hometown' => 'Hometown Spider Pro', - 'wired-digital' => 'Wired Digital', - 'htdig' => 'ht://Dig', - 'htmlgobble' => 'HTMLgobble', - 'hyperdecontextualizer' => 'Hyper-Decontextualizer', - 'iajabot' => 'iajaBot', - 'ibm' => 'IBM_Planetwide', - 'iconoclast' => 'Popular Iconoclast', - 'Ilse' => 'Ingrid', - 'imagelock' => 'Imagelock ', - 'incywincy' => 'IncyWincy', - 'informant' => 'Informant', - 'infoseeksidewinder' => 'Infoseek Sidewinder', - 'infospider' => 'InfoSpiders', - 'inspectorwww' => 'Inspector Web', - 'intelliagent' => 'IntelliAgent', - 'irobot' => 'I, Robot', - 'iron33' => 'Iron33', - 'israelisearch' => 'Israeli-search', - 'javabee' => 'JavaBee', - 'JBot' => 'JBot Java Web Robot', - 'jcrawler' => 'JCrawler', - 'jobo' => 'JoBo Java Web Robot', - 'jobot' => 'Jobot', - 'joebot' => 'JoeBot', - 'jubii' => 'The Jubii Indexing Robot', - 'jumpstation' => 'JumpStation', - 'kapsi' => 'image.kapsi.net', - 'katipo' => 'Katipo', - 'kdd' => 'KDD-Explorer', - 'kilroy' => 'Kilroy', - 'ko_yappo_robot' => 'KO_Yappo_Robot', - 'labelgrabber.txt' => 'LabelGrabber', - 'larbin' => 'larbin', - 'legs' => 'legs', - 'linkidator' => 'Link Validator', - 'linkscan' => 'LinkScan', - 'linkwalker' => 'LinkWalker', - 'lockon' => 'Lockon', - 'logo_gif' => 'logo.gif Crawler', - 'magpie' => 'Magpie', - 'marvin' => 'marvin/infoseek', - 'mattie' => 'Mattie', - 'mediafox' => 'MediaFox', - 'merzscope' => 'MerzScope', - 'meshexplorer' => 'NEC-MeshExplorer', - 'MindCrawler' => 'MindCrawler', - 'mnogosearch' => 'mnoGoSearch search engine software', - 'moget' => 'moget', - 'momspider' => 'MOMspider', - 'monster' => 'Monster', - 'motor' => 'Motor', - 'muncher' => 'Muncher', - 'muninn' => 'Muninn', - 'muscatferret' => 'Muscat Ferret', - 'mwdsearch' => 'Mwd.Search', - 'myweb' => 'Internet Shinchakubin', - 'NDSpider' => 'NDSpider', - 'netcarta' => 'NetCarta WebMap Engine', - 'netmechanic' => 'NetMechanic', - 'netscoop' => 'NetScoop', - 'newscan-online' => 'newscan-online', - 'nhse' => 'NHSE Web Forager', - 'nomad' => 'Nomad', - 'northstar' => 'The NorthStar Robot', - 'objectssearch' => 'ObjectsSearch', - 'occam' => 'Occam', - 'octopus' => 'HKU WWW Octopus', - 'OntoSpider' => 'OntoSpider', - 'openfind' => 'Openfind data gatherer', - 'orb_search' => 'Orb Search', - 'packrat' => 'Pack Rat', - 'pageboy' => 'PageBoy', - 'parasite' => 'ParaSite', - 'patric' => 'Patric', - 'pegasus' => 'pegasus', - 'perignator' => 'The Peregrinator', - 'perlcrawler' => 'PerlCrawler 1.0', - 'phantom' => 'Phantom', - 'phpdig' => 'PhpDig', - 'pitkow' => 'html_analyzer', - 'pjspider' => 'Portal Juice Spider', - 'pka' => 'PGP Key Agent', - 'poppi' => 'Poppi', - 'portalb' => 'PortalB Spider', - 'psbot' => 'psbot', - 'Puu' => 'GetterroboPlus Puu', - 'python' => 'The Python Robot', - 'raven ' => 'Raven Search', - 'rbse' => 'RBSE Spider', - 'resumerobot' => 'Resume Robot', - 'rhcs' => 'RoadHouse Crawling System', - 'rixbot' => 'RixBot', - 'roadrunner' => 'Road Runner: The ImageScape Robot', - 'robbie' => 'Robbie the Robot', - 'robi' => 'ComputingSite Robi/1.0', - 'robocrawl' => 'RoboCrawl Spider', - 'robofox' => 'RoboFox', - 'robozilla' => 'Robozilla', - 'roverbot' => 'Roverbot', - 'rules' => 'RuLeS', - 'safetynetrobot' => 'SafetyNet Robot', - 'scooter' => 'Scooter', - 'search_au' => 'Search.Aus-AU.COM', - 'search-info' => 'Sleek', - 'searchprocess' => 'SearchProcess', - 'senrigan' => 'Senrigan', - 'sgscout' => 'SG-Scout', - 'shaggy' => 'ShagSeeker', - 'sift' => 'Sift', - 'simbot' => 'Simmany Robot Ver1.0', - 'site-valet' => 'Site Valet', - 'sitetech' => 'SiteTech-Rover', - 'skymob' => 'Skymob.com', - 'slcrawler' => 'SLCrawler', - 'smartspider' => 'Smart Spider', - 'snooper' => 'Snooper', - 'solbot' => 'Solbot', - 'speedy' => 'Speedy Spider', - 'spider_monkey' => 'spider_monkey', - 'spiderbot' => 'SpiderBot', - 'spiderline' => 'Spiderline Crawler', - 'spiderman' => 'SpiderMan', - 'spiderview' => 'SpiderView(tm)', - 'spry' => 'Spry Wizard Robot', - 'ssearcher' => 'Site Searcher', - 'suke' => 'Suke', - 'suntek' => 'suntek search engine', - 'sven' => 'Sven', - 'sygol' => 'Sygol ', - 'tach_bw' => 'TACH Black Widow', - 'tarantula' => 'Tarantula', - 'tarspider' => 'tarspider', - 'tcl' => 'Tcl W3 Robot', - 'techbot' => 'TechBOT', - 'templeton' => 'Templeton', - 'titin' => 'TitIn', - 'titan' => 'TITAN', - 'tkwww' => 'The TkWWW Robot', - 'tlspider' => 'TLSpider', - 'ucsd' => 'UCSD Crawl', - 'udmsearch' => 'UdmSearch', - 'ultraseek' => 'Ultraseek', - 'uptimebot' => 'UptimeBot', - 'urlck' => 'URL Check', - 'valkyrie' => 'Valkyrie', - 'verticrawl' => 'Verticrawl', - 'victoria' => 'Victoria', - 'visionsearch' => 'vision-search', - 'voidbot' => 'void-bot', - 'voyager' => 'Voyager', - 'vwbot' => 'VWbot', - 'w3index' => 'The NWI Robot', - 'w3m2' => 'W3M2', - 'wallpaper' => 'WallPaper (alias crawlpaper)', - 'wanderer' => 'the World Wide Web Wanderer', - 'wapspider' => 'w@pSpider by wap4.com', - 'webbandit' => 'WebBandit Web Spider', - 'webcatcher' => 'WebCatcher', - 'webcopy' => 'WebCopy', - 'webfetcher' => 'webfetcher', - 'webfoot' => 'The Webfoot Robot', - 'webinator' => 'Webinator', - 'weblayers' => 'weblayers', - 'weblinker' => 'WebLinker', - 'webmirror' => 'WebMirror', - 'webmoose' => 'The Web Moose', - 'webquest' => 'WebQuest', - 'webreader' => 'Digimarc MarcSpider', - 'webreaper' => 'WebReaper', - 'webs' => 'webs', - 'websnarf' => 'Websnarf', - 'webspider' => 'WebSpider', - 'webvac' => 'WebVac', - 'webwalk' => 'webwalk', - 'webwalker' => 'WebWalker', - 'webwatch' => 'WebWatch', - 'wget' => 'Wget', - 'whatuseek' => 'whatUseek Winona', - 'whowhere' => 'WhoWhere Robot', - 'wlm' => 'Weblog Monitor', - 'wmir' => 'w3mir', - 'wolp' => 'WebStolperer', - 'wombat' => 'The Web Wombat ', - 'worm' => 'The World Wide Web Worm', - 'wwwc' => 'WWWC Ver 0.2.5', - 'wz101' => 'WebZinger', - 'xget' => 'XGET', - ); - - /** * Constructor @@ -430,8 +61,61 @@ class CI_User_agent { if ( ! is_null($this->agent)) { - $this->_compile_data(); + if ($this->_load_agent_file()) + { + $this->_compile_data(); + } + } + } + + + // -------------------------------------------------------------------- + + /** + * Compile the User Agent Data + * + * @access private + * @return bool + */ + function _load_agent_file() + { + if ( ! @include(APPPATH.'config/user_agent'.EXT)) + { + return FALSE; + } + + $return = FALSE; + + if (isset($platforms)) + { + $this->platforms = $platforms; + unset($platforms); + $return = TRUE; + } + + if (isset($browsers)) + { + $this->browsers = $browsers; + unset($browsers); + $return = TRUE; + } + + if (isset($mobiles)) + { + $this->browsers = $mobiles; + unset($mobiles); + $return = TRUE; } + + if (isset($robots)) + { + $this->robots = $robots; + unset($robots); + $return = TRUE; + } + + + return $return; } // -------------------------------------------------------------------- @@ -465,15 +149,17 @@ class CI_User_agent { */ function _set_platform() { - foreach ($this->platforms as $key => $val) + if (is_array($this->platforms) AND count($this->platforms) > 0) { - if (preg_match("|$key|i", $this->agent)) + foreach ($this->platforms as $key => $val) { - $this->platform = $val; - return TRUE; + if (preg_match("|".preg_quote($key)."|i", $this->agent)) + { + $this->platform = $val; + return TRUE; + } } } - $this->platform = 'Unknown Platform'; } @@ -487,17 +173,19 @@ class CI_User_agent { */ function _set_browser() { - foreach ($this->browsers as $key => $val) - { - if (preg_match("|".$key.".*?([0-9\.]+)|i", $this->agent, $match)) - { - $this->is_browser = TRUE; - $this->version = $match[1]; - $this->browser = $val; - return TRUE; + if (is_array($this->browsers) AND count($this->browsers) > 0) + { + foreach ($this->browsers as $key => $val) + { + if (preg_match("|".preg_quote($key).".*?([0-9\.]+)|i", $this->agent, $match)) + { + $this->is_browser = TRUE; + $this->version = $match[1]; + $this->browser = $val; + return TRUE; + } } } - return FALSE; } @@ -511,39 +199,43 @@ class CI_User_agent { */ function _set_robot() { - foreach ($this->robots as $key => $val) - { - if (preg_match("|$key|i", $this->agent)) + if (is_array($this->robots) AND count($this->robots) > 0) + { + foreach ($this->robots as $key => $val) { - $this->is_robot = TRUE; - $this->robot = $val; - return TRUE; + if (preg_match("|".preg_quote($key)."|i", $this->agent)) + { + $this->is_robot = TRUE; + $this->robot = $val; + return TRUE; + } } } - return FALSE; } // -------------------------------------------------------------------- /** - * Set the Mobile Devise + * Set the Mobile Device * * @access private * @return bool */ function _set_mobile() { - foreach ($this->mobiles as $key => $val) - { - if (FALSE !== (strpos(strtolower($this->agent), $key))) + if (is_array($this->mobiles) AND count($this->mobiles) > 0) + { + foreach ($this->mobiles as $key => $val) { - $this->is_mobile = TRUE; - $this->mobile = $val; - return TRUE; + if (FALSE !== (strpos(strtolower($this->agent), $key))) + { + $this->is_mobile = TRUE; + $this->mobile = $val; + return TRUE; + } } - } - + } return FALSE; } @@ -559,7 +251,7 @@ class CI_User_agent { { if ((count($this->languages) == 0) AND isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) AND $_SERVER['HTTP_ACCEPT_LANGUAGE'] != '') { - $languages = preg_replace('/(;q=.+)/i', '', $_SERVER['HTTP_ACCEPT_LANGUAGE']); + $languages = preg_replace('/(;q=.+)/i', '', trim($_SERVER['HTTP_ACCEPT_LANGUAGE'])); $this->languages = explode(',', $languages); } @@ -582,7 +274,7 @@ class CI_User_agent { { if ((count($this->charsets) == 0) AND isset($_SERVER['HTTP_ACCEPT_CHARSET']) AND $_SERVER['HTTP_ACCEPT_CHARSET'] != '') { - $charsets = preg_replace('/(;q=.+)/i', '', $_SERVER['HTTP_ACCEPT_CHARSET']); + $charsets = preg_replace('/(;q=.+)/i', '', trim($_SERVER['HTTP_ACCEPT_CHARSET'])); $this->charsets = explode(',', $charsets); } @@ -712,7 +404,7 @@ class CI_User_agent { // -------------------------------------------------------------------- /** - * Get the Mobile Devise + * Get the Mobile Device * * @access public * @return string @@ -732,7 +424,7 @@ class CI_User_agent { */ function referrer() { - return ( ! isset($_SERVER['HTTP_REFERER']) OR $_SERVER['HTTP_REFERER'] == '') ? '' : $_SERVER['HTTP_REFERER']; + return ( ! isset($_SERVER['HTTP_REFERER']) OR $_SERVER['HTTP_REFERER'] == '') ? '' : trim($_SERVER['HTTP_REFERER']); } // -------------------------------------------------------------------- -- cgit v1.2.3-24-g4f1b