$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 .= " AND i.page <> 'spam'";
$sql .= " ORDER BY m.created DESC LIMIT $limit";
$query = $Db->query($sql);
+$rows = $query->fetchall();
$msgformat = [
- "{(?=</p>\n).+}s" => ' <small class="footer">(Meer op de site)</small>',
- '{(.*)(<p><img [^>]+></p>)\s*}' => "$2\n$1",
- '{(?<=<img src=")(?=/)}' => '/thumb/300x',
+ '{(.*)(<p><img [^>]+></p>)\s*}s' => "$2$1",
+ "{(</p>\n).{20,}}s" => ' <small class="footer">(Meer op de site)</small>$1',
+ '{(?<=<img src=")(?:/thumb/[^/]+)?(?=/)}' => '/thumb/300x',
];
print '<dl class="replies">';
$prev = NULL;
-while ($row = $query->fetch()) {
- if (!$prev or $prev->issue !== $row->issue or $prev->author !== $row->author) {
+foreach ($rows as $i => $row) {
+ $next = $rows[$i + 1] ?? NULL;
+
+ if ($next and $next->issue === $row->issue
+ and preg_match('/\A(?:<p><img[^>]*><\/p>)+\z/', $row->message)) {
+ # postpone related image to the following message
+ $next->message = $row->message . $next->message;
+ continue;
+ }
+
+ if (!$prev or $prev->issue !== $row->issue or $prev->author !== $row->author
+ or !preg_match('/\A<p><img/', $prev->message)) {
print '<dt>';
if (!$prev or $prev->issue !== $row->issue) {
printf('<a href="/%s">%s</a>', $row->page, $row->subject);
);
print "</span>";
print '</dt>';
- print '<dd>';
}
+ print '<dd>';
print preg_replace(array_keys($msgformat), array_values($msgformat), $row->message);
+ print "\n";
$prev = $row;
}