X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FPermissionTooltip.php;h=58b6df086d1f6ad01fcb753a3c0b2c0879dfd39a;hb=69b7923df2beed71419bc38e61ca9755fad24b12;hp=b9429fce231ee65f560dc610b761b5050e7f0dab;hpb=c1226bff071c38e708e91f5ba07436c88cfaa737;p=friendica.git diff --git a/src/Module/PermissionTooltip.php b/src/Module/PermissionTooltip.php index b9429fce23..58b6df086d 100644 --- a/src/Module/PermissionTooltip.php +++ b/src/Module/PermissionTooltip.php @@ -1,37 +1,64 @@ . + * + */ namespace Friendica\Module; use Friendica\Core\Hook; use Friendica\Database\DBA; use Friendica\DI; -use Friendica\Model\Item; +use Friendica\Model\APContact; use Friendica\Model\Group; +use Friendica\Model\Item; use Friendica\Model\Post; +use Friendica\Model\Tag; +use Friendica\Model\User; use Friendica\Network\HTTPException; +use Friendica\Protocol\ActivityPub; /** * Outputs the permission tooltip HTML content for the provided item, photo or event id. */ class PermissionTooltip extends \Friendica\BaseModule { - public static function rawContent(array $parameters = []) + protected function rawContent(array $request = []) { - $type = $parameters['type']; - $referenceId = $parameters['id']; + $type = $this->parameters['type']; + $referenceId = $this->parameters['id']; $expectedTypes = ['item', 'photo', 'event']; if (!in_array($type, $expectedTypes)) { throw new HTTPException\BadRequestException(DI::l10n()->t('Wrong type "%s", expected one of: %s', $type, implode(', ', $expectedTypes))); } - $condition = ['id' => $referenceId]; + $condition = ['id' => $referenceId, 'uid' => [0, local_user()]]; 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']; $model = DBA::selectFirst($type, $fields, $condition); + $model['allow_cid'] = DI::aclFormatter()->expand($model['allow_cid']); + $model['allow_gid'] = DI::aclFormatter()->expand($model['allow_gid']); + $model['deny_cid'] = DI::aclFormatter()->expand($model['deny_cid']); + $model['deny_gid'] = DI::aclFormatter()->expand($model['deny_gid']); } if (!DBA::isResult($model)) { @@ -39,7 +66,7 @@ class PermissionTooltip extends \Friendica\BaseModule } if (isset($model['psid'])) { - $permissionSet = DI::permissionSet()->selectFirst(['id' => $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; @@ -49,24 +76,41 @@ class PermissionTooltip extends \Friendica\BaseModule // Kept for backwards compatiblity Hook::callAll('lockview_content', $model); - if ($model['uid'] != local_user() || - isset($model['private']) - && $model['private'] == Item::PRIVATE - && empty($model['allow_cid']) + 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 (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; } - $aclFormatter = DI::aclFormatter(); - - $allowed_users = $aclFormatter->expand($model['allow_cid']); - $allowed_groups = $aclFormatter->expand($model['allow_gid']); - $deny_users = $aclFormatter->expand($model['deny_cid']); - $deny_groups = $aclFormatter->expand($model['deny_gid']); + $allowed_users = $model['allow_cid']; + $allowed_groups = $model['allow_gid']; + $deny_users = $model['deny_cid']; + $deny_groups = $model['deny_gid']; $o = DI::l10n()->t('Visible to:') . '
'; $l = []; @@ -115,7 +159,75 @@ 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 + { + $own_url = ''; + $uid = local_user(); + if ($uid) { + $owner = User::getOwnerDataById($uid); + if (!empty($owner['url'])) { + $own_url = $owner['url']; + } + } + + $receivers = []; + foreach (Tag::getByURIId($uriId, [Tag::TO, Tag::CC, Tag::BCC]) as $receiver) { + // We only display BCC when it contains the current user + if (($receiver['type'] == Tag::BCC) && ($receiver['url'] != $own_url)) { + continue; + } + + 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']); + } elseif ($apcontact = APContact::getByURL($receiver['url'], false)) { + $receivers[$receiver['type']][] = $apcontact['name']; + } else { + $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; + case Tag::BCC: + $output .= DI::l10n()->t('BCC: %s
', implode(', ', $receiver)); + break; + } + } + + return $output; + } }