diff options
author | Simon Rettberg | 2019-10-31 15:15:03 +0100 |
---|---|---|
committer | Simon Rettberg | 2019-10-31 15:15:03 +0100 |
commit | e18b0b0c764652d6f77465082eb474330f43915b (patch) | |
tree | 7f3a3e588cc6a5f6a9d4c1c02a615d1ab3cb1c98 /modules-available/statistics | |
parent | [statistics] Don't try to show room plan for non-leaf rooms (diff) | |
download | slx-admin-e18b0b0c764652d6f77465082eb474330f43915b.tar.gz slx-admin-e18b0b0c764652d6f77465082eb474330f43915b.tar.xz slx-admin-e18b0b0c764652d6f77465082eb474330f43915b.zip |
[statistics/baseconfig] Allow per-machine configvar overrides
Diffstat (limited to 'modules-available/statistics')
8 files changed, 95 insertions, 0 deletions
diff --git a/modules-available/statistics/baseconfig/getconfig.inc.php b/modules-available/statistics/baseconfig/getconfig.inc.php new file mode 100644 index 00000000..ea351d15 --- /dev/null +++ b/modules-available/statistics/baseconfig/getconfig.inc.php @@ -0,0 +1,15 @@ +<?php + +// Location handling: figure out location +if (Request::any('force', 0, 'int') === 1 && Request::any('module', false, 'string') === 'statistics') { + // Force location for testing, but require logged in admin + if (User::load()) { + $uuid = Request::any('value', '', 'string'); + } +} + +// Query machine specific settings +$res = Database::simpleQuery("SELECT setting, value FROM setting_machine WHERE machineuuid = :uuid", ['uuid' => $uuid]); +while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + ConfigHolder::add($row['setting'], $row['value'], 500); +} diff --git a/modules-available/statistics/baseconfig/hook.json b/modules-available/statistics/baseconfig/hook.json new file mode 100644 index 00000000..da28ad5d --- /dev/null +++ b/modules-available/statistics/baseconfig/hook.json @@ -0,0 +1,7 @@ +{ + "table": "setting_machine", + "field": "machineuuid", + "locationResolver": "StatisticsHooks::baseconfigLocationResolver", + "tostring": "StatisticsHooks::getBaseconfigName", + "getfallback": "StatisticsHooks::getBaseconfigParent" +}
\ No newline at end of file diff --git a/modules-available/statistics/inc/statisticshooks.inc.php b/modules-available/statistics/inc/statisticshooks.inc.php new file mode 100644 index 00000000..ead4917b --- /dev/null +++ b/modules-available/statistics/inc/statisticshooks.inc.php @@ -0,0 +1,37 @@ +<?php + +class StatisticsHooks +{ + + private static $row = false; + + private static function getRow($machineuuid) + { + if (self::$row !== false) + return; + self::$row = Database::queryFirst('SELECT hostname, clientip, locationid FROM machine WHERE machineuuid = :machineuuid', + ['machineuuid' => $machineuuid]); + } + + public static function getBaseconfigName($machineuuid) + { + self::getRow($machineuuid); + if (self::$row === false) + return false; + return self::$row['hostname'] ? self::$row['hostname'] : self::$row['clientip']; + } + + public static function getBaseconfigParent($machineuuid) + { + return false; // TODO + } + + public static function baseconfigLocationResolver($machineuuid) + { + self::getRow($machineuuid); + if (self::$row === false) + return 0; + return (int)self::$row['locationid']; + } + +}
\ No newline at end of file diff --git a/modules-available/statistics/install.inc.php b/modules-available/statistics/install.inc.php index 2bcb6b8d..2831905d 100644 --- a/modules-available/statistics/install.inc.php +++ b/modules-available/statistics/install.inc.php @@ -107,6 +107,16 @@ $res[] = tableCreate('pciid', " PRIMARY KEY (`category`,`id`) "); +// baseconfig override per machine +$res[] = tableCreate('setting_machine', ' + `machineuuid` char(36) CHARACTER SET ascii NOT NULL, + `setting` VARCHAR(28) NOT NULL, + `value` TEXT NOT NULL, + `displayvalue` TEXT NOT NULL, + PRIMARY KEY (`machineuuid`,`setting`), + KEY `setting` (`setting`) +'); + // need trigger? if ($machineCreate === UPDATE_DONE) { $addTrigger = true; @@ -259,5 +269,9 @@ while ($row = $res2->fetch(PDO::FETCH_ASSOC)) { } } +// 2019-10-31: New table for per-machine config override +$res[] = tableAddConstraint('setting_machine', 'machineuuid', 'machine', 'machineuuid', + 'ON UPDATE CASCADE ON DELETE CASCADE'); + // Create response responseFromArray($res); diff --git a/modules-available/statistics/lang/de/template-tags.json b/modules-available/statistics/lang/de/template-tags.json index 4b7ab8df..49e5b998 100644 --- a/modules-available/statistics/lang/de/template-tags.json +++ b/modules-available/statistics/lang/de/template-tags.json @@ -9,6 +9,7 @@ "lang_biosUpdateLink": "Zur Herstellerseite", "lang_biosVersion": "BIOS-Version", "lang_clientList": "Liste ausgew\u00e4hlter Rechner", + "lang_configVars": "Konfigurationsvariablen", "lang_cores": "Kerne", "lang_cpuCores": "CPU-Kerne", "lang_cpuModel": "CPU", diff --git a/modules-available/statistics/lang/en/template-tags.json b/modules-available/statistics/lang/en/template-tags.json index 08b995cb..c2fb194e 100644 --- a/modules-available/statistics/lang/en/template-tags.json +++ b/modules-available/statistics/lang/en/template-tags.json @@ -9,6 +9,7 @@ "lang_biosUpdateLink": "Go to vendor's site", "lang_biosVersion": "BIOS version", "lang_clientList": "List of selected machines", + "lang_configVars": "Config Variables", "lang_cores": "Cores", "lang_cpuCores": "CPU cores", "lang_cpuModel": "CPU", diff --git a/modules-available/statistics/page.inc.php b/modules-available/statistics/page.inc.php index c69198e8..441f0c25 100644 --- a/modules-available/statistics/page.inc.php +++ b/modules-available/statistics/page.inc.php @@ -906,6 +906,13 @@ class Page_Statistics extends Page } $client['rebootcontrol'] = $client['canReboot'] || $client['canShutdown']; } + // Baseconfig + if (Module::get('baseconfig') !== false + && User::hasPermission('.baseconfig.view', (int)$client['locationid'])) { + $cvs = Database::queryFirst('SELECT Count(*) AS cnt FROM setting_machine WHERE machineuuid = :uuid', ['uuid' => $uuid]); + $client['overriddenVars'] = is_array($cvs) ? $cvs['cnt'] : 0; + $client['hasBaseconfig'] = true; + } if (!isset($client['isclient'])) { $client['isclient'] = true; } diff --git a/modules-available/statistics/templates/machine-main.html b/modules-available/statistics/templates/machine-main.html index b1602239..66887499 100644 --- a/modules-available/statistics/templates/machine-main.html +++ b/modules-available/statistics/templates/machine-main.html @@ -176,6 +176,19 @@ </td> </tr> {{/rebootcontrol}} + {{#hasBaseconfig}} + <tr> + <td class="text-nowrap"> + {{lang_configVars}} + </td> + <td> + <a class="btn btn-sm btn-default" href="?do=baseconfig&module=statistics&machineuuid={{machineuuid}}"> + <span class="glyphicon glyphicon-edit"></span> + {{lang_edit}} ({{overriddenVars}}) + </a> + </td> + </tr> + {{/hasBaseconfig}} </table> </div> </div> |