diff options
| -rw-r--r-- | inc/config.php | 4 | ||||
| -rw-r--r-- | mod.php | 40 | ||||
| -rw-r--r-- | style.css | 21 |
3 files changed, 63 insertions, 2 deletions
diff --git a/inc/config.php b/inc/config.php index 03df743d..d56e4344 100644 --- a/inc/config.php +++ b/inc/config.php @@ -235,6 +235,8 @@ $config['mod']['ip_recentposts'] = 5; // How many posts to display on the reports page $config['mod']['recent_reports'] = 5; + // How many actions to show per page in the moderation log + $config['mod']['modlog_page'] = 350; // Probably best not to change these: if(!defined('JANITOR')) { @@ -310,6 +312,8 @@ $config['mod']['deleteusers'] = ADMIN; // Create a user $config['mod']['createusers'] = ADMIN; + // View the moderation log + $config['mod']['modlog'] = ADMIN; // Mod links (full HTML) // Correspond to above permission directives @@ -90,9 +90,12 @@ if($mod['type'] >= $config['mod']['view_banlist']) { $fieldset['Administration'] .= '<li><a href="?/bans">Ban list</a></li>'; } - if($mod['type'] >= $config['mod']['manageusers']) { + if($mod['type'] >= $config['mod']['manageusers']) { $fieldset['Administration'] .= '<li><a href="?/users">Manage users</a></li>'; } + if($mod['type'] >= $config['mod']['modlog']) { + $fieldset['Administration'] .= '<li><a href="?/log">Moderation log</a></li>'; + } if($mod['type'] >= $config['mod']['show_config']) { $fieldset['Administration'] .= '<li><a href="?/config">Show configuration</a></li>'; } @@ -112,7 +115,40 @@ //,'mod'=>true /* All 'mod' does, at this point, is put the "Return to dashboard" link in. */ ) ); + } elseif(preg_match('/^\/log$/', $query)) { + if($mod['type'] < $config['mod']['modlog']) error($config['error']['noaccess']); + + $body = '<table class="modlog"><tr><th>User</th><th>IP address</th><th>Ago</th><th>Action</th></tr>'; + + $query = prepare("SELECT `id`,`username`,`ip`,`time`,`text` FROM `modlogs` INNER JOIN `mods` ON `mod` = `id` ORDER BY `time` DESC LIMIT :limit"); + $query->bindValue(':limit', $config['mod']['modlog_page'], PDO::PARAM_INT); + $query->execute() or error(db_error($query)); + + while($log = $query->fetch()) { + $log['text'] = htmlentities($log['text']); + $log['text'] = preg_replace('/(\d+\.\d+\.\d+\.\d+)/', '<a href="?/IP/$1">$1</a>', $log['text']); + + + $body .= '<tr>' . + '<td class="minimal"><a href="?/users/' . $log['id'] . '">' . $log['username'] . '</a></td>' . + '<td class="minimal"><a href="?/IP/' . $log['ip'] . '">' . $log['ip'] . '</a></td>' . + '<td class="minimal">' . ago($log['time']) . '</td>' . + '<td>' . $log['text'] . '</td>' . + '</tr>'; + } + + $body .= '</table>'; + + echo Element('page.html', Array( + 'index'=>$config['root'], + 'title'=>'Moderation log', + 'body'=>$body, + 'mod'=>true + ) + ); } elseif(preg_match('/^\/users$/', $query)) { + if($mod['type'] < $config['mod']['manageusers']) error($config['error']['noaccess']); + $body = '<form action="" method="post"><table><tr><th>ID</th><th>Username</th><th>Type</th><th>Last action</th><th>…</th></tr>'; $query = query("SELECT *, (SELECT `time` FROM `modlogs` WHERE `mod` = `id` ORDER BY `time` DESC LIMIT 1) AS `last`, (SELECT `text` FROM `modlogs` WHERE `mod` = `id` ORDER BY `time` DESC LIMIT 1) AS `action` FROM `mods` ORDER BY `type` DESC,`id`") or error(db_error()); @@ -899,7 +935,7 @@ $ip = $post['ip']; // Record the action - modLog("Deleted all posts by IP address: #{$ip}"); + modLog("Deleted all posts by IP address: {$ip}"); $query = prepare(sprintf("SELECT `id` FROM `posts_%s` WHERE `ip` = :ip", $board['uri'])); $query->bindValue(':ip', $ip); @@ -332,4 +332,25 @@ div.boardlist a { } div.report { color: #333; +} +table.modlog { + margin: auto; + width: 100%; +} +table.modlog tr td { + text-align: left; + margin: 0px; + padding: 4px 15px 0 0; +} +table.modlog tr th { + text-align: left; + padding: 4px 15px 5px 5px; + white-space: nowrap; +} +table.modlog tr th { + background: #98E; +} +td.minimal { + width: 1%; + white-space: nowrap; }
\ No newline at end of file |
