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 {
/** @var ImageReport */
public $report;
/**
* @param ImageReport $report
*/
public function __construct($report) {
$this->report = $report;
}
}
class ImageReport {
/** @var int */
public $reporter_id;
public $user_id;
/** @var int */
public $image_id;
/** @var string */
public $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;
public function __construct($image_id, $user_id, $reason) {
$this->image_id = $image_id;
$this->user_id = $user_id;
$this->reason = $reason;
}
}
@ -56,7 +63,7 @@ class ReportImage extends Extension {
if($event->get_arg(0) == "add") {
if(!empty($_POST['image_id']) && !empty($_POST['reason'])) {
$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_redirect(make_link("post/view/$image_id"));
}
@ -93,11 +100,11 @@ class ReportImage extends Extension {
public function onAddReportedImage(AddReportedImageEvent $event) {
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(
"INSERT INTO image_reports(image_id, reporter_id, reason)
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");
}
@ -117,7 +124,7 @@ class ReportImage extends Extension {
public function onDisplayingImage(DisplayingImageEvent $event) {
global $user;
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);
}
}
@ -141,6 +148,20 @@ class ReportImage extends Extension {
$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
*/
@ -168,17 +189,21 @@ class ReportImage extends Extension {
/**
* @param Image $image
* @return string[]
* @return ImageReport[]
*/
public function get_reporters(Image $image) {
public function get_reports(Image $image) {
global $database;
return $database->get_col("
SELECT users.name
$rows = $database->get_all("
SELECT *
FROM image_reports
JOIN users ON reporter_id = users.id
WHERE image_reports.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
*/
public function display_reported_images(Page $page, $reports) {
global $config;
global $config, $user;
$h_reportedimages = "";
foreach($reports as $report) {
@ -27,7 +27,6 @@ class ReportImageTheme extends Themelet {
$reporter_name = html_escape($report['reporter_name']);
$userlink = "<a href='".make_link("user/$reporter_name")."'>$reporter_name</a>";
global $user;
$iabbe = new ImageAdminBlockBuildingEvent($image, $user);
send_event($iabbe);
ksort($iabbe->parts);
@ -65,15 +64,31 @@ class ReportImageTheme extends Themelet {
/**
* @param Image $image
* @param array $reporters
* @param ImageReport[] $reports
*/
public function display_image_banner(Image $image, /*array*/ $reporters) {
global $page;
public function display_image_banner(Image $image, /*array*/ $reports) {
global $config, $page;
$i_image = int_escape($image->id);
$html = "";
if(count($reporters) > 0) {
$html .= "<b>Image reported by ".html_escape(implode(", ", $reporters))."</b><p>";
$public = $config->get_string("report_image_publicity");
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 .= "
".make_form(make_link("image_report/add"))."