X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FPermissionTooltip.php;h=4e5191e5a48c3b07e7a9193a62c6931fbb2752e5;hb=96d2cddb54f3ea3ead6e43e5ca1f814ed6327987;hp=372c508d6f6f217465513918d00c0188597073b0;hpb=f6e4984d7ee6690742da8d3a925b038a7bf9da09;p=friendica.git diff --git a/src/Module/PermissionTooltip.php b/src/Module/PermissionTooltip.php index 372c508d6f..4e5191e5a4 100644 --- a/src/Module/PermissionTooltip.php +++ b/src/Module/PermissionTooltip.php @@ -1,6 +1,6 @@ t('Wrong type "%s", expected one of: %s', $type, implode(', ', $expectedTypes))); } - $condition = ['id' => $referenceId]; + $condition = ['id' => $referenceId, 'uid' => [0, DI::userSession()->getLocalUserId()]]; if ($type == 'item') { - $fields = ['uid', 'psid', 'private', 'uri-id']; - $model = Post::selectFirst($fields, $condition); + $fields = ['uid', 'psid', 'private', 'uri-id', 'origin', 'network']; + $model = Post::selectFirst($fields, $condition, ['order' => ['uid' => true]]); + + if ($model['origin'] || ($model['network'] != Protocol::ACTIVITYPUB)) { + $permissionSet = DI::permissionSet()->selectOneById($model['psid'], $model['uid']); + $model['allow_cid'] = $permissionSet->allow_cid; + $model['allow_gid'] = $permissionSet->allow_gid; + $model['deny_cid'] = $permissionSet->deny_cid; + $model['deny_gid'] = $permissionSet->deny_gid; + } else { + $model['allow_cid'] = []; + $model['allow_gid'] = []; + $model['deny_cid'] = []; + $model['deny_gid'] = []; + } } else { $fields = ['uid', 'allow_cid', 'allow_gid', 'deny_cid', 'deny_gid']; $model = DBA::selectFirst($type, $fields, $condition); @@ -62,25 +79,31 @@ class PermissionTooltip extends \Friendica\BaseModule throw new HttpException\NotFoundException(DI::l10n()->t('Model not found')); } - if (isset($model['psid'])) { - $permissionSet = DI::permissionSet()->selectOneById($model['psid'], $model['uid']); - $model['allow_cid'] = $permissionSet->allow_cid; - $model['allow_gid'] = $permissionSet->allow_gid; - $model['deny_cid'] = $permissionSet->deny_cid; - $model['deny_gid'] = $permissionSet->deny_gid; - } - - // Kept for backwards compatiblity + // Kept for backwards compatibility Hook::callAll('lockview_content', $model); if ($type == 'item') { $receivers = $this->fetchReceivers($model['uri-id']); + if (empty($receivers)) { + switch ($model['private']) { + case Item::PUBLIC: + $receivers = DI::l10n()->t('Public'); + break; + + case Item::UNLISTED: + $receivers = DI::l10n()->t('Unlisted'); + break; + + case Item::PRIVATE: + $receivers = DI::l10n()->t('Limited/Private'); + break; + } + } } else { $receivers = ''; } - if ($model['uid'] != local_user() || - empty($model['allow_cid']) + if (empty($model['allow_cid']) && empty($model['allow_gid']) && empty($model['deny_cid']) && empty($model['deny_gid']) @@ -90,29 +113,29 @@ class PermissionTooltip extends \Friendica\BaseModule exit; } - $allowed_users = $model['allow_cid']; - $allowed_groups = $model['allow_gid']; - $deny_users = $model['deny_cid']; - $deny_groups = $model['deny_gid']; + $allowed_users = $model['allow_cid']; + $allowed_circles = $model['allow_gid']; + $deny_users = $model['deny_cid']; + $deny_circles = $model['deny_gid']; $o = DI::l10n()->t('Visible to:') . '
'; $l = []; - if (count($allowed_groups)) { - $key = array_search(Group::FOLLOWERS, $allowed_groups); + if (count($allowed_circles)) { + $key = array_search(Circle::FOLLOWERS, $allowed_circles); if ($key !== false) { $l[] = '' . DI::l10n()->t('Followers') . ''; - unset($allowed_groups[$key]); + unset($allowed_circles[$key]); } - $key = array_search(Group::MUTUALS, $allowed_groups); + $key = array_search(Circle::MUTUALS, $allowed_circles); if ($key !== false) { $l[] = '' . DI::l10n()->t('Mutuals') . ''; - unset($allowed_groups[$key]); + unset($allowed_circles[$key]); } - foreach (DI::dba()->selectToArray('group', ['name'], ['id' => $allowed_groups]) as $group) { - $l[] = '' . $group['name'] . ''; + foreach (DI::dba()->selectToArray('group', ['name'], ['id' => $allowed_circles]) as $circle) { + $l[] = '' . $circle['name'] . ''; } } @@ -120,21 +143,21 @@ class PermissionTooltip extends \Friendica\BaseModule $l[] = $contact['name']; } - if (count($deny_groups)) { - $key = array_search(Group::FOLLOWERS, $deny_groups); + if (count($deny_circles)) { + $key = array_search(Circle::FOLLOWERS, $deny_circles); if ($key !== false) { $l[] = '' . DI::l10n()->t('Followers') . ''; - unset($deny_groups[$key]); + unset($deny_circles[$key]); } - $key = array_search(Group::MUTUALS, $deny_groups); + $key = array_search(Circle::MUTUALS, $deny_circles); if ($key !== false) { $l[] = '' . DI::l10n()->t('Mutuals') . ''; - unset($deny_groups[$key]); + unset($deny_circles[$key]); } - foreach (DI::dba()->selectToArray('group', ['name'], ['id' => $allowed_groups]) as $group) { - $l[] = '' . $group['name'] . ''; + foreach (DI::dba()->selectToArray('group', ['name'], ['id' => $allowed_circles]) as $circle) { + $l[] = '' . $circle['name'] . ''; } } @@ -143,34 +166,54 @@ class PermissionTooltip extends \Friendica\BaseModule } if (!empty($l)) { - echo $o . implode(', ', $l); + System::httpExit($o . implode(', ', $l)); } else { - echo $o . $receivers; + System::httpExit($o . $receivers);; } - - exit(); } /** * Fetch a list of receivers * * @param int $uriId - * @return string + * @return string */ - private function fetchReceivers(int $uriId):string + private function fetchReceivers(int $uriId): string { - // We only fetch "to" and "cc", because "bcc" should never be displayed + $own_url = ''; + $uid = DI::userSession()->getLocalUserId(); + if ($uid) { + $owner = User::getOwnerDataById($uid); + if (!empty($owner['url'])) { + $own_url = $owner['url']; + } + } + $receivers = []; - foreach (Tag::getByURIId($uriId, [Tag::TO, Tag::CC]) as $receiver) { - if ($receiver['url'] == ActivityPub::PUBLIC_COLLECTION) { - $receivers[$receiver['type']][] = DI::l10n()->t('Public'); - } else { - $apcontact = DBA::selectFirst('apcontact', ['name'], ['followers' => $receiver['url']]); - if (!empty($apcontact['name'])) { - $receivers[$receiver['type']][] = DI::l10n()->t('Followers (%s)', $apcontact['name']); - } else { + foreach (Tag::getByURIId($uriId, [Tag::TO, Tag::CC, Tag::BCC, Tag::AUDIENCE, Tag::ATTRIBUTED]) as $receiver) { + // We only display BCC when it contains the current user + if (($receiver['type'] == Tag::BCC) && ($receiver['url'] != $own_url)) { + continue; + } + + switch (Tag::getTargetType($receiver['url'], false)) { + case Tag::PUBLIC_COLLECTION: + $receivers[$receiver['type']][] = DI::l10n()->t('Public'); + break; + case Tag::GENERAL_COLLECTION: + $receivers[$receiver['type']][] = DI::l10n()->t('Collection (%s)', $receiver['name']); + break; + case Tag::FOLLOWER_COLLECTION: + $apcontact = DBA::selectFirst('apcontact', ['name'], ['followers' => $receiver['url']]); + $receivers[$receiver['type']][] = DI::l10n()->t('Followers (%s)', $apcontact['name'] ?? $receiver['name']); + break; + case Tag::ACCOUNT: + $apcontact = APContact::getByURL($receiver['url'], false); + $receivers[$receiver['type']][] = $apcontact['name'] ?? $receiver['name']; + break; + default: $receivers[$receiver['type']][] = $receiver['name']; - } + break; } } @@ -190,6 +233,15 @@ class PermissionTooltip extends \Friendica\BaseModule case Tag::CC: $output .= DI::l10n()->t('CC: %s
', implode(', ', $receiver)); break; + case Tag::BCC: + $output .= DI::l10n()->t('BCC: %s
', implode(', ', $receiver)); + break; + case Tag::AUDIENCE: + $output .= DI::l10n()->t('Audience: %s
', implode(', ', $receiver)); + break; + case Tag::ATTRIBUTED: + $output .= DI::l10n()->t('Attributed To: %s
', implode(', ', $receiver)); + break; } }