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"]} +
+ + {$club->getName()} Reports {if $reportNotAnsweredCount > 0} ({$reportNotAnsweredCount}) diff --git a/Web/Presenters/templates/Group/View.xml b/Web/Presenters/templates/Group/View.xml index dc223af1..d4b18f4a 100644 --- a/Web/Presenters/templates/Group/View.xml +++ b/Web/Presenters/templates/Group/View.xml @@ -120,6 +120,34 @@ {/if} + {var $canReport = $thisUser->getId() != $club->getOwner()->getId()} + {if $canReport} + {_report} + + + {/if}
diff --git a/Web/Presenters/templates/Photos/Photo.xml b/Web/Presenters/templates/Photos/Photo.xml index ad9f9efd..eb87df75 100644 --- a/Web/Presenters/templates/Photos/Photo.xml +++ b/Web/Presenters/templates/Photos/Photo.xml @@ -42,10 +42,38 @@

{_actions}

+ {if $thisUser->getId() != $photo->getOwner()->getId()} + {var canReport = true} + {/if}
{_edit} {_delete}
+ {_"open_original"} + {_report} + {_open_original}
diff --git a/Web/Presenters/templates/Report/List.xml b/Web/Presenters/templates/Report/List.xml index 5abdc89b..06091ed1 100644 --- a/Web/Presenters/templates/Report/List.xml +++ b/Web/Presenters/templates/Report/List.xml @@ -27,5 +27,15 @@ {/block} {block description} - {_text_of_the_post}: {$x->getContentObject()->getText()} + {if $x->getContentType() == "post"} + {_text_of_the_post}: {$x->getContentObject()->getText()} + {elseif $x->getContentType() == "photo"} + {_photo} + {elseif $x->getContentType() == "video"} + {_video} + {elseif $x->getContentType() == "group"} + {_groups} + {else} + Unknown + {/if} {/block} diff --git a/Web/Presenters/templates/Report/View.xml b/Web/Presenters/templates/Report/View.xml index 9e05a1a7..c028c199 100644 --- a/Web/Presenters/templates/Report/View.xml +++ b/Web/Presenters/templates/Report/View.xml @@ -10,6 +10,19 @@ {block content}

{_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} +
+
{include "../components/post/oldpost.xml", post => $report->getContentObject(), forceNoPinLink => TRUE, forceNoDeleteLink => TRUE, forceNoShareLink => TRUE, forceNoLike => TRUE}
@@ -18,5 +31,11 @@ +
+ + + + +
{/block} diff --git a/Web/Presenters/templates/Videos/View.xml b/Web/Presenters/templates/Videos/View.xml index 9ad34fda..47f390fa 100644 --- a/Web/Presenters/templates/Videos/View.xml +++ b/Web/Presenters/templates/Videos/View.xml @@ -57,6 +57,38 @@ {_delete} + + {if isset($thisUser)} + {if $thisUser->getId() != $video->getOwner()->getId()} + {var canReport = true} + {/if} + {/if} + + {_report} + + {/block} diff --git a/Web/Presenters/templates/components/group.xml b/Web/Presenters/templates/components/group.xml new file mode 100644 index 00000000..2ddca6af --- /dev/null +++ b/Web/Presenters/templates/components/group.xml @@ -0,0 +1,22 @@ +{block content} +
+ + + + + + + +
+ + Фотография группы + + + + + asdasdasd + + +
+
+{/block} diff --git a/Web/Presenters/templates/components/photo.xml b/Web/Presenters/templates/components/photo.xml new file mode 100644 index 00000000..05c1913d --- /dev/null +++ b/Web/Presenters/templates/components/photo.xml @@ -0,0 +1,5 @@ +{block content} +
+ +
+{/block} diff --git a/Web/Presenters/templates/components/video.xml b/Web/Presenters/templates/components/video.xml new file mode 100644 index 00000000..89188c7b --- /dev/null +++ b/Web/Presenters/templates/components/video.xml @@ -0,0 +1,14 @@ +{block content} +
+ {if $video->getType() === 0} + + {else} + {var driver = $video->getVideoDriver()} + {if !$driver} + Эта видеозапись не поддерживается в вашей версии OpenVK. + {else} + {$driver->getEmbed()|noescape} + {/if} + {/if} +
+{/block} diff --git a/Web/routes.yml b/Web/routes.yml index 5c9d43ae..b12bc257 100644 --- a/Web/routes.yml +++ b/Web/routes.yml @@ -307,6 +307,10 @@ routes: handler: "Support->quickUnbanInSupport" - url: "/admin/support/reports" handler: "Report->list" + - url: "/scumfeed" + handler: "Report->list" + - url: "/admin/report{num}" + handler: "Report->view" - url: "/admin/support/report{num}" handler: "Report->view" - url: "/admin/support/reportAction{num}" diff --git a/locales/en.strings b/locales/en.strings index b5e6a86e..cf634c77 100644 --- a/locales/en.strings +++ b/locales/en.strings @@ -804,6 +804,8 @@ "support_new_title" = "Enter the topic of your ticket"; "support_new_content" = "Describe the issue or suggestion"; +"reports" = "Reports"; + "support_rate_good_answer" = "This is good answer"; "support_rate_bad_answer" = "This is bad answer"; "support_good_answer_user" = "You left a positive feedback."; diff --git a/locales/ru.strings b/locales/ru.strings index ebacd9e9..5b0d765b 100644 --- a/locales/ru.strings +++ b/locales/ru.strings @@ -849,6 +849,8 @@ "support_new_title" = "Введите тему вашего обращения"; "support_new_content" = "Опишите проблему или предложение"; +"reports" = "Жалобы"; + "support_rate_good_answer" = "Это хороший ответ"; "support_rate_bad_answer" = "Это плохой ответ"; "support_good_answer_user" = "Вы оставили положительный отзыв.";