From 9703adb0e76ed6704feabd1e09b1be1673130d0a Mon Sep 17 00:00:00 2001 From: Savetheinternet Date: Wed, 2 Mar 2011 17:51:29 +1100 Subject: [PATCH] Mod log viewer --- inc/config.php | 4 ++++ mod.php | 40 ++++++++++++++++++++++++++++++++++++++-- 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 diff --git a/mod.php b/mod.php index 13879292..34b36ad8 100644 --- a/mod.php +++ b/mod.php @@ -90,9 +90,12 @@ if($mod['type'] >= $config['mod']['view_banlist']) { $fieldset['Administration'] .= '
  • Ban list
  • '; } - if($mod['type'] >= $config['mod']['manageusers']) { + if($mod['type'] >= $config['mod']['manageusers']) { $fieldset['Administration'] .= '
  • Manage users
  • '; } + if($mod['type'] >= $config['mod']['modlog']) { + $fieldset['Administration'] .= '
  • Moderation log
  • '; + } if($mod['type'] >= $config['mod']['show_config']) { $fieldset['Administration'] .= '
  • Show configuration
  • '; } @@ -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 = ''; + + $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+)/', '$1', $log['text']); + + + $body .= '' . + '' . + '' . + '' . + '' . + ''; + } + + $body .= '
    UserIP addressAgoAction
    ' . $log['username'] . '' . $log['ip'] . '' . ago($log['time']) . '' . $log['text'] . '
    '; + + 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 = '
    '; $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); diff --git a/style.css b/style.css index dc60e5ed..50bcc718 100644 --- a/style.css +++ b/style.css @@ -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
    IDUsernameTypeLast action