123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- <?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' => 'Configure user agent monitoring and browscap information 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('Settings for user agent detection and the log that Browscap will keep about user agents that visit the site. See <a href="@statistics">user agent statistics</a> for the actual information.', array('@statistics' => url('admin/reports/browscap'))) . '</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;
- }
|