diff options
author | Simon Rettberg | 2019-03-21 13:48:57 +0100 |
---|---|---|
committer | Simon Rettberg | 2019-03-21 13:48:57 +0100 |
commit | 84c110647b84fc29fb8443d088c710ba8ecf42fe (patch) | |
tree | 953f30dfbb2fcb0f5ad1ec4c7f68f667bdded94f /modules-available/sysconfig/install.inc.php | |
parent | [serversetup-bwlp-ipxe] Fix stdbootentry edit; fix duplicate id in html (diff) | |
download | slx-admin-84c110647b84fc29fb8443d088c710ba8ecf42fe.tar.gz slx-admin-84c110647b84fc29fb8443d088c710ba8ecf42fe.tar.xz slx-admin-84c110647b84fc29fb8443d088c710ba8ecf42fe.zip |
[sysconfig] Remember last modified date, show as tooltip
Diffstat (limited to 'modules-available/sysconfig/install.inc.php')
-rw-r--r-- | modules-available/sysconfig/install.inc.php | 57 |
1 files changed, 43 insertions, 14 deletions
diff --git a/modules-available/sysconfig/install.inc.php b/modules-available/sysconfig/install.inc.php index 3e99b777..f402f217 100644 --- a/modules-available/sysconfig/install.inc.php +++ b/modules-available/sysconfig/install.inc.php @@ -1,16 +1,17 @@ <?php -$res = array(); +$update = array(); -$res[] = tableCreate('configtgz', " +$update[] = tableCreate('configtgz', " `configid` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(200) NOT NULL, `filepath` varchar(255) NOT NULL, `status` enum('OK','OUTDATED','MISSING') NOT NULL DEFAULT 'MISSING', + `dateline` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`configid`) "); -$res[] = tableCreate('configtgz_module', " +$update[] = tableCreate('configtgz_module', " `moduleid` int(10) unsigned NOT NULL AUTO_INCREMENT, `title` varchar(200) NOT NULL, `moduletype` varchar(16) NOT NULL, @@ -18,19 +19,20 @@ $res[] = tableCreate('configtgz_module', " `contents` text NOT NULL, `version` int(10) unsigned NOT NULL DEFAULT '0', `status` enum('OK','MISSING','OUTDATED') NOT NULL DEFAULT 'MISSING', + `dateline` int(10) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`moduleid`), KEY `title` (`title`), KEY `moduletype` (`moduletype`,`title`) "); -$res[] = tableCreate('configtgz_x_module', " +$update[] = tableCreate('configtgz_x_module', " `configid` int(10) unsigned NOT NULL, `moduleid` int(10) unsigned NOT NULL, PRIMARY KEY (`configid`,`moduleid`), KEY `moduleid` (`moduleid`) "); -$res[] = tableCreate('configtgz_location', " +$update[] = tableCreate('configtgz_location', " `locationid` int(11) NOT NULL, `configid` int(10) unsigned NOT NULL, PRIMARY KEY (`locationid`), @@ -38,13 +40,13 @@ $res[] = tableCreate('configtgz_location', " "); // Constraints -if (in_array(UPDATE_DONE, $res)) { +if (in_array(UPDATE_DONE, $update)) { // To self - $res[] = tableAddConstraint('configtgz_x_module', 'configid', 'configtgz', 'configid', + $update[] = tableAddConstraint('configtgz_x_module', 'configid', 'configtgz', 'configid', ''); - $res[] = tableAddConstraint('configtgz_x_module', 'moduleid', 'configtgz_module', 'moduleid', + $update[] = tableAddConstraint('configtgz_x_module', 'moduleid', 'configtgz_module', 'moduleid', ''); - $res[] = tableAddConstraint('configtgz_location', 'configid', 'configtgz', 'configid', + $update[] = tableAddConstraint('configtgz_location', 'configid', 'configtgz', 'configid', 'ON DELETE CASCADE ON UPDATE CASCADE'); } @@ -65,22 +67,49 @@ if (!tableHasColumn('configtgz_module', 'version')) { if (Database::exec("ALTER TABLE `configtgz_module` ADD `version` INT( 10 ) UNSIGNED NOT NULL DEFAULT '0'") === false) { finalResponse(UPDATE_FAILED, 'Could not add version to configtgz_module: ' . Database::lastError()); } - $res[] = UPDATE_DONE; + $update[] = UPDATE_DONE; } if (!tableHasColumn('configtgz_module', 'status')) { if (Database::exec("ALTER TABLE `configtgz_module` ADD `status` ENUM( 'OK', 'MISSING', 'OUTDATED' ) NOT NULL DEFAULT 'MISSING'") === false) { finalResponse(UPDATE_FAILED, 'Could not add status to configtgz_module: ' . Database::lastError()); } - $res[] = UPDATE_DONE; + $update[] = UPDATE_DONE; } if (!tableHasColumn('configtgz', 'status')) { if (Database::exec("ALTER TABLE `configtgz` ADD `status` ENUM( 'OK', 'OUTDATED', 'MISSING' ) NOT NULL DEFAULT 'MISSING'") === false) { finalResponse(UPDATE_FAILED, 'Could not add status to configtgz: ' . Database::lastError()); } - $res[] = UPDATE_DONE; + $update[] = UPDATE_DONE; +} +if (!tableHasColumn('dateline', 'configtgz_module')) { + if (Database::exec("ALTER TABLE `configtgz_module` ADD `dateline` int(10) unsigned NOT NULL DEFAULT '0'") === false) { + finalResponse(UPDATE_FAILED, 'Could not add dateline to configtgz_module: ' . Database::lastError()); + } + $update[] = UPDATE_DONE; + // Infer from module's filemtime + $res = Database::simpleQuery('SELECT moduleid, filepath FROM configtgz_module'); + while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + Database::exec('UPDATE configtgz_module SET dateline = :mtime WHERE moduleid = :moduleid', + ['moduleid' => $row['moduleid'], 'mtime' => filemtime($row['filepath'])]); + } +} +if (!tableHasColumn('dateline', 'configtgz')) { + if (Database::exec("ALTER TABLE `configtgz` ADD `dateline` int(10) unsigned NOT NULL DEFAULT '0'") === false) { + finalResponse(UPDATE_FAILED, 'Could not add dateline to configtgz: ' . Database::lastError()); + } + $update[] = UPDATE_DONE; + // Infer from latest module (since module injection by slx-admin modules would alter the timestamp) + $res = Database::simpleQuery('SELECT c.configid, Max(m.dateline) AS dateline FROM configtgz c + INNER JOIN configtgz_x_module cxm USING (configid) + INNER JOIN configtgz_module m USING (moduleid) + GROUP BY configid'); + while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + Database::exec('UPDATE configtgz SET dateline = :mtime WHERE configid = :configid', + ['configid' => $row['configid'], 'mtime' => $row['dateline']]); + } } -// ----- rebuild AD configs ------ +// ----- rebuild configs ------ // TEMPORARY HACK; Rebuild configs.. move somewhere else? Module::isAvailable('sysconfig'); $list = ConfigModule::getAll(); @@ -95,4 +124,4 @@ if ($list === false) { } // Create response for browser -responseFromArray($res); +responseFromArray($update); |