| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | <?php/** * @file * Replacement for PHP's get_browser() function. */// Include browscap data import and user agent recording functions.include_once 'import.inc';/** * Implements hook_permission(). */function browscap_permission() {  return array(    'administer browscap' => array(      'title' => t('Administer browscap'),    ),  );}/** * Implements hook_menu(). */function browscap_menu() {  $items['admin/config/system/browscap'] = array(    'title' => 'Browscap',    'description' => 'View the current browscap data version and configure automatic update settings.',    'page callback' => 'drupal_get_form',    'page arguments' => array('browscap_settings_form'),    'access arguments' => array('administer browscap'),    'file' => 'browscap.admin.inc',  );  return $items;}/** * Implements hook_help(). */function browscap_help($path, $arg) {  switch ($path) {    case 'admin/config/system/browscap':      return '<p>' . t('View the current browscap data version and configure automatic update settings.') . '</p>';  }}/** * Implements hook_cron(). */function browscap_cron() {  if (variable_get('browscap_enable_automatic_updates', TRUE) == TRUE) {    // Check the current update timer.    $automatic_update_timer = variable_get('browscap_automatic_updates_timer', 604800);    // Check when the last update occurred.    $last_imported = variable_get('browscap_imported', REQUEST_TIME);    // Update the browscap data if the amount of time specified by the update    // timer has passed.    if (($last_imported + $automatic_update_timer) < REQUEST_TIME) {      // Update the browscap information.      _browscap_import();      // Record when the browscap information was updated.      variable_set('browscap_imported', REQUEST_TIME);    }  }}/** * Provide data about a user agent string or the current user agent. * * @param string $user_agent *   Optional user agent string to test. If empty, use the value from the *   current request. * * @return array *   An array of information about the user agent. */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;}
 |