You are here

function browscap_get_browser in Browscap 8

Same name and namespace in other branches
  1. 5 browscap.module \browscap_get_browser()
  2. 6.2 browscap.module \browscap_get_browser()
  3. 6 browscap.module \browscap_get_browser()
  4. 7.2 browscap.module \browscap_get_browser()
  5. 7 browscap.module \browscap_get_browser()

Provide data about a user agent string or the current user agent.

Parameters

string $user_agent: Optional user agent string to test. If empty, use the value from the current request.

Return value

array An array of information about the user agent.

File

./browscap.module, line 78
Replacement for PHP's get_browser() function.

Code

function browscap_get_browser($user_agent = NULL) {

  // Determine the current user agent if a user agent was not specified
  if ($user_agent != NULL) {
    $user_agent = check_plain(trim($user_agent));
  }
  elseif ($user_agent == NULL && isset($_SERVER['HTTP_USER_AGENT'])) {
    $user_agent = check_plain(trim($_SERVER['HTTP_USER_AGENT']));
  }
  else {
    $user_agent = 'Default Browser';
  }

  // Check the cache for user agent data
  $cache = cache_get($user_agent, 'cache_browscap');

  // Attempt to find a cached user agent
  // Otherwise store the user agent data in the cache
  if (!empty($cache) && $cache->created > REQUEST_TIME - 60 * 60 * 24) {
    $user_agent_properties = $cache->data;
  }
  else {

    // Find the user agent's properties
    // The useragent column contains the wildcarded pattern to match against our
    // full-length string while the ORDER BY chooses the most-specific matching
    // pattern
    $user_agent_properties = db_query("SELECT * FROM {browscap} WHERE :useragent LIKE useragent ORDER BY LENGTH(useragent) DESC", array(
      ':useragent' => $user_agent,
    ))
      ->fetchObject();

    // Store user agent data in the cache
    cache_set($user_agent, $user_agent_properties, 'cache_browscap');
  }

  // Create an array to hold the user agent's properties
  $properties = array();

  // Return an array of user agent properties
  if (isset($user_agent_properties) && isset($user_agent_properties->data)) {

    // Unserialize the user agent data found in the cache or the database
    $properties = unserialize($user_agent_properties->data);

    // Set the user agent name and name pattern
    $properties['useragent'] = $user_agent;
    $properties['browser_name_pattern'] = strtr($user_agent_properties->useragent, '%_', '*?');
  }
  else {

    // Set the user agent name and name pattern to 'unrecognized'
    $properties['useragent'] = 'unrecognized';
    $properties['browser_name_pattern'] = strtr('unrecognized', '%_', '*?');
  }
  return $properties;
}