function track_da_files_register_new_display in Track da files 7
Same name and namespace in other branches
- 8 track_da_files.module \track_da_files_register_new_display()
Registers new files displays.
2 calls to track_da_files_register_new_display()
- track_da_files_file_download_access_alter in ./
track_da_files.module - Implements hook_file_download_access_alter().
- track_da_files_tracking in ./
track_da_files.module - Analyses uri of file, updates counter and redirects user to file url.
File
- ./
track_da_files.module, line 615 - This file contains Track da files main functions.
Code
function track_da_files_register_new_display($uri, $fid, $id = NULL, $type = NULL) {
// Get variables to use later.
$counter = '';
if (!empty($fid)) {
$file = file_load($fid);
}
global $user;
$uid = $user->uid;
$ip = ip_address();
if (function_exists('browscap_get_browser')) {
$browser = browscap_get_browser();
$browser_name = isset($browser['browser']) ? $browser['browser'] : NULL;
$browser_version = isset($browser['version']) ? $browser['version'] : NULL;
$browser_platform = isset($browser['platform']) ? $browser['platform'] : NULL;
}
$referer = isset($_SERVER['HTTP_REFERER']) ? substr(check_plain($_SERVER['HTTP_REFERER']), 0, 255) : NULL;
// We check if path id exists.
if (!empty($fid)) {
$query = "SELECT p.pid FROM {track_da_files_paths} p WHERE p.fid = :fid AND p.path = :uri";
$results = db_query($query, array(
':fid' => $fid,
':uri' => $uri,
))
->fetch();
if (!empty($results)) {
$pid = $results->pid;
}
}
else {
$query = "SELECT p.pid FROM {track_da_files_paths} p WHERE p.path = :uri";
$results = db_query($query, array(
':uri' => $uri,
))
->fetch();
if (!empty($results)) {
$pid = $results->pid;
}
}
if (!empty($pid)) {
// If path is registered we make verifications to avoid duplicated entries.
$query = "SELECT t.ip, t.pid, MAX(time) max_time FROM {track_da_files} t " . "WHERE t.pid = :pid ";
$results = db_query($query, array(
':pid' => $pid,
))
->fetch();
$last_display = $results->max_time;
$last_display_ip = $results->ip;
$time = REQUEST_TIME;
if (isset($last_display)) {
$last_display_no_flood = $last_display + 10;
}
// No duplicated entry.
// If current viewer ip is the same as last displayer ip.
// And if time has passed between last display and current time.
// We can continue.
if ($ip == $last_display_ip && $last_display_no_flood > $time) {
return NULL;
}
}
else {
// If no path id we register new path.
$query = db_insert('track_da_files_paths')
->fields(array(
'fid' => isset($fid) ? $fid : NULL,
'pid' => isset($pid) ? $pid : NULL,
'path' => $uri,
))
->execute();
// Then we select path id for our file.
if (!empty($fid)) {
$query = "SELECT p.pid FROM {track_da_files_paths} p " . "WHERE p.fid = :fid AND p.path = :uri ";
$results = db_query($query, array(
':fid' => $fid,
':uri' => $uri,
))
->fetch();
}
else {
$query = "SELECT p.pid FROM {track_da_files_paths} p WHERE p.path = :uri";
$results = db_query($query, array(
':uri' => $uri,
))
->fetch();
}
$pid = $results->pid;
}
// Ensure we pass a numeric value
$id = (int) $id;
$query = db_insert('track_da_files')
->fields(array(
'pid' => isset($pid) ? $pid : NULL,
'ip' => $ip,
'browser' => isset($browser_name) ? $browser_name : NULL,
'browser_version' => isset($browser_version) ? $browser_version : NULL,
'browser_platform' => isset($browser_platform) ? $browser_platform : NULL,
'referer' => $referer,
'uid' => $uid,
'time' => REQUEST_TIME,
'id' => $id,
'type' => $type,
))
->execute();
// Each time a file is displayed an event is declared to Rules module.
if (module_exists('rules') && isset($file)) {
rules_invoke_event('track_da_files', (object) $file, $user);
}
}