From 14a07450d3ab63ee35cf87aff27fc38c9701b8d2 Mon Sep 17 00:00:00 2001 From: Slava Petrov <55963296+saursvepur@users.noreply.github.com> Date: Sun, 1 Jun 2025 16:30:25 +0300 Subject: [PATCH] feat(admin): ability to hide user's posts from global feed (#1291) --- Web/Models/Entities/User.php | 5 +++++ Web/Presenters/AdminPresenter.php | 1 + Web/Presenters/WallPresenter.php | 2 +- Web/Presenters/templates/Admin/User.xml | 4 ++++ install/sqls/00056-hide-from-global-feed-user.sql | 1 + locales/en.strings | 1 + locales/ru.strings | 1 + 7 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 install/sqls/00056-hide-from-global-feed-user.sql diff --git a/Web/Models/Entities/User.php b/Web/Models/Entities/User.php index 8749b725..b2da3f46 100644 --- a/Web/Models/Entities/User.php +++ b/Web/Models/Entities/User.php @@ -1487,6 +1487,11 @@ class User extends RowModel return $this->isClosed(); } + public function HideGlobalFeed(): bool + { + return (bool) $this->getRecord()->hide_global_feed; + } + public function getRealId() { return $this->getId(); diff --git a/Web/Presenters/AdminPresenter.php b/Web/Presenters/AdminPresenter.php index 8fad1052..1956b8e9 100644 --- a/Web/Presenters/AdminPresenter.php +++ b/Web/Presenters/AdminPresenter.php @@ -119,6 +119,7 @@ final class AdminPresenter extends OpenVKPresenter $user->setLast_Name($this->postParam("last_name")); $user->setPseudo($this->postParam("nickname")); $user->setStatus($this->postParam("status")); + $user->setHide_Global_Feed(empty($this->postParam("hide_global_feed") ? 0 : 1)); if (!$user->setShortCode(empty($this->postParam("shortcode")) ? null : $this->postParam("shortcode"))) { $this->flash("err", tr("error"), tr("error_shorturl_incorrect")); } diff --git a/Web/Presenters/WallPresenter.php b/Web/Presenters/WallPresenter.php index f4a8e898..89b1915d 100644 --- a/Web/Presenters/WallPresenter.php +++ b/Web/Presenters/WallPresenter.php @@ -210,7 +210,7 @@ final class WallPresenter extends OpenVKPresenter $pPage = min((int) ($_GET["posts"] ?? OPENVK_DEFAULT_PER_PAGE), 50); $queryBase = "FROM `posts` LEFT JOIN `groups` ON GREATEST(`posts`.`wall`, 0) = 0 AND `groups`.`id` = ABS(`posts`.`wall`) LEFT JOIN `profiles` ON LEAST(`posts`.`wall`, 0) = 0 AND `profiles`.`id` = ABS(`posts`.`wall`)"; - $queryBase .= "WHERE (`groups`.`hide_from_global_feed` = 0 OR `groups`.`name` IS NULL) AND (`profiles`.`profile_type` = 0 OR `profiles`.`first_name` IS NULL) AND `posts`.`deleted` = 0 AND `posts`.`suggested` = 0"; + $queryBase .= "WHERE (`groups`.`hide_from_global_feed` = 0 OR `groups`.`name` IS NULL) AND ((`profiles`.`profile_type` = 0 AND `profiles`.`hide_global_feed` = 0) OR `profiles`.`first_name` IS NULL) AND `posts`.`deleted` = 0 AND `posts`.`suggested` = 0"; if ($this->user->identity->getNsfwTolerance() === User::NSFW_INTOLERANT) { $queryBase .= " AND `nsfw` = 0"; diff --git a/Web/Presenters/templates/Admin/User.xml b/Web/Presenters/templates/Admin/User.xml index 93cc0ad1..063a4c67 100644 --- a/Web/Presenters/templates/Admin/User.xml +++ b/Web/Presenters/templates/Admin/User.xml @@ -60,6 +60,10 @@ isVerified()} checked {/if} /> +
+ + +