issue/activity: group replies by message topic
authorMischa POSLAWSKY <perl@shiar.org>
Sat, 2 Jan 2021 04:28:52 +0000 (05:28 +0100)
committerMischa POSLAWSKY <perl@shiar.org>
Wed, 6 Jan 2021 21:17:25 +0000 (22:17 +0100)
Keep selected threads chronologically, similar to Redmine activity.

widget/issue/activity.php

index 7829f93c0a5160ed3f4d2ac4a94c524ef10fa996..cd99e486916af3e58e888fdc1ed6080fd226a9de 100644 (file)
@@ -3,25 +3,33 @@ global $Db;
 require_once 'database.inc.php';
 
 $limit = $Page->place['n'] ?? 50;
-$cols = 'm.*, i.subject, i.closed';
+$cols = 'm.*, i.subject, i.updated, i.closed';
 $sql = "SELECT $cols FROM messages m JOIN issues i ON i.id = issue";
+$sql .= " WHERE message IS NOT NULL";
 $sql .= " ORDER BY m.created DESC LIMIT $limit";
+$sql = "SELECT * FROM ($sql) x ORDER BY updated DESC, created, id"; # grouped issues
 $query = $Db->query($sql);
 
-print '<ul class="replies">';
+print '<dl class="replies">';
 
+$group = NULL;
 while ($row = $query->fetch()) {
        $rowuser = new User("profile/{$row->author}");
-       print '<li>';
+       if ($group !== $row->issue) {
+               $group = $row->issue;
+               print '<dt>';
+               printf('<a href="/%s">%s</a>', $row->page, $row->subject);
+               if ($row->closed) {
+                       print ' <em>(opgelost)</em>';
+               }
+               print '</dt>';
+       }
+       print '<dd>';
        printf('<strong>%s</strong> <small class="date">%s</small>',
                $rowuser->html, showdate(preg_split('/\D/', $row->created))
        );
-       printf("\n\t".'<a href="/%s">%s</a>', $row->page, $row->subject);
-       if ($row->closed) {
-               print ' <em>(opgelost)</em>';
-       }
        printf("\n\t<blockquote>%s</blockquote>", $row->message);
-       print "</li>\n";
+       print "</dd>\n";
 }
 
-print "</ul>\n";
+print "</dl>\n";