TeraWurfl
[ class tree: TeraWurfl ] [ index: TeraWurfl ] [ all elements ]

Source for file UserAgentFactory.php

Documentation is available at UserAgentFactory.php

  1. <?php
  2. /**
  3.  * Tera_WURFL - PHP MySQL driven WURFL
  4.  * 
  5.  * Tera-WURFL was written by Steve Kamerman, and is based on the
  6.  * Java WURFL Evolution package by Luca Passani and WURFL PHP Tools by Andrea Trassati.
  7.  * This version uses a MySQL database to store the entire WURFL file, multiple patch
  8.  * files, and a persistent caching mechanism to provide extreme performance increases.
  9.  * 
  10.  * @package TeraWurfl
  11.  * @author Steve Kamerman <stevekamerman AT gmail.com>
  12.  * @version Stable 2.1.3 $Date: 2010/09/18 15:43:21
  13.  * @license http://www.mozilla.org/MPL/ MPL Vesion 1.1
  14.  */
  15. /**#@+
  16.  * Include required files
  17.  */
  18. require_once realpath(dirname(__FILE__).'/UserAgentMatchers/UserAgentMatcher.php');
  19. require_once realpath(dirname(__FILE__).'/UserAgentMatchers/CatchAllUserAgentMatcher.php');
  20. /**#@-*/
  21. /**
  22.  * Evaluates the user agent using keywords, regular expressions, UserAgentMatchers and HTTP Headers
  23.  * @package TeraWurfl
  24.  * @see UserAgentMatcher
  25.  *
  26.  */
  27.  
  28.     // Properties
  29.     public $errors;
  30.     
  31.     public static $matchers array(
  32.         "Alcatel",
  33.         "Android",
  34.         "AOL",
  35.         "Apple",
  36.         "BenQ",
  37.         "BlackBerry",
  38.         "Bot",
  39.         "CatchAll",
  40.         "Chrome",
  41.         "DoCoMo",
  42.         "Firefox",
  43.         "Grundig",
  44.         "HTC",
  45.         "Kddi",
  46.         "Konqueror",
  47.         "Kyocera",
  48.         "LG",
  49.         "Mitsubishi",
  50.         "Motorola",
  51.         "MSIE",
  52.         "Nec",
  53.         "Nintendo",
  54.         "Nokia",
  55.         "Opera",
  56.         "OperaMini",
  57.         "Panasonic",
  58.         "Pantech",
  59.         "Philips",
  60.         "Portalmmm",
  61.         "Qtek",
  62.         "Safari",
  63.         "Sagem",
  64.         "Samsung",
  65.         "Sanyo",
  66.         "Sharp",
  67.         "Siemens",
  68.         "SonyEricsson",
  69.         "SPV",
  70.         "Toshiba",
  71.         "Vodafone",
  72.         "WindowsCE"
  73.     );
  74.     
  75.     // Constructor
  76.     public function __construct(){
  77.         $this->errors = array();
  78.     }
  79.     
  80.     // Public Methods
  81.     /**
  82.      * Determines which UserAgentMatcher is the best fit for the incoming user agent and returns it
  83.      * @param TeraWurfl $wurfl 
  84.      * @param String $userAgent 
  85.      * @return UserAgentMatcher 
  86.      */
  87.     public static function createUserAgentMatcher(TeraWurfl $wurfl,$userAgent){
  88.         // $isMobile means it IS MOBILE, $isDesktop means it IS DESKTOP
  89.         // $isMobile does NOT mean it IS DESKTOP and vica-versa
  90.         $isMobile UserAgentUtils::isMobileBrowser($userAgent);
  91.         $isDesktop UserAgentUtils::isDesktopBrowser($userAgent);
  92.         $userAgent_lcase strtolower($userAgent);
  93.         
  94.         // Process exceptions
  95.         if(TeraWurflConfig::$SIMPLE_DESKTOP_ENGINE_ENABLE && $userAgent == WurflConstants::$SIMPLE_DESKTOP_UA){
  96.             // SimpleDesktopUserAgentMatcher is included via require_once realpath(dirname(__FILE__).'/in TeraWurfl.php
  97.             return new SimpleDesktopUserAgentMatcher($wurfl);
  98.         }
  99.         
  100.         // Process MOBILE user agents
  101.         if(!$isDesktop){
  102.             // High workload UAMs go first
  103.             // Nokia
  104.             if(UserAgentMatcher::contains($userAgent_lcase,'nokia')){
  105.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/NokiaUserAgentMatcher.php');
  106.                 return new NokiaUserAgentMatcher($wurfl);
  107.             }
  108.             // Samsung
  109.             if(UserAgentMatcher::contains($userAgent,array("Samsung/SGH","SAMSUNG-SGH")) ||
  110.                 UserAgentMatcher::startsWith($userAgent,array("SEC-","Samsung","SAMSUNG","SPH","SGH","SCH")) ||
  111.                 stripos($userAgent'samsung'!== false){
  112.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/SamsungUserAgentMatcher.php');
  113.                 return new SamsungUserAgentMatcher($wurfl);
  114.             }
  115.             // Blackberry
  116.             if(stripos($userAgent"blackberry"!== false){
  117.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/BlackBerryUserAgentMatcher.php');
  118.                 return new BlackBerryUserAgentMatcher($wurfl);
  119.             }
  120.             // SonyEricsson
  121.             if(UserAgentMatcher::contains($userAgent,'Sony')){
  122.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/SonyEricssonUserAgentMatcher.php');
  123.                 return new SonyEricssonUserAgentMatcher($wurfl);
  124.             }
  125.             // Motorola
  126.             if(    UserAgentMatcher::startsWith($userAgent,array('Mot-','MOT-','MOTO','moto')) ||
  127.                 UserAgentMatcher::contains($userAgent,'Motorola')
  128.                ){
  129.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/MotorolaUserAgentMatcher.php');
  130.                 return new MotorolaUserAgentMatcher($wurfl);
  131.             }
  132.             
  133.             // Continue processing UAMs in alphabetical order
  134.             // Alcatel
  135.             if(UserAgentMatcher::startsWith($userAgent_lcase,"alcatel")){
  136.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/AlcatelUserAgentMatcher.php');
  137.                 return new AlcatelUserAgentMatcher($wurfl);
  138.             }
  139.             // Apple
  140.             if(UserAgentMatcher::contains($userAgent,array("iPhone","iPod","iPad","(iphone"))){
  141.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/AppleUserAgentMatcher.php');
  142.                 return new AppleUserAgentMatcher($wurfl);
  143.             }
  144.             // BenQ
  145.             if(UserAgentMatcher::startsWith($userAgent_lcase,"benq")){
  146.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/BenQUserAgentMatcher.php');
  147.                 return new BenQUserAgentMatcher($wurfl);
  148.             }
  149.             // DoCoMo
  150.             if(UserAgentMatcher::startsWith($userAgent,"DoCoMo")){
  151.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/DoCoMoUserAgentMatcher.php');
  152.                 return new DoCoMoUserAgentMatcher($wurfl);
  153.             }
  154.             // Grundig
  155.             if(UserAgentMatcher::startsWith($userAgent_lcase,"grundig")){
  156.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/GrundigUserAgentMatcher.php');
  157.                 return new GrundigUserAgentMatcher($wurfl);
  158.             }
  159.             // HTC
  160.             if(UserAgentMatcher::contains($userAgent,array("HTC","XV6875"))){
  161.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/HTCUserAgentMatcher.php');
  162.                 return new HTCUserAgentMatcher($wurfl);
  163.             }
  164.             // KDDI
  165.             if(UserAgentMatcher::contains($userAgent,"KDDI-")){
  166.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/KddiUserAgentMatcher.php');
  167.                 return new KddiUserAgentMatcher($wurfl);
  168.             }
  169.             // Kyocera
  170.             if(UserAgentMatcher::startsWith($userAgent,array("kyocera","QC-","KWC-"))){
  171.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/KyoceraUserAgentMatcher.php');
  172.                 return new KyoceraUserAgentMatcher($wurfl);
  173.             }
  174.             // LG
  175.             if(UserAgentMatcher::startsWith($userAgent_lcase,"lg")){
  176.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/LGUserAgentMatcher.php');
  177.                 return new LGUserAgentMatcher($wurfl);
  178.             }
  179.             // Mitsubishi
  180.             if(UserAgentMatcher::startsWith($userAgent,"Mitsu")){
  181.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/MitsubishiUserAgentMatcher.php');
  182.                 return new MitsubishiUserAgentMatcher($wurfl);
  183.             }
  184.             // NEC
  185.             if(UserAgentMatcher::startsWith($userAgent,array("NEC-","KGT"))){
  186.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/NecUserAgentMatcher.php');
  187.                 return new NecUserAgentMatcher($wurfl);
  188.             }
  189.             // Nintendo
  190.             if(UserAgentMatcher::contains($userAgent,"Nintendo"|| 
  191.                 // Nintendo DS: Mozilla/4.0 (compatible; MSIE 6.0; Nitro) Opera 8.50 [en]
  192.                 (UserAgentMatcher::startsWith($userAgent,'Mozilla/'&& UserAgentMatcher::contains($userAgent,"Nitro"&& UserAgentMatcher::contains($userAgent,"Opera"))
  193.                 ){
  194.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/NintendoUserAgentMatcher.php');
  195.                 return new NintendoUserAgentMatcher($wurfl);
  196.             }
  197.             // Panasonic
  198.             if(UserAgentMatcher::startsWith($userAgent,"Panasonic")){
  199.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/PanasonicUserAgentMatcher.php');
  200.                 return new PanasonicUserAgentMatcher($wurfl);
  201.             }
  202.             // Pantech
  203.             if(UserAgentMatcher::startsWith($userAgent,array("Pantech","PT-","PANTECH","PG-"))){
  204.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/PantechUserAgentMatcher.php');
  205.                 return new PantechUserAgentMatcher($wurfl);
  206.             }
  207.             // Philips
  208.             if(UserAgentMatcher::startsWith($userAgent_lcase,"philips")){
  209.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/PhilipsUserAgentMatcher.php');
  210.                 return new PhilipsUserAgentMatcher($wurfl);
  211.             }
  212.             // Portalmmm
  213.             if(UserAgentMatcher::startsWith($userAgent,"portalmmm")){
  214.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/PortalmmmUserAgentMatcher.php');
  215.                 return new PortalmmmUserAgentMatcher($wurfl);
  216.             }
  217.             // Qtek
  218.             if(UserAgentMatcher::startsWith($userAgent,"Qtek")){
  219.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/QtekUserAgentMatcher.php');
  220.                 return new QtekUserAgentMatcher($wurfl);
  221.             }
  222.             // Sagem
  223.             if(UserAgentMatcher::startsWith($userAgent_lcase,"sagem")){
  224.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/SagemUserAgentMatcher.php');
  225.                 return new SagemUserAgentMatcher($wurfl);
  226.             }
  227.             // Sanyo
  228.             if(UserAgentMatcher::startsWith($userAgent_lcase,"sanyo"|| UserAgentMatcher::contains($userAgent,"MobilePhone")){
  229.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/SanyoUserAgentMatcher.php');
  230.                 return new SanyoUserAgentMatcher($wurfl);
  231.             }
  232.             // Sharp
  233.             if(UserAgentMatcher::startsWith($userAgent_lcase,"Sharp")){
  234.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/SharpUserAgentMatcher.php');
  235.                 return new SharpUserAgentMatcher($wurfl);
  236.             }
  237.             // Siemens
  238.             if(UserAgentMatcher::startsWith($userAgent,"SIE-")){
  239.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/SiemensUserAgentMatcher.php');
  240.                 return new SiemensUserAgentMatcher($wurfl);
  241.             }
  242.             // SPV
  243.             if(UserAgentMatcher::contains($userAgent,'SPV')){
  244.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/SPVUserAgentMatcher.php');
  245.                 return new SPVUserAgentMatcher($wurfl);
  246.             }
  247.             // Toshiba
  248.             if(UserAgentMatcher::startsWith($userAgent,"Toshiba")){
  249.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/ToshibaUserAgentMatcher.php');
  250.                 return new ToshibaUserAgentMatcher($wurfl);
  251.             }
  252.             // Vodafone
  253.             if(UserAgentMatcher::startsWith($userAgent,'Vodafone')){
  254.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/VodafoneUserAgentMatcher.php');
  255.                 return new VodafoneUserAgentMatcher($wurfl);
  256.             }
  257.             
  258.             // Process mobile browsers after mobile devices
  259.             // Android
  260.             if(UserAgentMatcher::contains($userAgent"Android")){
  261.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/AndroidUserAgentMatcher.php');
  262.                 return new AndroidUserAgentMatcher($wurfl);
  263.             }
  264.             // Opera Mini
  265.             if(UserAgentMatcher::contains($userAgent,array('Opera Mini','Opera Mobi'))){
  266.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/OperaMiniUserAgentMatcher.php');
  267.                 return new OperaMiniUserAgentMatcher($wurfl);
  268.             }
  269.             // Windows CE
  270.             if(UserAgentMatcher::contains($userAgent"Mozilla/"&& UserAgentMatcher::contains($userAgent"Windows CE")) {
  271.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/WindowsCEUserAgentMatcher.php');
  272.                 return new WindowsCEUserAgentMatcher($wurfl);
  273.             }
  274.         // End if(!$isDesktop)
  275.  
  276.         // Process Robots (Web Crawlers and the like)
  277.         if(UserAgentUtils::isRobot($userAgent)){
  278.             require_once realpath(dirname(__FILE__).'/UserAgentMatchers/BotUserAgentMatcher.php');
  279.             return new BotUserAgentMatcher($wurfl);
  280.         }
  281.         
  282.         // Process NON-MOBILE user agents        
  283.         if(!$isMobile){
  284.             // MSIE
  285.             if(UserAgentMatcher::startsWith($userAgent,"Mozilla"&& UserAgentMatcher::contains($userAgent"MSIE")
  286.                 && !UserAgentMatcher::contains($userAgentarray("Opera""armv""MOTO""BREW"))
  287.                ){
  288.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/MSIEUserAgentMatcher.php');
  289.                 return new MSIEUserAgentMatcher($wurfl);
  290.             }
  291.             // Firefox
  292.             if(UserAgentMatcher::contains($userAgent,"Firefox"&& !UserAgentMatcher::contains($userAgent,array("Sony","Novarra","Opera"))){
  293.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/FirefoxUserAgentMatcher.php');
  294.                 return new FirefoxUserAgentMatcher($wurfl);
  295.             }
  296.             // Chrome
  297.             if(UserAgentMatcher::contains($userAgent"Chrome")){
  298.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/ChromeUserAgentMatcher.php');
  299.                 return new ChromeUserAgentMatcher($wurfl);
  300.             }
  301.             // Konqueror
  302.             if(UserAgentMatcher::contains($userAgent"Konqueror")){
  303.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/KonquerorUserAgentMatcher.php');
  304.                 return new KonquerorUserAgentMatcher($wurfl);
  305.             }
  306.             // Opera
  307.             if(UserAgentMatcher::contains($userAgent"Opera")){
  308.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/OperaUserAgentMatcher.php');
  309.                 return new OperaUserAgentMatcher($wurfl);
  310.             }
  311.             // Safari
  312.             if(UserAgentMatcher::startsWith($userAgent,"Mozilla"&& UserAgentMatcher::contains($userAgent"Safari")){
  313.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/SafariUserAgentMatcher.php');
  314.                 return new SafariUserAgentMatcher($wurfl);
  315.             }
  316.             // AOL
  317.             if(UserAgentMatcher::contains($userAgentarray("AOL""America Online")) || UserAgentMatcher::contains($userAgent_lcase,"aol 9")){
  318.                 require_once realpath(dirname(__FILE__).'/UserAgentMatchers/AOLUserAgentMatcher.php');
  319.                 return new AOLUserAgentMatcher($wurfl);
  320.             }
  321.         }
  322.         
  323.         // Nothing has matched so we will have to use the CatchAllUserAgentMatcher
  324.         return new CatchAllUserAgentMatcher($wurfl);
  325.     }
  326.     public static function userAgentType($wurfl,$userAgent){
  327.         $obj self::createUserAgentMatcher($wurfl,$userAgent);
  328.         $type get_class($obj);
  329.         unset($obj);
  330.         return str_replace("UserAgentMatcher",'',$type);
  331.     }
  332. }

Documentation generated on Sun, 19 Sep 2010 00:16:07 +0000 by phpDocumentor 1.4.3