put untags in the database
This commit is contained in:
parent
00e297c7d4
commit
1c5d717d27
@ -9,6 +9,17 @@
|
|||||||
class NotATag extends Extension {
|
class NotATag extends Extension {
|
||||||
public function get_priority() {return 30;} // before ImageUploadEvent and tag_history
|
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) {
|
public function onImageAddition(ImageAdditionEvent $event) {
|
||||||
$this->scan($event->image->get_tag_array());
|
$this->scan($event->image->get_tag_array());
|
||||||
}
|
}
|
||||||
@ -18,18 +29,13 @@ class NotATag extends Extension {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private function scan(/*array*/ $tags_mixed) {
|
private function scan(/*array*/ $tags_mixed) {
|
||||||
global $config;
|
global $config, $database;
|
||||||
|
|
||||||
$text = $config->get_string("not_a_tag_untags");
|
|
||||||
if(empty($text)) return;
|
|
||||||
|
|
||||||
$tags = array();
|
$tags = array();
|
||||||
foreach($tags_mixed as $tag) $tags[] = strtolower($tag);
|
foreach($tags_mixed as $tag) $tags[] = strtolower($tag);
|
||||||
|
|
||||||
$pairs = explode("\n", $text);
|
$pairs = $database->get_all("SELECT * FROM untags");
|
||||||
foreach($pairs as $pair) {
|
foreach($pairs as $tag_url) {
|
||||||
$tag_url = explode(",", $pair);
|
|
||||||
if(count($tag_url) != 2) continue;
|
|
||||||
$tag = strtolower($tag_url[0]);
|
$tag = strtolower($tag_url[0]);
|
||||||
$url = $tag_url[1];
|
$url = $tag_url[1];
|
||||||
if(in_array($tag, $tags)) {
|
if(in_array($tag, $tags)) {
|
||||||
@ -39,14 +45,78 @@ class NotATag extends Extension {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function onSetupBuilding(SetupBuildingEvent $event) {
|
public function onUserBlockBuilding(UserBlockBuildingEvent $event) {
|
||||||
$sb = new SetupBlock("Un-Tags");
|
global $user;
|
||||||
|
if($user->can("ban_image")) {
|
||||||
|
$event->add_link("UnTags", make_link("untag/list/1"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$sb->add_label("List tag,url pairs");
|
public function onPageRequest(PageRequestEvent $event) {
|
||||||
$sb->add_longtext_option("not_a_tag_untags");
|
global $config, $database, $page, $user;
|
||||||
$sb->add_label("<br>(eg. 'deleteme,/wiki/reporting-images')");
|
|
||||||
|
|
||||||
$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();}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
59
ext/not_a_tag/theme.php
Normal file
59
ext/not_a_tag/theme.php
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?php
|
||||||
|
class NotATagTheme extends Themelet {
|
||||||
|
public function display_untags(Page $page, $page_number, $page_count, $bans) {
|
||||||
|
$h_bans = "";
|
||||||
|
$n = 0;
|
||||||
|
foreach($bans as $ban) {
|
||||||
|
$h_bans .= "
|
||||||
|
<tr>
|
||||||
|
".make_form(make_link("untag/remove"))."
|
||||||
|
<td width='30%'>{$ban['tag']}</td>
|
||||||
|
<td>{$ban['redirect']}</td>
|
||||||
|
<td width='10%'>
|
||||||
|
<input type='hidden' name='tag' value='{$ban['tag']}'>
|
||||||
|
<input type='submit' value='Remove'>
|
||||||
|
</td>
|
||||||
|
</form>
|
||||||
|
</tr>
|
||||||
|
";
|
||||||
|
}
|
||||||
|
$html = "
|
||||||
|
<table id='image_bans' class='zebra sortable'>
|
||||||
|
<thead>
|
||||||
|
<th>Hash</th><th>Reason</th><th>Action</th>
|
||||||
|
<tr>
|
||||||
|
<form action='".make_link("untag/list/1")."' method='GET'>
|
||||||
|
<td><input type='text' name='tag'></td>
|
||||||
|
<td><input type='text' name='redirect'></td>
|
||||||
|
<td><input type='submit' value='Search'></td>
|
||||||
|
</form>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
$h_bans
|
||||||
|
<tfoot><tr>
|
||||||
|
".make_form(make_link("untag/add"))."
|
||||||
|
<td><input type='text' name='tag'></td>
|
||||||
|
<td><input type='text' name='redirect'></td>
|
||||||
|
<td><input type='submit' value='Ban'></td>
|
||||||
|
</form>
|
||||||
|
</tr></tfoot>
|
||||||
|
</table>
|
||||||
|
";
|
||||||
|
|
||||||
|
$prev = $page_number - 1;
|
||||||
|
$next = $page_number + 1;
|
||||||
|
|
||||||
|
$h_prev = ($page_number <= 1) ? "Prev" : "<a href='".make_link("untag/list/$prev")."'>Prev</a>";
|
||||||
|
$h_index = "<a href='".make_link()."'>Index</a>";
|
||||||
|
$h_next = ($page_number >= $page_count) ? "Next" : "<a href='".make_link("untag/list/$next")."'>Next</a>";
|
||||||
|
|
||||||
|
$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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
Loading…
x
Reference in New Issue
Block a user