diff --git a/admin.php b/admin.php index 790189b..ed0ca81 100644 --- a/admin.php +++ b/admin.php @@ -59,6 +59,8 @@ public function html() echo ''; + echo '

' . $this->getLang('overviewHistory') . '

'; + } } diff --git a/db/latest.version b/db/latest.version index d00491f..0cfbf08 100644 --- a/db/latest.version +++ b/db/latest.version @@ -1 +1 @@ -1 +2 diff --git a/db/update0002.sql b/db/update0002.sql new file mode 100644 index 0000000..8748d0e --- /dev/null +++ b/db/update0002.sql @@ -0,0 +1,27 @@ +PRAGMA foreign_keys=OFF; + +CREATE TEMPORARY TABLE acks_temp +( + page TEXT NOT NULL REFERENCES pages (page) ON DELETE CASCADE, + user TEXT NOT NULL, + ack INT NOT NULL, + PRIMARY KEY (page, user) +); + +INSERT INTO acks_temp (page,user,ack) SELECT page,user,ack FROM acks; + +DROP TABLE acks; + +CREATE TABLE acks +( + page TEXT NOT NULL REFERENCES pages (page), + user TEXT NOT NULL, + ack INT NOT NULL, + PRIMARY KEY (page, user, ack) +); + +INSERT INTO acks (page,user,ack) SELECT page,user,ack FROM acks_temp; + +DROP TABLE acks_temp; + +PRAGMA foreign_keys=ON; diff --git a/helper.php b/helper.php index 25e815d..04cea57 100644 --- a/helper.php +++ b/helper.php @@ -172,7 +172,7 @@ public function saveAcknowledgement($page, $user) $sqlite = $this->getDB(); if (!$sqlite) return false; - $sql = "REPLACE INTO acks (page, user, ack) VALUES (?,?, strftime('%s','now'))"; + $sql = "INSERT INTO acks (page, user, ack) VALUES (?,?, strftime('%s','now'))"; $result = $sqlite->query($sql, $page, $user); $sqlite->res_close($result); @@ -199,9 +199,9 @@ public function getUserAssignments($user) JOIN pages B ON A.page = B.page LEFT JOIN acks C - ON A.page = C.page + ON A.page = C.page AND ( (C.user = ? AND C.ack > B.lastmod) OR (C.user IS NOT ?) ) WHERE AUTH_ISMEMBER(A.assignee, ? , ?) - AND ( (C.user = ? AND C.ack < B.lastmod) OR (C.user IS NOT ?) )"; + AND ack IS NULL"; $result = $sqlite->query($sql, $user, implode('///', $groups), $user, $user); $assignments = $sqlite->res2arr($result); @@ -220,7 +220,7 @@ public function getAcknowledgements() $sqlite = $this->getDB(); if (!$sqlite) return false; - $sql = 'SELECT * FROM acks ORDER BY ack DESC'; + $sql = 'SELECT page, user, max(ack) AS ack FROM acks GROUP BY user,page ORDER BY ack DESC'; $result = $sqlite->query($sql); $acknowledgements = $sqlite->res2arr($result); $sqlite->res_close($result); diff --git a/lang/en/lang.php b/lang/en/lang.php index cef2651..5fa5d2b 100644 --- a/lang/en/lang.php +++ b/lang/en/lang.php @@ -17,6 +17,7 @@ $lang['overviewPage'] = 'Page'; $lang['overviewUser'] = 'User'; $lang['overviewTime'] = 'Latest acknowledgement'; +$lang['overviewHistory'] = 'You can access previous acknowledgments by querying the database directly. Ask your administrator for assistance.'; $lang['error sqlite plugin missing'] = 'The sqlite plugin is missing';