Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
100.00% |
87 / 87 |
|
100.00% |
7 / 7 |
CRAP | |
100.00% |
1 / 1 |
UpgradeService | |
100.00% |
87 / 87 |
|
100.00% |
7 / 7 |
8 | |
100.00% |
1 / 1 |
__construct | |
100.00% |
2 / 2 |
|
100.00% |
1 / 1 |
1 | |||
doLogRecord | |
100.00% |
21 / 21 |
|
100.00% |
1 / 1 |
1 | |||
doVisitRecord | |
100.00% |
38 / 38 |
|
100.00% |
1 / 1 |
1 | |||
getVisitorsRows | |
100.00% |
6 / 6 |
|
100.00% |
1 / 1 |
1 | |||
deleteVisitorsRow | |
100.00% |
4 / 4 |
|
100.00% |
1 / 1 |
1 | |||
getTotal | |
100.00% |
5 / 5 |
|
100.00% |
1 / 1 |
1 | |||
upgradeRow | |
100.00% |
11 / 11 |
|
100.00% |
1 / 1 |
2 |
1 | <?php |
2 | |
3 | declare(strict_types=1); |
4 | |
5 | namespace Drupal\visitors\Service; |
6 | |
7 | use Drupal\Core\Database\Connection; |
8 | use Drupal\visitors\Helper\VisitorsUrl; |
9 | use Drupal\visitors\VisitorsUpgradeInterface; |
10 | use Drupal\visitors\VisitorsTrackerInterface; |
11 | |
12 | /** |
13 | * A class for upgrading data. |
14 | */ |
15 | class 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 | } |