Commit 7ab9823c authored by Steven Ayers's avatar Steven Ayers
Browse files

Issue #1936276 by bluegeek9: IPv6 in database

parent 86ba56bb
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ class HitDetails extends ControllerBase {
          'title'  => $this->t('Whois lookup'),
        ],
      ];
      $ip   = long2ip($hit_details->visitors_ip);
      $ip   = inet_ntop($hit_details->visitors_ip);
      $user = $this->entityTypeManager()->getStorage('user')->load($hit_details->visitors_uid);
      // @TODO make url, referer and username as link
      $array = [
+3 −3
Original line number Diff line number Diff line
@@ -143,7 +143,7 @@ class Hits extends ControllerBase {
   *   Array representing the table content.
   */
  protected function getData(array $header, $host) {
    if (@inet_pton($host) === FALSE) {
    if (inet_pton($host) === FALSE) {
      return NULL;
    }

@@ -167,14 +167,14 @@ class Hits extends ControllerBase {
      ]
    );
    $query->fields('u', ['name', 'uid']);
    $query->condition('v.visitors_ip', sprintf('%u', ip2long($host)), '=');
    $query->condition('v.visitors_ip', inet_pton($host), '=');
    visitors_date_filter_sql_condition($query);
    $query->orderByHeader($header);
    $query->limit($items_per_page);

    $count_query = $this->database->select('visitors', 'v');
    $count_query->addExpression('COUNT(*)');
    $count_query->condition('visitors_ip', sprintf('%u', ip2long($host)));
    $count_query->condition('visitors_ip', inet_pton($host));
    visitors_date_filter_sql_condition($count_query);
    $query->setCountQuery($count_query);
    $results = $query->execute();
+1 −1
Original line number Diff line number Diff line
@@ -154,7 +154,7 @@ class Hosts extends ControllerBase {
    $i = 0 + $page * $items_per_page;

    foreach ($results as $data) {
      $ip = long2ip($data->visitors_ip);
      $ip = inet_ntop($data->visitors_ip);
      $visitors_host_url = Url::fromRoute('visitors.host_hits', ["host" => $ip]);
      $visitors_host_link = Link::fromTextAndUrl($ip, $visitors_host_url);
      $visitors_host_link = $visitors_host_link->toRenderable();
+1 −1
Original line number Diff line number Diff line
@@ -232,7 +232,7 @@ class KernelTerminateSubscriber implements EventSubscriberInterface {
   *   IPv4) Internet Protocol dotted address.
   */
  protected function getIpStr() {
    return sprintf("%u", ip2long($this->request->getClientIp()));
    return inet_pton($this->request->getClientIp());
  }

  /**
+44 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@
 */

use Drupal\block\Entity\Block;
use Drupal\Core\Database\Database;

/**
 * Implements hook_schema().
@@ -131,3 +132,46 @@ function visitors_update_8212() {
    }
  }
}

/**
 * Support IPv6.
 */
function visitors_update_8213(&$sandbox) {
  // Retrieves a \Drupal\Core\Database\Connection which is a PDO instance.
  $database = Database::getConnection();

  if (!isset($sandbox['progress'])) {
    $sandbox['progress'] = 0;
    $sandbox['last_id'] = 0;
    $sandbox['max'] = $database->query('SELECT COUNT(visitors_id) FROM {visitors}')
      ->fetchField();
  }

  $logs = $database->select('visitors', 'v')
    ->fields('v', [
      'visitors_id',
      'visitors_ip',
    ])
    ->condition('visitors_id', $sandbox['last_id'], '>')
    ->range(0, 75)
    ->orderBy('visitors_id', 'ASC')
    ->execute();

  foreach ($logs as $log) {
    $ip_address = long2ip($log->visitors_ip);
    $packed = inet_pton($ip_address);

    if ($packed != FALSE) {
      $database->update('visitors')
        ->fields([
          'visitors_ip' => $packed,
        ])
        ->condition('visitors_id', $log->visitors_id)
        ->execute();
    }

    $sandbox['progress'] += 1;
    $sandbox['last_id'] = $log->visitors_id;
  }
  $sandbox['#finished'] = empty($sandbox['max']) ? 1 : $sandbox['progress'] / $sandbox['max'];
}