X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FContent%2FConversation.php;h=d9036c78399c99be8fdd77a94a2fd4ee4f4c4c70;hb=8fd0d4cdc090dfdeeaf9beda8090c030d3f853c3;hp=0f0259aaac812e63e009913eb85843a8683263df;hpb=8f92d1cc8ee82c11d2e95f91ec494cf6b50e7ff3;p=friendica.git diff --git a/src/Content/Conversation.php b/src/Content/Conversation.php index 0f0259aaac..d9036c7839 100644 --- a/src/Content/Conversation.php +++ b/src/Content/Conversation.php @@ -32,7 +32,7 @@ use Friendica\Core\L10n; use Friendica\Core\PConfig\Capability\IManagePersonalConfigValues; use Friendica\Core\Protocol; use Friendica\Core\Renderer; -use Friendica\Core\Session; +use Friendica\Core\Session\Capability\IHandleUserSessions; use Friendica\Core\Theme; use Friendica\Database\DBA; use Friendica\Model\Contact; @@ -77,8 +77,10 @@ class Conversation private $page; /** @var App\Mode */ private $mode; + /** @var IHandleUserSessions */ + private $session; - public function __construct(LoggerInterface $logger, Profiler $profiler, Activity $activity, L10n $l10n, Item $item, Arguments $args, BaseURL $baseURL, IManageConfigValues $config, IManagePersonalConfigValues $pConfig, App\Page $page, App\Mode $mode, App $app) + public function __construct(LoggerInterface $logger, Profiler $profiler, Activity $activity, L10n $l10n, Item $item, Arguments $args, BaseURL $baseURL, IManageConfigValues $config, IManagePersonalConfigValues $pConfig, App\Page $page, App\Mode $mode, App $app, IHandleUserSessions $session) { $this->activity = $activity; $this->item = $item; @@ -92,6 +94,7 @@ class Conversation $this->pConfig = $pConfig; $this->page = $page; $this->app = $app; + $this->session = $session; } /** @@ -143,7 +146,7 @@ class Conversation 'url' => $activity['author-link'] ]; $url = Contact::magicLinkByContact($author); - if (strpos($url, 'redir/') === 0) { + if (strpos($url, 'contact/redir/') === 0) { $sparkle = ' class="sparkle" '; } @@ -168,7 +171,7 @@ class Conversation continue; } - if (public_contact() == $activity['author-id']) { + if ($this->session->getPublicContactId() == $activity['author-id']) { $conv_responses[$mode][$activity['thr-parent-id']]['self'] = 1; } @@ -261,7 +264,7 @@ class Conversation break; } - $expanded .= "\t" . ''; + $expanded .= "\t" . ''; } $o .= Renderer::replaceMacros(Renderer::getMarkupTemplate('voting_fakelink.tpl'), [ @@ -293,7 +296,7 @@ class Conversation $x['bang'] = $x['bang'] ?? ''; $x['visitor'] = $x['visitor'] ?? 'block'; $x['is_owner'] = $x['is_owner'] ?? true; - $x['profile_uid'] = $x['profile_uid'] ?? local_user(); + $x['profile_uid'] = $x['profile_uid'] ?? $this->session->getLocalUserId(); $geotag = !empty($x['allow_location']) ? Renderer::replaceMacros(Renderer::getMarkupTemplate('jot_geotag.tpl'), []) : ''; @@ -328,7 +331,7 @@ class Conversation $created_at = ''; } - $tpl = Renderer::getMarkupTemplate("jot.tpl"); + $tpl = Renderer::getMarkupTemplate('jot.tpl'); $o .= Renderer::replaceMacros($tpl, [ '$new_post' => $this->l10n->t('New Post'), @@ -356,7 +359,7 @@ class Conversation '$title' => $x['title'] ?? '', '$placeholdertitle' => $this->l10n->t('Set title'), '$category' => $x['category'] ?? '', - '$placeholdercategory' => Feature::isEnabled(local_user(), 'categories') ? $this->l10n->t("Categories \x28comma-separated list\x29") : '', + '$placeholdercategory' => Feature::isEnabled($this->session->getLocalUserId(), 'categories') ? $this->l10n->t("Categories \x28comma-separated list\x29") : '', '$scheduled_at' => Temporal::getDateTimeField( new \DateTime(), new \DateTime('now + 6 months'), @@ -369,7 +372,7 @@ class Conversation '$permset' => $this->l10n->t('Permission settings'), '$shortpermset' => $this->l10n->t('Permissions'), '$wall' => $notes_cid ? 0 : 1, - '$posttype' => $notes_cid ? Item::PT_PERSONAL_NOTE : Item::PT_ARTICLE, + '$posttype' => $notes_cid ? ItemModel::PT_PERSONAL_NOTE : ItemModel::PT_ARTICLE, '$content' => $x['content'] ?? '', '$post_id' => $x['post_id'] ?? '', '$baseurl' => $this->baseURL->get(true), @@ -393,7 +396,8 @@ class Conversation '$message' => $this->l10n->t('Message'), '$browser' => $this->l10n->t('Browser'), - '$compose_link_title' => $this->l10n->t('Open Compose page'), + '$compose_link_title' => $this->l10n->t('Open Compose page'), + '$always_open_compose' => $this->pConfig->get($this->session->getLocalUserId(), 'frio', 'always_open_compose', false), ]); @@ -432,7 +436,7 @@ class Conversation $this->page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput.css')); $this->page->registerStylesheet(Theme::getPathForFile('js/friendica-tagsinput/friendica-tagsinput-typeahead.css')); - $ssl_state = (local_user() ? true : false); + $ssl_state = (bool)$this->session->getLocalUserId(); $live_update_div = ''; @@ -484,19 +488,19 @@ class Conversation } } } elseif ($mode === 'notes') { - $items = $this->addChildren($items, false, $order, local_user(), $mode); + $items = $this->addChildren($items, false, $order, $this->session->getLocalUserId(), $mode); if (!$update) { $live_update_div = '
' . "\r\n" - . "\r\n"; + . "\r\n"; } } elseif ($mode === 'display') { $items = $this->addChildren($items, false, $order, $uid, $mode); if (!$update) { $live_update_div = '
' . "\r\n" - . ""; } } elseif ($mode === 'community') { @@ -516,13 +520,13 @@ class Conversation if (!$update) { $live_update_div = '
' . "\r\n" . "\r\n"; + ."?f='; \r\n"; } } elseif ($mode === 'search') { $live_update_div = '' . "\r\n"; } - $page_dropping = ((local_user() && local_user() == $uid) ? true : false); + $page_dropping = $this->session->getLocalUserId() && $this->session->getLocalUserId() == $uid && $mode != 'search'; if (!$update) { $_SESSION['return_path'] = $this->args->getQueryString(); @@ -542,7 +546,7 @@ class Conversation 'announce' => [], ]; - if ($this->pConfig->get(local_user(), 'system', 'hide_dislike')) { + if ($this->pConfig->get($this->session->getLocalUserId(), 'system', 'hide_dislike')) { unset($conv_responses['dislike']); } @@ -560,7 +564,7 @@ class Conversation $writable = $items[0]['writable'] || ($items[0]['uid'] == 0) && in_array($items[0]['network'], Protocol::FEDERATED); } - if (!local_user()) { + if (!$this->session->getLocalUserId()) { $writable = false; } @@ -593,7 +597,7 @@ class Conversation $threadsid++; // prevent private email from leaking. - if ($item['network'] === Protocol::MAIL && local_user() != $item['uid']) { + if ($item['network'] === Protocol::MAIL && $this->session->getLocalUserId() != $item['uid']) { continue; } @@ -608,7 +612,7 @@ class Conversation $profile_link = Contact::magicLinkByContact($author); $sparkle = ''; - if (strpos($profile_link, 'redir/') === 0) { + if (strpos($profile_link, 'contact/redir/') === 0) { $sparkle = ' sparkle'; } @@ -637,17 +641,17 @@ class Conversation 'announce' => null, ]; - if ($this->pConfig->get(local_user(), 'system', 'hide_dislike')) { + if ($this->pConfig->get($this->session->getLocalUserId(), 'system', 'hide_dislike')) { unset($likebuttons['dislike']); } - $body_html = Item::prepareBody($item, true, $preview); + $body_html = ItemModel::prepareBody($item, true, $preview); - [$categories, $folders] = $this->item->determineCategoriesTerms($item, local_user()); + [$categories, $folders] = $this->item->determineCategoriesTerms($item, $this->session->getLocalUserId()); if (!empty($item['title'])) { $title = $item['title']; - } elseif (!empty($item['content-warning']) && $this->pConfig->get(local_user(), 'system', 'disable_cw', false)) { + } elseif (!empty($item['content-warning']) && $this->pConfig->get($this->session->getLocalUserId(), 'system', 'disable_cw', false)) { $title = ucfirst($item['content-warning']); } else { $title = ''; @@ -698,7 +702,7 @@ class Conversation 'owner_name' => '', 'owner_url' => '', 'owner_photo' => $this->baseURL->remove($this->item->getOwnerAvatar($item)), - 'plink' => Item::getPlink($item), + 'plink' => ItemModel::getPlink($item), 'edpost' => false, 'pinned' => $pinned, 'isstarred' => 'unstarred', @@ -741,7 +745,7 @@ class Conversation $this->builtinActivityPuller($item, $conv_responses); // Only add what is visible - if ($item['network'] === Protocol::MAIL && local_user() != $item['uid']) { + if ($item['network'] === Protocol::MAIL && $this->session->getLocalUserId() != $item['uid']) { continue; } @@ -786,11 +790,11 @@ class Conversation private function getBlocklist(): array { - if (!local_user()) { + if (!$this->session->getLocalUserId()) { return []; } - $str_blocked = str_replace(["\n", "\r"], ",", $this->pConfig->get(local_user(), 'system', 'blocked')); + $str_blocked = str_replace(["\n", "\r"], ",", $this->pConfig->get($this->session->getLocalUserId(), 'system', 'blocked') ?? ''); if (empty($str_blocked)) { return []; } @@ -826,7 +830,7 @@ class Conversation if (!empty($activity)) { if (($row['gravity'] == ItemModel::GRAVITY_PARENT)) { - $row['post-reason'] = Item::PR_ANNOUNCEMENT; + $row['post-reason'] = ItemModel::PR_ANNOUNCEMENT; $row = array_merge($row, $activity); $contact = Contact::getById($activity['causer-id'], ['url', 'name', 'thumb']); @@ -841,26 +845,26 @@ class Conversation } switch ($row['post-reason']) { - case Item::PR_TO: + case ItemModel::PR_TO: $row['direction'] = ['direction' => 7, 'title' => $this->l10n->t('You had been addressed (%s).', 'to')]; break; - case Item::PR_CC: + case ItemModel::PR_CC: $row['direction'] = ['direction' => 7, 'title' => $this->l10n->t('You had been addressed (%s).', 'cc')]; break; - case Item::PR_BTO: + case ItemModel::PR_BTO: $row['direction'] = ['direction' => 7, 'title' => $this->l10n->t('You had been addressed (%s).', 'bto')]; break; - case Item::PR_BCC: + case ItemModel::PR_BCC: $row['direction'] = ['direction' => 7, 'title' => $this->l10n->t('You had been addressed (%s).', 'bcc')]; break; - case Item::PR_FOLLOWER: + case ItemModel::PR_FOLLOWER: $row['direction'] = ['direction' => 6, 'title' => $this->l10n->t('You are following %s.', $row['causer-name'] ?: $row['author-name'])]; break; - case Item::PR_TAG: + case ItemModel::PR_TAG: $row['direction'] = ['direction' => 4, 'title' => $this->l10n->t('You subscribed to one or more tags in this post.')]; break; - case Item::PR_ANNOUNCEMENT: - if (!empty($row['causer-id']) && $this->pConfig->get(local_user(), 'system', 'display_resharer')) { + case ItemModel::PR_ANNOUNCEMENT: + if (!empty($row['causer-id']) && $this->pConfig->get($this->session->getLocalUserId(), 'system', 'display_resharer')) { $row['owner-id'] = $row['causer-id']; $row['owner-link'] = $row['causer-link']; $row['owner-avatar'] = $row['causer-avatar']; @@ -874,34 +878,34 @@ class Conversation } $row['direction'] = ['direction' => 3, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Reshared') : $this->l10n->t('Reshared by %s <%s>', $row['causer-name'], $row['causer-link']))]; break; - case Item::PR_COMMENT: + case ItemModel::PR_COMMENT: $row['direction'] = ['direction' => 5, 'title' => $this->l10n->t('%s is participating in this thread.', $row['author-name'])]; break; - case Item::PR_STORED: + case ItemModel::PR_STORED: $row['direction'] = ['direction' => 8, 'title' => $this->l10n->t('Stored for general reasons')]; break; - case Item::PR_GLOBAL: + case ItemModel::PR_GLOBAL: $row['direction'] = ['direction' => 9, 'title' => $this->l10n->t('Global post')]; break; - case Item::PR_RELAY: + case ItemModel::PR_RELAY: $row['direction'] = ['direction' => 10, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Sent via an relay server') : $this->l10n->t('Sent via the relay server %s <%s>', $row['causer-name'], $row['causer-link']))]; break; - case Item::PR_FETCHED: + case ItemModel::PR_FETCHED: $row['direction'] = ['direction' => 2, 'title' => (empty($row['causer-id']) ? $this->l10n->t('Fetched') : $this->l10n->t('Fetched because of %s <%s>', $row['causer-name'], $row['causer-link']))]; break; - case Item::PR_COMPLETION: + case ItemModel::PR_COMPLETION: $row['direction'] = ['direction' => 2, 'title' => $this->l10n->t('Stored because of a child post to complete this thread.')]; break; - case Item::PR_DIRECT: + case ItemModel::PR_DIRECT: $row['direction'] = ['direction' => 6, 'title' => $this->l10n->t('Local delivery')]; break; - case Item::PR_ACTIVITY: + case ItemModel::PR_ACTIVITY: $row['direction'] = ['direction' => 2, 'title' => $this->l10n->t('Stored because of your activity (like, comment, star, ...)')]; break; - case Item::PR_DISTRIBUTE: + case ItemModel::PR_DISTRIBUTE: $row['direction'] = ['direction' => 6, 'title' => $this->l10n->t('Distributed')]; break; - case Item::PR_PUSHED: + case ItemModel::PR_PUSHED: $row['direction'] = ['direction' => 1, 'title' => $this->l10n->t('Pushed to us')]; break; } @@ -966,7 +970,7 @@ class Conversation } $condition = DBA::mergeConditions($condition, - ["`uid` IN (0, ?) AND (`vid` != ? OR `vid` IS NULL)", $uid, Verb::getID(Activity::FOLLOW)]); + ["`uid` IN (0, ?) AND (NOT `vid` IN (?, ?) OR `vid` IS NULL)", $uid, Verb::getID(Activity::FOLLOW), Verb::getID(Activity::VIEW)]); $thread_parents = Post::select(['uri-id', 'causer-id'], $condition, ['order' => ['uri-id' => false, 'uid']]); @@ -979,9 +983,10 @@ class Conversation $params = ['order' => ['uri-id' => true, 'uid' => true]]; - $thread_items = Post::selectForUser($uid, array_merge(Item::DISPLAY_FIELDLIST, ['featured', 'contact-uid', 'gravity', 'post-type', 'post-reason']), $condition, $params); + $thread_items = Post::selectForUser($uid, array_merge(ItemModel::DISPLAY_FIELDLIST, ['featured', 'contact-uid', 'gravity', 'post-type', 'post-reason']), $condition, $params); - $items = []; + $items = []; + $quote_uri_ids = []; while ($row = Post::fetch($thread_items)) { if (!empty($items[$row['uri-id']]) && ($row['uid'] == 0)) { @@ -1001,11 +1006,37 @@ class Conversation } } + if (in_array($row['gravity'], [ItemModel::GRAVITY_PARENT, ItemModel::GRAVITY_COMMENT])) { + $quote_uri_ids[$row['uri-id']] = [ + 'uri-id' => $row['uri-id'], + 'uri' => $row['uri'], + 'parent-uri-id' => $row['parent-uri-id'], + 'parent-uri' => $row['parent-uri'], + ]; + } + $items[$row['uri-id']] = $this->addRowInformation($row, $activities[$row['uri-id']] ?? [], $thr_parent[$row['thr-parent-id']] ?? []); } DBA::close($thread_items); + $quotes = Post::select(array_merge(ItemModel::DISPLAY_FIELDLIST, ['featured', 'contact-uid', 'gravity', 'post-type', 'post-reason']), ['quote-uri-id' => array_column($quote_uri_ids, 'uri-id'), 'body' => '', 'uid' => 0]); + while ($quote = Post::fetch($quotes)) { + $row = $quote; + + $row['uid'] = $uid; + $row['verb'] = $row['body'] = $row['raw-body'] = Activity::ANNOUNCE; + $row['gravity'] = ItemModel::GRAVITY_ACTIVITY; + $row['object-type'] = Activity\ObjectType::NOTE; + $row['parent-uri'] = $quote_uri_ids[$quote['quote-uri-id']]['parent-uri']; + $row['parent-uri-id'] = $quote_uri_ids[$quote['quote-uri-id']]['parent-uri-id']; + $row['thr-parent'] = $quote_uri_ids[$quote['quote-uri-id']]['uri']; + $row['thr-parent-id'] = $quote_uri_ids[$quote['quote-uri-id']]['uri-id']; + + $items[$row['uri-id']] = $this->addRowInformation($row, [], []); + } + DBA::close($quotes); + $items = $this->convSort($items, $order); $this->profiler->stopRecording(); @@ -1212,7 +1243,7 @@ class Conversation $parents[$i]['children'] = $this->sortItemChildren($parents[$i]['children']); } - if (!$this->pConfig->get(local_user(), 'system', 'no_smart_threading', 0)) { + if (!$this->pConfig->get($this->session->getLocalUserId(), 'system', 'no_smart_threading', 0)) { foreach ($parents as $i => $parent) { $parents[$i] = $this->smartFlattenConversation($parent); }