trisquel-icecat/icecat/debian/tests/data/HTML5test/backend/models/fingerprint.php

159 lines
No EOL
4.8 KiB
PHP

<?php
class Fingerprint {
static function calculatePercentages($items) {
$total = 0;
while (list($k,$v) = each($items)) {
$total += $v['value'];
}
reset ($items);
while (list($k,$v) = each($items)) {
$items[$k]['percentage'] = round(($v['value'] / $total) * 100);
if ($items[$k]['percentage'] == 0) {
unset($items[$k]);
}
//unset($items[$k]['value']);
}
return $items;
}
static function process($data) {
$data['items'] = Fingerprint::calculatePercentages($data['items']);
if (count($data['items']) == 1) {
$data['status'] = 'fixed';
reset ($data['items']);
list($data['value'],) = each($data['items']);
//unset($data['items']);
}
if (count($data['items']) > 20) {
$data['status'] = 'none';
unset($data['items']);
}
if ($data['status'] == 'fixed' || $data['status'] == 'list') {
$items = array();
reset ($data['items']);
while (list($k,$v) = each($data['items'])) {
$items[] = array('name' => $k, 'value' => $v['value'], 'percentage' => $v['percentage']);
}
$data['items'] = $items;
usort($data['items'], function ($a, $b) {
if ($a['value'] == $b['value']) {
return 0;
}
return ($a['value'] > $b['value']) ? -1 : 1;
});
}
return $data;
}
static function getById($id) {
$results = array(
'results' => array(),
'browserName' => array('items' => array(), 'status' => 'list'),
'browserVersion' => array('items' => array(), 'status' => 'list'),
'osName' => array('items' => array(), 'status' => 'list'),
'osVersion' => array('items' => array(), 'status' => 'list'),
'deviceManufacturer' => array('items' => array(), 'status' => 'list'),
'deviceModel' => array('items' => array(), 'status' => 'list')
);
$db = Factory::Database();
$result = $db->query("
SELECT
*
FROM
results
WHERE
fingerprint = '" . $db->escape_string($id) . "'
ORDER BY
humanReadable
");
while ($row = $result->fetch_object()) {
$results['results'][] = (object) array(
'id' => $row->uniqueid,
'name' => $row->humanReadable,
'ago' => time_ago(strtotime($row->timestamp))
);
if (!isset($results['browserName']['items'][trim($row->browserName)])) {
$results['browserName']['items'][trim($row->browserName)] = array('value' => 0);
}
$results['browserName']['items'][trim($row->browserName)]['value']++;
if (!isset($results['browserVersion']['items'][trim($row->browserName . ' ' . $row->browserVersion)])) {
$results['browserVersion']['items'][trim($row->browserName . ' ' . $row->browserVersion)] = array('value' => 0);
}
$results['browserVersion']['items'][trim($row->browserName . ' ' . $row->browserVersion)]['value']++;
if (!isset($results['osName']['items'][trim($row->osName)])) {
$results['osName']['items'][trim($row->osName)] = array('value' => 0);
}
$results['osName']['items'][trim($row->osName)]['value']++;
if (!isset($results['osVersion']['items'][trim($row->osName . ' ' . $row->osVersion)])) {
$results['osVersion']['items'][trim($row->osName . ' ' . $row->osVersion)] = array('value' => 0);
}
$results['osVersion']['items'][trim($row->osName . ' ' . $row->osVersion)]['value']++;
if (!isset($results['deviceManufacturer']['items'][trim($row->deviceManufacturer)])) {
$results['deviceManufacturer']['items'][trim($row->deviceManufacturer)] = array('value' => 0);
}
$results['deviceManufacturer']['items'][trim($row->deviceManufacturer)]['value']++;
if (!isset($results['deviceModel']['items'][trim($row->deviceManufacturer . ' ' . $row->deviceModel)])) {
$results['deviceModel']['items'][trim($row->deviceManufacturer . ' ' . $row->deviceModel)] = array('value' => 0);
}
$results['deviceModel']['items'][trim($row->deviceManufacturer . ' ' . $row->deviceModel)]['value']++;
}
$results['browserName'] = Fingerprint::process($results['browserName']);
$results['browserVersion'] = Fingerprint::process($results['browserVersion']);
$results['osName'] = Fingerprint::process($results['osName']);
$results['osVersion'] = Fingerprint::process($results['osVersion']);
$results['deviceManufacturer'] = Fingerprint::process($results['deviceManufacturer']);
$results['deviceModel'] = Fingerprint::process($results['deviceModel']);
if ($results['deviceManufacturer']['status'] == 'fixed' && $results['deviceManufacturer']['value'] == '') {
$results['deviceManufacturer']['status'] = 'none';
unset($results['deviceManufacturer']['value']);
}
if ($results['deviceModel']['status'] == 'fixed' && $results['deviceModel']['value'] == '') {
$results['deviceModel']['status'] = 'none';
unset($results['deviceModel']['value']);
}
return $results;
}
}