Exemplo n.º 1
0
 public function __construct(TeraWurfl $wurfl)
 {
     parent::__construct($wurfl);
 }
 /**
  * Determines which UserAgentMatcher is the best fit for the incoming user agent and returns it
  * @param TeraWurfl $wurfl
  * @param String $userAgent
  * @return UserAgentMatcher
  */
 public static function createUserAgentMatcher(TeraWurfl $wurfl, $userAgent)
 {
     // $isMobile means it IS MOBILE, $isDesktop means it IS DESKTOP
     // $isMobile does NOT mean it IS DESKTOP and vica-versa
     $isMobile = UserAgentUtils::isMobileBrowser($userAgent);
     $isDesktop = UserAgentUtils::isDesktopBrowser($userAgent);
     $userAgent_lcase = strtolower($userAgent);
     // Process exceptions
     if (TeraWurflConfig::$SIMPLE_DESKTOP_ENGINE_ENABLE && $userAgent == WurflConstants::$SIMPLE_DESKTOP_UA) {
         // SimpleDesktopUserAgentMatcher is included via require_once realpath(dirname(__FILE__).'/in TeraWurfl.php
         return new SimpleDesktopUserAgentMatcher($wurfl);
     }
     // Process MOBILE user agents
     if (!$isDesktop) {
         // High workload UAMs go first
         // Nokia
         if (UserAgentMatcher::contains($userAgent_lcase, 'nokia')) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/NokiaUserAgentMatcher.php');
             return new NokiaUserAgentMatcher($wurfl);
         }
         // Samsung
         if (UserAgentMatcher::contains($userAgent, array("Samsung/SGH", "SAMSUNG-SGH")) || UserAgentMatcher::startsWith($userAgent, array("SEC-", "Samsung", "SAMSUNG", "SPH", "SGH", "SCH")) || stripos($userAgent, 'samsung') !== false) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/SamsungUserAgentMatcher.php');
             return new SamsungUserAgentMatcher($wurfl);
         }
         // Blackberry
         if (stripos($userAgent, "blackberry") !== false) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/BlackBerryUserAgentMatcher.php');
             return new BlackBerryUserAgentMatcher($wurfl);
         }
         // SonyEricsson
         if (UserAgentMatcher::contains($userAgent, 'Sony')) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/SonyEricssonUserAgentMatcher.php');
             return new SonyEricssonUserAgentMatcher($wurfl);
         }
         // Motorola
         if (UserAgentMatcher::startsWith($userAgent, array('Mot-', 'MOT-', 'MOTO', 'moto')) || UserAgentMatcher::contains($userAgent, 'Motorola')) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/MotorolaUserAgentMatcher.php');
             return new MotorolaUserAgentMatcher($wurfl);
         }
         // Continue processing UAMs in alphabetical order
         // Alcatel
         if (UserAgentMatcher::startsWith($userAgent_lcase, "alcatel")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/AlcatelUserAgentMatcher.php');
             return new AlcatelUserAgentMatcher($wurfl);
         }
         // Apple
         if (UserAgentMatcher::contains($userAgent, array("iPhone", "iPod", "iPad", "(iphone"))) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/AppleUserAgentMatcher.php');
             return new AppleUserAgentMatcher($wurfl);
         }
         // BenQ
         if (UserAgentMatcher::startsWith($userAgent_lcase, "benq")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/BenQUserAgentMatcher.php');
             return new BenQUserAgentMatcher($wurfl);
         }
         // DoCoMo
         if (UserAgentMatcher::startsWith($userAgent, "DoCoMo")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/DoCoMoUserAgentMatcher.php');
             return new DoCoMoUserAgentMatcher($wurfl);
         }
         // Grundig
         if (UserAgentMatcher::startsWith($userAgent_lcase, "grundig")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/GrundigUserAgentMatcher.php');
             return new GrundigUserAgentMatcher($wurfl);
         }
         // HTC
         if (UserAgentMatcher::contains($userAgent, array("HTC", "XV6875"))) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/HTCUserAgentMatcher.php');
             return new HTCUserAgentMatcher($wurfl);
         }
         // KDDI
         if (UserAgentMatcher::contains($userAgent, "KDDI-")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/KddiUserAgentMatcher.php');
             return new KddiUserAgentMatcher($wurfl);
         }
         // Kyocera
         if (UserAgentMatcher::startsWith($userAgent, array("kyocera", "QC-", "KWC-"))) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/KyoceraUserAgentMatcher.php');
             return new KyoceraUserAgentMatcher($wurfl);
         }
         // LG
         if (UserAgentMatcher::startsWith($userAgent_lcase, "lg")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/LGUserAgentMatcher.php');
             return new LGUserAgentMatcher($wurfl);
         }
         // Mitsubishi
         if (UserAgentMatcher::startsWith($userAgent, "Mitsu")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/MitsubishiUserAgentMatcher.php');
             return new MitsubishiUserAgentMatcher($wurfl);
         }
         // NEC
         if (UserAgentMatcher::startsWith($userAgent, array("NEC-", "KGT"))) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/NecUserAgentMatcher.php');
             return new NecUserAgentMatcher($wurfl);
         }
         // Nintendo
         if (UserAgentMatcher::contains($userAgent, "Nintendo") || UserAgentMatcher::startsWith($userAgent, 'Mozilla/') && UserAgentMatcher::contains($userAgent, "Nitro") && UserAgentMatcher::contains($userAgent, "Opera")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/NintendoUserAgentMatcher.php');
             return new NintendoUserAgentMatcher($wurfl);
         }
         // Panasonic
         if (UserAgentMatcher::startsWith($userAgent, "Panasonic")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/PanasonicUserAgentMatcher.php');
             return new PanasonicUserAgentMatcher($wurfl);
         }
         // Pantech
         if (UserAgentMatcher::startsWith($userAgent, array("Pantech", "PT-", "PANTECH", "PG-"))) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/PantechUserAgentMatcher.php');
             return new PantechUserAgentMatcher($wurfl);
         }
         // Philips
         if (UserAgentMatcher::startsWith($userAgent_lcase, "philips")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/PhilipsUserAgentMatcher.php');
             return new PhilipsUserAgentMatcher($wurfl);
         }
         // Portalmmm
         if (UserAgentMatcher::startsWith($userAgent, "portalmmm")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/PortalmmmUserAgentMatcher.php');
             return new PortalmmmUserAgentMatcher($wurfl);
         }
         // Qtek
         if (UserAgentMatcher::startsWith($userAgent, "Qtek")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/QtekUserAgentMatcher.php');
             return new QtekUserAgentMatcher($wurfl);
         }
         // Sagem
         if (UserAgentMatcher::startsWith($userAgent_lcase, "sagem")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/SagemUserAgentMatcher.php');
             return new SagemUserAgentMatcher($wurfl);
         }
         // Sanyo
         if (UserAgentMatcher::startsWith($userAgent_lcase, "sanyo") || UserAgentMatcher::contains($userAgent, "MobilePhone")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/SanyoUserAgentMatcher.php');
             return new SanyoUserAgentMatcher($wurfl);
         }
         // Sharp
         if (UserAgentMatcher::startsWith($userAgent_lcase, "sharp")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/SharpUserAgentMatcher.php');
             return new SharpUserAgentMatcher($wurfl);
         }
         // Siemens
         if (UserAgentMatcher::startsWith($userAgent, "SIE-")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/SiemensUserAgentMatcher.php');
             return new SiemensUserAgentMatcher($wurfl);
         }
         // SPV
         if (UserAgentMatcher::contains($userAgent, 'SPV')) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/SPVUserAgentMatcher.php');
             return new SPVUserAgentMatcher($wurfl);
         }
         // Toshiba
         if (UserAgentMatcher::startsWith($userAgent, "Toshiba")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/ToshibaUserAgentMatcher.php');
             return new ToshibaUserAgentMatcher($wurfl);
         }
         // Vodafone
         if (UserAgentMatcher::startsWith($userAgent, 'Vodafone')) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/VodafoneUserAgentMatcher.php');
             return new VodafoneUserAgentMatcher($wurfl);
         }
         // Process mobile browsers after mobile devices
         // Android
         if (UserAgentMatcher::contains($userAgent, "Android")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/AndroidUserAgentMatcher.php');
             return new AndroidUserAgentMatcher($wurfl);
         }
         // Opera Mini
         if (UserAgentMatcher::contains($userAgent, array('Opera Mini', 'Opera Mobi'))) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/OperaMiniUserAgentMatcher.php');
             return new OperaMiniUserAgentMatcher($wurfl);
         }
         // Windows CE
         if (UserAgentMatcher::contains($userAgent, "Mozilla/") && UserAgentMatcher::contains($userAgent, "Windows CE")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/WindowsCEUserAgentMatcher.php');
             return new WindowsCEUserAgentMatcher($wurfl);
         }
     }
     // End if(!$isDesktop)
     // Process Robots (Web Crawlers and the like)
     if (UserAgentUtils::isRobot($userAgent)) {
         require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/BotUserAgentMatcher.php');
         return new BotUserAgentMatcher($wurfl);
     }
     // Process NON-MOBILE user agents
     if (!$isMobile) {
         // MSIE
         if (UserAgentMatcher::startsWith($userAgent, "Mozilla") && UserAgentMatcher::contains($userAgent, "MSIE") && !UserAgentMatcher::contains($userAgent, array("Opera", "armv", "MOTO", "BREW"))) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/MSIEUserAgentMatcher.php');
             return new MSIEUserAgentMatcher($wurfl);
         }
         // Firefox
         if (UserAgentMatcher::contains($userAgent, "Firefox") && !UserAgentMatcher::contains($userAgent, array("Sony", "Novarra", "Opera"))) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/FirefoxUserAgentMatcher.php');
             return new FirefoxUserAgentMatcher($wurfl);
         }
         // Chrome
         if (UserAgentMatcher::contains($userAgent, "Chrome")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/ChromeUserAgentMatcher.php');
             return new ChromeUserAgentMatcher($wurfl);
         }
         // Konqueror
         if (UserAgentMatcher::contains($userAgent, "Konqueror")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/KonquerorUserAgentMatcher.php');
             return new KonquerorUserAgentMatcher($wurfl);
         }
         // Opera
         if (UserAgentMatcher::contains($userAgent, "Opera")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/OperaUserAgentMatcher.php');
             return new OperaUserAgentMatcher($wurfl);
         }
         // Safari
         if (UserAgentMatcher::startsWith($userAgent, "Mozilla") && UserAgentMatcher::contains($userAgent, "Safari")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/SafariUserAgentMatcher.php');
             return new SafariUserAgentMatcher($wurfl);
         }
         // AOL
         if (UserAgentMatcher::contains($userAgent, array("AOL", "America Online")) || UserAgentMatcher::contains($userAgent_lcase, "aol 9")) {
             require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/AOLUserAgentMatcher.php');
             return new AOLUserAgentMatcher($wurfl);
         }
     }
     // Nothing has matched so we will have to use the CatchAllUserAgentMatcher
     return new CatchAllUserAgentMatcher($wurfl);
 }
Exemplo n.º 3
0
 public function getDeviceFromUA_RIS($userAgent, $tolerance, UserAgentMatcher &$matcher)
 {
     $this->numQueries++;
     $query = sprintf("CALL " . TeraWurflConfig::$TABLE_PREFIX . "_RIS(%s,%s,%s)", $this->SQLPrep($userAgent), $tolerance, $this->SQLPrep($matcher->tableSuffix()));
     $res = $this->dbcon->query($query);
     if (!$res) {
         throw new Exception(sprintf("Error in DB RIS Query: %s. \nQuery: %s\n", $this->dbcon->error, $query));
         exit;
     }
     $data = $res->fetch_assoc();
     $this->cleanConnection();
     $wurflid = $data['DeviceID'];
     return $wurflid == 'NULL' || is_null($wurflid) ? WurflConstants::$GENERIC : $wurflid;
 }
 public function getDeviceFromUA_RIS($userAgent, $tolerance, UserAgentMatcher &$matcher)
 {
     $this->numQueries++;
     $query = sprintf("EXEC " . TeraWurflConfig::$TABLE_PREFIX . "_RIS %s,%s,%s", $this->SQLPrep($userAgent), $tolerance, $this->SQLPrep($matcher->tableSuffix()));
     $result = sqlsrv_query($this->dbcon, $query);
     if (!$result) {
         throw new Exception(sprintf("Error in DB RIS Query: %s. \nQuery: %s\n", $this->lastDBError(), $query));
     }
     $data = sqlsrv_fetch_array($result);
     sqlsrv_free_stmt($result);
     $wurflid = $data['DeviceID'];
     return $wurflid == 'NULL' || is_null($wurflid) ? WurflConstants::NO_MATCH : $wurflid;
 }
Exemplo n.º 5
0
 public function fullTableName()
 {
     return TeraWurflConfig::$TABLE_PREFIX . '_' . $this->userAgentMatcher->tableSuffix();
 }
 public function __construct(TeraWurfl $wurfl)
 {
     parent::__construct($wurfl);
     $this->matcher = $this->matcherName();
 }
 public function getDeviceFromUA_RIS($userAgent, $tolerance, UserAgentMatcher &$matcher)
 {
     $this->numQueries++;
     $stmt = $this->dbcon->prepare('CALL ' . TeraWurflConfig::$TABLE_PREFIX . '_RIS(?, ?, ?)');
     if (!$stmt->execute(array($userAgent, $tolerance, $matcher->tableSuffix()))) {
         $error = $stmt->errorInfo();
         throw new Exception(sprintf("Error in DB RIS Query: %s\n", $error[2]));
     }
     $data = $stmt->fetch(PDO::FETCH_ASSOC);
     $stmt = null;
     $wurflid = $data['DeviceID'];
     return $wurflid == 'NULL' || is_null($wurflid) ? WurflConstants::NO_MATCH : $wurflid;
 }
 /**
  * RIS == Reduction in String (reduce string one char at a time)
  *
  * @param string $userAgent
  * @param int $tolerance
  * @param UserAgentMatcher $matcher
  * @return string A TW Device ID
  */
 public function getDeviceFromUA_RIS($userAgent, $tolerance, UserAgentMatcher $matcher)
 {
     $toexec = 'function(ua, tolerance, matcher) { return performRis(ua, tolerance, matcher) }';
     $args = array(utf8_encode($userAgent), $tolerance, $matcher->tableSuffix());
     $this->numQueries++;
     $response = $this->dbcon->execute($toexec, $args);
     if (!empty($response['ok']) && $response['ok'] == 1 && !empty($response['retval'])) {
         return $response['retval'];
     }
     return WurflConstants::$GENERIC;
 }
Exemplo n.º 9
0
 /**
  * The given user agent is definitely from a mobile device
  * @param String User agent
  * @return Bool
  */
 public static function isMobileBrowser($ua)
 {
     $lowerua = strtolower($ua);
     if (self::isDesktopBrowser($ua)) {
         return false;
     }
     if (UserAgentMatcher::contains($lowerua, WurflConstants::$MOBILE_BROWSERS)) {
         return true;
     }
     if (UserAgentMatcher::regexContains($ua, array('/[^\\d]\\d{3}x\\d{3}/'))) {
         return true;
     }
     return false;
 }
Exemplo n.º 10
0
 /**
  * Returns the matching WURFL ID for a given User Agent
  * @return string WURFL ID
  */
 protected function getDeviceIDFromRequestLoose()
 {
     $this->matcherHistory = array();
     // Return generic UA if userAgent is empty
     if (strlen($this->httpRequest->user_agent) == 0) {
         $this->matchData['matcher'] = "none";
         $this->matchData['match_type'] = "none";
         $this->matchData['match'] = false;
         $this->setMatcherHistory();
         if ($this->httpRequest->uaprof instanceof TeraWurflUserAgentProfile && $this->httpRequest->uaprof->containsValidUrl()) {
             return WurflConstants::GENERIC_MOBILE;
         } else {
             return WurflConstants::NO_MATCH;
         }
     }
     // Check for exact match
     if (TeraWurflConfig::$SIMPLE_DESKTOP_ENGINE_ENABLE && $this->httpRequest->user_agent == WurflConstants::SIMPLE_DESKTOP_UA) {
         // SimpleDesktop UA Matching avoids querying the database here
         $this->matchData['matcher'] = $this->userAgentMatcher->matcherName();
         $this->matchData['match_type'] = "high_performance";
         $this->matchData['match'] = true;
         $this->matcherHistory[] = $this->matchData['matcher'] . "(high_performance)";
         $this->setMatcherHistory();
         return WurflConstants::GENERIC_WEB_BROWSER;
     } else {
         $deviceID = $this->db->getDeviceFromUA($this->httpRequest->user_agent->normalized);
     }
     $this->matcherHistory[] = $this->userAgentMatcher->matcherName() . "(exact)";
     if ($deviceID !== false) {
         $this->matchData['matcher'] = $this->userAgentMatcher->matcherName();
         $this->matchData['match_type'] = "exact";
         $this->matchData['match'] = true;
         $this->setMatcherHistory();
         return $deviceID;
     }
     // Check for a conclusive match
     $deviceID = $this->userAgentMatcher->applyConclusiveMatch($this->httpRequest);
     $this->matcherHistory[] = $this->userAgentMatcher->matcherName() . "(conclusive)";
     if ($deviceID != WurflConstants::NO_MATCH) {
         $this->matchData['matcher'] = $this->userAgentMatcher->matcherName();
         $this->matchData['match_type'] = "conclusive";
         $this->matchData['match'] = true;
         $this->setMatcherHistory();
         return $deviceID;
     }
     /*
     // Check for Vodafone magic
     if ($this->userAgentMatcher->matcherName()!="VodafoneUserAgentMatcher" && $this->httpRequest->user_agent->contains("Vodafone")) {
     	@require_once realpath(dirname(__FILE__).'/UserAgentMatchers/VodafoneUserAgentMatcher.php');
     	$vodafoneUserAgentMatcher = new VodafoneUserAgentMatcher($this);
     	$this->matcherHistory[] = $vodafoneUserAgentMatcher->matcherName() . "(conclusive)";
     	$deviceID = $vodafoneUserAgentMatcher->applyConclusiveMatch($this->httpRequest);
     	if ($deviceID != WurflConstants::NO_MATCH) {
     		$this->matchData['matcher'] = $vodafoneUserAgentMatcher->matcherName();
     		$this->matchData['match_type'] = "conclusive";
     		$this->matchData['match'] = true;
     		$this->setMatcherHistory();
     		return $deviceID;
     	}
     }
     */
     // Check for recovery match
     $deviceID = $this->userAgentMatcher->applyRecoveryMatch($this->httpRequest);
     $this->matcherHistory[] = $this->userAgentMatcher->matcherName() . "(recovery)";
     if ($deviceID != WurflConstants::NO_MATCH) {
         $this->matchData['matcher'] = $this->userAgentMatcher->matcherName();
         $this->matchData['match_type'] = "recovery";
         $this->matchData['match'] = false;
         $this->setMatcherHistory();
         return $deviceID;
     }
     // Check CatchAll if it's not already in use
     if ($this->userAgentMatcher->matcherName() != "CatchAllUserAgentMatcher") {
         $catchAllUserAgentMatcher = new CatchAllUserAgentMatcher($this);
         $this->matcherHistory[] = $catchAllUserAgentMatcher->matcherName() . "(recovery)";
         $deviceID = $catchAllUserAgentMatcher->applyRecoveryMatch($this->httpRequest);
         if ($deviceID != WurflConstants::NO_MATCH) {
             // The CatchAll matcher is intelligent enough to determine the match properties
             $this->matchData['matcher'] = $catchAllUserAgentMatcher->matcher;
             $this->matchData['match_type'] = $catchAllUserAgentMatcher->match_type;
             $this->matchData['match'] = $catchAllUserAgentMatcher->match;
             $this->setMatcherHistory();
             return $deviceID;
         }
     }
     // A matching device still hasn't been found - check HTTP ACCEPT headers
     if ($this->httpRequest->accept->length() > 0) {
         $this->matcherHistory[] = 'http_accept';
         if ($this->httpRequest->accept->contains('application/vnd.wap.xhtml+xml')) {
             $this->matchData['matcher'] = 'http_accept';
             $this->matchData['match_type'] = 'recovery';
             // This isn't really a match, it's a suggestion
             $this->matchData['match'] = false;
             $this->setMatcherHistory();
             return WurflConstants::GENERIC_MOBILE;
         }
     }
     $this->matchData['matcher'] = "none";
     $this->matchData['match_type'] = "none";
     $this->matchData['match'] = false;
     $this->setMatcherHistory();
     if ($this->httpRequest->uaprof instanceof TeraWurflUserAgentProfile && $this->httpRequest->uaprof->containsValidUrl()) {
         return WurflConstants::GENERIC_MOBILE;
     }
     if ($this->httpRequest->isMobileBrowser()) {
         return WurflConstants::GENERIC_MOBILE;
     }
     if ($this->httpRequest->isSmartTV()) {
         return WurflConstants::GENERIC_SMARTTV;
     }
     return WurflConstants::GENERIC;
 }