133 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			4.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| //todo: removal by tag returns 1 less image in test for some reason, actually a combined search doesn't seem to work for shit either
 | |
| 
 | |
| class BulkRemove extends Extension
 | |
| {
 | |
|     public function onPageRequest(PageRequestEvent $event)
 | |
|     {
 | |
|         global $user;
 | |
|         if ($event->page_matches("bulk_remove") && $user->can(Permissions::BULK_ADD) && $user->check_auth_token()) {
 | |
|             if ($event->get_arg(0) == "confirm") {
 | |
|                 $this->do_bulk_remove();
 | |
|             } else {
 | |
|                 $this->show_confirm();
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function onAdminBuilding(AdminBuildingEvent $event)
 | |
|     {
 | |
|         global $page;
 | |
|         $html = "<b>Be extremely careful when using this!</b><br>
 | |
|                     Once an image is removed there is no way to recover it so it is recommended that
 | |
|                     you first take when removing a large amount of images.<br>
 | |
|                     <b>Note:</b> Entering both an ID range and tags will only remove images between the given ID's that have the given tags.
 | |
| 
 | |
| 			<p>".make_form(make_link("bulk_remove"))."
 | |
|                             <table class='form'>
 | |
|                                 <tr><td colspan='2'><b>Remove images by ID</b></td></tr>
 | |
|                                 <tr><th>From</th><td> <input type='text' name='remove_id_min' size='2'></td></tr>
 | |
|                                 <tr><th>Until</th><td> <input type='text' name='remove_id_max' size='2'></td></tr>
 | |
| 
 | |
|                                 <tr><td colspan='2'><b>Where tags are</b></td></tr>
 | |
|                                 <tr><td colspan='2'>
 | |
|                                 <input type='text' name='remove_tags' size='10'>
 | |
|                                </td> </tr>
 | |
|                                 <tr><td colspan='2'><input type='submit' value='Remove'></td></tr>
 | |
|                             </table>
 | |
| 			</form>
 | |
| 		";
 | |
|         $page->add_block(new Block("Bulk Remove", $html));
 | |
|     }
 | |
| 
 | |
|     // returns a list of images to be removed
 | |
|     private function determine_images()
 | |
|     {
 | |
|         // set vars
 | |
|         $images_for_removal = [];
 | |
|         $error = "";
 | |
| 
 | |
|         $min_id = $_POST['remove_id_min'];
 | |
|         $max_id = $_POST['remove_id_max'];
 | |
|         $tags = $_POST['remove_tags'];
 | |
| 
 | |
| 
 | |
|         // if using id range to remove (comined removal with tags)
 | |
|         if ($min_id != "" && $max_id != "") {
 | |
|             // error if values are not correctly entered
 | |
|             if (!is_numeric($min_id) || !is_numeric($max_id) ||
 | |
|                 intval($max_id) < intval($min_id)) {
 | |
|                 $error = "Values not correctly entered for removal between id.";
 | |
|             } else { // if min & max id are valid
 | |
| 
 | |
|                 // Grab the list of images & place it in the removing array
 | |
|                 foreach (Image::find_images(intval($min_id), intval($max_id)) as $image) {
 | |
|                     array_push($images_for_removal, $image);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // refine previous results or create results from tags
 | |
|         if ($tags != "") {
 | |
|             $tags_arr = explode(" ", $_POST['remove_tags']);
 | |
| 
 | |
|             // Search all images with the specified tags & add to list
 | |
|             foreach (Image::find_images(1, 2147483647, $tags_arr) as $image) {
 | |
|                 array_push($images_for_removal, $image);
 | |
|             }
 | |
|         }
 | |
| 
 | |
| 
 | |
|         // if no images were found with the given info
 | |
|         if (count($images_for_removal) == 0) {
 | |
|             $error = "No images selected for removal";
 | |
|         }
 | |
| 
 | |
|         //var_dump($tags_arr);
 | |
|         return [
 | |
|                 "error" => $error,
 | |
|                 "images_for_removal" => $images_for_removal];
 | |
|     }
 | |
| 
 | |
|     // displays confirmation to admin before removal
 | |
|     private function show_confirm()
 | |
|     {
 | |
|         global $page;
 | |
| 
 | |
|         // set vars
 | |
|         $determined_imgs = $this->determine_images();
 | |
|         $error = $determined_imgs["error"];
 | |
|         $images_for_removal = $determined_imgs["images_for_removal"];
 | |
| 
 | |
|         // if there was an error in determine_images()
 | |
|         if ($error != "") {
 | |
|             $page->add_block(new Block("Cannot remove images", $error));
 | |
|             return;
 | |
|         }
 | |
|         // generates the image array & places it in $_POST["bulk_remove_images"]
 | |
|         $_POST["bulk_remove_images"] = $images_for_removal;
 | |
| 
 | |
|         // Display confirmation message
 | |
|         $html = make_form(make_link("bulk_remove")).
 | |
|                     "Are you sure you want to PERMANENTLY remove ".
 | |
|                     count($images_for_removal) ." images?<br></form>";
 | |
|         $page->add_block(new Block("Confirm Removal", $html));
 | |
|     }
 | |
| 
 | |
|     private function do_bulk_remove()
 | |
|     {
 | |
|         global $page;
 | |
|         // display error if user didn't go through admin board
 | |
|         if (!isset($_POST["bulk_remove_images"])) {
 | |
|             $page->add_block(new Block(
 | |
|                 "Bulk Remove Error",
 | |
|                 "Please use Board Admin to use bulk remove."
 | |
|             ));
 | |
|         }
 | |
| 
 | |
|         //
 | |
|         $image_arr = $_POST["bulk_remove_images"];
 | |
|     }
 | |
| }
 |