diff --git a/ext/approval/main.php b/ext/approval/main.php index 58428b54..05e7b426 100644 --- a/ext/approval/main.php +++ b/ext/approval/main.php @@ -37,6 +37,21 @@ class Approval extends Extension self::approve_image($image_id); $page->set_mode(PageMode::REDIRECT); + $page->set_redirect(make_link("post/view/" . $image_id)); + } + + if ($event->page_matches("disapprove_image") && $user->can(Permissions::APPROVE_IMAGE)) { + // Try to get the image ID + $image_id = int_escape($event->get_arg(0)); + if (empty($image_id)) { + $image_id = isset($_POST['image_id']) ? $_POST['image_id'] : null; + } + if (empty($image_id)) { + throw new SCoreException("Can not disapprove image: No valid Image ID given."); + } + + self::disapprove_image($image_id); + $page->set_mode(PageMode::REDIRECT); $page->set_redirect(make_link("post/view/".$image_id)); } } @@ -69,7 +84,7 @@ class Approval extends Extension ["approved_by_id"=>$user->id] ); break; - case "de_approve_all": + case "disapprove_all": $database->set_timeout(300000); // These updates can take a little bit $database->execute($database->scoreql_to_sql( "UPDATE images SET approved = SCORE_BOOL_N, approved_by_id = NULL WHERE approved = SCORE_BOOL_Y")); @@ -158,11 +173,22 @@ class Approval extends Extension ["approved_by_id"=>$user->id, "id"=>$image_id] ); } + + public static function disapprove_image($image_id) + { + global $database, $user; + + $database->execute($database->scoreql_to_sql( + "UPDATE images SET approved = SCORE_BOOL_N, approved_by_id = NULL WHERE id = :id AND approved = SCORE_BOOL_Y"), + ["id"=>$image_id] + ); + } + public function onImageAdminBlockBuilding(ImageAdminBlockBuildingEvent $event) { global $user, $config; - if ($event->image->approved===false && $user->can(Permissions::APPROVE_IMAGE) && $config->get_bool(ApprovalConfig::IMAGES)) { - $event->add_part($this->theme->get_image_admin_html($event->image->id)); + if($user->can(Permissions::APPROVE_IMAGE) && $config->get_bool(ApprovalConfig::IMAGES)) { + $event->add_part($this->theme->get_image_admin_html($event->image)); } } @@ -170,8 +196,12 @@ class Approval extends Extension { global $user, $config; - if ($user->can(Permissions::APPROVE_IMAGE)&&in_array("approved:no", $event->search_terms)&& $config->get_bool(ApprovalConfig::IMAGES)) { - $event->add_action("bulk_approve_image", "Approve", "a"); + if ($user->can(Permissions::APPROVE_IMAGE)&& $config->get_bool(ApprovalConfig::IMAGES)) { + if(in_array("approved:no", $event->search_terms)) { + $event->add_action("bulk_approve_image", "Approve", "a"); + } else { + $event->add_action("bulk_disapprove_image", "Disapprove"); + } } } @@ -190,6 +220,16 @@ class Approval extends Extension flash_message("Approved $total items"); } break; + case "bulk_disapprove_image": + if ($user->can(Permissions::APPROVE_IMAGE)) { + $total = 0; + foreach ($event->items as $image) { + self::disapprove_image($image->id); + $total++; + } + flash_message("Disapproved $total items"); + } + break; } } diff --git a/ext/approval/theme.php b/ext/approval/theme.php index 5c807f8c..0879d1b1 100644 --- a/ext/approval/theme.php +++ b/ext/approval/theme.php @@ -2,14 +2,23 @@ class ApprovalTheme extends Themelet { - public function get_image_admin_html(int $image_id) + public function get_image_admin_html(Image $image) { - $html = " - ".make_form(make_link('approve_image/'.$image_id), 'POST')." - + if($image->approved===true) { + $html = " + ".make_form(make_link('disapprove_image/'.$image->id), 'POST')." + + + + "; + } else { + $html = " + ".make_form(make_link('approve_image/'.$image->id), 'POST')." + "; + } return $html; } @@ -42,7 +51,7 @@ class ApprovalTheme extends Themelet $html = make_form(make_link("admin/approval"), "POST"); $html .= "
"; - $html .= ""; + $html .= ""; $html .= "\n"; $page->add_block(new Block("Approval", $html)); }