paged ip bans
This commit is contained in:
parent
418f5484ed
commit
bde49c4f5e
@ -732,7 +732,7 @@ class Image
|
||||
);
|
||||
$database->execute(
|
||||
$database->scoreql_to_sql(
|
||||
"INSERT INTO image_tags(image_id, tag_id)
|
||||
"INSERT INTO image_tags(image_id, tag_id)
|
||||
VALUES(:id, (SELECT id FROM tags WHERE SCORE_STRNORM(tag) = SCORE_STRNORM(:tag)))"
|
||||
),
|
||||
["id"=>$this->id, "tag"=>$tag]
|
||||
|
@ -60,7 +60,7 @@ class IPBan extends Extension
|
||||
|
||||
flash_message("Ban for {$_POST['ip']} added");
|
||||
$page->set_mode(PageMode::REDIRECT);
|
||||
$page->set_redirect(make_link("ip_ban/list"));
|
||||
$page->set_redirect(make_link("ip_ban/list/1"));
|
||||
}
|
||||
} elseif ($event->get_arg(0) == "remove" && $user->check_auth_token()) {
|
||||
if (isset($_POST['id'])) {
|
||||
@ -68,10 +68,11 @@ class IPBan extends Extension
|
||||
|
||||
flash_message("Ban removed");
|
||||
$page->set_mode(PageMode::REDIRECT);
|
||||
$page->set_redirect(make_link("ip_ban/list"));
|
||||
$page->set_redirect(make_link("ip_ban/list/1"));
|
||||
}
|
||||
} elseif ($event->get_arg(0) == "list") {
|
||||
$bans = (isset($_GET["all"])) ? $this->get_bans() : $this->get_active_bans();
|
||||
$pageNum = $event->try_page_num(1);
|
||||
$bans = (isset($_GET["all"])) ? $this->get_bans(true, $pageNum) : $this->get_bans(false, $pageNum);
|
||||
$this->theme->display_bans($page, $bans);
|
||||
}
|
||||
} else {
|
||||
@ -92,7 +93,7 @@ class IPBan extends Extension
|
||||
global $user;
|
||||
if ($event->parent==="system") {
|
||||
if ($user->can(Permissions::BAN_IP)) {
|
||||
$event->add_nav_link("ip_bans", new Link('ip_ban/list'), "IP Bans", NavLink::is_active(["ip_ban"]));
|
||||
$event->add_nav_link("ip_bans", new Link('ip_ban/list/1'), "IP Bans", NavLink::is_active(["ip_ban"]));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -101,7 +102,7 @@ class IPBan extends Extension
|
||||
{
|
||||
global $user;
|
||||
if ($user->can(Permissions::BAN_IP)) {
|
||||
$event->add_link("IP Bans", make_link("ip_ban/list"));
|
||||
$event->add_link("IP Bans", make_link("ip_ban/list/1"));
|
||||
}
|
||||
}
|
||||
|
||||
@ -240,7 +241,7 @@ class IPBan extends Extension
|
||||
|
||||
$prefix = ($database->get_driver_name() == DatabaseDriver::SQLITE ? "bans." : "");
|
||||
|
||||
$bans = $this->get_active_bans();
|
||||
$bans = $this->get_bans(false, null);
|
||||
|
||||
foreach ($bans as $row) {
|
||||
$ip = $row[$prefix."ip"];
|
||||
@ -272,39 +273,62 @@ class IPBan extends Extension
|
||||
exit;
|
||||
}
|
||||
|
||||
private function get_bans()
|
||||
private function get_bans(bool $all, ?int $page)
|
||||
{
|
||||
global $database;
|
||||
$bans = $database->get_all("
|
||||
SELECT bans.*, users.name as banner_name
|
||||
FROM bans
|
||||
JOIN users ON banner_id = users.id
|
||||
ORDER BY added, expires, bans.id
|
||||
");
|
||||
if ($bans) {
|
||||
return $bans;
|
||||
} else {
|
||||
return [];
|
||||
|
||||
$size = 100;
|
||||
if (@$_GET['limit']) {
|
||||
$size = int_escape($_GET['limit']);
|
||||
}
|
||||
}
|
||||
$filters = ["1=1"];
|
||||
$args = [];
|
||||
|
||||
private function get_active_bans()
|
||||
{
|
||||
global $database;
|
||||
if (!$all) {
|
||||
$filters[] = "((expires > CURRENT_TIMESTAMP) OR (expires IS NULL))";
|
||||
}
|
||||
if (@$_GET['s_ip']) {
|
||||
$filters[] = "(ip = :ip)";
|
||||
$args['ip'] = $_GET['s_ip'];
|
||||
}
|
||||
if (@$_GET['s_reason']) {
|
||||
$filters[] = "(reason LIKE :reason)";
|
||||
$args['reason'] = '%' . $_GET['s_reason'] . "%";
|
||||
}
|
||||
if (@$_GET['s_banner']) {
|
||||
$filters[] = "(banner_id = :banner_id)";
|
||||
$args['banner_id'] = User::by_name($_GET['s_banner'])->id;
|
||||
}
|
||||
if (@$_GET['s_added']) {
|
||||
$filters[] = "(added LIKE :added)";
|
||||
$args['added'] = '%' . $_GET['s_added'] . "%";
|
||||
}
|
||||
if (@$_GET['s_expires']) {
|
||||
$filters[] = "(expires LIKE :expires)";
|
||||
$args['expires'] = '%' . $_GET['s_expires'] . "%";
|
||||
}
|
||||
if (@$_GET['s_mode']) {
|
||||
$filters[] = "(mode = :mode)";
|
||||
$args['mode'] = $_GET['s_mode'];
|
||||
}
|
||||
$filter = implode(" AND ", $filters);
|
||||
|
||||
$bans = $database->get_all("
|
||||
if (is_null($page)) {
|
||||
$pager = "";
|
||||
} else {
|
||||
$pager = "OFFSET :offset LIMIT :limit";
|
||||
$args["offset"] = ($page-1)*$size;
|
||||
$args['limit'] = $size;
|
||||
}
|
||||
|
||||
return $database->get_all("
|
||||
SELECT bans.*, users.name as banner_name
|
||||
FROM bans
|
||||
JOIN users ON banner_id = users.id
|
||||
WHERE (expires > CURRENT_TIMESTAMP) OR (expires IS NULL)
|
||||
WHERE $filter
|
||||
ORDER BY expires, bans.id
|
||||
");
|
||||
|
||||
if ($bans) {
|
||||
return $bans;
|
||||
} else {
|
||||
return [];
|
||||
}
|
||||
$pager
|
||||
", $args);
|
||||
}
|
||||
|
||||
// returns [ips, nets]
|
||||
@ -317,7 +341,7 @@ class IPBan extends Extension
|
||||
return $cached;
|
||||
}
|
||||
|
||||
$bans = $this->get_active_bans();
|
||||
$bans = $this->get_bans(false, null);
|
||||
$ips = []; # "0.0.0.0" => false);
|
||||
$nets = []; # "0.0.0.0/32" => false);
|
||||
foreach ($bans as $row) {
|
||||
|
@ -35,22 +35,39 @@ class IPBanTheme extends Themelet
|
||||
</tr>
|
||||
";
|
||||
}
|
||||
$today = date('Y-m-d');
|
||||
$html = "
|
||||
<a href='".make_link("ip_ban/list", "all=on")."'>Show All</a>
|
||||
<a href='".make_link("ip_ban/list", "limit=1000000")."'>Show All Active</a> /
|
||||
<a href='".make_link("ip_ban/list", "all=on&limit=1000000")."'>Show EVERYTHING</a>
|
||||
<p><table id='bans' class='sortable zebra'>
|
||||
<thead><tr><th>IP</th><th>Reason</th><th>By</th><th>From</th><th>Until</th><th>Type</th><th>Action</th></tr></thead>
|
||||
<thead>
|
||||
<tr><th>IP</th><th>Reason</th><th>By</th><th>From</th><th>Until</th><th>Type</th><th>Action</th></tr>
|
||||
<tr>
|
||||
".make_form(make_link("ip_ban/list/1"), "GET")."
|
||||
<td><input type='text' name='s_ip' value='".html_escape(@$_GET['s_ip'])."'></td>
|
||||
<td><input type='text' name='s_reason' value='".html_escape(@$_GET['s_reason'])."'></td>
|
||||
<td><input type='text' name='s_banner' value='".html_escape(@$_GET['s_banner'])."'></td>
|
||||
<td><input type='text' name='s_added' value='".html_escape(@$_GET['s_added'])."'></td>
|
||||
<td><input type='text' name='s_expires' value='".html_escape(@$_GET['s_expires'])."'></td>
|
||||
<td><input type='text' name='s_mode' value='".html_escape(@$_GET['s_mode'])."'></td>
|
||||
<td><input type='submit' value='Search'></td>
|
||||
</form>
|
||||
</tr>
|
||||
</thead>
|
||||
$h_bans
|
||||
<tfoot><tr id='add'>
|
||||
".make_form(make_link("ip_ban/add"))."
|
||||
<td><input type='text' name='ip' value='".html_escape(@$_GET['ip'])."'></td>
|
||||
<td><input type='text' name='reason' value='".html_escape(@$_GET['reason'])."'></td>
|
||||
<td>{$user->name}</td>
|
||||
<td></td>
|
||||
<td><input type='text' name='end' value='".html_escape(@$_GET['end'])."'></td>
|
||||
<td></td>
|
||||
<td><input type='submit' value='Ban'></td>
|
||||
</form>
|
||||
</tr></tfoot>
|
||||
<tfoot>
|
||||
<tr id='add'>
|
||||
".make_form(make_link("ip_ban/add"))."
|
||||
<td><input type='text' name='ip' value='".html_escape(@$_GET['ip'])."'></td>
|
||||
<td><input type='text' name='reason' value='".html_escape(@$_GET['reason'])."'></td>
|
||||
<td>{$user->name}</td>
|
||||
<td>{$today}</td>
|
||||
<td><input type='text' name='end' value='".html_escape(@$_GET['end'])."'></td>
|
||||
<td>block</td>
|
||||
<td><input type='submit' value='Ban'></td>
|
||||
</form>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
";
|
||||
$page->set_title("IP Bans");
|
||||
|
@ -24,8 +24,11 @@ class TagList extends Extension
|
||||
|
||||
if ($event->page_matches("tags")) {
|
||||
$this->theme->set_navigation($this->build_navigation());
|
||||
if($event->count_args() == 0) $sub = "map";
|
||||
else $sub = $event->get_arg(0);
|
||||
if ($event->count_args() == 0) {
|
||||
$sub = "map";
|
||||
} else {
|
||||
$sub = $event->get_arg(0);
|
||||
}
|
||||
switch ($sub) {
|
||||
default:
|
||||
case 'map':
|
||||
|
Loading…
x
Reference in New Issue
Block a user