From 84c110647b84fc29fb8443d088c710ba8ecf42fe Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 21 Mar 2019 13:48:57 +0100 Subject: [sysconfig] Remember last modified date, show as tooltip --- .../sysconfig/inc/configmodule.inc.php | 26 +++++++--- modules-available/sysconfig/inc/configtgz.inc.php | 10 ++-- modules-available/sysconfig/install.inc.php | 57 ++++++++++++++++------ modules-available/sysconfig/page.inc.php | 17 ++++--- .../sysconfig/templates/list-configs.html | 2 +- .../sysconfig/templates/list-modules.html | 4 +- 6 files changed, 81 insertions(+), 35 deletions(-) diff --git a/modules-available/sysconfig/inc/configmodule.inc.php b/modules-available/sysconfig/inc/configmodule.inc.php index b6db9c4f..cc6b31f5 100644 --- a/modules-available/sysconfig/inc/configmodule.inc.php +++ b/modules-available/sysconfig/inc/configmodule.inc.php @@ -15,6 +15,10 @@ abstract class ConfigModule private $moduleArchive = false; private $moduleTitle = false; private $moduleStatus = false; + /** + * @var int + */ + private $dateline = 0; private $currentVersion = 0; /** * @var false|array Data of module, false if not initialized @@ -110,6 +114,7 @@ abstract class ConfigModule $instance->moduleId = $dbRow['moduleid']; $instance->moduleTitle = $dbRow['title']; $instance->moduleStatus = $dbRow['status']; + $instance->dateline = $dbRow['dateline']; if ($instance->moduleVersion() > $instance->currentVersion) { $instance->markFailed(); } @@ -140,9 +145,9 @@ abstract class ConfigModule public static function getAll($moduleType = false) { if ($moduleType === false) { - $ret = Database::simpleQuery("SELECT moduleid, title, moduletype, filepath, contents, version, status FROM configtgz_module"); + $ret = Database::simpleQuery("SELECT moduleid, title, moduletype, filepath, contents, version, status, dateline FROM configtgz_module"); } else { - $ret = Database::simpleQuery("SELECT moduleid, title, moduletype, filepath, contents, version, status FROM configtgz_module " + $ret = Database::simpleQuery("SELECT moduleid, title, moduletype, filepath, contents, version, status, dateline FROM configtgz_module " . " WHERE moduletype = :moduletype", array('moduletype' => $moduleType)); } if ($ret === false) @@ -290,13 +295,14 @@ abstract class ConfigModule return false; $this->moduleTitle = $title; // Insert - Database::exec("INSERT INTO configtgz_module (title, moduletype, filepath, contents, version, status) " - . " VALUES (:title, :type, '', :contents, :version, :status)", array( + Database::exec("INSERT INTO configtgz_module (title, moduletype, filepath, contents, version, status, dateline) " + . " VALUES (:title, :type, '', :contents, :version, :status, :now)", array( 'title' => $title, 'type' => $this->moduleType(), 'contents' => json_encode($this->moduleData), 'version' => 0, - 'status' => 'MISSING' + 'status' => 'MISSING', + 'now' => time(), )); $this->moduleId = Database::lastInsertId(); if (!is_numeric($this->moduleId)) @@ -324,12 +330,13 @@ abstract class ConfigModule if (!$this->validateConfig()) return false; // Update - Database::exec("UPDATE configtgz_module SET title = :title, contents = :contents, status = :status " + Database::exec("UPDATE configtgz_module SET title = :title, contents = :contents, status = :status, dateline = :now " . " WHERE moduleid = :moduleid LIMIT 1", array( 'moduleid' => $this->moduleId, 'title' => $title, 'contents' => json_encode($this->moduleData), - 'status' => 'OUTDATED' + 'status' => 'OUTDATED', + 'now' => time(), )); return true; } @@ -463,6 +470,11 @@ abstract class ConfigModule )) !== false; } + public function dateline_s() + { + return Util::prettyTime($this->dateline); + } + ################# Callbacks ############## /** diff --git a/modules-available/sysconfig/inc/configtgz.inc.php b/modules-available/sysconfig/inc/configtgz.inc.php index 7b042cdb..374cb5e0 100644 --- a/modules-available/sysconfig/inc/configtgz.inc.php +++ b/modules-available/sysconfig/inc/configtgz.inc.php @@ -75,10 +75,11 @@ class ConfigTgz $this->modules[] = $row; } // Update name - Database::exec("UPDATE configtgz SET title = :title, status = :status WHERE configid = :configid LIMIT 1", array( + Database::exec("UPDATE configtgz SET title = :title, status = :status, dateline = :now WHERE configid = :configid LIMIT 1", array( 'configid' => $this->configId, 'title' => $title, - 'status' => 'OUTDATED' + 'status' => 'OUTDATED', + 'now' => time(), )); return true; } @@ -277,10 +278,11 @@ class ConfigTgz do { $instance->file = CONFIG_TGZ_LIST_DIR . '/config-' . Util::sanitizeFilename($instance->configTitle) . '-' . mt_rand() . '-' . time() . '.tgz'; } while (file_exists($instance->file)); - Database::exec("INSERT INTO configtgz (title, filepath, status) VALUES (:title, :filepath, :status)", array( + Database::exec("INSERT INTO configtgz (title, filepath, status, dateline) VALUES (:title, :filepath, :status, :now)", array( 'title' => $instance->configTitle, 'filepath' => $instance->file, - 'status' => 'MISSING' + 'status' => 'MISSING', + 'now' => time(), )); $instance->configId = Database::lastInsertId(); $instance->modules = array(); 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 @@ 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); diff --git a/modules-available/sysconfig/page.inc.php b/modules-available/sysconfig/page.inc.php index 515d432c..05a83924 100644 --- a/modules-available/sysconfig/page.inc.php +++ b/modules-available/sysconfig/page.inc.php @@ -213,13 +213,13 @@ class Page_SysConfig extends Page private function listConfigs() { // Configs - $res = Database::simpleQuery("SELECT c.configid, c.title, c.filepath, c.status," - . " GROUP_CONCAT(DISTINCT cl.locationid) AS loclist, GROUP_CONCAT(cxm.moduleid) AS modlist" - . " FROM configtgz c" - . " LEFT JOIN configtgz_x_module cxm USING (configid)" - . " LEFT JOIN configtgz_location cl ON (c.configid = cl.configid)" - . " GROUP BY configid" - . " ORDER BY title ASC"); + $res = Database::simpleQuery("SELECT c.configid, c.title, c.filepath, c.status, c.dateline, + GROUP_CONCAT(DISTINCT cl.locationid) AS loclist, GROUP_CONCAT(cxm.moduleid) AS modlist + FROM configtgz c + LEFT JOIN configtgz_x_module cxm USING (configid) + LEFT JOIN configtgz_location cl ON (c.configid = cl.configid) + GROUP BY configid + ORDER BY title ASC"); $configs = array(); if ($this->currentLoc !== 0) { $locationName = $this->locations[$this->currentLoc]['locationname']; @@ -254,7 +254,8 @@ class Page_SysConfig extends Page 'loclist' => $row['loclist'], 'readableLocList' => $this->getLocationNames($this->locations, $locList), 'locationCount' => $locCount, - 'needrebuild' => ($row['status'] !== 'OK') + 'needrebuild' => ($row['status'] !== 'OK'), + 'dateline_s' => Util::prettyTime($row['dateline']), ); } $data = array( diff --git a/modules-available/sysconfig/templates/list-configs.html b/modules-available/sysconfig/templates/list-configs.html index 4db7b9b2..fe882c43 100644 --- a/modules-available/sysconfig/templates/list-configs.html +++ b/modules-available/sysconfig/templates/list-configs.html @@ -21,7 +21,7 @@ {{#configs}} - - +
+
{{config}}
diff --git a/modules-available/sysconfig/templates/list-modules.html b/modules-available/sysconfig/templates/list-modules.html index c657eae8..c9400696 100644 --- a/modules-available/sysconfig/templates/list-modules.html +++ b/modules-available/sysconfig/templates/list-modules.html @@ -12,7 +12,9 @@ {{#modules}}
{{moduleType}}
{{title}}
+
{{title}}
+
{{#allowDownload}} -- cgit v1.2.3-55-g7522