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;
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;
$this->pConfig = $pConfig;
$this->page = $page;
$this->app = $app;
+ $this->session = $session;
}
/**
'url' => $activity['author-link']
];
$url = Contact::magicLinkByContact($author);
- if (strpos($url, 'redir/') === 0) {
+ if (strpos($url, 'contact/redir/') === 0) {
$sparkle = ' class="sparkle" ';
}
continue;
}
- if (public_contact() == $activity['author-id']) {
+ if ($this->session->getPublicContactId() == $activity['author-id']) {
$conv_responses[$mode][$activity['thr-parent-id']]['self'] = 1;
}
break;
}
- $expanded .= "\t" . '<p class="wall-item-' . $verb . '-expanded" id="' . $verb . 'list-' . $id . '" style="display: none;" >' . $explikers . EOL . '</p>';
+ $expanded .= "\t" . '<p class="wall-item-' . $verb . '-expanded" id="' . $verb . 'list-' . $id . '" style="display: none;" >' . $explikers . '</p>';
}
$o .= Renderer::replaceMacros(Renderer::getMarkupTemplate('voting_fakelink.tpl'), [
$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'), []) : '';
$created_at = '';
}
- $tpl = Renderer::getMarkupTemplate("jot.tpl");
+ $tpl = Renderer::getMarkupTemplate('jot.tpl');
$o .= Renderer::replaceMacros($tpl, [
'$new_post' => $this->l10n->t('New Post'),
'$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'),
'$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),
'$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),
]);
$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 = '';
}
}
} 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 = '<div id="live-notes"></div>' . "\r\n"
- . "<script> var profile_uid = " . local_user()
- . "; var netargs = '/?f='; </script>\r\n";
+ . "<script> var profile_uid = " . $this->session->getLocalUserId()
+ . "; var netargs = '?f='; </script>\r\n";
}
} elseif ($mode === 'display') {
$items = $this->addChildren($items, false, $order, $uid, $mode);
if (!$update) {
$live_update_div = '<div id="live-display"></div>' . "\r\n"
- . "<script> var profile_uid = " . Session::get('uid', 0) . ";"
+ . "<script> var profile_uid = " . ($this->session->getLocalUserId() ?: 0) . ";"
. "</script>";
}
} elseif ($mode === 'community') {
if (!$update) {
$live_update_div = '<div id="live-contact"></div>' . "\r\n"
. "<script> var profile_uid = -1; var netargs = '" . substr($this->args->getCommand(), 8)
- ."/?f='; </script>\r\n";
+ ."?f='; </script>\r\n";
}
} elseif ($mode === 'search') {
$live_update_div = '<div id="live-search"></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();
'announce' => [],
];
- if ($this->pConfig->get(local_user(), 'system', 'hide_dislike')) {
+ if ($this->pConfig->get($this->session->getLocalUserId(), 'system', 'hide_dislike')) {
unset($conv_responses['dislike']);
}
$writable = $items[0]['writable'] || ($items[0]['uid'] == 0) && in_array($items[0]['network'], Protocol::FEDERATED);
}
- if (!local_user()) {
+ if (!$this->session->getLocalUserId()) {
$writable = false;
}
$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;
}
$profile_link = Contact::magicLinkByContact($author);
$sparkle = '';
- if (strpos($profile_link, 'redir/') === 0) {
+ if (strpos($profile_link, 'contact/redir/') === 0) {
$sparkle = ' sparkle';
}
'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 = '';
'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',
$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;
}
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 [];
}
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']);
}
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'];
}
$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;
}
}
$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']]);
$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)) {
}
}
+ 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();
$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);
}