diff options
author | Simon Rettberg | 2017-01-11 12:19:20 +0100 |
---|---|---|
committer | Simon Rettberg | 2017-01-11 12:19:20 +0100 |
commit | a0e43d9fb99f65c0f6c9357d9fbaccab36deec5a (patch) | |
tree | 51b2ea1cb42b7451c2528132390eb07e2a06fc36 /modules-available/locations/inc | |
parent | [baseconfig_bwlp] Update translations (diff) | |
download | slx-admin-a0e43d9fb99f65c0f6c9357d9fbaccab36deec5a.tar.gz slx-admin-a0e43d9fb99f65c0f6c9357d9fbaccab36deec5a.tar.xz slx-admin-a0e43d9fb99f65c0f6c9357d9fbaccab36deec5a.zip |
[statistics/locations] Update/set subnetlocationid field in DB if the DB has been updated
Diffstat (limited to 'modules-available/locations/inc')
-rw-r--r-- | modules-available/locations/inc/autolocation.inc.php | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/modules-available/locations/inc/autolocation.inc.php b/modules-available/locations/inc/autolocation.inc.php new file mode 100644 index 00000000..cccfe9b1 --- /dev/null +++ b/modules-available/locations/inc/autolocation.inc.php @@ -0,0 +1,35 @@ +<?php + +class AutoLocation +{ + + public static function rebuildAll() + { + if (Module::get('statistics') === false) + return; // Nothing to do + $res = Database::simpleQuery("SELECT machineuuid, clientip FROM machine"); + $updates = array(); + $nulls = array(); + while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + $loc = Location::mapIpToLocation($row['clientip']); + if ($loc === false) { + $nulls[] = $row['machineuuid']; + } else { + if (!isset($updates[$loc])) { + $updates[$loc] = array(); + } + $updates[$loc][] = $row['machineuuid']; + } + } + if (!empty($nulls)) { + $qs = '?' . str_repeat(',?', count($nulls) - 1); + Database::exec("UPDATE machine SET subnetlocationid = NULL WHERE machineuuid IN ($qs)", $nulls); + } + foreach ($updates as $lid => $machines) { + $qs = '?' . str_repeat(',?', count($machines) - 1); + $lid = (int)$lid; + Database::exec("UPDATE machine SET subnetlocationid = $lid WHERE machineuuid IN ($qs)", $machines); + } + } + +} |