From 8ca3de8afab964ab69b42eae7d0bf0b901a626f4 Mon Sep 17 00:00:00 2001 From: n1rwana Date: Wed, 9 Aug 2023 16:05:01 +0300 Subject: [PATCH] Clubs: Group bans fixed (#946) --- Web/Presenters/AdminPresenter.php | 3 +- Web/Presenters/CommentPresenter.php | 10 ++++++- Web/Presenters/GroupPresenter.php | 23 ++++++++++++--- Web/Presenters/WallPresenter.php | 36 +++++++++++++++++------ Web/Presenters/templates/Group/Banned.xml | 22 ++++++++++++++ locales/en.strings | 2 ++ locales/ru.strings | 1 + 7 files changed, 82 insertions(+), 15 deletions(-) create mode 100644 Web/Presenters/templates/Group/Banned.xml diff --git a/Web/Presenters/AdminPresenter.php b/Web/Presenters/AdminPresenter.php index ff21612b..ed1f55eb 100644 --- a/Web/Presenters/AdminPresenter.php +++ b/Web/Presenters/AdminPresenter.php @@ -128,7 +128,8 @@ final class AdminPresenter extends OpenVKPresenter $club->save(); break; case "ban": - $club->setBlock_reason($this->postParam("ban_reason")); + $reason = mb_strlen(trim($this->postParam("ban_reason"))) > 0 ? $this->postParam("ban_reason") : NULL; + $club->setBlock_reason($reason); $club->save(); break; } diff --git a/Web/Presenters/CommentPresenter.php b/Web/Presenters/CommentPresenter.php index dad79ac4..cb0efd0d 100644 --- a/Web/Presenters/CommentPresenter.php +++ b/Web/Presenters/CommentPresenter.php @@ -22,6 +22,9 @@ final class CommentPresenter extends OpenVKPresenter $comment = (new Comments)->get($id); if(!$comment || $comment->isDeleted()) $this->notFound(); + + if ($comment->getTarget() instanceof Post && $comment->getTarget()->getWallOwner()->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); if(!is_null($this->user)) $comment->toggleLike($this->user->identity); @@ -48,6 +51,9 @@ final class CommentPresenter extends OpenVKPresenter else if($entity instanceof Topic) $club = $entity->getClub(); + if ($entity instanceof Post && $entity->getWallOwner()->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); + if($_FILES["_vid_attachment"] && OPENVK_ROOT_CONF['openvk']['preferences']['videos']['disableUploading']) $this->flashFail("err", tr("error"), "Video uploads are disabled by the system administrator."); @@ -130,7 +136,9 @@ final class CommentPresenter extends OpenVKPresenter if(!$comment) $this->notFound(); if(!$comment->canBeDeletedBy($this->user->identity)) $this->throwError(403, "Forbidden", "У вас недостаточно прав чтобы редактировать этот ресурс."); - + if ($comment->getTarget() instanceof Post && $comment->getTarget()->getWallOwner()->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); + $comment->delete(); $this->flashFail( "succ", diff --git a/Web/Presenters/GroupPresenter.php b/Web/Presenters/GroupPresenter.php index 3e0d8c6e..d8fbcb79 100644 --- a/Web/Presenters/GroupPresenter.php +++ b/Web/Presenters/GroupPresenter.php @@ -24,10 +24,14 @@ final class GroupPresenter extends OpenVKPresenter if(!$club) { $this->notFound(); } else { - $this->template->albums = (new Albums)->getClubAlbums($club, 1, 3); - $this->template->albumsCount = (new Albums)->getClubAlbumsCount($club); - $this->template->topics = (new Topics)->getLastTopics($club, 3); - $this->template->topicsCount = (new Topics)->getClubTopicsCount($club); + if ($club->isBanned()) { + $this->template->_template = "Group/Banned.xml"; + } else { + $this->template->albums = (new Albums)->getClubAlbums($club, 1, 3); + $this->template->albumsCount = (new Albums)->getClubAlbumsCount($club); + $this->template->topics = (new Topics)->getLastTopics($club, 3); + $this->template->topicsCount = (new Topics)->getClubTopicsCount($club); + } $this->template->club = $club; } @@ -72,6 +76,7 @@ final class GroupPresenter extends OpenVKPresenter $club = $this->clubs->get((int) $this->postParam("id")); if(!$club) exit("Invalid state"); + if ($club->isBanned()) $this->flashFail("err", tr("error"), tr("forbidden")); $club->toggleSubscription($this->user->identity); @@ -83,6 +88,8 @@ final class GroupPresenter extends OpenVKPresenter $this->assertUserLoggedIn(); $this->template->club = $this->clubs->get($id); + if ($this->template->club->isBanned()) $this->flashFail("err", tr("error"), tr("forbidden")); + $this->template->onlyShowManagers = $this->queryParam("onlyAdmins") == "1"; if($this->template->onlyShowManagers) { $this->template->followers = NULL; @@ -118,6 +125,8 @@ final class GroupPresenter extends OpenVKPresenter $this->badRequest(); $club = $this->clubs->get($id); + if ($club->isBanned()) $this->flashFail("err", tr("error"), tr("forbidden")); + $user = (new Users)->get((int) $user); if(!$user || !$club) $this->notFound(); @@ -194,6 +203,8 @@ final class GroupPresenter extends OpenVKPresenter $club = $this->clubs->get($id); if(!$club || !$club->canBeModifiedBy($this->user->identity)) $this->notFound(); + else if ($club->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); else $this->template->club = $club; @@ -255,6 +266,7 @@ final class GroupPresenter extends OpenVKPresenter { $photo = new Photo; $club = $this->clubs->get($id); + if ($club->isBanned()) $this->flashFail("err", tr("error"), tr("forbidden")); if($_SERVER["REQUEST_METHOD"] === "POST" && $_FILES["ava"]["error"] === UPLOAD_ERR_OK) { try { $anon = OPENVK_ROOT_CONF["openvk"]["preferences"]["wall"]["anonymousPosting"]["enable"]; @@ -343,6 +355,8 @@ final class GroupPresenter extends OpenVKPresenter $club = $this->clubs->get($id); if(!$club->canBeModifiedBy($this->user->identity)) $this->notFound(); + else if ($club->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); else $this->template->club = $club; @@ -375,6 +389,7 @@ final class GroupPresenter extends OpenVKPresenter $this->flashFail("err", tr("error"), tr("incorrect_password")); $club = $this->clubs->get($id); + if ($club->isBanned()) $this->flashFail("err", tr("error"), tr("forbidden")); $newOwner = (new Users)->get($newOwnerId); if($this->user->id !== $club->getOwner()->getId()) $this->flashFail("err", tr("error"), tr("forbidden")); diff --git a/Web/Presenters/WallPresenter.php b/Web/Presenters/WallPresenter.php index 727101ff..3e115ec7 100644 --- a/Web/Presenters/WallPresenter.php +++ b/Web/Presenters/WallPresenter.php @@ -46,13 +46,13 @@ final class WallPresenter extends OpenVKPresenter function renderWall(int $user, bool $embedded = false): void { $owner = ($user < 0 ? (new Clubs) : (new Users))->get(abs($user)); + if ($owner->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); + if(is_null($this->user)) { $canPost = false; } else if($user > 0) { - if(!$owner->isBanned()) - $canPost = $owner->getPrivacyPermission("wall.write", $this->user->identity); - else - $this->flashFail("err", tr("error"), tr("forbidden")); + $canPost = $owner->getPrivacyPermission("wall.write", $this->user->identity); } else if($user < 0) { if($owner->canBeModifiedBy($this->user->identity)) $canPost = true; @@ -100,6 +100,8 @@ final class WallPresenter extends OpenVKPresenter } else if($user < 0) { if($owner->canBeModifiedBy($this->user->identity)) $canPost = true; + else if ($owner->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); else $canPost = $owner->canPost(); } else { @@ -212,11 +214,12 @@ final class WallPresenter extends OpenVKPresenter $wallOwner = ($wall > 0 ? (new Users)->get($wall) : (new Clubs)->get($wall * -1)) ?? $this->flashFail("err", tr("failed_to_publish_post"), tr("error_4")); + + if ($wallOwner->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); + if($wall > 0) { - if(!$wallOwner->isBanned()) - $canPost = $wallOwner->getPrivacyPermission("wall.write", $this->user->identity); - else - $this->flashFail("err", tr("not_enough_permissions"), tr("not_enough_permissions_comment")); + $canPost = $wallOwner->getPrivacyPermission("wall.write", $this->user->identity); } else if($wall < 0) { if($wallOwner->canBeModifiedBy($this->user->identity)) $canPost = true; @@ -354,6 +357,9 @@ final class WallPresenter extends OpenVKPresenter } else { $this->template->wallOwner = (new Clubs)->get(abs($post->getTargetWall())); $this->template->isWallOfGroup = true; + + if ($this->template->wallOwner->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); } $this->template->cCount = $post->getCommentsCount(); $this->template->cPage = (int) ($_GET["p"] ?? 1); @@ -368,7 +374,10 @@ final class WallPresenter extends OpenVKPresenter $post = $this->posts->getPostById($wall, $post_id); if(!$post || $post->isDeleted()) $this->notFound(); - + + if ($post->getWallOwner()->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); + if(!is_null($this->user)) { $post->toggleLike($this->user->identity); } @@ -386,6 +395,9 @@ final class WallPresenter extends OpenVKPresenter if(!$post || $post->isDeleted()) $this->notFound(); + + if ($post->getWallOwner()->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); $where = $this->postParam("type") ?? "wall"; $groupId = NULL; @@ -444,6 +456,9 @@ final class WallPresenter extends OpenVKPresenter $wallOwner = ($wall > 0 ? (new Users)->get($wall) : (new Clubs)->get($wall * -1)) ?? $this->flashFail("err", tr("failed_to_delete_post"), tr("error_4")); + if ($wallOwner->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); + if($wall < 0) $canBeDeletedByOtherUser = $wallOwner->canBeModifiedBy($this->user->identity); else $canBeDeletedByOtherUser = false; @@ -467,6 +482,9 @@ final class WallPresenter extends OpenVKPresenter $post = $this->posts->getPostById($wall, $post_id); if(!$post) $this->notFound(); + + if ($post->getWallOwner()->isBanned()) + $this->flashFail("err", tr("error"), tr("forbidden")); if(!$post->canBePinnedBy($this->user->identity)) $this->flashFail("err", tr("not_enough_permissions"), tr("not_enough_permissions_comment")); diff --git a/Web/Presenters/templates/Group/Banned.xml b/Web/Presenters/templates/Group/Banned.xml new file mode 100644 index 00000000..152bf10f --- /dev/null +++ b/Web/Presenters/templates/Group/Banned.xml @@ -0,0 +1,22 @@ +{extends "../@layout.xml"} + +{block title}{$club->getCanonicalName()}{/block} + +{block header}{include title}{/block} + +{block content} +
+ Сообщество заблокировано. +

+ {tr("group_banned", htmlentities($club->getCanonicalName()))|noescape} +
+ {_user_banned_comment} {$club->getBanReason()}. +

+ {if isset($thisUser)} +

+
+ {_edit} +

+ {/if} +
+{/block} diff --git a/locales/en.strings b/locales/en.strings index 4aaa4483..1a7a8c72 100644 --- a/locales/en.strings +++ b/locales/en.strings @@ -331,6 +331,8 @@ "search_by_groups" = "Search by groups"; "search_group_desc" = "Here you can browse through the existing groups and choose a group to suit your needs..."; +"group_banned" = "Unfortunately, we had to block the $1 group."; + /* Albums */ "create" = "Create"; diff --git a/locales/ru.strings b/locales/ru.strings index 6faa5e2e..841e8776 100644 --- a/locales/ru.strings +++ b/locales/ru.strings @@ -314,6 +314,7 @@ "search_group" = "Поиск группы"; "search_by_groups" = "Поиск по группам"; "search_group_desc" = "Здесь Вы можете просмотреть существующие группы и выбрать группу себе по вкусу..."; +"group_banned" = "К сожалению, нам пришлось заблокировать сообщество $1."; /* Albums */