/** * Returns the matching WURFL ID for a given User Agent * @return String WURFL ID */ protected function getDeviceIDFromUALoose() { $this->matcherHistory = array(); // Return generic UA if userAgent is empty if (strlen($this->userAgent) == 0) { $this->matchData['matcher'] = "none"; $this->matchData['match_type'] = "none"; $this->matchData['match'] = false; $this->setMatcherHistory(); return WurflConstants::$GENERIC; } // Check for exact match if (TeraWurflConfig::$SIMPLE_DESKTOP_ENGINE_ENABLE && $this->userAgent == WurflConstants::$SIMPLE_DESKTOP_UA) { // SimpleDesktop UA Matching avoids querying the database here $deviceID = WurflConstants::$GENERIC_WEB_BROWSER; } else { $deviceID = $this->db->getDeviceFromUA($this->userAgent); } $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->userAgent); $this->matcherHistory[] = $this->userAgentMatcher->matcherName() . "(conclusive)"; if ($deviceID != WurflConstants::$GENERIC) { $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" && UserAgentMatcher::contains($this->userAgent, "Vodafone")) { @(require_once realpath(dirname(__FILE__) . '/UserAgentMatchers/VodafoneUserAgentMatcher.php')); $vodafoneUserAgentMatcher = new VodafoneUserAgentMatcher($this); $this->matcherHistory[] = $vodafoneUserAgentMatcher->matcherName() . "(conclusive)"; $deviceID = $vodafoneUserAgentMatcher->applyConclusiveMatch($this->userAgent); if ($deviceID != WurflConstants::$GENERIC) { $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->userAgent); $this->matcherHistory[] = $this->userAgentMatcher->matcherName() . "(recovery)"; if ($deviceID != WurflConstants::$GENERIC) { $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->userAgent); if ($deviceID != WurflConstants::$GENERIC) { // 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 (strlen($this->httpAccept) > 0) { $this->matcherHistory[] = "http_accept"; if (UserAgentMatcher::contains($this->httpAccept, array(WurflConstants::$ACCEPT_HEADER_VND_WAP_XHTML_XML, WurflConstants::$ACCEPT_HEADER_XHTML_XML, WurflConstants::$ACCEPT_HEADER_TEXT_HTML))) { $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_XHTML; } } $this->matchData['matcher'] = "none"; $this->matchData['match_type'] = "none"; $this->matchData['match'] = false; $this->setMatcherHistory(); if (UserAgentUtils::isMobileBrowser($this->userAgent)) { return WurflConstants::$GENERIC_XHTML; } return WurflConstants::$GENERIC_WEB_BROWSER; }
/** * 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; }