summaryrefslogtreecommitdiff
path: root/inc
diff options
context:
space:
mode:
authorSavetheinternet <savetheinternet@tinyboard.org>2011-07-27 13:40:27 +1000
committerSavetheinternet <savetheinternet@tinyboard.org>2011-07-27 13:40:27 +1000
commit4c1935a6b6ec8d8cb95c6b5af3399927d30fbe66 (patch)
treefa4589931153016cb73eab3fbf80bc13e08b8f2f /inc
parentf33848a3acb010cfd21b7087f92293038c9f6d4f (diff)
per-board bans
Diffstat (limited to 'inc')
-rw-r--r--inc/functions.php19
-rw-r--r--inc/mod.php23
2 files changed, 36 insertions, 6 deletions
diff --git a/inc/functions.php b/inc/functions.php
index 91b68bfc..c8d52160 100644
--- a/inc/functions.php
+++ b/inc/functions.php
@@ -400,7 +400,12 @@
$body = '<div class="ban">
<h2>You are banned! ;_;</h2>
- <p>You have been banned ' .
+ <p>You have been banned from ' .
+ (!isset($ban['uri']) ?
+ 'all boards':
+ '<strong>' . sprintf($config['board_abbreviation'], $ban['uri']) . '</strong>'
+ ) .
+ ' ' .
($ban['reason'] ? 'for the following reason:' : 'for an unspecified reason.') .
'</p>' .
($ban['reason'] ?
@@ -464,7 +469,7 @@
));
}
- function checkBan() {
+ function checkBan($board = 0) {
global $config, $memcached;
if(!isset($_SERVER['REMOTE_ADDR'])) {
@@ -474,17 +479,19 @@
if($config['memcached']['enabled']) {
// Cached ban?
- if($ban = $memcached->get("ban_${_SERVER['REMOTE_ADDR']}")) {
+ if($ban = $memcached->get("ban_${board}_${_SERVER['REMOTE_ADDR']}")) {
displayBan($ban);
}
}
- $query = prepare("SELECT * FROM `bans` WHERE `ip` = :ip ORDER BY `expires` IS NULL DESC, `expires` DESC, `expires` DESC LIMIT 1");
+ $query = prepare("SELECT `set`, `expires`, `reason`, `board`, `uri` FROM `bans` LEFT JOIN `boards` ON `boards`.`id` = `board` WHERE (`board` IS NULL OR `uri` = :board) AND `ip` = :ip ORDER BY `expires` IS NULL DESC, `expires` DESC, `expires` DESC LIMIT 1");
$query->bindValue(':ip', $_SERVER['REMOTE_ADDR']);
+ $query->bindValue(':board', $board);
$query->execute() or error(db_error($query));
if($query->rowCount() < 1 && $config['ban_range']) {
- $query = prepare("SELECT * FROM `bans` WHERE :ip REGEXP CONCAT('^', REPLACE(REPLACE(`ip`, '.', '\\.'), '*', '[0-9]*'), '$') ORDER BY `expires` IS NULL DESC, `expires` DESC LIMIT 1");
+ $query = prepare("SELECT `set`, `expires`, `reason`, `board`, `uri` FROM `bans` LEFT JOIN `boards` ON `boards`.`id` = `board` WHERE (`board` IS NULL OR `uri` = :board) AND :ip REGEXP CONCAT('^', REPLACE(REPLACE(`ip`, '.', '\\.'), '*', '[0-9]*'), '$') ORDER BY `expires` IS NULL DESC, `expires` DESC LIMIT 1");
$query->bindValue(':ip', $_SERVER['REMOTE_ADDR']);
+ $query->bindValue(':board', $board);
$query->execute() or error(db_error($query));
}
@@ -506,7 +513,7 @@
}
if($config['memcached']['enabled'])
- $memcached->set("ban_${_SERVER['REMOTE_ADDR']}", $ban, $ban['expires']);
+ $memcached->set("ban_${board}_${_SERVER['REMOTE_ADDR']}", $ban, $ban['expires']);
displayBan($ban);
}
}
diff --git a/inc/mod.php b/inc/mod.php
index 0887cd07..8691317b 100644
--- a/inc/mod.php
+++ b/inc/mod.php
@@ -174,6 +174,23 @@
function form_newBan($ip=null, $reason='', $continue=false, $delete=false, $board=false, $allow_public = false) {
global $config, $mod;
+
+ $boards = listBoards();
+ $__boards = '<li><input type="radio" name="board_id" id="board_*" value="-1"/> <label style="display:inline" for="board_*"><em>all boards</em></label></li>';
+ foreach($boards as &$_board) {
+ $__boards .= '<li>' .
+ '<input type="radio" name="board_id" id="board_' . $_board['uri'] . '" value="' . $_board['id'] . '">' .
+ '<label style="display:inline" for="board_' . $_board['uri'] . '"> ' .
+ ($_board['uri'] == '*' ?
+ '<em>"*"</em>'
+ :
+ sprintf($config['board_abbreviation'], $_board['uri'])
+ ) .
+ ' - ' . $_board['title'] .
+ '</label>' .
+ '</li>';
+ }
+
return '<fieldset><legend>New ban</legend>' .
'<form action="?/ban" method="post">' .
($continue ? '<input type="hidden" name="continue" value="' . htmlentities($continue) . '" />' : '') .
@@ -214,6 +231,12 @@
'<td><input type="text" name="length" id="length" size="20" maxlength="40" />' .
' <span class="unimportant">(eg. "2d1h30m" or "2 days")</span></td>' .
'</tr>' .
+
+ '<tr>' .
+ '<th>Board</th>' .
+ '<td><ul style="list-style:none;padding:2px 5px">' . $__boards . '</tl></td>' .
+ '</tr>' .
+
'<tr>' .
'<td></td>' .
'<td><input name="new_ban" type="submit" value="New Ban" /></td>' .