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(-)
(limited to 'modules-available')
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}}
-
+ |
|
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}} |
- |
+
+
+ |
{{#allowDownload}}
--
cgit v1.2.3-55-g7522
|