From 544ce206d76c137437bfbd5326e54138c8afaab6 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Tue, 25 Jul 2023 13:18:58 +0200 Subject: [PATCH] [vier] Add mute author server link in photo menu --- src/Content/Item.php | 10 ++++- src/Module/Settings/Server/Action.php | 55 +++++++++++++++++++++-- static/routes.config.php | 2 +- view/templates/admin/federation.tpl | 2 +- view/templates/settings/server/action.tpl | 27 +++++++++++ view/templates/settings/server/index.tpl | 10 ++++- view/theme/vier/style.css | 4 ++ 7 files changed, 101 insertions(+), 9 deletions(-) create mode 100644 view/templates/settings/server/action.tpl diff --git a/src/Content/Item.php b/src/Content/Item.php index c25e5296f0..86493385f2 100644 --- a/src/Content/Item.php +++ b/src/Content/Item.php @@ -50,6 +50,7 @@ use Friendica\Protocol\Activity; use Friendica\Util\ACLFormatter; use Friendica\Util\DateTimeFormat; use Friendica\Util\Emailer; +use Friendica\Util\Network; use Friendica\Util\ParseUrl; use Friendica\Util\Profiler; use Friendica\Util\Proxy; @@ -367,7 +368,7 @@ class Item { $this->profiler->startRecording('rendering'); $sub_link = $contact_url = $pm_url = $status_link = ''; - $photos_link = $posts_link = $block_link = $ignore_link = ''; + $photos_link = $posts_link = $block_link = $ignore_link = $collapse_link = $ignoreserver_link = ''; if ($this->userSession->getLocalUserId() && $this->userSession->getLocalUserId() == $item['uid'] && $item['gravity'] == ItemModel::GRAVITY_PARENT && !$item['self'] && !$item['mention']) { $sub_link = 'javascript:doFollowThread(' . $item['id'] . '); return false;'; @@ -407,6 +408,10 @@ class Item $collapse_link = $item['self'] ? '' : $contact_url . '/collapse?t=' . $formSecurityToken; } + if (!empty($item['author-gsid'])) { + $ignoreserver_link = Network::isLocalLink($contact_url) ? '' : 'settings/server/' . $item['author-gsid'] . '/ignore'; + } + if ($cid && !$item['self']) { $contact_url = 'contact/' . $cid; $posts_link = $contact_url . '/posts'; @@ -427,7 +432,8 @@ class Item $this->l10n->t('Send PM') => $pm_url, $this->l10n->t('Block') => $block_link, $this->l10n->t('Ignore') => $ignore_link, - $this->l10n->t('Collapse') => $collapse_link + $this->l10n->t('Collapse') => $collapse_link, + $this->l10n->t("Ignore %s's server", $item['author-name']) => $ignoreserver_link, ]; if (!empty($item['language'])) { diff --git a/src/Module/Settings/Server/Action.php b/src/Module/Settings/Server/Action.php index 13c1cf5c74..e06cbf26be 100644 --- a/src/Module/Settings/Server/Action.php +++ b/src/Module/Settings/Server/Action.php @@ -23,8 +23,10 @@ namespace Friendica\Module\Settings\Server; use Friendica\App; use Friendica\Core\L10n; +use Friendica\Core\Renderer; use Friendica\Core\Session\Capability\IHandleUserSessions; use Friendica\Core\System; +use Friendica\Federation\Repository\GServer; use Friendica\Module\Response; use Friendica\Network\HTTPException\BadRequestException; use Friendica\User\Settings\Repository\UserGServer; @@ -37,17 +39,60 @@ class Action extends \Friendica\BaseModule private $session; /** @var UserGServer */ private $repository; + /** @var GServer */ + private $gserverRepo; - public function __construct(UserGServer $repository, IHandleUserSessions $session, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) + public function __construct(GServer $gserverRepo, UserGServer $repository, IHandleUserSessions $session, L10n $l10n, App\BaseURL $baseUrl, App\Arguments $args, LoggerInterface $logger, Profiler $profiler, Response $response, array $server, array $parameters = []) { parent::__construct($l10n, $baseUrl, $args, $logger, $profiler, $response, $server, $parameters); - $this->session = $session; - $this->repository = $repository; + $this->session = $session; + $this->repository = $repository; + $this->gserverRepo = $gserverRepo; + } + + public function content(array $request = []): string + { + $GServer = $this->gserverRepo->selectOneById($this->parameters['gsid']); + + switch ($this->parameters['action']) { + case 'ignore': + $action = $this->t('Do you want to ignore this server?'); + $desc = $this->t("You won't see any content from this server including reshares in your Network page, the community pages and individual conversations."); + break; + case 'unignore': + $action = $this->t('Do you want to unignore this server?'); + $desc = ''; + break; + default: + throw new BadRequestException('Unknown user server action ' . $this->parameters['action']); + } + + $tpl = Renderer::getMarkupTemplate('settings/server/action.tpl'); + return Renderer::replaceMacros($tpl, [ + '$l10n' => [ + 'title' => $this->t('Remote server settings'), + 'action' => $action, + 'siteName' => $this->t('Server Name'), + 'siteUrl' => $this->t('Server URL'), + 'desc' => $desc, + 'submit' => $this->t('Submit'), + ], + + '$action' => $this->args->getQueryString(), + + '$GServer' => $GServer, + + '$form_security_token' => self::getFormSecurityToken('settings-server'), + ]); } public function post(array $request = []) { + if (!empty($request['redirect_url'])) { + self::checkFormSecurityTokenRedirectOnError($this->args->getQueryString(), 'settings-server'); + } + $userGServer = $this->repository->getOneByUserAndServer($this->session->getLocalUserId(), $this->parameters['gsid']); switch ($this->parameters['action']) { @@ -63,6 +108,10 @@ class Action extends \Friendica\BaseModule $this->repository->save($userGServer); + if (!empty($request['redirect_url'])) { + $this->baseUrl->redirect($request['redirect_url']); + } + System::exit(); } } diff --git a/static/routes.config.php b/static/routes.config.php index f16a193627..36ba2f2493 100644 --- a/static/routes.config.php +++ b/static/routes.config.php @@ -641,7 +641,7 @@ return [ '/settings' => [ '/server' => [ '[/]' => [Module\Settings\Server\Index::class, [R::GET, R::POST]], - '/{gsid:\d+}/{action}' => [Module\Settings\Server\Action::class, [ R::POST]], + '/{gsid:\d+}/{action}' => [Module\Settings\Server\Action::class, [R::GET, R::POST]], ], '[/]' => [Module\Settings\Account::class, [R::GET, R::POST]], '/account' => [ diff --git a/view/templates/admin/federation.tpl b/view/templates/admin/federation.tpl index dbee2ec3e8..8f8d70cd2b 100644 --- a/view/templates/admin/federation.tpl +++ b/view/templates/admin/federation.tpl @@ -57,7 +57,7 @@ {{if $c[0]['total'] > 0}} {{$c[0]['platform']}} - {{$c[0]['total']}} + {{$c[0]['total']}} {{$c[0]['network']}} diff --git a/view/templates/settings/server/action.tpl b/view/templates/settings/server/action.tpl new file mode 100644 index 0000000000..2ead14e301 --- /dev/null +++ b/view/templates/settings/server/action.tpl @@ -0,0 +1,27 @@ +
+

{{$l10n.title}}

+ +
+ + + +

{{$l10n.action}}

+ + {{if $l10n.desc}} +

{{$l10n.desc}}

+ {{/if}} + + + + + + + + + + +
{{$l10n.siteName}}{{$GServer->siteName}}
{{$l10n.siteUrl}}{{$GServer->url}}
+ +

+
+
diff --git a/view/templates/settings/server/index.tpl b/view/templates/settings/server/index.tpl index 112af6d07e..61df4c4bc0 100644 --- a/view/templates/settings/server/index.tpl +++ b/view/templates/settings/server/index.tpl @@ -13,8 +13,14 @@ - - + + {{foreach $servers as $index => $server}} diff --git a/view/theme/vier/style.css b/view/theme/vier/style.css index ddc5fc6638..b2ef72f5f5 100644 --- a/view/theme/vier/style.css +++ b/view/theme/vier/style.css @@ -3281,3 +3281,7 @@ fbrowser.photo .photo-album-image-wrapper { margin-left: 10px; } #colorbox img { max-width: 100%; } + +#settings-server td + td { + text-align: center; +}
{{$l10n.siteName}}{{$l10n.ignored}} {{$l10n.delete}} {{$l10n.ignored}} + + + {{$l10n.delete}} + + +