From 1c5d717d27c7502303b3cf5eaf8ba95b347210c0 Mon Sep 17 00:00:00 2001 From: Shish Date: Sat, 13 Jul 2013 09:35:26 +0100 Subject: [PATCH] put untags in the database --- ext/not_a_tag/main.php | 98 +++++++++++++++++++++++++++++++++++------ ext/not_a_tag/theme.php | 59 +++++++++++++++++++++++++ 2 files changed, 143 insertions(+), 14 deletions(-) create mode 100644 ext/not_a_tag/theme.php diff --git a/ext/not_a_tag/main.php b/ext/not_a_tag/main.php index d2696da3..0aa72f19 100644 --- a/ext/not_a_tag/main.php +++ b/ext/not_a_tag/main.php @@ -9,6 +9,17 @@ class NotATag extends Extension { public function get_priority() {return 30;} // before ImageUploadEvent and tag_history + public function onInitExt(InitExtEvent $event) { + global $config, $database; + if($config->get_int("ext_notatag_version") < 1) { + $database->create_table("untags", " + tag VARCHAR(128) NOT NULL PRIMARY KEY, + redirect VARCHAR(255) NOT NULL + "); + $config->set_int("ext_notatag_version", 1); + } + } + public function onImageAddition(ImageAdditionEvent $event) { $this->scan($event->image->get_tag_array()); } @@ -18,18 +29,13 @@ class NotATag extends Extension { } private function scan(/*array*/ $tags_mixed) { - global $config; - - $text = $config->get_string("not_a_tag_untags"); - if(empty($text)) return; + global $config, $database; $tags = array(); foreach($tags_mixed as $tag) $tags[] = strtolower($tag); - $pairs = explode("\n", $text); - foreach($pairs as $pair) { - $tag_url = explode(",", $pair); - if(count($tag_url) != 2) continue; + $pairs = $database->get_all("SELECT * FROM untags"); + foreach($pairs as $tag_url) { $tag = strtolower($tag_url[0]); $url = $tag_url[1]; if(in_array($tag, $tags)) { @@ -39,14 +45,78 @@ class NotATag extends Extension { } } - public function onSetupBuilding(SetupBuildingEvent $event) { - $sb = new SetupBlock("Un-Tags"); + public function onUserBlockBuilding(UserBlockBuildingEvent $event) { + global $user; + if($user->can("ban_image")) { + $event->add_link("UnTags", make_link("untag/list/1")); + } + } - $sb->add_label("List tag,url pairs"); - $sb->add_longtext_option("not_a_tag_untags"); - $sb->add_label("
(eg. 'deleteme,/wiki/reporting-images')"); + public function onPageRequest(PageRequestEvent $event) { + global $config, $database, $page, $user; - $event->panel->add_block($sb); + if($event->page_matches("untag")) { + if($user->can("ban_image")) { + if($event->get_arg(0) == "add") { + $tag = isset($_POST["tag"]) ? $_POST["tag"] : $image->tag; + $redirect = isset($_POST['redirect']) ? $_POST['redirect'] : "DNP"; + + $database->Execute( + "INSERT INTO untags(tag, redirect) VALUES (?, ?)", + array($tag, $redirect)); + + $page->set_mode("redirect"); + $page->set_redirect($_SERVER['HTTP_REFERER']); + } + else if($event->get_arg(0) == "remove") { + if(isset($_POST['tag'])) { + $database->Execute("DELETE FROM untags WHERE tag = ?", array($_POST['tag'])); + + flash_message("Image ban removed"); + $page->set_mode("redirect"); + $page->set_redirect($_SERVER['HTTP_REFERER']); + } + } + else if($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)); + } + } + } + } + + public function get_untags($page, $size=100) { + global $database; + + // FIXME: many + $size_i = int_escape($size); + $offset_i = int_escape($page-1)*$size_i; + $where = array("(1=1)"); + $args = array(); + if(!empty($_GET['tag'])) { + $where[] = 'tag SCORE_ILIKE ?'; + $args[] = "%".$_GET['tag']."%"; + } + if(!empty($_GET['redirect'])) { + $where[] = 'redirect SCORE_ILIKE ?'; + $args[] = "%".$_GET['redirect']."%"; + } + $where = implode(" AND ", $where); + $bans = $database->get_all($database->scoreql_to_sql(" + SELECT * + FROM untags + WHERE $where + ORDER BY tag + LIMIT $size_i + OFFSET $offset_i + "), $args); + if($bans) {return $bans;} + else {return array();} } } ?> diff --git a/ext/not_a_tag/theme.php b/ext/not_a_tag/theme.php new file mode 100644 index 00000000..05a1a251 --- /dev/null +++ b/ext/not_a_tag/theme.php @@ -0,0 +1,59 @@ + + ".make_form(make_link("untag/remove"))." + {$ban['tag']} + {$ban['redirect']} + + + + + + + "; + } + $html = " + + + + + + + + + + + + $h_bans + + ".make_form(make_link("untag/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("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); + } +} +?>