openvk/Web/Presenters/ReportPresenter.php

113 lines
4.4 KiB
PHP
Raw Normal View History

<?php declare(strict_types=1);
namespace openvk\Web\Presenters;
use openvk\Web\Models\Repositories\Users;
use openvk\Web\Models\Repositories\Reports;
2021-09-21 01:02:53 +03:00
use openvk\Web\Models\Repositories\Posts;
use openvk\Web\Models\Entities\Report;
final class ReportPresenter extends OpenVKPresenter
{
private $reports;
function __construct(Reports $reports)
{
$this->reports = $reports;
parent::__construct();
}
function renderList(): void
{
2021-12-05 10:57:15 +03:00
$this->assertUserLoggedIn();
2021-09-21 01:02:53 +03:00
$this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0);
$this->template->reports = $this->reports->getReports(0, (int)($this->queryParam("p") ?? 1));
2021-09-25 16:59:18 +03:00
$this->template->count = $this->reports->getReportsCount();
$this->template->paginatorConf = (object) [
"count" => $this->template->count,
"page" => $this->queryParam("p") ?? 1,
"amount" => NULL,
"perPage" => 15,
];
}
function renderView(int $id): void
{
2021-12-05 10:57:15 +03:00
$this->assertUserLoggedIn();
2021-09-21 01:02:53 +03:00
$this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0);
$report = $this->reports->get($id);
2021-09-25 16:59:18 +03:00
if(!$report || $report->isDeleted())
$this->notFound();
$this->template->report = $report;
}
2021-09-26 08:34:22 +03:00
function renderCreate(int $id): void
{
$this->assertUserLoggedIn();
$this->willExecuteWriteAction();
if(!$id)
2021-09-26 08:34:22 +03:00
exit(json_encode([ "error" => tr("error_segmentation") ]));
2023-08-09 00:29:30 +03:00
if(in_array($this->queryParam("type"), ["post", "photo", "video", "group", "comment", "note", "app", "user"])) {
2021-09-26 08:34:22 +03:00
$report = new Report;
$report->setUser_id($this->user->id);
$report->setTarget_id($id);
$report->setType($this->queryParam("type"));
$report->setReason($this->queryParam("reason"));
$report->setCreated(time());
$report->save();
exit(json_encode([ "reason" => $this->queryParam("reason") ]));
} else {
exit(json_encode([ "error" => "Unable to submit a report on this content type" ]));
}
}
2021-09-25 16:59:18 +03:00
function renderAction(int $id): void
2021-09-21 01:02:53 +03:00
{
$this->assertUserLoggedIn();
$this->willExecuteWriteAction();
$this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0);
$report = $this->reports->get($id);
2023-07-27 20:36:56 +03:00
if(!$report || $report->isDeleted()) $this->notFound();
2023-07-27 20:36:56 +03:00
if ($this->postParam("ban")) {
2021-09-25 16:59:18 +03:00
$report->deleteContent();
2023-07-27 20:36:56 +03:00
$report->banUser($this->user->identity->getId());
2021-09-25 16:59:18 +03:00
$this->flash("suc", "Смэрть...", "Пользователь успешно забанен.");
2023-07-27 20:36:56 +03:00
} else if ($this->postParam("delete")) {
2021-09-25 16:59:18 +03:00
$report->deleteContent();
2023-07-27 20:36:56 +03:00
2021-09-25 16:59:18 +03:00
$this->flash("suc", "Нехай живе!", "Контент удалён, а пользователю прилетело предупреждение.");
2023-07-27 20:36:56 +03:00
} else if ($this->postParam("ignore")) {
$report->delete();
2023-07-27 20:36:56 +03:00
2021-09-25 16:59:18 +03:00
$this->flash("suc", "Нехай живе!", "Жалоба проигнорирована.");
2023-07-27 20:36:56 +03:00
} else if ($this->postParam("banClubOwner") || $this->postParam("banClub")) {
if ($report->getContentType() !== "group")
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса.");
$club = $report->getContentObject();
2023-07-27 20:36:56 +03:00
if (!$club || $club->isBanned())
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса.");
2023-07-27 20:36:56 +03:00
if ($this->postParam("banClubOwner")) {
$club->getOwner()->ban("**content-" . $report->getContentType() . "-" . $report->getContentId() . "**", false, $club->getOwner()->getNewBanTime(), $this->user->identity->getId());
} else {
$club->ban("**content-" . $report->getContentType() . "-" . $report->getContentId() . "**");
}
$report->delete();
2023-07-27 20:36:56 +03:00
$this->flash("suc", "Смэрть...", ($this->postParam("banClubOwner") ? "Создатель сообщества успешно забанен." : "Сообщество успешно забанено"));
2021-09-25 16:59:18 +03:00
}
2023-07-27 20:36:56 +03:00
$this->redirect("/scumfeed");
}
}