From 920bdd1884549ceef09c67ff9e7da61d16cd6afa Mon Sep 17 00:00:00 2001 From: Shish Date: Fri, 29 Nov 2019 01:52:24 +0000 Subject: [PATCH 1/3] microcrud for image hash bans --- ext/image_hash_ban/main.php | 109 +++++++++++++++++------------------ ext/image_hash_ban/theme.php | 68 ++-------------------- ext/ipban/main.php | 5 +- ext/ipban/theme.php | 1 - 4 files changed, 62 insertions(+), 121 deletions(-) diff --git a/ext/image_hash_ban/main.php b/ext/image_hash_ban/main.php index 15796201..8f5fdee9 100644 --- a/ext/image_hash_ban/main.php +++ b/ext/image_hash_ban/main.php @@ -1,5 +1,38 @@ table = "bans"; + $this->base_query = " + SELECT * FROM ( + SELECT bans.*, users.name AS banner + FROM bans JOIN users ON banner_id=users.id + ) AS tbl1 + "; + + $this->size = 10; + $this->columns = [ + new StringColumn("hash", "Hash"), + new TextColumn("reason", "Reason"), + new DateColumn("date", "Date"), + ]; + $this->order_by = ["date DESC", "id"]; + $this->create_url = make_link("image_hash_ban/add"); + $this->delete_url = make_link("image_hash_ban/remove"); + + $this->table_attrs = ["class" => "zebra"]; + } +} + class RemoveImageHashBanEvent extends Event { public $hash; @@ -55,9 +88,11 @@ class ImageBan extends Extension if ($event->page_matches("image_hash_ban")) { if ($user->can(Permissions::BAN_IMAGE)) { if ($event->get_arg(0) == "add") { - $image = isset($_POST['image_id']) ? Image::by_id(int_escape($_POST['image_id'])) : null; - $hash = isset($_POST["hash"]) ? $_POST["hash"] : $image->hash; - $reason = isset($_POST['reason']) ? $_POST['reason'] : "DNP"; + $user->ensure_authed(); + $input = validate_input(["c_hash"=>"optional,string", "c_reason"=>"string", "c_image_id"=>"optional,int"]); + $image = isset($input['c_image_id']) ? Image::by_id($input['c_image_id']) : null; + $hash = isset($input["c_hash"]) ? $input["c_hash"] : $image->hash; + $reason = isset($input['c_reason']) ? $input['c_reason'] : "DNP"; if ($hash) { send_event(new AddImageHashBanEvent($hash, $reason)); @@ -72,21 +107,21 @@ class ImageBan extends Extension $page->set_redirect($_SERVER['HTTP_REFERER']); } } elseif ($event->get_arg(0) == "remove") { - if (isset($_POST['hash'])) { - send_event(new RemoveImageHashBanEvent($_POST['hash'])); - - flash_message("Image ban removed"); - $page->set_mode(PageMode::REDIRECT); - $page->set_redirect($_SERVER['HTTP_REFERER']); - } + $user->ensure_authed(); + $input = validate_input(["d_id"=>"int"]); + $hash = $database->get_one( + "SELECT hash FROM image_hash_bans WHERE id=:id", + ["id"=>$input['d_id']] + ); + send_event(new RemoveImageHashBanEvent($hash)); + flash_message("Image ban removed"); + $page->set_mode(PageMode::REDIRECT); + $page->set_redirect($_SERVER['HTTP_REFERER']); } elseif ($event->get_arg(0) == "list") { - $page_num = 0; - if ($event->count_args() == 2) { - $page_num = int_escape($event->get_arg(1)); - } - $page_size = 100; - $page_count = ceil($database->get_one("SELECT COUNT(id) FROM image_bans")/$page_size); - $this->theme->display_Image_hash_Bans($page, $page_num, $page_count, $this->get_image_hash_bans($page_num, $page_size)); + $t = new HashBanTable($database->raw_db()); + $t->token = $user->get_auth_token(); + $t->inputs = $_GET; + $this->theme->display_bans($page, $t->table($t->query()), $t->paginator()); } } } @@ -102,7 +137,6 @@ class ImageBan extends Extension } } - public function onUserBlockBuilding(UserBlockBuildingEvent $event) { global $user; @@ -114,7 +148,7 @@ class ImageBan extends Extension public function onAddImageHashBan(AddImageHashBanEvent $event) { global $database; - $database->Execute( + $database->execute( "INSERT INTO image_bans (hash, reason, date) VALUES (:hash, :reason, now())", ["hash"=>$event->hash, "reason"=>$event->reason] ); @@ -124,7 +158,7 @@ class ImageBan extends Extension public function onRemoveImageHashBan(RemoveImageHashBanEvent $event) { global $database; - $database->Execute("DELETE FROM image_bans WHERE hash = :hash", ["hash"=>$event->hash]); + $database->execute("DELETE FROM image_bans WHERE hash = :hash", ["hash"=>$event->hash]); } public function onImageAdminBlockBuilding(ImageAdminBlockBuildingEvent $event) @@ -135,41 +169,6 @@ class ImageBan extends Extension } } - // DB funness - - public function get_image_hash_bans(int $page, int $size=100): array - { - global $database; - - // FIXME: many - $size_i = int_escape($size); - $offset_i = int_escape($page-1)*$size_i; - $where = ["(1=1)"]; - $args = []; - if (!empty($_GET['hash'])) { - $where[] = 'hash = :hash'; - $args['hash'] = $_GET['hash']; - } - if (!empty($_GET['reason'])) { - $where[] = 'reason SCORE_ILIKE :reason'; - $args['reason'] = "%".$_GET['reason']."%"; - } - $where = implode(" AND ", $where); - $bans = $database->get_all($database->scoreql_to_sql(" - SELECT * - FROM image_bans - WHERE $where - ORDER BY id DESC - LIMIT $size_i - OFFSET $offset_i - "), $args); - if ($bans) { - return $bans; - } else { - return []; - } - } - // in before resolution limit plugin public function get_priority(): int { diff --git a/ext/image_hash_ban/theme.php b/ext/image_hash_ban/theme.php index 5a3afd99..35e96a05 100644 --- a/ext/image_hash_ban/theme.php +++ b/ext/image_hash_ban/theme.php @@ -4,81 +4,25 @@ class ImageBanTheme extends Themelet { /* * Show all the bans - * - * $bans = an array of ( - * 'hash' => the banned hash - * 'reason' => why the hash was banned - * 'date' => when the ban started - * ) */ - public function display_image_hash_bans(Page $page, $page_number, $page_count, $bans) + public function display_bans(Page $page, $table, $paginator) { - $h_bans = ""; - foreach ($bans as $ban) { - $h_bans .= " - - ".make_form(make_link("image_hash_ban/remove"))." - {$ban['hash']} - {$ban['reason']} - - - - - - - "; - } - $html = " - - - - - - - - - - - - $h_bans - - ".make_form(make_link("image_hash_ban/add"))." - - - - - -
HashReasonAction
- "; - - $prev = $page_number - 1; - $next = $page_number + 1; - - $h_prev = ($page_number <= 1) ? "Prev" : "Prev"; - $h_index = "Index"; - $h_next = ($page_number >= $page_count) ? "Next" : "Next"; - - $nav = "$h_prev | $h_index | $h_next"; - $page->set_title("Image Bans"); $page->set_heading("Image Bans"); - $page->add_block(new Block("Edit Image Bans", $html)); - $page->add_block(new Block("Navigation", $nav, "left", 0)); - $this->display_paginator($page, "image_hash_ban/list", null, $page_number, $page_count); + $page->add_block(new NavBlock()); + $page->add_block(new Block("Edit Image Bans", $table . $paginator)); } /* * Display a link to delete an image - * - * $image_id = the image to delete */ public function get_buttons_html(Image $image) { $html = " ".make_form(make_link("image_hash_ban/add"))." - - - + + + "; diff --git a/ext/ipban/main.php b/ext/ipban/main.php index 3f995e41..068729bb 100644 --- a/ext/ipban/main.php +++ b/ext/ipban/main.php @@ -9,7 +9,7 @@ use MicroCRUD\Table; class IPBanTable extends Table { - public function __construct(\PDO $db, $token=null) + public function __construct(\FFSPHP\PDO $db, $token=null) { parent::__construct($db, $token); @@ -182,8 +182,7 @@ class IPBan extends Extension $t = new IPBanTable($database->raw_db()); $t->token = $user->get_auth_token(); $t->inputs = $_GET; - $table = $t->table($t->query()); - $this->theme->display_bans($page, $table, $t->paginator()); + $this->theme->display_bans($page, $t->table($t->query()), $t->paginator()); } } else { $this->theme->display_permission_denied(); diff --git a/ext/ipban/theme.php b/ext/ipban/theme.php index c94a0032..c88f479c 100644 --- a/ext/ipban/theme.php +++ b/ext/ipban/theme.php @@ -4,7 +4,6 @@ class IPBanTheme extends Themelet { public function display_bans(Page $page, $table, $paginator) { - $today = date('Y-m-d'); $html = " Show All Active / Show EVERYTHING From 2deaeca133cb6cf768f7fb5c9c5b344043bd55d1 Mon Sep 17 00:00:00 2001 From: Shish Date: Fri, 29 Nov 2019 02:04:14 +0000 Subject: [PATCH 2/3] use the right table --- ext/image_hash_ban/main.php | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/ext/image_hash_ban/main.php b/ext/image_hash_ban/main.php index 8f5fdee9..fec46ec0 100644 --- a/ext/image_hash_ban/main.php +++ b/ext/image_hash_ban/main.php @@ -11,15 +11,11 @@ class HashBanTable extends Table { parent::__construct($db, $token); - $this->table = "bans"; - $this->base_query = " - SELECT * FROM ( - SELECT bans.*, users.name AS banner - FROM bans JOIN users ON banner_id=users.id - ) AS tbl1 - "; + $this->table = "image_bans"; + $this->base_query = "SELECT * FROM image_bans"; - $this->size = 10; + $this->size = 100; + $this->limit = 1000000; $this->columns = [ new StringColumn("hash", "Hash"), new TextColumn("reason", "Reason"), From 7d30aaf1ea06b1c50bd90460a28e04f03b1ac92d Mon Sep 17 00:00:00 2001 From: Shish Date: Fri, 29 Nov 2019 02:06:22 +0000 Subject: [PATCH 3/3] microcrud for notatag --- ext/image_hash_ban/main.php | 15 +++------- ext/ipban/main.php | 12 ++++---- ext/not_a_tag/main.php | 60 ++++++++++++++++++++++++------------- ext/not_a_tag/theme.php | 54 ++------------------------------- 4 files changed, 52 insertions(+), 89 deletions(-) diff --git a/ext/image_hash_ban/main.php b/ext/image_hash_ban/main.php index fec46ec0..33c49d29 100644 --- a/ext/image_hash_ban/main.php +++ b/ext/image_hash_ban/main.php @@ -7,13 +7,11 @@ use MicroCRUD\Table; class HashBanTable extends Table { - public function __construct(\FFSPHP\PDO $db, $token=null) + public function __construct(\FFSPHP\PDO $db) { - parent::__construct($db, $token); - + parent::__construct($db); $this->table = "image_bans"; $this->base_query = "SELECT * FROM image_bans"; - $this->size = 100; $this->limit = 1000000; $this->columns = [ @@ -24,7 +22,6 @@ class HashBanTable extends Table $this->order_by = ["date DESC", "id"]; $this->create_url = make_link("image_hash_ban/add"); $this->delete_url = make_link("image_hash_ban/remove"); - $this->table_attrs = ["class" => "zebra"]; } } @@ -104,12 +101,8 @@ class ImageBan extends Extension } } elseif ($event->get_arg(0) == "remove") { $user->ensure_authed(); - $input = validate_input(["d_id"=>"int"]); - $hash = $database->get_one( - "SELECT hash FROM image_hash_bans WHERE id=:id", - ["id"=>$input['d_id']] - ); - send_event(new RemoveImageHashBanEvent($hash)); + $input = validate_input(["d_hash"=>"string"]); + send_event(new RemoveImageHashBanEvent($input['hash'])); flash_message("Image ban removed"); $page->set_mode(PageMode::REDIRECT); $page->set_redirect($_SERVER['HTTP_REFERER']); diff --git a/ext/ipban/main.php b/ext/ipban/main.php index 068729bb..c059d7b7 100644 --- a/ext/ipban/main.php +++ b/ext/ipban/main.php @@ -9,10 +9,9 @@ use MicroCRUD\Table; class IPBanTable extends Table { - public function __construct(\FFSPHP\PDO $db, $token=null) + public function __construct(\FFSPHP\PDO $db) { - parent::__construct($db, $token); - + parent::__construct($db); $this->table = "bans"; $this->base_query = " SELECT * FROM ( @@ -20,8 +19,8 @@ class IPBanTable extends Table FROM bans JOIN users ON banner_id=users.id ) AS tbl1 "; - - $this->size = 10; + $this->size = 100; + $this->limit = 1000000; $this->columns = [ new InetColumn("ip", "IP"), new EnumColumn("mode", "Mode", ["Block"=>"block", "Firewall"=>"firewall", "Ghost"=>"ghost"]), @@ -36,8 +35,7 @@ class IPBanTable extends Table ]; $this->create_url = make_link("ip_ban/create"); $this->delete_url = make_link("ip_ban/delete"); - - $this->table_attrs = ["class" => "sortable zebra"]; + $this->table_attrs = ["class" => "zebra"]; } } diff --git a/ext/not_a_tag/main.php b/ext/not_a_tag/main.php index 5d637f20..4a0d56d4 100644 --- a/ext/not_a_tag/main.php +++ b/ext/not_a_tag/main.php @@ -1,5 +1,28 @@ table = "untags"; + $this->base_query = "SELECT * FROM untags"; + $this->size = 100; + $this->limit = 1000000; + $this->columns = [ + new TextColumn("tag", "Tag"), + new TextColumn("redirect", "Redirect"), + ]; + $this->order_by = ["tag", "redirect"]; + $this->create_url = make_link("untag/add"); + $this->delete_url = make_link("untag/remove"); + $this->table_attrs = ["class" => "zebra"]; + } +} + class NotATag extends Extension { public function get_priority(): int @@ -77,32 +100,29 @@ class NotATag extends Extension if ($event->page_matches("untag")) { if ($user->can(Permissions::BAN_IMAGE)) { if ($event->get_arg(0) == "add") { - $tag = $_POST["tag"]; - $redirect = isset($_POST['redirect']) ? $_POST['redirect'] : "DNP"; - - $database->Execute( + $user->ensure_authed(); + $input = validate_input(["c_tag"=>"string", "c_redirect"=>"string"]); + $database->execute( "INSERT INTO untags(tag, redirect) VALUES (:tag, :redirect)", - ["tag"=>$tag, "redirect"=>$redirect] + ["tag"=>$input['c_tag'], "redirect"=>$input['c_redirect']] ); - $page->set_mode(PageMode::REDIRECT); $page->set_redirect($_SERVER['HTTP_REFERER']); } elseif ($event->get_arg(0) == "remove") { - if (isset($_POST['tag'])) { - $database->Execute($database->scoreql_to_sql("DELETE FROM untags WHERE SCORE_STRNORM(tag) = SCORE_STRNORM(:tag)"), ["tag"=>$_POST['tag']]); - - flash_message("Image ban removed"); - $page->set_mode(PageMode::REDIRECT); - $page->set_redirect($_SERVER['HTTP_REFERER']); - } + $user->ensure_authed(); + $input = validate_input(["d_tag"=>"string"]); + $database->execute($database->scoreql_to_sql( + "DELETE FROM untags WHERE SCORE_STRNORM(tag) = SCORE_STRNORM(:tag)"), + ["tag"=>$input['d_tag']] + ); + flash_message("Image ban removed"); + $page->set_mode(PageMode::REDIRECT); + $page->set_redirect($_SERVER['HTTP_REFERER']); } elseif ($event->get_arg(0) == "list") { - $page_num = 0; - if ($event->count_args() == 2) { - $page_num = int_escape($event->get_arg(1)); - } - $page_size = 100; - $page_count = ceil($database->get_one("SELECT COUNT(tag) FROM untags")/$page_size); - $this->theme->display_untags($page, $page_num, $page_count, $this->get_untags($page_num, $page_size)); + $t = new NotATagTable($database->raw_db()); + $t->token = $user->get_auth_token(); + $t->inputs = $_GET; + $this->theme->display_bans($page, $t->table($t->query()), $t->paginator()); } } } diff --git a/ext/not_a_tag/theme.php b/ext/not_a_tag/theme.php index 535a1b36..ddd08fca 100644 --- a/ext/not_a_tag/theme.php +++ b/ext/not_a_tag/theme.php @@ -1,59 +1,11 @@ - ".make_form(make_link("untag/remove"))." - {$ban['tag']} - {$ban['redirect']} - - - - - - - "; - } - $html = " - - - - - - - - - - - - $h_bans - - ".make_form(make_link("untag/add"))." - - - - - -
TagRedirectAction
- "; - - $prev = $page_number - 1; - $next = $page_number + 1; - - $h_prev = ($page_number <= 1) ? "Prev" : "Prev"; - $h_index = "Index"; - $h_next = ($page_number >= $page_count) ? "Next" : "Next"; - - $nav = "$h_prev | $h_index | $h_next"; - $page->set_title("UnTags"); $page->set_heading("UnTags"); - $page->add_block(new Block("Edit UnTags", $html)); - $page->add_block(new Block("Navigation", $nav, "left", 0)); - $this->display_paginator($page, "untag/list", null, $page_number, $page_count); + $page->add_block(new NavBlock()); + $page->add_block(new Block("Edit UnTags", $table . $paginator)); } }