You are here

function track_da_files_register_new_display in Track da files 8

Same name and namespace in other branches
  1. 7 track_da_files.module \track_da_files_register_new_display()

Registers new files displays.

2 calls to track_da_files_register_new_display()
TrackDaFilesController::tracking in src/Controller/TrackDaFilesController.php
TrackDaFilesController::tracking_private in src/Controller/TrackDaFilesController.php

File

./track_da_files.module, line 151
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);
  }
  $moduleHandler = \Drupal::service('module_handler');
  $account = \Drupal::currentUser();
  $uid = $account
    ->id();
  $ip = Drupal::request()
    ->getClientIp();
  $browser = \Drupal::service('browscap')
    ->getBrowser();
  $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']) ? $_SERVER['HTTP_REFERER'] : 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 GROUP BY t.ip, t.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;
  }
  $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))) {
  if ($moduleHandler
    ->moduleExists('rules') && isset($file)) {
    rules_invoke_event('track_da_files', (object) $file, $user);
  }
}