]> git.mxchange.org Git - friendica.git/blobdiff - src/Object/Post.php
Move Activity/Namespaces defines to constants
[friendica.git] / src / Object / Post.php
index 847135d3621bf10945d71a652e694c4b9faa4a8f..9f392cb82efb2aded92a10e08d195d056de757d7 100644 (file)
@@ -6,6 +6,8 @@ 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;
@@ -13,11 +15,14 @@ use Friendica\Core\L10n;
 use Friendica\Core\Logger;
 use Friendica\Core\PConfig;
 use Friendica\Core\Protocol;
+use Friendica\Core\Session;
 use Friendica\Core\Renderer;
 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;
@@ -68,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;
                }
@@ -221,8 +221,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'];
                }
@@ -236,11 +236,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::OBJ_EVENT) {
                        $response_verbs[] = 'attendyes';
                        $response_verbs[] = 'attendno';
                        $response_verbs[] = 'attendmaybe';
@@ -325,7 +325,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);
@@ -364,6 +367,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' : ''),
@@ -397,7 +401,7 @@ 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,
@@ -414,6 +418,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'),
@@ -421,17 +426,19 @@ 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'),
                                'delivery_almost'   => L10n::t('Delivery to remote servers is mostly done'),
+                               'delivery_done'     => L10n::t('Delivery to remote servers is done'),
                        ],
                ];
 
@@ -447,13 +454,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 {
@@ -515,12 +522,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;
                }
 
@@ -772,14 +784,21 @@ class Post extends BaseObject
         * Get default text for the comment box
         *
         * @return string
+        * @throws \Friendica\Network\HTTPException\InternalServerErrorException
         */
        private function getDefaultText()
        {
+               $a = self::getApp();
+
                if (!local_user()) {
-                       return;
+                       return '';
                }
 
-               $a = self::getApp();
+               $owner = User::getOwnerDataById($a->user['uid']);
+
+               if (!Feature::isEnabled(local_user(), 'explicit_mentions')) {
+                       return '';
+               }
 
                $item = Item::selectFirst(['author-addr'], ['id' => $this->getId()]);
                if (!DBA::isResult($item) || empty($item['author-addr'])) {
@@ -787,18 +806,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'] . ' ';
                        }
                }
@@ -937,7 +955,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);
                                        }
                                }
                        }