Skip to content
This repository has been archived by the owner on Apr 11, 2024. It is now read-only.

Commit

Permalink
Show related results
Browse files Browse the repository at this point in the history
  • Loading branch information
NielsLeenheer committed Nov 27, 2013
1 parent 9f47a9d commit d1053a1
Show file tree
Hide file tree
Showing 10 changed files with 404 additions and 11 deletions.
1 change: 1 addition & 0 deletions .htaccess
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ RewriteRule ^results/television.html$ /backend/controllers/results.php?type=tel
RewriteRule ^results/other.html$ /backend/controllers/results.php?type=other
RewriteRule ^results/latest.html$ /backend/controllers/latest.php
RewriteRule ^results/search.html$ /backend/controllers/search.php
RewriteRule ^results/related/(.+).html$ /backend/controllers/fingerprint.php?id=$1
RewriteRule ^devicelab/?$ /backend/controllers/lab.php


Expand Down
23 changes: 23 additions & 0 deletions backend/controllers/fingerprint.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

include('../config.php');
include('../libraries/database.php');
include('../libraries/template.php');
include('../libraries/tools.php');
include('../models/fingerprint.php');
include('../models/results.php');


$tpl = new Template('../templates/fingerprint.html');

if (isset($_REQUEST['id'])) {
if ($row = Fingerprint::getById($_REQUEST['id'])) {
$tpl->set('fingerprint', $row);
}

if ($row = Results::getByFingerprint($_REQUEST['id'])) {
$tpl->set('results', $row);
}
}

echo $tpl->fetch();
157 changes: 157 additions & 0 deletions backend/models/fingerprint.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
<?php

class Fingerprint {

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;
}

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;
}


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')
);

$res = mysql_query("
SELECT
*
FROM
results
WHERE
fingerprint = '" . mysql_real_escape_string($id) . "'
ORDER BY
humanReadable
");

while ($row = mysql_fetch_object($res)) {
$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;
}
}
4 changes: 2 additions & 2 deletions backend/models/results.php
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ function getByBrowser($browser, $version) {
function getByUniqueId($id) {
$res = mysql_query("
SELECT
r.uniqueid AS id, 'Unique id' AS nickname, f.score, f.maximum, f.points, f.results, humanReadable, useragentHeader AS useragent, deviceWidth, deviceHeight
r.uniqueid AS id, 'Unique id' AS nickname, f.score, f.maximum, f.points, f.results, humanReadable, useragentHeader AS useragent, deviceWidth, deviceHeight, f.fingerprint
FROM
results AS r
LEFT JOIN fingerprints AS f ON (r.fingerprint = f.fingerprint)
Expand All @@ -115,7 +115,7 @@ function getByUniqueId($id) {
function getByFingerprint($id) {
$res = mysql_query("
SELECT
score, points, results
score, maximum, points, results
FROM
fingerprints
WHERE
Expand Down
Loading

0 comments on commit d1053a1

Please sign in to comment.