more image report display options

This commit is contained in:
Shish 2016-07-30 15:04:34 +01:00
parent b533a43428
commit bc3e482247
2 changed files with 64 additions and 24 deletions

View File

@ -22,21 +22,28 @@ class RemoveReportedImageEvent extends Event {
} }
class AddReportedImageEvent extends Event { class AddReportedImageEvent extends Event {
/** @var ImageReport */
public $report;
/**
* @param ImageReport $report
*/
public function __construct($report) {
$this->report = $report;
}
}
class ImageReport {
/** @var int */ /** @var int */
public $reporter_id; public $user_id;
/** @var int */ /** @var int */
public $image_id; public $image_id;
/** @var string */ /** @var string */
public $reason; public $reason;
/** public function __construct($image_id, $user_id, $reason) {
* @param int $image_id
* @param int $reporter_id
* @param string $reason
*/
public function __construct($image_id, $reporter_id, $reason) {
$this->reporter_id = $reporter_id;
$this->image_id = $image_id; $this->image_id = $image_id;
$this->user_id = $user_id;
$this->reason = $reason; $this->reason = $reason;
} }
} }
@ -56,7 +63,7 @@ class ReportImage extends Extension {
if($event->get_arg(0) == "add") { if($event->get_arg(0) == "add") {
if(!empty($_POST['image_id']) && !empty($_POST['reason'])) { if(!empty($_POST['image_id']) && !empty($_POST['reason'])) {
$image_id = int_escape($_POST['image_id']); $image_id = int_escape($_POST['image_id']);
send_event(new AddReportedImageEvent($image_id, $user->id, $_POST['reason'])); send_event(new AddReportedImageEvent(new ImageReport($image_id, $user->id, $_POST['reason'])));
$page->set_mode("redirect"); $page->set_mode("redirect");
$page->set_redirect(make_link("post/view/$image_id")); $page->set_redirect(make_link("post/view/$image_id"));
} }
@ -93,11 +100,11 @@ class ReportImage extends Extension {
public function onAddReportedImage(AddReportedImageEvent $event) { public function onAddReportedImage(AddReportedImageEvent $event) {
global $database; global $database;
log_info("report_image", "Adding report of Image #{$event->image_id} with reason '{$event->reason}'", false, array("image_id" => $event->image_id)); log_info("report_image", "Adding report of Image #{$event->report->image_id} with reason '{$event->report->reason}'", false, array("image_id" => $event->report->image_id));
$database->Execute( $database->Execute(
"INSERT INTO image_reports(image_id, reporter_id, reason) "INSERT INTO image_reports(image_id, reporter_id, reason)
VALUES (?, ?, ?)", VALUES (?, ?, ?)",
array($event->image_id, $event->reporter_id, $event->reason)); array($event->report->image_id, $event->report->user_id, $event->report->reason));
$database->cache->delete("image-report-count"); $database->cache->delete("image-report-count");
} }
@ -117,7 +124,7 @@ class ReportImage extends Extension {
public function onDisplayingImage(DisplayingImageEvent $event) { public function onDisplayingImage(DisplayingImageEvent $event) {
global $user; global $user;
if($user->can('create_image_report')) { if($user->can('create_image_report')) {
$reps = $this->get_reporters($event->image); $reps = $this->get_reports($event->image);
$this->theme->display_image_banner($event->image, $reps); $this->theme->display_image_banner($event->image, $reps);
} }
} }
@ -141,6 +148,20 @@ class ReportImage extends Extension {
$this->delete_reports_by($event->id); $this->delete_reports_by($event->id);
} }
public function onSetupBuilding(SetupBuildingEvent $event) {
$sb = new SetupBlock("Image Reports");
$opts = array(
"Reporter Only" => "user",
"Reason Only" => "reason",
"Both" => "both",
"None" => "none",
);
$sb->add_choice_option("report_image_publicity", $opts, "Show publicly: ");
$event->panel->add_block($sb);
}
/** /**
* @param int $user_id * @param int $user_id
*/ */
@ -168,17 +189,21 @@ class ReportImage extends Extension {
/** /**
* @param Image $image * @param Image $image
* @return string[] * @return ImageReport[]
*/ */
public function get_reporters(Image $image) { public function get_reports(Image $image) {
global $database; global $database;
return $database->get_col(" $rows = $database->get_all("
SELECT users.name SELECT *
FROM image_reports FROM image_reports
JOIN users ON reporter_id = users.id
WHERE image_reports.image_id = :image_id WHERE image_reports.image_id = :image_id
", array("image_id" => $image->id)); ", array("image_id" => $image->id));
$reps = array();
foreach($rows as $row) {
$reps[] = new ImageReport($row["image_id"], $row["reporter_id"], $row["reason"]);
}
return $reps;
} }
/** /**

View File

@ -16,7 +16,7 @@ class ReportImageTheme extends Themelet {
* @param array $reports * @param array $reports
*/ */
public function display_reported_images(Page $page, $reports) { public function display_reported_images(Page $page, $reports) {
global $config; global $config, $user;
$h_reportedimages = ""; $h_reportedimages = "";
foreach($reports as $report) { foreach($reports as $report) {
@ -27,7 +27,6 @@ class ReportImageTheme extends Themelet {
$reporter_name = html_escape($report['reporter_name']); $reporter_name = html_escape($report['reporter_name']);
$userlink = "<a href='".make_link("user/$reporter_name")."'>$reporter_name</a>"; $userlink = "<a href='".make_link("user/$reporter_name")."'>$reporter_name</a>";
global $user;
$iabbe = new ImageAdminBlockBuildingEvent($image, $user); $iabbe = new ImageAdminBlockBuildingEvent($image, $user);
send_event($iabbe); send_event($iabbe);
ksort($iabbe->parts); ksort($iabbe->parts);
@ -65,15 +64,31 @@ class ReportImageTheme extends Themelet {
/** /**
* @param Image $image * @param Image $image
* @param array $reporters * @param ImageReport[] $reports
*/ */
public function display_image_banner(Image $image, /*array*/ $reporters) { public function display_image_banner(Image $image, /*array*/ $reports) {
global $page; global $config, $page;
$i_image = int_escape($image->id); $i_image = int_escape($image->id);
$html = ""; $html = "";
if(count($reporters) > 0) { $public = $config->get_string("report_image_publicity");
$html .= "<b>Image reported by ".html_escape(implode(", ", $reporters))."</b><p>"; if($public != "none" && count($reports) > 0) {
$html .= "<b>Current reports:</b>";
foreach($reports as $report) {
$html .= "<br>";
if($public == "both") {
$html .= html_escape(User::by_id($report->user_id)->name);
$html .= " - ";
$html .= html_escape($report->reason);
}
elseif($public == "user") {
$html .= html_escape(User::by_id($report->user_id)->name);
}
elseif($public == "reason") {
$html .= html_escape($report->reason);
}
}
$html .= "<p>";
} }
$html .= " $html .= "
".make_form(make_link("image_report/add"))." ".make_form(make_link("image_report/add"))."