X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FObject%2FPost.php;h=981bf76c7d6f576423265d9d4ac358f7da542065;hb=f2c31ef1c0e92208b58d22791fc72d0ad3e3d6ae;hp=9fa9fcb50749ce30a0c13fcdd184eea96463af7a;hpb=b2c29715519b1712abce6acb592caedbc8ac8710;p=friendica.git diff --git a/src/Object/Post.php b/src/Object/Post.php index 9fa9fcb507..981bf76c7d 100644 --- a/src/Object/Post.php +++ b/src/Object/Post.php @@ -7,6 +7,7 @@ namespace Friendica\Object; use Friendica\BaseObject; use Friendica\Content\ContactSelector; use Friendica\Content\Feature; +use Friendica\Content\Item as ContentItem; use Friendica\Core\Addon; use Friendica\Core\Config; use Friendica\Core\Hook; @@ -15,10 +16,13 @@ use Friendica\Core\Logger; use Friendica\Core\PConfig; use Friendica\Core\Protocol; use Friendica\Core\Renderer; +use Friendica\Core\Session; use Friendica\Database\DBA; use Friendica\Model\Contact; use Friendica\Model\Item; use Friendica\Model\Term; +use Friendica\Model\User; +use Friendica\Protocol\Activity; use Friendica\Util\Crypto; use Friendica\Util\DateTimeFormat; use Friendica\Util\Proxy as ProxyUtils; @@ -69,20 +73,15 @@ class Post extends BaseObject $this->setTemplate('wall'); $this->toplevel = $this->getId() == $this->getDataValue('parent'); - if (!empty($_SESSION['remote']) && is_array($_SESSION['remote'])) { - foreach ($_SESSION['remote'] as $visitor) { - if ($visitor['cid'] == $this->getDataValue('contact-id')) { - $this->visiting = true; - break; - } - } + if (!empty(Session::getUserIDForVisitorContactID($this->getDataValue('contact-id')))) { + $this->visiting = true; } $this->writable = $this->getDataValue('writable') || $this->getDataValue('self'); $author = ['uid' => 0, 'id' => $this->getDataValue('author-id'), 'network' => $this->getDataValue('author-network'), 'url' => $this->getDataValue('author-link')]; - $this->redirect_url = Contact::magicLinkbyContact($author); + $this->redirect_url = Contact::magicLinkByContact($author); if (!$this->isToplevel()) { $this->threaded = true; } @@ -141,8 +140,11 @@ class Post extends BaseObject $sparkle = ''; $buttons = ''; $dropping = false; + $pinned = ''; + $pin = false; $star = false; $ignore = false; + $ispinned = "unpinned"; $isstarred = "unstarred"; $indent = ''; $shiny = ''; @@ -191,6 +193,8 @@ class Post extends BaseObject if (DBA::isResult($parent)) { $origin = $parent['origin']; } + } elseif ($item['pinned']) { + $pinned = L10n::t('pinned item'); } if ($origin && ($item['id'] != $item['parent']) && ($item['network'] == Protocol::ACTIVITYPUB)) { @@ -222,8 +226,8 @@ class Post extends BaseObject $author = ['uid' => 0, 'id' => $item['author-id'], 'network' => $item['author-network'], 'url' => $item['author-link']]; - if (local_user() || remote_user()) { - $profile_link = Contact::magicLinkbyContact($author); + if (Session::isAuthenticated()) { + $profile_link = Contact::magicLinkByContact($author); } else { $profile_link = $item['author-link']; } @@ -237,11 +241,11 @@ class Post extends BaseObject $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate)); // process action responses - e.g. like/dislike/attend/agree/whatever - $response_verbs = ['like', 'dislike']; + $response_verbs = ['like', 'dislike', 'announce']; $isevent = false; $attend = []; - if ($item['object-type'] === ACTIVITY_OBJ_EVENT) { + if ($item['object-type'] === Activity\ObjectType::EVENT) { $response_verbs[] = 'attendyes'; $response_verbs[] = 'attendno'; $response_verbs[] = 'attendmaybe'; @@ -285,6 +289,19 @@ class Post extends BaseObject } if ($conv->getProfileOwner() == local_user() && ($item['uid'] != 0)) { + if ($origin) { + $ispinned = ($item['pinned'] ? 'pinned' : 'unpinned'); + + $pin = [ + 'do' => L10n::t('pin'), + 'undo' => L10n::t('unpin'), + 'toggle' => L10n::t('toggle pin status'), + 'classdo' => $item['pinned'] ? 'hidden' : '', + 'classundo' => $item['pinned'] ? '' : 'hidden', + 'pinned' => L10n::t('pinned'), + ]; + } + $isstarred = (($item['starred']) ? "starred" : "unstarred"); $star = [ @@ -326,7 +343,10 @@ class Post extends BaseObject $body = Item::prepareBody($item, true); - list($categories, $folders) = get_cats_and_terms($item); + /** @var ContentItem $contItem */ + $contItem = self::getClass(ContentItem::class); + + list($categories, $folders) = $contItem->determineCategoriesTerms($item); $body_e = $body; $text_e = strip_tags($body); @@ -365,6 +385,7 @@ class Post extends BaseObject 'tags' => $tags['tags'], 'hashtags' => $tags['hashtags'], 'mentions' => $tags['mentions'], + 'implicit_mentions' => $tags['implicit_mentions'], 'txt_cats' => L10n::t('Categories:'), 'txt_folders' => L10n::t('Filed under:'), 'has_cats' => ((count($categories)) ? 'true' : ''), @@ -398,12 +419,15 @@ class Post extends BaseObject 'location' => $location_e, 'indent' => $indent, 'shiny' => $shiny, - 'owner_self' => $item['author-link'] == defaults($_SESSION, 'my_url', null), + 'owner_self' => $item['author-link'] == Session::get('my_url'), 'owner_url' => $this->getOwnerUrl(), 'owner_photo' => $a->removeBaseURL(ProxyUtils::proxifyUrl($item['owner-avatar'], false, ProxyUtils::SIZE_THUMB)), 'owner_name' => $owner_name_e, 'plink' => Item::getPlink($item), 'edpost' => $edpost, + 'ispinned' => $ispinned, + 'pin' => $pin, + 'pinned' => $pinned, 'isstarred' => $isstarred, 'star' => $star, 'ignore' => $ignore, @@ -415,6 +439,7 @@ class Post extends BaseObject 'dislike' => $responses['dislike']['output'], 'responses' => $responses, 'switchcomment' => L10n::t('Comment'), + 'reply_label' => L10n::t('Reply to %s', $name_e), 'comment' => $comment, 'previewing' => $conv->isPreview() ? ' preview ' : '', 'wait' => L10n::t('Please wait'), @@ -422,13 +447,14 @@ class Post extends BaseObject 'edited' => $edited, 'network' => $item["network"], 'network_name' => ContactSelector::networkToName($item['network'], $item['author-link']), + 'network_icon' => ContactSelector::networkToIcon($item['network'], $item['author-link']), 'received' => $item['received'], 'commented' => $item['commented'], 'created_date' => $item['created'], 'return' => ($a->cmd) ? bin2hex($a->cmd) : '', 'delivery' => [ 'queue_count' => $item['delivery_queue_count'], - 'queue_done' => $item['delivery_queue_done'], + 'queue_done' => $item['delivery_queue_done'] + $item['delivery_queue_failed'], /// @todo Possibly display it separately in the future 'notifier_pending' => L10n::t('Notifier task is pending'), 'delivery_pending' => L10n::t('Delivery to remote servers is pending'), 'delivery_underway' => L10n::t('Delivery to remote servers is underway'), @@ -449,13 +475,13 @@ class Post extends BaseObject foreach ($children as $child) { $result['children'][] = $child->getTemplateData($conv_responses, $thread_level + 1); } + // Collapse if (($nb_children > 2) || ($thread_level > 1)) { $result['children'][0]['comment_firstcollapsed'] = true; $result['children'][0]['num_comments'] = L10n::tt('%d comment', '%d comments', $total_children); - $result['children'][0]['hidden_comments_num'] = $total_children; - $result['children'][0]['hidden_comments_text'] = L10n::tt('comment', 'comments', $total_children); - $result['children'][0]['hide_text'] = L10n::t('show more'); + $result['children'][0]['show_text'] = L10n::t('Show more'); + $result['children'][0]['hide_text'] = L10n::t('Show fewer'); if ($thread_level > 1) { $result['children'][$nb_children - 1]['comment_lastcollapsed'] = true; } else { @@ -517,12 +543,17 @@ class Post extends BaseObject Logger::log('[WARN] Post::addChild : Item already exists (' . $item->getId() . ').', Logger::DEBUG); return false; } + + /** @var Activity $activity */ + $activity = self::getClass(Activity::class); + /* * Only add what will be displayed */ if ($item->getDataValue('network') === Protocol::MAIL && local_user() != $item->getDataValue('uid')) { return false; - } elseif (activity_match($item->getDataValue('verb'), ACTIVITY_LIKE) || activity_match($item->getDataValue('verb'), ACTIVITY_DISLIKE)) { + } elseif ($activity->match($item->getDataValue('verb'), Activity::LIKE) || + $activity->match($item->getDataValue('verb'), Activity::DISLIKE)) { return false; } @@ -780,10 +811,12 @@ class Post extends BaseObject { $a = self::getApp(); - if (!local_user() || empty($a->profile['addr'])) { + if (!local_user()) { return ''; } + $owner = User::getOwnerDataById($a->user['uid']); + if (!Feature::isEnabled(local_user(), 'explicit_mentions')) { return ''; } @@ -794,18 +827,17 @@ class Post extends BaseObject return ''; } - if ($item['author-addr'] != $a->profile['addr']) { + if ($item['author-addr'] != $owner['addr']) { $text = '@' . $item['author-addr'] . ' '; } else { $text = ''; } - $terms = Term::tagArrayFromItemId($this->getId(), TERM_MENTION); - + $terms = Term::tagArrayFromItemId($this->getId(), [Term::MENTION, Term::IMPLICIT_MENTION]); foreach ($terms as $term) { $profile = Contact::getDetailsByURL($term['url']); - if (!empty($profile['addr']) && ($profile['contact-type'] != Contact::TYPE_COMMUNITY) && - ($profile['addr'] != $a->profile['addr']) && !strstr($text, $profile['addr'])) { + if (!empty($profile['addr']) && ((($profile['contact-type'] ?? '') ?: Contact::TYPE_UNKNOWN) != Contact::TYPE_COMMUNITY) && + ($profile['addr'] != $owner['addr']) && !strstr($text, $profile['addr'])) { $text .= '@' . $profile['addr'] . ' '; } } @@ -944,7 +976,7 @@ class Post extends BaseObject $owner = ['uid' => 0, 'id' => $this->getDataValue('owner-id'), 'network' => $this->getDataValue('owner-network'), 'url' => $this->getDataValue('owner-link')]; - $this->owner_url = Contact::magicLinkbyContact($owner); + $this->owner_url = Contact::magicLinkByContact($owner); } } }