From 4c1935a6b6ec8d8cb95c6b5af3399927d30fbe66 Mon Sep 17 00:00:00 2001 From: Savetheinternet Date: Wed, 27 Jul 2011 13:40:27 +1000 Subject: per-board bans --- mod.php | 42 +++++++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 9 deletions(-) (limited to 'mod.php') diff --git a/mod.php b/mod.php index 91c27354..011eea76 100644 --- a/mod.php +++ b/mod.php @@ -1040,7 +1040,7 @@ ), listBoards()); foreach($boards as &$_board) { $__boards .= '
  • ' . - '' . '
  • ' . - '' . (in_array($_board['uri'], $_mod['boards']) ? ' checked="checked"' : '') . @@ -1440,19 +1440,19 @@ if($config['memcached']['enabled']) { // Remove cached ban + // TODO $memcached->delete("ban_${m[1]}"); } } } } - if($mod['type'] >= $config['mod']['view_banexpired']) { - $query = prepare("SELECT * FROM `bans` INNER JOIN `mods` ON `mod` = `id` GROUP BY `ip` ORDER BY (`expires` IS NOT NULL AND `expires` < :time), `set` DESC"); + $query = prepare("SELECT * FROM `bans` LEFT JOIN `boards` ON `boards`.`id` = `board` INNER JOIN `mods` ON `mod` = `mods`.`id` GROUP BY `ip` ORDER BY (`expires` IS NOT NULL AND `expires` < :time), `set` DESC"); $query->bindValue(':time', time(), PDO::PARAM_INT); $query->execute() or error(db_error($query)); } else { // Filter out expired bans - $query = prepare("SELECT * FROM `bans` INNER JOIN `mods` ON `mod` = `id` GROUP BY `ip` WHERE `expires` = 0 OR `expires` > :time ORDER BY `set` DESC"); + $query = prepare("SELECT * FROM `bans` LEFT JOIN `boards` ON `boards`.`id` = `board` INNER JOIN `mods` ON `mod` = `mods`.`id` GROUP BY `ip` WHERE `expires` = 0 OR `expires` > :time ORDER BY `set` DESC"); $query->bindValue(':time', time(), PDO::PARAM_INT); $query->execute() or error(db_error($query)); } @@ -1461,7 +1461,7 @@ $body = '

    (There are no active bans.)

    '; } else { $body = '
    '; - $body .= ''; + $body .= '
    IP addressReasonSetExpiresStaff
    '; while($ban = $query->fetch()) { $body .= @@ -1488,6 +1488,14 @@ // Reason '' . + + '' . + // Set '' . @@ -1905,14 +1913,15 @@ if(isset($_POST['new_ban'])) { if( !isset($_POST['ip']) || !isset($_POST['reason']) || - !isset($_POST['length']) + !isset($_POST['length']) || + !isset($_POST['board_id']) ) error($config['error']['missedafield']); // Check required fields if(empty($_POST['ip'])) error(sprintf($config['error']['required'], 'IP address')); - $query = prepare("INSERT INTO `bans` VALUES (:ip, :mod, :set, :expires, :reason)"); + $query = prepare("INSERT INTO `bans` VALUES (:ip, :mod, :set, :expires, :reason, :board)"); // 1yr2hrs30mins // 1y2h30m @@ -1958,12 +1967,19 @@ $query->bindValue(':mod', $mod['id'], PDO::PARAM_INT); $query->bindValue(':set', time(), PDO::PARAM_INT); + if(isset($_POST['reason'])) { $query->bindValue(':reason', $_POST['reason'], PDO::PARAM_STR); } else { $query->bindValue(':reason', null, PDO::PARAM_NULL); } + if($_POST['board_id'] < 0) { + $query->bindValue(':board', null, PDO::PARAM_NULL); + } else { + $query->bindValue(':board', (int)$_POST['board_id'], PDO::PARAM_INT); + } + // Record the action modLog('Created a ' . ($expire ? $expire . ' second' : 'permanent') . " ban for {$_POST['ip']} with " . (!empty($_POST['reason']) ? "reason \"{$_POST['reason']}\"" : 'no reason')); @@ -2189,7 +2205,7 @@ } if($mod['type'] >= $config['mod']['view_ban']) { - $query = prepare("SELECT * FROM `bans` INNER JOIN `mods` ON `mod` = `id` WHERE `ip` = :ip"); + $query = prepare("SELECT * FROM `bans` LEFT JOIN `boards` ON `boards`.`id` = `board` INNER JOIN `mods` ON `mod` = `mods`.`id` WHERE `ip` = :ip"); $query->bindValue(':ip', $ip); $query->execute() or error(db_error($query)); @@ -2209,6 +2225,14 @@ // Reason '' . + // Board + '' . + // Set '' . -- cgit v1.3
    IP addressReasonBoardSetExpiresStaff
    ' . ($ban['reason'] ? $ban['reason'] : '-') . '' . + (isset($ban['uri']) ? + sprintf($config['board_abbreviation'], $ban['uri']) + : + 'all boards' + ) . '' . date($config['post_date'], $ban['set']) . '
    Reason' . $ban['reason'] . '
    Board' . + (isset($ban['uri']) ? + sprintf($config['board_abbreviation'], $ban['uri']) + : + 'all boards' + ) . '
    Set' . date($config['post_date'], $ban['set']) . '