summaryrefslogtreecommitdiffstats
path: root/modules-available/locations/inc/autolocation.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules-available/locations/inc/autolocation.inc.php')
-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);
+ }
+ }
+
+}