mirror of
https://github.com/openvk/openvk
synced 2024-12-25 18:11:07 +03:00
Reports: Backend is done
This commit is contained in:
parent
75c0aecf47
commit
d715fa9575
3 changed files with 93 additions and 20 deletions
|
@ -84,4 +84,11 @@ class Report extends RowModel
|
|||
$this->unwire();
|
||||
$this->save();
|
||||
}
|
||||
|
||||
function delete()
|
||||
{
|
||||
$this->setDeleted(1);
|
||||
$this->unwire();
|
||||
$this->save();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,6 +35,16 @@ class Reports
|
|||
{
|
||||
return $this->toTicket($this->tickets->get($id));
|
||||
}
|
||||
|
||||
function getByContentId(int $id): ?Ticket
|
||||
{
|
||||
$post = $this->reports->where(["deleted" => 0, "content_id" => $id])->fetch();
|
||||
|
||||
if($post)
|
||||
return new Report($post);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
use \Nette\SmartObject;
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
namespace openvk\Web\Presenters;
|
||||
use openvk\Web\Models\Repositories\Users;
|
||||
use openvk\Web\Models\Repositories\Reports;
|
||||
use openvk\Web\Models\Repositories\Posts;
|
||||
use openvk\Web\Models\Entities\Report;
|
||||
|
||||
final class ReportPresenter extends OpenVKPresenter
|
||||
|
@ -17,6 +18,8 @@ final class ReportPresenter extends OpenVKPresenter
|
|||
|
||||
function renderList(): void
|
||||
{
|
||||
$this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0);
|
||||
|
||||
$this->template->reports = $this->reports->getReports(0, (int)($this->queryParam("p") ?? 1));
|
||||
$this->template->count = $this->notes->getReportsCount();
|
||||
$this->template->paginatorConf = (object) [
|
||||
|
@ -29,6 +32,8 @@ final class ReportPresenter extends OpenVKPresenter
|
|||
|
||||
function renderView(int $id): void
|
||||
{
|
||||
$this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0);
|
||||
|
||||
$report = $this->reports->get($id);
|
||||
if(!$report || $note->isDeleted())
|
||||
$this->notFound();
|
||||
|
@ -42,40 +47,91 @@ final class ReportPresenter extends OpenVKPresenter
|
|||
$this->willExecuteWriteAction();
|
||||
|
||||
// ЛАПСКИЙ Я НЕ ДО КОНЦА ДОДЕЛАЛ Я ПРОСТО МЫТЬСЯ ПОШЁЛ
|
||||
// А ВОТ ЩА ДОДЕЛАЮ
|
||||
// апд 01:00 по мск доделал фронт вроде!!!!
|
||||
if(!$id)
|
||||
$this->notFound();
|
||||
|
||||
if($_SERVER["REQUEST_METHOD"] === "POST") {
|
||||
if(empty($this->postParam("name"))) {
|
||||
if(empty($this->postParam("type")) && empty($this->postParam('id'))) {
|
||||
$this->flashFail("err", tr("error"), tr("error_segmentation"));
|
||||
}
|
||||
|
||||
$note = new Note;
|
||||
$note->setOwner($this->user->id);
|
||||
$note->setCreated(time());
|
||||
$note->setName($this->postParam("name"));
|
||||
$note->setSource($this->postParam("html"));
|
||||
$note->save();
|
||||
|
||||
$this->redirect("/note" . $this->user->id . "_" . $note->getId());
|
||||
// At this moment, only Posts will be implemented
|
||||
if($this->postParam("type") == 'posts') {
|
||||
$post = (new Posts)->get(intval($this->postParam("id")));
|
||||
if(!$post)
|
||||
$this->flashFail("err", "Ага! Попался, гадёныш блядь!", "Нельзя отправить жалобу на несуществующий контент");
|
||||
|
||||
$postDublicate = $this->reports->getByContentId($post->getId());
|
||||
if($postDublicate)
|
||||
$this->flashFail("err", tr("error"), "На этот контент уже пожаловался один из пользователей");
|
||||
|
||||
$report = new Report;
|
||||
$report->setUser_id($this->user->id);
|
||||
$note->setContent_id($this->postParam("id"));
|
||||
$note->setReason($this->postParam("reason"));
|
||||
$note->setCreated(time());
|
||||
$note->setType($this->postParam("type"));
|
||||
$note->save();
|
||||
|
||||
$this->flashFail("suc", "Жалоба отправлена", "Скоро её рассмотрят модераторы");
|
||||
} else {
|
||||
$this->flashFail("err", "Пока низя", "Нельзя отправить жалобу на данный тип контент");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function renderDelete(int $owner, int $id): void
|
||||
function renderBan(int $id): void
|
||||
{
|
||||
$this->assertUserLoggedIn();
|
||||
$this->willExecuteWriteAction();
|
||||
$this->assertNoCSRF();
|
||||
|
||||
$note = $this->notes->get($id);
|
||||
if(!$note) $this->notFound();
|
||||
if($note->getOwner()->getId() . "_" . $note->getId() !== $owner . "_" . $id || $note->isDeleted()) $this->notFound();
|
||||
if(is_null($this->user) || !$note->canBeModifiedBy($this->user->identity))
|
||||
$this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0);
|
||||
|
||||
$report = $this->report->get($id);
|
||||
if(!$report) $this->notFound();
|
||||
if($note->isDeleted()) $this->notFound();
|
||||
if(is_null($this->user))
|
||||
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса.");
|
||||
|
||||
$name = $note->getName();
|
||||
$note->delete();
|
||||
$this->flash("succ", "Заметка удалена", "Заметка \"$name\" была успешно удалена.");
|
||||
$this->redirect("/notes" . $this->user->id);
|
||||
$report->banUser();
|
||||
$report->deleteContent();
|
||||
$this->flash("suc", "Смэрть...", "Пользователь успешно забанен.");
|
||||
$this->redirect("/report/list");
|
||||
}
|
||||
|
||||
function renderDeleteContent(int $id): void
|
||||
{
|
||||
$this->assertUserLoggedIn();
|
||||
$this->willExecuteWriteAction();
|
||||
$this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0);
|
||||
|
||||
$report = $this->report->get($id);
|
||||
if(!$report) $this->notFound();
|
||||
if($note->isDeleted()) $this->notFound();
|
||||
if(is_null($this->user))
|
||||
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса.");
|
||||
|
||||
$report->deleteContent();
|
||||
$this->flash("suc", "Нехай живе!", "Контент удалён, а пользователю прилетело предупреждение.");
|
||||
$this->redirect("/report/list");
|
||||
}
|
||||
|
||||
function renderIgnoreReport(int $id): void
|
||||
{
|
||||
$this->assertUserLoggedIn();
|
||||
$this->willExecuteWriteAction();
|
||||
$this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0);
|
||||
|
||||
$report = $this->report->get($id);
|
||||
if(!$report) $this->notFound();
|
||||
if($note->isDeleted()) $this->notFound();
|
||||
if(is_null($this->user))
|
||||
$this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса.");
|
||||
|
||||
$report->delete();
|
||||
$this->flash("suc", "Нехай живе!", "Жалоба проигнорирована.");
|
||||
$this->redirect("/report/list");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue