129 lines
3.9 KiB
Plaintext
129 lines
3.9 KiB
Plaintext
<?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', FALSE)) {
|
|
// 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', 0);
|
|
|
|
// 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();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 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;
|
|
}
|