diff --git a/Web/Models/Entities/Club.php b/Web/Models/Entities/Club.php index a5a3027b..a8f4f465 100644 --- a/Web/Models/Entities/Club.php +++ b/Web/Models/Entities/Club.php @@ -351,9 +351,15 @@ class Club extends RowModel } function getWebsite(): ?string - { - return $this->getRecord()->website; - } + { + return $this->getRecord()->website; + } + + function ban(string $reason): void + { + $this->setBlock_Reason($reason); + $this->save(); + } function getAlert(): ?string { diff --git a/Web/Models/Entities/Report.php b/Web/Models/Entities/Report.php index 9c40abfa..ff91d2d5 100644 --- a/Web/Models/Entities/Report.php +++ b/Web/Models/Entities/Report.php @@ -4,8 +4,7 @@ use openvk\Web\Util\DateTime; use Nette\Database\Table\ActiveRow; use openvk\Web\Models\RowModel; use Chandler\Database\DatabaseConnection; -use openvk\Web\Models\Repositories\Users; -use openvk\Web\Models\Repositories\Posts; +use openvk\Web\Models\Repositories\{Users, Posts, Photos, Videos, Clubs}; use Chandler\Database\DatabaseConnection as DB; use Nette\InvalidStateException as ISE; use Nette\Database\Table\Selection; @@ -67,6 +66,9 @@ class Report extends RowModel function getContentObject() { if ($this->getContentType() == "post") return (new Posts)->get($this->getContentId()); + else if ($this->getContentType() == "photo") return (new Photos)->get($this->getContentId()); + else if ($this->getContentType() == "video") return (new Videos)->get($this->getContentId()); + else if ($this->getContentType() == "group") return (new Clubs)->get($this->getContentId()); else return null; } diff --git a/Web/Presenters/ReportPresenter.php b/Web/Presenters/ReportPresenter.php index 14185683..12a052d4 100644 --- a/Web/Presenters/ReportPresenter.php +++ b/Web/Presenters/ReportPresenter.php @@ -52,7 +52,7 @@ final class ReportPresenter extends OpenVKPresenter exit(json_encode([ "error" => tr("error_segmentation") ])); // At this moment, only Posts will be implemented - if($this->queryParam("type") == 'post') { + if(in_array($this->queryParam("type"), ["post", "photo", "video", "group"])) { $post = (new Posts)->get(intval($id)); if(!$post) exit(json_encode([ "error" => "Unable to report nonexistent content" ])); @@ -77,10 +77,11 @@ final class ReportPresenter extends OpenVKPresenter $this->willExecuteWriteAction(); $this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0); - if($this->postParam("ban")) { - $report = $this->reports->get($id); - if(!$report) $this->notFound(); - if($report->isDeleted()) $this->notFound(); + $report = $this->reports->get($id); + if(!$report) $this->notFound(); + if($report->isDeleted()) $this->notFound(); + + if($this->postParam("ban")) { if(is_null($this->user)) $this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); @@ -88,23 +89,40 @@ final class ReportPresenter extends OpenVKPresenter $report->deleteContent(); $this->flash("suc", "Смэрть...", "Пользователь успешно забанен."); }else if($this->postParam("delete")){ - $report = $this->reports->get($id); - if(!$report) $this->notFound(); - if($report->isDeleted()) $this->notFound(); if(is_null($this->user)) $this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); $report->deleteContent(); $this->flash("suc", "Нехай живе!", "Контент удалён, а пользователю прилетело предупреждение."); }else if($this->postParam("ignore")){ - $report = $this->reports->get($id); - if(!$report) $this->notFound(); - if($report->isDeleted()) $this->notFound(); if(is_null($this->user)) $this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); - $report->setDeleted(); + $report->delete(); $this->flash("suc", "Нехай живе!", "Жалоба проигнорирована."); + }else if($this->postParam("banClubOwner")) { + if($report->getContentType() != "group") + $this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); + + $club = $report->getContentObject(); + + if(is_null($club)) + $this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); + + $owner = $club->getOwner(); + $owner->ban("Banned by report. Ask Technical support for ban reason"); + + $report->delete(); + $this->flash("suc", "Смэрть...", "Создатель сообщества успешно забанен."); + }else if($this->postParam("banClub")) { + if($report->getContentType() != "group") + $this->flashFail("err", "Ошибка доступа", "Недостаточно прав для модификации данного ресурса."); + + $club = $report->getContentObject(); + $club->ban("Banned by report. Ask Technical support for ban reason"); + + $report->delete(); + $this->flash("suc", "Смэрть...", "Сообщество успешно забанено."); } $this->redirect("/support/reports"); } diff --git a/Web/Presenters/templates/@layout.xml b/Web/Presenters/templates/@layout.xml index c4ac56e3..382a7156 100644 --- a/Web/Presenters/templates/@layout.xml +++ b/Web/Presenters/templates/@layout.xml @@ -186,6 +186,19 @@ ({$helpdeskTicketNotAnsweredCount}) {/if} + {tr("reports")} + {/if} + {$menuItem["name"]} +
{_comment}: {$report->getReason()}
+ {if $report->getContentType() == "post"} + {include "../components/post/oldpost.xml", post => $report->getContentObject()} + {elseif $report->getContentType() == "photo"} + {include "../components/photo.xml", photo => $report->getContentObject()} + {elseif $report->getContentType() == "video"} + {include "../components/video.xml", video => $report->getContentObject()} + {elseif $report->getContentType() == "group"} + {include "../components/group.xml", group => $report->getContentObject()} + {else} + Error + {/if} +