prepare('SELECT id, `nick`, joined_at, departed_at FROM users WHERE `nick` = ?'); $stmt->execute([$user]); $user = $stmt->fetch(PDO::FETCH_ASSOC) ?: null; if (!$user) { http_response_code(404); exit("User not found."); } } if (isset($room)) { $room = urldecode($room); $stmt = $db->prepare('SELECT id, `name`, joined_at, departed_at FROM rooms WHERE `name` = ?'); $stmt->execute([$room]); $room = $stmt->fetch(PDO::FETCH_ASSOC) ?: null; if (!$room) { http_response_code(404); exit("Room not found."); } $room['encoded'] = urlencode($room['name']); } if (isset($message_query)) { $user_id = $user ? $user['id'] : "m.user_id"; $room_id = $room ? $room['id'] : "m.room_id"; $room_column = !$room ? ", r.name AS room" : ""; $command = "PRIVMSG"; $stmt = $db->prepare("SELECT m.id, u.nick, m.command, m.params, m.tags, m.sent_at $room_column FROM messages m JOIN rooms r ON r.id = m.room_id JOIN users u ON u.id = m.user_id WHERE m.room_id = $room_id AND m.user_id = $user_id AND m.params LIKE ? AND m.command = ? ORDER BY sent_at DESC LIMIT $limit OFFSET $offset "); $stmt->execute([$message_query, $command]); $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); } else if (isset($date)) { $user_id = $user ? $user['id'] : "m.user_id"; $room_id = $room ? $room['id'] : "m.room_id"; $room_column = !$room ? ", r.name AS room" : ""; $stmt = $db->prepare("SELECT m.id, u.nick, m.command, m.params, m.tags, m.sent_at $room_column FROM messages m JOIN rooms r ON r.id = m.room_id JOIN users u ON u.id = m.user_id WHERE m.room_id = $room_id AND m.user_id = $user_id AND m.sent_at BETWEEN ? AND DATE_ADD(?, INTERVAL 1 DAY) ORDER BY sent_at DESC LIMIT $limit OFFSET $offset "); $stmt->execute([$date, $date]); $messages = $stmt->fetchAll(PDO::FETCH_ASSOC); } else if ($room || $user) { $room_id = isset($room) ? $room['id'] : 'room_id'; $user_id = isset($user) ? $user['id'] : 'user_id'; $stmt = $db->query("SELECT YEAR(sent_at) AS msg_year, MONTH(sent_at) AS msg_month, DAY(sent_at) AS msg_day, COUNT(*) AS msg_count FROM messages WHERE room_id = $room_id AND user_id = $user_id GROUP BY YEAR(sent_at), MONTH(sent_at), DAY(sent_at) ORDER BY YEAR(sent_at) DESC, MONTH(sent_at) DESC, DAY(sent_at) DESC "); $stmt->execute(); $raw_dates = $stmt->fetchAll(PDO::FETCH_ASSOC); $dates = []; foreach ($raw_dates as $rm) { $y = $rm['msg_year']; $m = $rm['msg_month']; $d = $rm['msg_day']; $c = $rm['msg_count']; if (!array_key_exists($y, $dates)) { $dates[$y] = []; } if (!array_key_exists($m, $dates[$y])) { $dates[$y][$m] = []; } $dates[$y][$m][$d] = $c; } } $page_title = match (true) { isset($user, $room, $message_query) => "Searching for '$message_query' by {$user['nick']} in {$room['name']}", isset($user, $message_query) => "Searching for '$message_query' by {$user['nick']}", isset($room, $message_query) => "Searching for '$message_query' in {$room['name']}", isset($message_query) => "Searching for '$message_query'", isset($user, $room) => "{$user['nick']}'s logs in {$room['name']}", isset($room) => "Logs of {$room['name']}", isset($user) => "{$user['nick']}'s logs", default => "Index" }; if (isset($date)) { $page_title .= ", $date"; } $link = match (true) { isset($user, $room) => "r={$room['encoded']}&u={$user['nick']}", isset($user) => "u={$user['nick']}", isset($room) => "r={$room['encoded']}", default => "" }; if (!isset($user) && !isset($room)) { $stmt = $db->query('SELECT r.name, r.departed_at, ( SELECT MAX(m.sent_at) FROM messages m WHERE m.room_id = r.id ) AS last_message_at FROM rooms r ORDER BY r.joined_at DESC '); $stmt->execute(); $rooms = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($rooms as &$r) { $t = $r['last_message_at']; if (!$t) { $r['last_message_at'] = 'no messages yet'; continue; } $diff = time() - strtotime($t); $t = match (true) { $diff < 60 => "$diff seconds ago", $diff < 3600 => floor($diff / 60) . ' minutes ago', $diff < 86400 => floor($diff / 3600) . ' hours ago', $diff < 2592000 => floor($diff / 86400) . ' days ago', $diff < 31536000 => floor($diff / 2592000) . ' months ago', default => floor($diff / 31536000) . ' years ago' }; $r['last_message_at'] = $t; } unset($r); } ?>
No messages.
Showing = count($messages) ?> messages on Page = $page + 1 ?>
| Time | Room | Nick | Message |
|---|
| Mo | Tu | We | Th | Fr | Sa | Su |
|---|---|---|---|---|---|---|
| '; if (array_key_exists($day, $days) && $days[$day] > 0) { echo "$day"; } else { echo $day; } echo ' | '; if ((($day + $sw - 1) % 7) == 0 && $day != $dm) echo '||||||
| '; ?> |
There are no rooms. Add one!
| Room | Last message |
|---|---|
| = $r['name'] ?> | = $r['last_message_at'] ?> |