diff --git a/src/Module/PermissionTooltip.php b/src/Module/PermissionTooltip.php index 71ce2beee2..f6722c984a 100644 --- a/src/Module/PermissionTooltip.php +++ b/src/Module/PermissionTooltip.php @@ -25,8 +25,8 @@ use Friendica\Core\Hook; use Friendica\Database\DBA; use Friendica\DI; use Friendica\Model\Group; -use Friendica\Model\Item; use Friendica\Model\Post; +use Friendica\Model\Tag; use Friendica\Network\HTTPException; /** @@ -46,7 +46,7 @@ class PermissionTooltip extends \Friendica\BaseModule $condition = ['id' => $referenceId]; if ($type == 'item') { - $fields = ['uid', 'psid', 'private']; + $fields = ['uid', 'psid', 'private', 'uri-id']; $model = Post::selectFirst($fields, $condition); } else { $fields = ['uid', 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid']; @@ -72,13 +72,18 @@ class PermissionTooltip extends \Friendica\BaseModule // Kept for backwards compatiblity Hook::callAll('lockview_content', $model); + if ($type == 'item') { + $receivers = $this->fetchReceivers($model['uri-id']); + } else { + $receivers = ''; + } + if ($model['uid'] != local_user() || - isset($model['private']) - && $model['private'] == Item::PRIVATE - && empty($model['allow_cid']) + empty($model['allow_cid']) && empty($model['allow_gid']) && empty($model['deny_cid']) - && empty($model['deny_gid'])) + && empty($model['deny_gid']) + && empty($receivers)) { echo DI::l10n()->t('Remote privacy information not available.'); exit; @@ -136,7 +141,48 @@ class PermissionTooltip extends \Friendica\BaseModule $l[] = '' . $contact['name'] . ''; } - echo $o . implode(', ', $l); + if (!empty($l)) { + echo $o . implode(', ', $l); + } else { + echo $o . $receivers; + } + exit(); } + + /** + * Fetch a list of receivers + * + * @param int $uriId + * @return string + */ + private function fetchReceivers(int $uriId):string + { + // We only fetch "to" and "cc", because "bcc" should never be displayed + $receivers = []; + foreach (Tag::getByURIId($uriId, [Tag::TO, Tag::CC]) as $receiver) { + $receivers[$receiver['type']][] = $receiver['name']; + } + + $output = ''; + + foreach ($receivers as $type => $receiver) { + $max = DI::config()->get('system', 'max_receivers'); + $total = count($receiver); + if ($total > $max) { + $receiver = array_slice($receiver, 0, $max); + $receiver[] = DI::l10n()->t('%d more', $total - $max); + } + switch ($type) { + case Tag::TO: + $output .= DI::l10n()->t('To: %s
', implode(', ', $receiver)); + break; + case Tag::CC: + $output .= DI::l10n()->t('CC: %s
', implode(', ', $receiver)); + break; + } + } + + return $output; + } } diff --git a/src/Object/Post.php b/src/Object/Post.php index 17303bd62d..bbd1e9ce1c 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -121,6 +121,29 @@ class Post } } + /** + * Fetch the privacy of the post + * + * @param array $item + * @return string + */ + private function fetchPrivacy(array $item):string + { + switch ($item['private']) { + case Item::PRIVATE: + $output = DI::l10n()->t('Private Message'); + break; + case Item::PUBLIC: + $output = DI::l10n()->t('Public Message'); + break; + case Item::UNLISTED: + $output = DI::l10n()->t('Unlisted Message'); + break; + } + + return $output; + } + /** * Get data in a form usable by a conversation template * @@ -170,12 +193,9 @@ class Post $conv = $this->getThread(); - $lock = ((($item['private'] == Item::PRIVATE) || (($item['uid'] == local_user()) && (strlen($item['allow_cid']) || strlen($item['allow_gid']) - || strlen($item['deny_cid']) || strlen($item['deny_gid'])))) - ? DI::l10n()->t('Private Message') - : false); - - $connector = !$item['global'] ? DI::l10n()->t('Connector Message') : false; + $privacy = $this->fetchPrivacy($item); + $lock = ($item['private'] == Item::PRIVATE) ? $privacy : false; + $connector = !in_array($item['network'], Protocol::NATIVE_SUPPORT) ? DI::l10n()->t('Connector Message') : false; $shareable = in_array($conv->getProfileOwner(), [0, local_user()]) && $item['private'] != Item::PRIVATE; $announceable = $shareable && in_array($item['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::TWITTER]); @@ -463,6 +483,8 @@ class Post 'app' => $item['app'], 'created' => $ago, 'lock' => $lock, + 'private' => $item['private'], + 'privacy' => $privacy, 'connector' => $connector, 'location_html' => $location_html, 'indent' => $indent, diff --git a/static/settings.config.php b/static/settings.config.php index 24fce52f21..ea7558e5f7 100644 --- a/static/settings.config.php +++ b/static/settings.config.php @@ -140,6 +140,10 @@ return [ // If you don't want to set a maximum length, set to -1. 'max_image_length' => -1, + // max_receivers (Integer) + // The maximum number of displayed receivers of posts + 'max_receivers' => 10, + // maximagesize (Integer) // Maximum size in bytes of an uploaded photo. 'maximagesize' => 800000, diff --git a/view/theme/frio/css/style.css b/view/theme/frio/css/style.css index f96239c307..c619ee678f 100644 --- a/view/theme/frio/css/style.css +++ b/view/theme/frio/css/style.css @@ -1757,8 +1757,7 @@ blockquote.shared_content { font-weight: 500; color: $font_color_darker; } -.media .media-body .addional-info a, -.media .media-body h5.media-heading > a { +.media .media-body .addional-info a { display: block; } .media .contact-info-comment { @@ -1769,7 +1768,7 @@ blockquote.shared_content { margin: 0 0 5px; } .media-heading { - margin: 0 0 5px; + margin: 0px; } .wall-item-name, .shared-author { diff --git a/view/theme/frio/templates/wall_thread.tpl b/view/theme/frio/templates/wall_thread.tpl index 55858d811e..c57ea091b6 100644 --- a/view/theme/frio/templates/wall_thread.tpl +++ b/view/theme/frio/templates/wall_thread.tpl @@ -158,12 +158,12 @@ as the value of $top_child_total (this is done at the end of this file) {{$item.owner_name}} {{/if}} - {{if $item.lock}} - -   + {{if $item.connector}} + + {{else}} + +   - {{elseif $item.connector}} - {{/if}} @@ -221,7 +221,15 @@ as the value of $top_child_total (this is done at the end of this file)
{{$item.name}} + {{if $item.connector}} + + {{else}} + +   + + {{/if}} +
@@ -235,7 +243,6 @@ as the value of $top_child_total (this is done at the end of this file) {{/if}} -
{{/if}} {{* End of if $item.thread_level != 1 *}}