From 920bdd1884549ceef09c67ff9e7da61d16cd6afa Mon Sep 17 00:00:00 2001 From: Shish Date: Fri, 29 Nov 2019 01:52:24 +0000 Subject: [PATCH] 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