issue: hide unannounced messages from public activity
[minimedit.git] / widget / issue / activity.php
1 <?php
2 global $Db;
3 require_once 'database.inc.php';
4
5 $limit = $Page->place['n'] ?? 50;
6 $cols = 'm.*, i.subject, i.updated, i.closed';
7 $sql = "SELECT $cols FROM messages m JOIN issues i ON i.id = issue";
8 $sql .= " WHERE message IS NOT NULL";
9 $sql .= " AND i.page <> 'spam'";
10 $sql .= " AND m.announced";
11 $sql .= " ORDER BY m.created DESC LIMIT $limit";
12 $query = $Db->query($sql);
13 $rows = $query->fetchall();
14
15 $msgformat = [
16         '{(.*)(<p><img [^>]+></p>)\s*}s' => "$2$1",
17         "{(</p>\n).{20,}}s" => ' <small class="footer">(Meer op de site)</small>$1',
18         '{(?<=<img src=")(?:/thumb/[^/]+)?(?=/)}' => '/thumb/300x',
19 ];
20
21 print '<dl class="replies">';
22
23 $prev = NULL;
24 foreach ($rows as $i => $row) {
25         $next = $rows[$i + 1] ?? NULL;
26
27         if ($next and $next->issue === $row->issue
28         and preg_match('/\A(?:<p><img[^>]*><\/p>)+\z/', $row->message)) {
29                 # postpone related image to the following message
30                 $next->message = $row->message . $next->message;
31                 continue;
32         }
33
34         if (!$prev or $prev->issue !== $row->issue or $prev->author !== $row->author
35         or !preg_match('/\A<p><img/', $prev->message)) {
36                 print '<dt>';
37                 if (!$prev or $prev->issue !== $row->issue) {
38                         printf('<a href="/%s">%s</a>', $row->page, $row->subject);
39                         if ($row->closed) {
40                                 print ' <em>(opgelost)</em>';
41                         }
42                 }
43                 print '<span class="right">';
44                 if ($row->author and $rowuser = new User("profile/{$row->author}")) {
45                         printf('<strong>%s</strong> ', $rowuser->html);
46                 }
47                 printf('<small class="date">%s</small>',
48                         showdate(preg_split('/\D/', $row->created))
49                 );
50                 print "</span>";
51                 print '</dt>';
52         }
53         print '<dd>';
54         print preg_replace(array_keys($msgformat), array_values($msgformat), $row->message);
55         print "\n";
56         $prev = $row;
57 }
58
59 print "</dl>\n";