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