]> git.mxchange.org Git - friendica.git/blobdiff - src/Module/PermissionTooltip.php
Decouple conversation creation from rendering
[friendica.git] / src / Module / PermissionTooltip.php
index c1ef4c2b4b794a5286cbd9d22ece63f98314d54e..4e5191e5a48c3b07e7a9193a62c6931fbb2752e5 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /**
- * @copyright Copyright (C) 2010-2022, the Friendica project
+ * @copyright Copyright (C) 2010-2023, the Friendica project
  *
  * @license GNU AGPL version 3 or any later version
  *
 namespace Friendica\Module;
 
 use Friendica\Core\Hook;
+use Friendica\Core\Protocol;
 use Friendica\Core\System;
 use Friendica\Database\DBA;
 use Friendica\DI;
 use Friendica\Model\APContact;
-use Friendica\Model\Group;
+use Friendica\Model\Circle;
 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.
@@ -51,8 +51,21 @@ class PermissionTooltip extends \Friendica\BaseModule
 
                $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);
@@ -66,15 +79,7 @@ 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') {
@@ -108,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:') . '<br />';
                $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[] = '<b>' . DI::l10n()->t('Followers') . '</b>';
-                               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[] = '<b>' . DI::l10n()->t('Mutuals') . '</b>';
-                               unset($allowed_groups[$key]);
+                               unset($allowed_circles[$key]);
                        }
 
-                       foreach (DI::dba()->selectToArray('group', ['name'], ['id' => $allowed_groups]) as $group) {
-                               $l[] = '<b>' . $group['name'] . '</b>';
+                       foreach (DI::dba()->selectToArray('group', ['name'], ['id' => $allowed_circles]) as $circle) {
+                               $l[] = '<b>' . $circle['name'] . '</b>';
                        }
                }
 
@@ -138,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[] = '<b><strike>' . DI::l10n()->t('Followers') . '</strike></b>';
-                               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[] = '<b><strike>' . DI::l10n()->t('Mutuals') . '</strike></b>';
-                               unset($deny_groups[$key]);
+                               unset($deny_circles[$key]);
                        }
 
-                       foreach (DI::dba()->selectToArray('group', ['name'], ['id' => $allowed_groups]) as $group) {
-                               $l[] = '<b><strike>' . $group['name'] . '</strike></b>';
+                       foreach (DI::dba()->selectToArray('group', ['name'], ['id' => $allowed_circles]) as $circle) {
+                               $l[] = '<b><strike>' . $circle['name'] . '</strike></b>';
                        }
                }
 
@@ -161,11 +166,10 @@ 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);;
                }
-               System::exit();
        }
 
        /**
@@ -186,7 +190,7 @@ class PermissionTooltip extends \Friendica\BaseModule
                }
 
                $receivers = [];
-               foreach (Tag::getByURIId($uriId, [Tag::TO, Tag::CC, Tag::BCC]) as $receiver) {
+               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;
@@ -232,6 +236,12 @@ class PermissionTooltip extends \Friendica\BaseModule
                                case Tag::BCC:
                                        $output .= DI::l10n()->t('<b>BCC:</b> %s<br>', implode(', ', $receiver));
                                        break;
+                               case Tag::AUDIENCE:
+                                       $output .= DI::l10n()->t('<b>Audience:</b> %s<br>', implode(', ', $receiver));
+                                       break;
+                               case Tag::ATTRIBUTED:
+                                       $output .= DI::l10n()->t('<b>Attributed To:</b> %s<br>', implode(', ', $receiver));
+                                       break;
                        }
                }