Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
87 / 87
100.00% covered (success)
100.00%
7 / 7
CRAP
100.00% covered (success)
100.00%
1 / 1
UpgradeService
100.00% covered (success)
100.00%
87 / 87
100.00% covered (success)
100.00%
7 / 7
8
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 doLogRecord
100.00% covered (success)
100.00%
21 / 21
100.00% covered (success)
100.00%
1 / 1
1
 doVisitRecord
100.00% covered (success)
100.00%
38 / 38
100.00% covered (success)
100.00%
1 / 1
1
 getVisitorsRows
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
1 / 1
1
 deleteVisitorsRow
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 getTotal
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 upgradeRow
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace Drupal\visitors\Service;
6
7use Drupal\Core\Database\Connection;
8use Drupal\visitors\Helper\VisitorsUrl;
9use Drupal\visitors\VisitorsUpgradeInterface;
10use Drupal\visitors\VisitorsTrackerInterface;
11
12/**
13 * A class for upgrading data.
14 */
15class UpgradeService implements VisitorsUpgradeInterface {
16
17  /**
18   * The database connection.
19   *
20   * @var \Drupal\Core\Database\Connection
21   */
22  protected $database;
23
24  /**
25   * The visitors tracker.
26   *
27   * @var \Drupal\visitors\VisitorsTrackerInterface
28   */
29  protected $tracker;
30
31  /**
32   * The constructor.
33   *
34   * @param \Drupal\Core\Database\Connection $database
35   *   The database connection.
36   * @param \Drupal\visitors\VisitorsTrackerInterface $tracker
37   *   The visitors tracker.
38   */
39  public function __construct(Connection $database, VisitorsTrackerInterface $tracker) {
40    $this->database = $database;
41    $this->tracker = $tracker;
42  }
43
44  /**
45   * {@inheritdoc}
46   */
47  public function doLogRecord(array $row): array {
48    $log = [];
49    $request_time = (int) $row['visitors_date_time'];
50
51    $url = $row['visitors_url'];
52    $visitors_url = new VisitorsUrl($url);
53
54    $log['url'] = $visitors_url->getUrl();
55    $log['url_prefix'] = $visitors_url->getPrefix();
56
57    $log['uid']               = $row['visitors_uid'] ?? 0;
58    $log['title']             = $row['visitors_title'];
59    $log['referrer_url']      = $row['visitors_referer'];
60    $log['path']              = $row['visitors_path'];
61    $log['route']             = $row['route'];
62    $log['server']            = $row['server'];
63    $log['pf_network']        = $row['pf_network'];
64    $log['pf_server']         = $row['pf_server'];
65    $log['pf_transfer']       = $row['pf_transfer'];
66    $log['pf_dom_processing'] = $row['pf_dom_processing'];
67    $log['pf_dom_complete']   = $row['pf_dom_complete'];
68    $log['pf_on_load']        = $row['pf_on_load'];
69    $log['pf_total']          = $row['pf_total'];
70    $log['created']           = $request_time;
71
72    return $log;
73  }
74
75  /**
76   * {@inheritdoc}
77   */
78  public function doVisitRecord(array $row): array {
79    $visit = [];
80    $request_time = (int) $row['visitors_date_time'];
81
82    $visit['location_browser_lang'] = $row['language'];
83
84    $visit['localtime']              = $row['visitor_localtime'];
85    $visit['config_browser_engine']  = $row['config_browser_engine'];
86    $visit['config_browser_name']    = $row['config_browser_name'];
87    $visit['config_browser_version'] = $row['config_browser_version'];
88    $visit['config_client_type']     = $row['config_client_type'];
89    $visit['config_device_brand']    = $row['config_device_brand'];
90    $visit['config_device_model']    = $row['config_device_model'];
91    $visit['config_device_type']     = $row['config_device_type'];
92    $visit['config_os']              = $row['config_os'];
93    $visit['config_os_version']      = $row['config_os_version'];
94    $visit['bot']                    = $row['bot'];
95    $visit['config_resolution']      = $row['config_resolution'];
96    $visit['config_pdf']             = $row['config_pdf'];
97    $visit['config_flash']           = $row['config_flash'];
98    $visit['config_java']            = $row['config_java'];
99    $visit['config_quicktime']       = $row['config_quicktime'];
100    $visit['config_realplayer']      = $row['config_realplayer'];
101    $visit['config_windowsmedia']    = $row['config_windowsmedia'];
102    $visit['config_silverlight']     = $row['config_silverlight'];
103    $visit['config_cookie']          = $row['config_cookie'];
104    $visit['location_continent']     = $row['location_continent'];
105    $visit['location_country']       = $row['location_country'];
106    $visit['location_region']        = $row['location_region'] ?? NULL;
107    $visit['location_city']          = $row['location_city'] ?? NULL;
108    $visit['location_latitude']      = $row['location_latitude'] ?? NULL;
109    $visit['location_longitude']     = $row['location_longitude'] ?? NULL;
110    $visit['visitor_id']             = $row['visitor_id'];
111    $visit['total_time']             = 0;
112    $visit['page_count']             = 0;
113    $visit['returning']              = 0;
114    $visit['visit_count']            = 0;
115    $visit['entry_time']             = $request_time;
116    $visit['exit_time']              = $request_time;
117    $visit['location_ip']            = $row['visitors_ip'];
118
119    return $visit;
120  }
121
122  /**
123   * {@inheritdoc}
124   */
125  public function getVisitorsRows(int $batch = 50): array {
126    $select = $this->database->select('visitors', 'v');
127    $rows = $select->fields('v')
128      ->orderBy('v.visitors_date_time', 'ASC')
129      ->range(0, $batch)
130      ->execute()->fetchAll();
131
132    return $rows;
133  }
134
135  /**
136   * {@inheritdoc}
137   */
138  public function deleteVisitorsRow($id) {
139    $this->database
140      ->delete('visitors')
141      ->condition('visitors_id', $id)
142      ->execute();
143  }
144
145  /**
146   * {@inheritdoc}
147   */
148  public function getTotal(): int {
149    $select = $this->database->select('visitors', 'v');
150    $select->fields('v')
151      ->countQuery();
152
153    $count = $select->execute()->fetchField();
154
155    return (int) $count;
156  }
157
158  /**
159   * {@inheritdoc}
160   */
161  public function upgradeRow(array $row) {
162    $id = $row['visitors_id'];
163    $request_time = (int) $row['visitors_date_time'];
164
165    $visit = $this->doVisitRecord($row);
166    $log = $this->doLogRecord($row);
167    $uid = (int) $log['uid'];
168    $visit['uid'] = $uid == 0 ? NULL : $uid;
169
170    $visit_id = $this->tracker->getVisitId($visit, $request_time);
171    $log['visit_id'] = $visit_id;
172    $log_id = $this->tracker->writeLog($log);
173
174    $this->tracker->updateVisit($visit_id, $log_id, $request_time, $uid);
175
176    $this->deleteVisitorsRow($id);
177  }
178
179}