summaryrefslogtreecommitdiffstats
path: root/modules-available/locations/inc
diff options
context:
space:
mode:
authorSimon Rettberg2017-01-11 12:19:20 +0100
committerSimon Rettberg2017-01-11 12:19:20 +0100
commita0e43d9fb99f65c0f6c9357d9fbaccab36deec5a (patch)
tree51b2ea1cb42b7451c2528132390eb07e2a06fc36 /modules-available/locations/inc
parent[baseconfig_bwlp] Update translations (diff)
downloadslx-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.php35
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);
+ }
+ }
+
+}