function _browscap_import in Browscap 7.2
Same name and namespace in other branches
- 8 import.inc \_browscap_import()
- 5 browscap.module \_browscap_import()
- 6.2 import.inc \_browscap_import()
- 6 import.inc \_browscap_import()
- 7 import.inc \_browscap_import()
Helper function to update the browscap data.
Parameters
bool $cron: Optional import environment. If false, display status messages to the user in addition to logging information with the watchdog.
Return value
int A code indicating the result:
- BROWSCAP_IMPORT_OK: New data was imported.
- BROWSCAP_IMPORT_NO_NEW_VERSION: No new data version was available.
- BROWSCAP_IMPORT_VERSION_ERROR: Checking the current data version failed.
- BROWSCAP_IMPORT_DATA_ERROR: The data could not be downloaded or parsed.
3 calls to _browscap_import()
- browscap_cron in ./
browscap.module - Implements hook_cron().
- browscap_refresh_submit in ./
browscap.admin.inc - Submit handler for the refresh browscap button.
- drush_browscap_import in ./
browscap.drush.inc - Imports/updates browscap data via HTTP.
File
- ./
import.inc, line 26 - Browscap data import functions.
Code
function _browscap_import($cron = TRUE) {
// Check the local browscap data version number.
$local_version = variable_get('browscap_version', 0);
watchdog('browscap', 'Checking for new browscap version...');
// Retrieve the current browscap data version number using HTTP.
$current_version = drupal_http_request('https://www.browscap.org/version-number');
// Log an error if the browscap version number could not be retrieved.
if (isset($current_version->error)) {
// Log a message with the watchdog.
watchdog('browscap', "Couldn't check version: %error", array(
'%error' => $current_version->error,
), WATCHDOG_ERROR);
// Display a message to user if the update process was triggered manually.
if ($cron == FALSE) {
drupal_set_message(t("Couldn't check version: %error", array(
'%error' => $current_version->error,
)), 'error');
}
return BROWSCAP_IMPORT_VERSION_ERROR;
}
// Sanitize the returned version number.
$current_version = check_plain(trim($current_version->data));
// Compare the current and local version numbers to determine if the browscap
// data requires updating.
if ($current_version == $local_version) {
// Log a message with the watchdog.
watchdog('browscap', 'No new version of browscap to import');
// Display a message to user if the update process was triggered manually.
if ($cron == FALSE) {
drupal_set_message(t('No new version of browscap to import'));
}
return BROWSCAP_IMPORT_NO_NEW_VERSION;
}
// Set options for downloading data with or without compression.
if (function_exists('gzdecode')) {
$options = array(
'headers' => array(
'Accept-Encoding' => 'gzip',
),
);
}
else {
// The download takes over ten times longer without gzip, and may exceed
// the default timeout of 30 seconds, so we increase the timeout.
$options = array(
'timeout' => 600,
);
}
// Retrieve the browscap data using HTTP.
$browscap_data = drupal_http_request('https://www.browscap.org/stream?q=PHP_BrowsCapINI', $options);
// Log an error if the browscap data could not be retrieved.
if (isset($browscap_data->error) || empty($browscap_data)) {
// Log a message with the watchdog.
watchdog('browscap', "Couldn't retrieve updated browscap: %error", array(
'%error' => $browscap_data->error,
), WATCHDOG_ERROR);
// Display a message to user if the update process was triggered manually.
if ($cron == FALSE) {
drupal_set_message(t("Couldn't retrieve updated browscap: %error", array(
'%error' => $browscap_data->error,
)), 'error');
}
return BROWSCAP_IMPORT_DATA_ERROR;
}
// Decompress the downloaded data if it is compressed.
if (function_exists('gzdecode')) {
$browscap_data->data = gzdecode($browscap_data->data);
}
// Parse the returned browscap data.
// The parse_ini_string function is preferred but only available in PHP 5.3.0.
if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
// Retrieve the browscap data.
$browscap_data = $browscap_data->data;
// Replace 'true' and 'false' with '1' and '0'
$browscap_data = preg_replace(array(
"/=\\s*true\\s*\n/",
"/=\\s*false\\s*\n/",
), array(
"=1\n",
"=0\n",
), $browscap_data);
// Parse the browscap data as a string.
$browscap_data = parse_ini_string($browscap_data, TRUE, INI_SCANNER_RAW);
}
else {
// Create a path and filename.
$server = $_SERVER['SERVER_NAME'];
$path = variable_get('file_temporary_path', '/tmp');
$file = "{$path}/browscap_{$server}.ini";
// Write the browscap data to a file.
$browscap_file = fopen($file, "w");
fwrite($browscap_file, $browscap_data->data);
fclose($browscap_file);
// Parse the browscap data as a file.
$browscap_data = parse_ini_file($file, TRUE);
}
if ($browscap_data) {
// Find the version information.
// The version information is the first entry in the array.
$version = array_shift($browscap_data);
// Save parsed Browscap data.
_browscap_save_parsed_data($browscap_data);
// Clear the browscap data cache.
cache_clear_all('*', 'cache_browscap', TRUE);
// Update the browscap version and imported time.
variable_set('browscap_version', $current_version);
variable_set('browscap_imported', REQUEST_TIME);
// Log a message with the watchdog.
watchdog('browscap', 'New version of browscap imported: %version', array(
'%version' => $current_version,
));
// Display a message to user if the update process was triggered manually.
if ($cron == FALSE) {
drupal_set_message(t('New version of browscap imported: %version', array(
'%version' => $current_version,
)));
}
return BROWSCAP_IMPORT_OK;
}
return BROWSCAP_IMPORT_DATA_ERROR;
}